cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
@@ -4,9 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.account.entity.TStudent; import com.dsh.account.feignclient.competition.model.PurchaseRecordVo; import com.dsh.account.model.vo.classDetails.AppointmentRecordVo; import com.dsh.account.model.vo.classDetails.ClasspaymentRequest; import com.dsh.account.model.vo.classDetails.classInsVo.*; import com.dsh.account.model.vo.commentDetail.StuCommentsVo; import com.dsh.account.model.vo.exploreDetail.LonLatRequest; import com.dsh.account.model.vo.medalDetail.GongVo; import com.dsh.account.model.vo.medalDetail.StuMedalVo; import com.dsh.account.model.vo.sourceDetail.CouponStuAvailableVo; @@ -64,17 +66,15 @@ @PostMapping("/api/startCource/queryStudentData") @ApiOperation(value = "上课首页", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(value = "经度值", name = "longitude", required = true, dataType = "String"), @ApiImplicitParam(value = "纬度值", name = "latitude", required = true, dataType = "String"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil<ClassInfoVo> queryCouponRecord(String longitude, String latitude){ public ResultUtil<ClassInfoVo> queryCouponRecord(LonLatRequest lonLatRequest){ try { Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); if(null == userIdFormRedis){ return ResultUtil.tokenErr(); } return ResultUtil.success(tappuService.queryUserOfStus(userIdFormRedis,longitude,latitude)); return ResultUtil.success(tappuService.queryUserOfStus(userIdFormRedis,lonLatRequest.getLongitude(),lonLatRequest.getLatitude())); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); @@ -86,7 +86,7 @@ @PostMapping("/api/startCource/queryPhysical") @ApiOperation(value = "获取学员测试报告", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(value = "学员id", name = "id", required = true, dataType = "int"), @ApiImplicitParam(value = "学员id", name = "stuID", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil<StuPhysicalVo> getStuPhysicalInfo(Integer stuID){ @@ -244,7 +244,9 @@ @PostMapping("/api/startCource/renewal") @ApiOperation(value = "课时详情-续课课包详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "课包id", name = "lessonId", required = true, dataType = "int"), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil<CourseDetailsOfContinuationResp> renewalOfCourses(Integer lessonId, Integer stuId){ try { @@ -317,7 +319,7 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil<List<StuCommentsVo>> queryStuComment(@RequestParam("stuId") Integer stuId){ public ResultUtil<List<StuCommentsVo>> queryStuComment( Integer stuId){ try { return ResultUtil.success(evalstuService.queryStuCommentsList(stuId)); }catch (Exception e){ @@ -336,7 +338,7 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil<List<StuMedalVo>> queryStuMedal(@RequestParam("stuId") Integer stuId){ public ResultUtil<List<StuMedalVo>> queryStuMedal( Integer stuId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ @@ -359,7 +361,7 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil<List<GongVo>> queryStuGoog(@RequestParam("stuId") Integer stuId){ public ResultUtil<List<GongVo>> queryStuGoog(Integer stuId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ @@ -371,6 +373,50 @@ } } /** * 上课预约记录 */ @ResponseBody @PostMapping("/api/startCource/stuAppointList") @ApiOperation(value = "上课预约记录", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil<AppointmentRecordVo> cgeClassAppointmentRecordList(Integer stuId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(istuService.getAppointmentRecords(stuId,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 取消预约 */ @ResponseBody @PostMapping("/api/startCource/cancelCourse") @ApiOperation(value = "上课预约-取消预约", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "上课记录id", name = "courseStuRecordId", required = true, dataType = "int"), }) public ResultUtil cancelReservation(Integer courseStuRecordId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return istuService.cancelReservationOfCourse(courseStuRecordId); }catch (Exception e){ return ResultUtil.runErr(); } } } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
@@ -44,7 +44,7 @@ public boolean delPaymentCoursePackage(@RequestBody Integer payId); @PostMapping("/base/coursePack/updatePaymentCoursePackage") void updatePaymentCoursePackage(TCoursePackagePayment coursePackagePayment); void updatePaymentCoursePackage(@RequestBody TCoursePackagePayment coursePackagePayment); @PostMapping("/base/coursePack/savePaymentCoursePackage") public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment); @@ -52,4 +52,7 @@ @PostMapping("/base/coursePack/allAmountPayRecordOfUser") public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId); @PostMapping("/base/coursePack/obtainStudentClassDetails") List<RecordAppoint> obtainStudentClassDetailsData(@RequestBody Integer stuId); } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseRecordClient.java
@@ -11,4 +11,8 @@ @PostMapping("/base/courseRecord/queryDeduClassHours") public Integer getDeductionClassHour(@RequestBody GetStudentCourse course); @PostMapping("/base/courseRecord/cancelCourseData") Integer cancelCourseRecordClass(@RequestBody Integer courseRecordId); } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java
New file @@ -0,0 +1,30 @@ package com.dsh.account.feignclient.course.model; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class RecordAppoint { @ApiModelProperty(value = "课包id") private Integer coursePackageId; @ApiModelProperty(value = "上课记录id") private Long courseStuRecordId; @ApiModelProperty(value = "课包名称") private String coursePackageName; @ApiModelProperty(value = "课时数") private Integer courseHours; @ApiModelProperty(value = "上课时间范围(例如:2021.03.01 8:00-11:00)") private String timeFrame; @ApiModelProperty(value = "门店名称+地址") private String storeNameAddr; @ApiModelProperty(value = "课状态(1待上课 2已开始 3已完成 4已取消)") private Integer status; } cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/AppointmentRecordVo.java
New file @@ -0,0 +1,22 @@ package com.dsh.account.model.vo.classDetails; import com.dsh.account.feignclient.course.model.RecordAppoint; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class AppointmentRecordVo { @ApiModelProperty(value = "学员id") private Integer stuId; @ApiModelProperty(value = "当前学员姓名") private String stuName; @ApiModelProperty(value = "记录列表") private List<RecordAppoint> appointList; } cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
@@ -4,6 +4,7 @@ import com.dsh.account.entity.TStudent; import com.dsh.account.feignclient.competition.model.PurchaseRecordVo; import com.dsh.account.feignclient.other.model.SysNotice; import com.dsh.account.model.vo.classDetails.AppointmentRecordVo; import com.dsh.account.model.vo.classDetails.ClasspaymentRequest; import com.dsh.account.model.vo.classDetails.classInsVo.ClassDetailsInsVo; import com.dsh.account.model.vo.classDetails.classInsVo.StuDetailsReq; @@ -75,4 +76,14 @@ ResultUtil insertVipPaymentCallback(String outTradeNo, String transactionId); /** * 查询学院的上课记录 * @param stuId * @param appUserId * @return */ AppointmentRecordVo getAppointmentRecords(Integer stuId, Integer appUserId); ResultUtil cancelReservationOfCourse( Integer courseStuRecordId); } cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
@@ -25,6 +25,7 @@ import com.dsh.account.mapper.CoachMapper; import com.dsh.account.mapper.TAppUserMapper; import com.dsh.account.mapper.TStudentMapper; import com.dsh.account.model.vo.classDetails.AppointmentRecordVo; import com.dsh.account.model.vo.classDetails.ClasspaymentRequest; import com.dsh.account.model.vo.classDetails.classInsVo.ClassDetailsInsVo; import com.dsh.account.model.vo.classDetails.classInsVo.StuDetailsReq; @@ -555,4 +556,36 @@ return ResultUtil.success(); } @Override public AppointmentRecordVo getAppointmentRecords(Integer stuId, Integer appUserId) { AppointmentRecordVo recordVo = new AppointmentRecordVo(); TStudent tStudent = this.baseMapper.selectOne(new QueryWrapper<TStudent>() .eq("id",stuId ) .eq("appUserId",appUserId)); if (ToolUtil.isNotEmpty(tStudent)){ recordVo.setStuId(tStudent.getId()); recordVo.setStuName(tStudent.getName()); recordVo.setAppointList(couPayClient.obtainStudentClassDetailsData(stuId)); } return recordVo; } @Override public ResultUtil cancelReservationOfCourse(Integer courseStuRecordId) { Integer integer = crClient.cancelCourseRecordClass(courseStuRecordId); switch (integer){ case 1: ResultUtil.success(); break; case 2: ResultUtil.error("开课前三小时不能取消!"); break; default: ResultUtil.runErr(); break; } return null; } } cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -53,14 +53,6 @@ @Autowired private TCoursePackageDiscountService tcpdService; @Autowired private PostCourseVideoService pcvService; @Autowired private CoursePackageStudentService cpsService; @Autowired private CancelledClassesService cacService; @Autowired private ICoursePackagePaymentConfigService icppcService; @@ -689,4 +681,16 @@ return packagePaymentService.save(packagePayment); } @PostMapping("/base/coursePack/obtainStudentClassDetails") public List<RecordAppoint> obtainStudentClassDetailsData(@RequestBody Integer stuId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); return packagePaymentService.obtainStuClassDetails(stuId,appUserId); }catch (Exception e){ e.printStackTrace(); throw new RuntimeException(); } } } cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java
@@ -9,10 +9,17 @@ import com.dsh.course.service.CancelledClassesService; import com.dsh.course.service.CoursePackageStudentService; import com.dsh.course.service.TCoursePackageService; import com.dsh.course.util.ToolUtil; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.Date; import java.util.List; @Api @@ -57,4 +64,35 @@ return sult; } @PostMapping("/base/courseRecord/cancelCourseData") public Integer cancelCourseRecordClass(@RequestBody Integer courseRecordId){ int sult = 0; CoursePackageStudent packageStudent = cosService.getById(courseRecordId); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd"); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String tis = simpleDateFormat.format(new Date()); if (ToolUtil.isNotEmpty(packageStudent)){ TCoursePackage coursePackage = tcpService.getById(packageStudent.getCoursePackageId()); String startTime = tis +" " + coursePackage.getClassStartTime(); Date parse = null; try { parse = format.parse(startTime); } catch (ParseException e) { throw new RuntimeException(e); } LocalDateTime localDateTime = parse.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); // 计算时间间隔 long hours = ChronoUnit.HOURS.between(LocalDateTime.now(), localDateTime); // 判断是否在前三小时内 if (hours <= 3 && hours >= 0){ sult = 1; }else { sult = 2; } } return sult; } } cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
@@ -58,4 +58,7 @@ @PostMapping("/base/coursePack/allAmountPayRecordOfUser") public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId); @PostMapping("/base/coursePack/obtainStudentClassDetails") List<RecordAppoint> obtainStudentClassDetailsData(@RequestBody Integer stuId); } cloud-server-course/src/main/java/com/dsh/course/feignclient/CourseRecordClient.java
@@ -11,4 +11,7 @@ @PostMapping("/base/courseRecord/queryDeduClassHours") public Integer getDeductionClassHour(@RequestBody GetStudentCourse course); @PostMapping("/base/courseRecord/cancelCourseData") Integer cancelCourseRecordClass(@RequestBody Integer courseRecordId); } cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java
New file @@ -0,0 +1,30 @@ package com.dsh.course.feignclient.model; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class RecordAppoint { @ApiModelProperty(value = "课包id") private Integer coursePackageId; @ApiModelProperty(value = "上课记录id") private Long courseStuRecordId; @ApiModelProperty(value = "课包名称") private String coursePackageName; @ApiModelProperty(value = "课时数") private Integer courseHours; @ApiModelProperty(value = "上课时间范围(例如:2021.03.01 8:00-11:00)") private String timeFrame; @ApiModelProperty(value = "门店名称+地址") private String storeNameAddr; @ApiModelProperty(value = "课状态(1待上课 2已开始 3已完成 4已取消)") private Integer status; } cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.TCoursePackagePayment; import com.dsh.course.feignclient.model.RecordAppoint; import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.ClasspaymentRequest; import com.dsh.course.model.vo.request.CourseOfAfterRequest; @@ -77,4 +78,12 @@ ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request); /** * 查询学员的课包上课记录 * @param stuId * @param appUserId * @return */ List<RecordAppoint> obtainStuClassDetails(Integer stuId, Integer appUserId); } cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -9,6 +9,7 @@ import com.dsh.course.feignclient.activity.CouponClient; import com.dsh.course.feignclient.activity.model.BenefitsVideos; import com.dsh.course.feignclient.activity.model.Coupon; import com.dsh.course.feignclient.model.RecordAppoint; import com.dsh.course.feignclient.other.StoreClient; import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.*; @@ -22,10 +23,7 @@ import com.dsh.course.model.vo.response.CourseDetailsResponse; import com.dsh.course.model.vo.response.CourseOfVideoResponse; import com.dsh.course.service.TCoursePackagePaymentService; import com.dsh.course.util.PayMoneyUtil; import com.dsh.course.util.ResultUtil; import com.dsh.course.util.StrUtils; import com.dsh.course.util.UUIDUtil; import com.dsh.course.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -33,6 +31,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.regex.Matcher; @@ -401,4 +400,80 @@ } @Override public List<RecordAppoint> obtainStuClassDetails(Integer stuId, Integer appUserId) { List<RecordAppoint> recordVoList = new ArrayList<>(); List<TCoursePackagePayment> tCoursePackagePayments = this.baseMapper.selectList(new QueryWrapper<TCoursePackagePayment>() .eq("studentId",stuId ) .eq("appUserId",appUserId ) .eq("payStatus",2 ) .eq("status",1 ) .orderByDesc("insertTime")); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd"); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); if (tCoursePackagePayments.size() > 0 ){ for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) { RecordAppoint recordVo = new RecordAppoint(); recordVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); recordVo.setCoursePackageName(coursePackage.getName()); recordVo.setCourseHours(tCoursePackagePayment.getClassHours()); Date date = DateUtil.getDate(); String classStartTime = coursePackage.getClassStartTime(); String classEndTime = coursePackage.getClassEndTime(); recordVo.setTimeFrame(simpleDateFormat.format(date)+" "+classStartTime+"-"+classEndTime); Store store = stoClient.queryStoreById(coursePackage.getStoreId()); recordVo.setStoreNameAddr(store.getName()+store.getAddress()); CoursePackageStudent coursePackageStudent = cpsMapper.selectOne(new QueryWrapper<CoursePackageStudent>() .eq("coursePackageId",tCoursePackagePayment.getCoursePackageId() ) .eq("studentId",stuId) .eq("appUserId",appUserId) .eq("reservationStatus",1)); if (ToolUtil.isNotEmpty(coursePackageStudent) && coursePackageStudent.getReservationStatus() == 1){ recordVo.setCourseStuRecordId(coursePackageStudent.getId()); String classWeeks = coursePackage.getClassWeeks(); String[] split = classWeeks.split(";"); List<Integer> integerList = Arrays.stream(split) .map(Integer::parseInt) .collect(Collectors.toList()); int dayOfWeek = DateTimeHelper.getDayOfWeek(new Date()); if (integerList.contains(dayOfWeek)){ String dat = simpleDateFormat.format(date) +" "+ classStartTime; Date start = null; try { start = format.parse(dat); } catch (ParseException e) { throw new RuntimeException(e); } if (start.after(new Date())){ recordVo.setStatus(1); }else { CancelledClasses cancelledClasses = cacMapper.selectOne(new QueryWrapper<CancelledClasses>() .eq("coursePackageId",tCoursePackagePayment.getCoursePackageId() )); if (ToolUtil.isNotEmpty(cancelledClasses)){ recordVo.setStatus(3); }else { recordVo.setStatus(2); } } }else { recordVo.setStatus(1); } }else { recordVo.setStatus(4); } recordVoList.add(recordVo); } } return recordVoList; } }