package com.dsh.course.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.activerecord.Model; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.entity.*; import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.StudentClient; import com.dsh.course.feignclient.account.model.AppUser; import com.dsh.course.feignclient.account.model.Student; import com.dsh.course.feignclient.account.model.TCourseInfoRecord; import com.dsh.course.feignclient.model.*; import com.dsh.course.feignclient.other.StoreClient; import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.CoursePackageSchedulingMapper; import com.dsh.course.model.*; import com.dsh.course.model.dto.DiscountJsonDto; import com.dsh.course.model.vo.CourseDetailRequest; import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.*; import com.dsh.course.model.vo.response.*; import com.dsh.course.service.*; import com.dsh.course.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.models.auth.In; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Api @CrossOrigin @RestController @RequestMapping("") public class CoursePackagePaymentController { private Logger logger = LoggerFactory.getLogger("business-log"); @Autowired private TCoursePackagePaymentService packagePaymentService; @Autowired private TCoursePackageService tcpService; @Autowired private TCoursePackageDiscountService tcpdService; @Autowired private ICoursePackagePaymentConfigService icppcService; @Autowired private UserVideoDetailsService uvdsService; @Autowired private TCourseService tcService; @Resource private StudentClient studentClient; @Autowired private TCoursePackageTypeService coursePackageTypeService; @Autowired private TokenUtil tokenUtil; @Autowired private CancelledClassesService cancelledClassesService; @Resource private CoursePackageStudentService cspsService; @Autowired private PayMoneyUtil payMoneyUtil; @Resource private AppUserClient auClitn; @Resource private StoreClient sreClient; @Autowired private AppUserClient appUserClient; @Autowired private RestTemplate internalRestTemplate; @Resource private CoursePackageSchedulingMapper coursePackageSchedulingMapper; private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); /** * 获取 没有学员信息的图片配置 * @param stuId 学员id * @return 课包列表 */ @ResponseBody @PostMapping("/base/coursePack/queryPayment") public List getStuCoursePackagePayment(@RequestBody Integer stuId){ List resps = new ArrayList<>(); Student student = studentClient.queryStudentById(stuId); List byUserId = packagePaymentService.list(new QueryWrapper() .eq("appUserId",student.getAppUserId()) .eq("studentId",stuId)); if (byUserId.size() > 0 ){ for (TCoursePackagePayment tCoursePackagePayment : byUserId) { TCoursePackage tCoursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId()); StuCourseResp resp = new StuCourseResp(); resp.setCourseId(tCoursePackage.getId()); resp.setId(tCoursePackagePayment.getId()); resp.setCourseName(tCoursePackage.getName()); resp.setTotalCourseNums(tCoursePackagePayment.getTotalClassHours()); resp.setResidueNums(tCoursePackagePayment.getLaveClassHours()); resp.setDeductionNums(tCoursePackagePayment.getTotalClassHours()-tCoursePackagePayment.getLaveClassHours()); String afterDayDate = DateUtil.getAfterDayDate2(tCoursePackage.getInsertTime(),tCoursePackage.getValidDays() + ""); resp.setPeriodOfValidity(afterDayDate); resps.add(resp); } } return resps; } /** * * 获取发布的 课包列表 */ @ResponseBody @PostMapping("/base/coursePack/storeOfCourse") public List getStuCourseWithStores(@RequestBody WeeksOfCourseRest courseRest){ List course = new ArrayList<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date parse = simpleDateFormat.parse(courseRest.getTime()); List list = packagePaymentService.list(new QueryWrapper() .eq("appUserId",courseRest.getAppUserId() ) .eq("studentId",courseRest.getStuId()) .eq("payStatus",2) .eq("status",1) .eq("state",1) .groupBy("coursePackageId")); if (list.size() > 0){ for (TCoursePackagePayment tCoursePackagePayment : list) { List packageStudent = cspsService.list(new LambdaQueryWrapper() .eq(CoursePackageStudent::getAppUserId, courseRest.getAppUserId()) .eq(CoursePackageStudent::getStudentId,courseRest.getStuId()) .eq(CoursePackageStudent::getCoursePackagePaymentId,tCoursePackagePayment.getId()) .eq(CoursePackageStudent::getCoursePackageId,tCoursePackagePayment.getCoursePackageId())); if (ToolUtil.isEmpty(packageStudent) || (ToolUtil.isNotEmpty(packageStudent) && packageStudent.get(0).getReservationStatus() == 1)){ // 没有预约过的/已经取消了的 TCoursePackage tCoursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId()); CoursePackagePaymentConfig paymentConfig = icppcService.getOne(new QueryWrapper() .eq("coursePackageId",tCoursePackage.getId() ) .eq("classHours",tCoursePackagePayment.getClassHours())); // 获取课程有效结束时间,判断 查询的日期parse 是否在有效期范围内 Date expirationDate = DateTimeHelper.getExpirationDate(tCoursePackagePayment.getInsertTime(),tCoursePackage.getValidDays()); System.out.println(expirationDate.after(parse)); String classWeeks = tCoursePackage.getClassWeeks(); System.out.println(StrUtils.dealStrToList(classWeeks).contains(DateTimeHelper.getDayOfWeek(parse))); if (expirationDate.after(parse) && StrUtils.dealStrToList(classWeeks).contains(DateTimeHelper.getDayOfWeek(parse))){ CourseOfStoreVo storeVo = new CourseOfStoreVo(); storeVo.setCourseId(tCoursePackagePayment.getId()); storeVo.setCourseName(tCoursePackage.getName()); storeVo.setClassStartTime(tCoursePackage.getClassStartTime()); storeVo.setClassEndTime(tCoursePackage.getClassEndTime()); storeVo.setStoreId(tCoursePackage.getStoreId()); Store store = sreClient.queryStoreById(tCoursePackage.getStoreId()); storeVo.setStoreAddress(store.getAddress()); storeVo.setLat(store.getLat()); storeVo.setLon(store.getLon()); storeVo.setCoursePrice(ToolUtil.isEmpty(paymentConfig.getCashPayment()) ? (double) paymentConfig.getPlayPaiCoin():paymentConfig.getCashPayment()); storeVo.setStatus(1); // 2.0 storeVo.setAllNum(tCoursePackagePayment.getTotalClassHours()); storeVo.setLastNum(tCoursePackagePayment.getLaveClassHours()); storeVo.setUseNum(tCoursePackagePayment.getTotalClassHours()-tCoursePackagePayment.getLaveClassHours()); course.add(storeVo); } } } } System.out.println(course); return course; } catch (ParseException e) { return null; } } /** * * 课程名称列表 */ @PostMapping("/base/coursePack/sessionNames") public List getStuSessionList(@RequestBody CourseDetailRequest request){ List detailsVos = new ArrayList<>(); List byUserId = packagePaymentService.list(new QueryWrapper() .between("insertTime", request.getStartTime(),request.getEndTime()) .eq("appUserId",request.getAppUserId()) .eq("studentId",request.getStuId())); if (byUserId.size() > 0){ List collect = byUserId.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); List list = tcpService.list(new QueryWrapper() .in("id", collect)); list.forEach(vo -> { StuSessionDetailsVo detVo = new StuSessionDetailsVo(); detVo.setSessionid(vo.getId()); detVo.setSessionName(vo.getName()); String afterDayDate = DateUtil.getAfterDayDate2(vo.getInsertTime(),vo.getValidDays() + ""); detVo.setPeriodOfValidity(afterDayDate); detailsVos.add(detVo); }); } return detailsVos; } @PostMapping("/base/coursePack/paymentCourse") public List queryCourseDetails(@RequestBody GetStuSessionList sessionList) { List purchaseRecordVos = new ArrayList<>(); List coursePackage = packagePaymentService.list(new QueryWrapper() .between("insertTime", sessionList.getStartTime(),sessionList.getEndTime()) .eq("appUserId",sessionList.getAppUserId()) .eq("studentId",sessionList.getStuId())); if (coursePackage.size() > 0 ){ coursePackage.forEach( cspackage -> { PurchaseRecordVo recordVo = new PurchaseRecordVo(); recordVo.setPurchaseAmount("+"+cspackage.getClassHours()); recordVo.setPurchaseTime(format.format(cspackage.getInsertTime())); recordVo.setPurchaseType("购买课包"); purchaseRecordVos.add(recordVo); }); } return purchaseRecordVos; } @PostMapping("/base/coursePack/stuOfCourses") public StuWithCoursesListVo getStuOfCoursesDetails(@RequestBody GetStuOfCoursesDetails getStuOfCoursesDetails){ StuWithCoursesListVo lisco = new StuWithCoursesListVo(); Integer totalNu = 0; Integer dedutNu = 0; Integer remainNu = 0; List byUserId = packagePaymentService.list(new QueryWrapper() .eq("appUserId",getStuOfCoursesDetails.getAppUserId()) .eq("studentId",getStuOfCoursesDetails.getStuId())); if (byUserId.size() > 0 ){ for (TCoursePackagePayment tCoursePackagePayment : byUserId) { totalNu = totalNu + tCoursePackagePayment.getTotalClassHours(); dedutNu = dedutNu + tCoursePackagePayment.getLaveClassHours(); remainNu = remainNu + (tCoursePackagePayment.getTotalClassHours()-tCoursePackagePayment.getLaveClassHours()); } lisco.setTotalNums(totalNu); lisco.setDeductedNums(remainNu); lisco.setRemainingNums(dedutNu); } return lisco; } @PostMapping("/base/coursePack/continuingCourse") public StudentOfCourseVo getStudentCourse(@RequestBody GetStudentCourse getStudentCourse){ StudentOfCourseVo courseVo = new StudentOfCourseVo(); List tCoursePackagePayments = packagePaymentService.list(new QueryWrapper() .eq("appUserId", getStudentCourse.getAppUserId()) .eq("coursePackageId", getStudentCourse.getCourseId()) .eq("studentId", getStudentCourse.getStuId())); if (tCoursePackagePayments.size() > 0 ){ List typeList = new ArrayList<>(); tCoursePackagePayments.forEach(cou -> { CourseHoursType hoursType = new CourseHoursType(); hoursType.setCourseConfigId(cou.getId()); hoursType.setCourseHourNums(cou.getClassHours()); typeList.add(hoursType); }); TCoursePackagePayment tCoursePackagePayment = tCoursePackagePayments.get(0); courseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); courseVo.setTypeList(typeList); TCoursePackage coursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId()); courseVo.setPackageImg(coursePackage.getCoverDrawing()); courseVo.setCourseName(coursePackage.getName()); courseVo.setCoachId(coursePackage.getCoachId()); String classWeeks = coursePackage.getClassWeeks(); List integers = StrUtils.dealStrToList(classWeeks); if (integers.size() > 0){ StringBuilder courWeeks = new StringBuilder("每"); for (Integer integer : integers) { courWeeks.append(integer).append("、"); } if (courWeeks.length() > 0 && courWeeks.charAt(courWeeks.length() - 1) == '、'){ courWeeks.deleteCharAt(courWeeks.length() - 1); } courseVo.setCourseWeek(courWeeks.toString()); } courseVo.setCourseTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime()); Integer payType = tCoursePackagePayment.getPayType(); BigDecimal cashPayment = tCoursePackagePayment.getCashPayment(); double cashPaymentValue = cashPayment.doubleValue(); Integer playPaiCoin = tCoursePackagePayment.getPlayPaiCoin(); TCoursePackageDiscount coursePackageDiscount = tcpdService.getOne(new QueryWrapper() .eq("coursePackageId",coursePackage.getId() ) .eq("type",1) .eq("auditStatus",2)); ObjectMapper objectMapper = new ObjectMapper(); String content = coursePackageDiscount.getContent(); double discountMember = 0.0; DiscountJsonDto discountJsonDto = null; try { discountJsonDto = objectMapper.readValue(content, DiscountJsonDto.class); discountMember = discountJsonDto.getDiscountMember(); } catch (JsonProcessingException e) { throw new RuntimeException(e); } switch (payType) { case 1: case 2: courseVo.setAmount(cashPaymentValue); courseVo.setVipAmount(discountMember); break; case 3: courseVo.setWpGold(playPaiCoin); break; } courseVo.setStoreId(coursePackage.getStoreId()); } return courseVo; } @PostMapping("/base/coursePack/afterCourseTwos") public List getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId){ List videoVos = new ArrayList<>(); List list = uvdsService.list(new QueryWrapper() .eq("appUserId",appUserId) .eq("state",1)); if (list.size() > 0 ){ List courseIds = list.stream().map(UserVideoDetails::getCourseId).collect(Collectors.toList()); List courseList = tcService.list(new QueryWrapper() .in("id",courseIds) .eq("type",1) .eq("state",1) .last("ORDER BY insertTime desc LIMIT 2")); for (TCourse tCourse : courseList) { AfterVideoVo videoVo = new AfterVideoVo(); videoVo.setCourseId(tCourse.getId()); videoVo.setCourseUrl(tCourse.getCourseVideo()); videoVos.add(videoVo); } } return videoVos; } @PostMapping("/base/coursePack/allPaymentCourseList") @ResponseBody public List getAppuserCourseList(@RequestBody Integer appUserId){ List paymentVos = new ArrayList<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd HH:mm"); List list = packagePaymentService.list(new QueryWrapper() .eq("appUserId", appUserId) .eq("payType", 3) .eq("payStatus", 2) .eq("state", 1)); if (list.size() > 0 ){ for (TCoursePackagePayment tCoursePackagePayment : list) { CouponPaymentVo couponPaymentVo = new CouponPaymentVo(); couponPaymentVo.setTime(simpleDateFormat.format(tCoursePackagePayment.getInsertTime())); couponPaymentVo.setAmount( tCoursePackagePayment.getPlayPaiCoin()); paymentVos.add(couponPaymentVo); } } return paymentVos; } @ResponseBody @PostMapping("/base/coursePack/allAmountPayRecordOfUser") public BillingRequestVo getAmountPayRecord(@RequestBody BillingDataRequestVo billingDataRequestVo){ BillingRequestVo requestVo = new BillingRequestVo(); List billingRequests = packagePaymentService.queryAmountDatas(billingDataRequestVo.getAppUserId(), billingDataRequestVo.getMonthStart(), billingDataRequestVo.getMonthEnd()); if (billingRequests.size() >0){ requestVo.setRequests(billingRequests); } return requestVo; } @ResponseBody @PostMapping("/api/course/queryArrangeCourseList") @ApiOperation(value = "课后练习-获取布置课程列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ }) public ResultUtil> queryArrangePackageType(){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } List tCoursePackagePayments = packagePaymentService.list(new QueryWrapper() .eq("appUserId",appUserId)); List list = new ArrayList<>(); tCoursePackagePayments.forEach(c -> { BaseVo baseVo = new BaseVo(); baseVo.setId(c.getCoursePackageId()); TCoursePackage coursePackage = tcpService.getById(c.getCoursePackageId()); baseVo.setName(coursePackage.getName()); list.add(baseVo); }); return ResultUtil.success(list); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 课后视频课表 */ @ResponseBody @PostMapping("/api/startCource/afterSourceList") @ApiOperation(value = "课后练习-课后视频列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil> queryAfterSourceList( CourseOfAfterRequest search){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } List courseIds = new ArrayList<>(); QueryWrapper queryWrapper = new QueryWrapper().eq("appUserId", appUserId) .groupBy("coursePackageId"); if (ToolUtil.isNotEmpty(search.getCourseTypeId())){ queryWrapper.eq("coursePackageId",search.getCourseTypeId()); } List tCoursePackagePayments = packagePaymentService.list(queryWrapper); if (tCoursePackagePayments.size() > 0 ){ courseIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); } return ResultUtil.success(packagePaymentService.queryAfterVideo(search,courseIds)); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 课后视频详情 */ @ResponseBody @PostMapping("/api/startCource/afterSourceDetail") @ApiOperation(value = "课后练习-课后视频详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil queryAfterSourceDetails( CourseWithDetailsRequest detailsRequest){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.queryVideoDetails(detailsRequest,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/startCource/payCourseInfo") @ApiOperation(value = "课后练习-购课详情(用于购课)", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil payCourseInfo(Integer courseId){ try { return ResultUtil.success(packagePaymentService.payCourseInfo(courseId)); }catch (Exception e){ return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/startCource/getMyCourseList") @ApiOperation(value = "课后练习-可支付课程列表(用于购课)", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil> getMyCourseList(Integer storeId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.getMyCourseList(storeId,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } // 2.0 @ResponseBody @PostMapping("/api/startCource/payCourse") @ApiOperation(value = "课后练习-确认购课", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil payCourse(PayCourseReq req){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return packagePaymentService.payCourse(req,appUserId); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 更新课后视频学习状态 */ @ResponseBody @PostMapping("/api/startCource/updateVideoStatus") @ApiOperation(value = "更新课后视频学习状态", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil updateVideoStatus( UpdateCourseVideoStatusRequest detailsRequest){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.updateVideoStatus(detailsRequest,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/course/getCourseAppUserDetails") @ApiOperation(value = "已报名课程-获取课程类型列表", tags = {"APP-课程列表"}) @ApiImplicitParams({ }) public ResultUtil> queryCoursePackageType(){ try { List coursePackageTypes = coursePackageTypeService.list(new QueryWrapper().eq("state", 1)); List list = new ArrayList<>(); coursePackageTypes.forEach(c -> { BaseVo baseVo = new BaseVo(); BeanUtils.copyProperties(c, baseVo); list.add(baseVo); }); return ResultUtil.success(list); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 已报名课程列表 */ @ResponseBody @PostMapping("/api/startCource/registeredCourses") @ApiOperation(value = "已报名课程-课程列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil> queryRegisteredCoursesDetails( CourseOfAfterRequest courseTypeId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.queryRegisteredCourseList(courseTypeId,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 已报名课程详情 */ @ResponseBody @PostMapping("/api/startCource/RegisteredData") @ApiOperation(value = "已报名课程详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(name = "coursePayId" ,value = "课包记录id",dataType = "long"), }) public ResultUtil getRegisteredData(Long coursePayId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } return ResultUtil.success(packagePaymentService.queryRegisteredCourseDetails(coursePayId,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 已报名课程-支付 */ @ResponseBody @PostMapping("/api/startCource/payment") @ApiOperation(value = "已报名课程-支付", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil continuationOperation(ClasspaymentRequest request){ try { Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); if(null == userIdFormRedis){ return ResultUtil.tokenErr(); } Integer couponId = request.getConponId(); if(couponId==null || couponId==0){ request.setConponId(null); } return packagePaymentService.ContinuationOrpaymentCourse(userIdFormRedis,request); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 课包续课支付宝支付回调接口 */ @PostMapping("/base/coursePackage/alipayRegisteredCoursesCallback") public void alipayCallback(HttpServletRequest request, HttpServletResponse response){ try { Map map = payMoneyUtil.alipayCallback(request); if(null != map){ String out_trade_no = map.get("out_trade_no"); String transaction_id = map.get("transaction_id"); ResultUtil resultUtil = packagePaymentService.insertVipPaymentCallback(out_trade_no, transaction_id); if(resultUtil.getCode() == 200){ PrintWriter out = response.getWriter(); out.write("success"); out.flush(); out.close(); } } }catch (Exception e){ e.printStackTrace(); } } /** * 课包续课微信支付回调接口 */ @PostMapping("/base/coursePackage/wechatRegisteredCoursesCallback") public void weChatCallback(HttpServletRequest request, HttpServletResponse response){ try { Map map = payMoneyUtil.weixinpayCallback(request); if(null != map){ String out_trade_no = map.get("out_trade_no"); String transaction_id = map.get("transaction_id"); String result = map.get("result"); ResultUtil resultUtil = packagePaymentService.insertVipPaymentCallback(out_trade_no, transaction_id); if(resultUtil.getCode() == 200){ PrintWriter out = response.getWriter(); out.write(result); out.flush(); out.close(); } } }catch (Exception e){ e.printStackTrace(); } } /** * 获取学员剩余课时 * @param id * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryResidueClassHour") public Integer queryResidueClassHour(@RequestBody Integer id){ try { List list = packagePaymentService.list(new QueryWrapper().eq("studentId", id).eq("payStatus", 2) .eq("status", 1).eq("state", 1).gt("laveClassHours", 0)); Integer total = 0; for (TCoursePackagePayment coursePackagePayment : list) { total += coursePackagePayment.getLaveClassHours(); } return total; }catch (Exception e){ e.printStackTrace(); return 0; } } /** * 获取学员剩余课时 * @param id * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryResidueClassHourById") public Integer queryResidueClassHourById(@RequestBody Long id){ try { TCoursePackagePayment list = packagePaymentService.getById(id); return list.getLaveClassHours(); }catch (Exception e){ e.printStackTrace(); return 0; } } /** * 课程用于支付进行扣减 * @param paymentDeductionClassHour */ @ResponseBody @PostMapping("/coursePackagePayment/paymentDeductionClassHour") public void paymentDeductionClassHour(@RequestBody PaymentDeductionClassHour paymentDeductionClassHour){ try { // 2.0 用id进行查询 List list = packagePaymentService.list(new QueryWrapper().eq("id", paymentDeductionClassHour.getCourseId()).eq("payStatus", 2) .eq("status", 1).eq("state", 1).gt("laveClassHours", 0)); Integer classHour = paymentDeductionClassHour.getClassHour(); for (TCoursePackagePayment coursePackagePayment : list) { if(coursePackagePayment.getLaveClassHours().compareTo(classHour) >= 0){ coursePackagePayment.setLaveClassHours(coursePackagePayment.getLaveClassHours() - classHour); packagePaymentService.updateById(coursePackagePayment); // 2.0 少于3课时 推送 if(coursePackagePayment.getLaveClassHours()<=3){ Integer appUserId = coursePackagePayment.getAppUserId(); //调用推送 HttpHeaders headers = new HttpHeaders(); // 以表单的方式提交 headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); String s1 = appUserId + "_" + "Three"; //定时修改排课状态 String s = internalRestTemplate.getForObject("http://mb-cloud-gateway/netty/sendMsgToClient?id="+s1, String.class); JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class); if(jsonObject1.getIntValue("code") != 200){ System.err.println(jsonObject1.getString("msg")); } } CancelledClasses cancelledClasses = new CancelledClasses(); cancelledClasses.setType(2); cancelledClasses.setVoucher(paymentDeductionClassHour.getCode()); cancelledClasses.setCoursePackageId(coursePackagePayment.getCoursePackageId()); cancelledClasses.setCoursePackagePaymentId(coursePackagePayment.getId()); cancelledClasses.setCancelledClassesNumber(classHour); cancelledClasses.setInsertTime(new Date()); cancelledClassesService.save(cancelledClasses); break; }else{ CancelledClasses cancelledClasses = new CancelledClasses(); cancelledClasses.setType(2); cancelledClasses.setVoucher(paymentDeductionClassHour.getCode()); cancelledClasses.setCoursePackageId(coursePackagePayment.getCoursePackageId()); cancelledClasses.setCoursePackagePaymentId(coursePackagePayment.getId()); cancelledClasses.setCancelledClassesNumber(coursePackagePayment.getLaveClassHours()); cancelledClasses.setInsertTime(new Date()); cancelledClassesService.save(cancelledClasses); coursePackagePayment.setLaveClassHours(0); packagePaymentService.updateById(coursePackagePayment); classHour -= cancelledClasses.getCancelledClassesNumber(); } } }catch (Exception e){ e.printStackTrace(); } } /** * 取消赛事回退支付课时 * @param paymentDeductionClassHour */ @ResponseBody @PostMapping("/coursePackagePayment/rollbackPaymentDeductionClassHour") public void rollbackPaymentDeductionClassHour(@RequestBody PaymentDeductionClassHour paymentDeductionClassHour){ try { List voucher = cancelledClassesService.list(new QueryWrapper().eq("voucher", paymentDeductionClassHour.getCode())); for (CancelledClasses cancelledClasses : voucher) { TCoursePackagePayment coursePackagePayment = packagePaymentService.getById(cancelledClasses.getCoursePackagePaymentId()); coursePackagePayment.setLaveClassHours(coursePackagePayment.getLaveClassHours() + cancelledClasses.getCancelledClassesNumber()); packagePaymentService.updateById(coursePackagePayment); cancelledClassesService.removeById(cancelledClasses.getId()); } }catch (Exception e){ e.printStackTrace(); } } /** * 找出符合门店的课包 * @param s * @return */ @ResponseBody @PostMapping("/coursePackagePayment/paymentCompetitionCourseList") public List paymentCompetitionCourseList(@RequestBody String s){ ArrayList objects = new ArrayList<>(); String[] split = s.split("_"); // 用户id Integer integer = Integer.valueOf(split[0]); String s1 = split[1]; // 门店id String[] split1 = s1.split(","); ArrayList storeIds = new ArrayList<>(); for (String s2 : split1) { storeIds.add(Integer.valueOf(s2)); } List list = packagePaymentService.list(new LambdaQueryWrapper().eq(TCoursePackagePayment::getAppUserId, integer).ge(TCoursePackagePayment::getLaveClassHours, 0).eq(TCoursePackagePayment::getStatus, 1).eq(TCoursePackagePayment::getState, 1)); for (TCoursePackagePayment tCoursePackagePayment : list) { Integer coursePackageId = tCoursePackagePayment.getCoursePackageId(); TCoursePackage byId = tcpService.getById(coursePackageId); if(storeIds.contains(byId.getStoreId())){ PayCourseRes payCourseRes = new PayCourseRes(); payCourseRes.setCourseNum(tCoursePackagePayment.getLaveClassHours()); payCourseRes.setId(tCoursePackagePayment.getId()); payCourseRes.setName(byId.getName()); objects.add(payCourseRes); } } return objects; } /** * 课包续费玩湃币支付 * @param */ @PostMapping("/coursePackagePayment/courseRenewPlayPaiPay") public int paymentWanpaiRenewCourse(@RequestBody PlayPaiGoldCoursePackage coursePackage){ try { Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); if (null == userIdFormRedis){ return 2; } CoursePackagePaymentConfig paymentConfig = icppcService.getById(coursePackage.getCoursePayConfigId()); AppUser appUser = auClitn.queryAppUser(userIdFormRedis); if (appUser.getPlayPaiCoins() < paymentConfig.getPlayPaiCoin()){ return 3; } TCoursePackagePayment packagePayment = packagePaymentService.getOne(new QueryWrapper() .eq("code",coursePackage.getCode() )); packagePayment.setPayStatus(2); packagePayment.setPayUserId(userIdFormRedis); packagePayment.setClassHours(paymentConfig.getClassHours()); packagePayment.setPlayPaiCoin(paymentConfig.getPlayPaiCoin()); packagePayment.setTotalClassHours(paymentConfig.getClassHours()); packagePayment.setLaveClassHours(paymentConfig.getClassHours()); packagePaymentService.updateById(packagePayment); appUser.setPlayPaiCoins(appUser.getPlayPaiCoins()-paymentConfig.getPlayPaiCoin()); auClitn.updateAppUser(appUser); // 2.0 TCourseInfoRecord tCourseInfoRecord = new TCourseInfoRecord(); tCourseInfoRecord.setUserId(userIdFormRedis); tCourseInfoRecord.setCourseId(coursePackage.getCoursePackageId()); tCourseInfoRecord.setName("续课"); tCourseInfoRecord.setTime(new Date()); tCourseInfoRecord.setType(1); tCourseInfoRecord.setNum(paymentConfig.getClassHours()); auClitn.addCourseInfoRecord(tCourseInfoRecord); } catch (Exception e) { return 4; } return 1; } @PostMapping("/base/coursePack/getPaymentCoursePackage") public TCoursePackagePayment getCoursePackagePaymentByCode(@RequestBody String code){ return packagePaymentService.getOne(new QueryWrapper() .eq("code",code)); } @PostMapping("/base/coursePack/getCoursePackagePaymentById") public TCoursePackagePayment getCoursePackagePaymentById(@RequestBody Integer id){ return packagePaymentService.getById(id); } @PostMapping("/base/coursePack/delPaymentCoursePackage") public boolean delPaymentCoursePackage(@RequestBody Integer payId){ return packagePaymentService.removeById(payId); } @PostMapping("/base/coursePack/updatePaymentCoursePackage") public boolean updatePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment){ boolean id = packagePaymentService.update(packagePayment, new QueryWrapper() .eq("id", packagePayment.getId())); if(id){ // 2.0 TCourseInfoRecord tCourseInfoRecord = new TCourseInfoRecord(); tCourseInfoRecord.setNum(packagePayment.getTotalClassHours()); tCourseInfoRecord.setName("续课"); tCourseInfoRecord.setCourseId(packagePayment.getCoursePackageId()); tCourseInfoRecord.setUserId(packagePayment.getAppUserId()); tCourseInfoRecord.setType(1); tCourseInfoRecord.setTime(new Date()); id = appUserClient.addCourseInfoRecord(tCourseInfoRecord); } return id; } @PostMapping("/base/coursePack/savePaymentCoursePackage") public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment){ packagePayment.setInsertTime(new Date()); return packagePaymentService.save(packagePayment); } @PostMapping("/base/coursePack/obtainStudentClassDetails") public List obtainStudentClassDetailsData(@RequestBody WeeksOfCourseRest stuId){ try { return packagePaymentService.obtainStuClassDetails(stuId.getStuId(),stuId.getAppUserId()); }catch (Exception e){ e.printStackTrace(); throw new RuntimeException(); } } @PostMapping("/base/coursePack/getCoursePackageConfig") public List getCourseConfigList(@RequestBody Integer coursePackageId){ return icppcService.list(new QueryWrapper() .eq("coursePackageId",coursePackageId)); } @PostMapping("/base/coursePack/getCoursePackagePaymentOfCode") public List getCoursePackagePaymentOfCode(@RequestBody String code){ return packagePaymentService.list(new QueryWrapper() .eq("code",code)); } // 2.0 送课时 @PostMapping("/base/coursePack/sendHours") public Integer sendHours(@RequestBody String s){ String[] split = s.split("_"); TCoursePackagePayment byId = packagePaymentService.getById(Long.valueOf(split[0])); byId.setTotalClassHours(byId.getTotalClassHours()+Integer.valueOf(split[2])); boolean b = packagePaymentService.updateHoursById(byId,Integer.valueOf(split[2])); if(b){ return 1; }else { return 0; } } /** * 查询课时 * @param courseConfigId * @return */ @PostMapping("/base/coursePack/getClassHour") public Integer getClassHour(@RequestBody Integer courseConfigId){ CoursePackagePaymentConfig byId = icppcService.getById(courseConfigId); return byId.getClassHours(); } /** * 获取课包报名信息列表 * @param queryRegistrationRecord * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryRegistrationRecord") public Page> queryRegistrationRecord(@RequestBody QueryRegistrationRecord queryRegistrationRecord){ Page> page = new PageFactory>().defaultPage(queryRegistrationRecord.getLimit(), queryRegistrationRecord.getOffset(), queryRegistrationRecord.getSort(), queryRegistrationRecord.getOrder()); Page> mapPage = page.setRecords(packagePaymentService.queryRegistrationRecord(page, queryRegistrationRecord)); return mapPage; } /** * 获取未预约排课学员列表 * @param queryWalkInStudentList * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryWalkInStudentList") public Page> queryWalkInStudentList(@RequestBody QueryWalkInStudentList queryWalkInStudentList){ Page> page = new PageFactory>().defaultPage(queryWalkInStudentList.getLimit(), queryWalkInStudentList.getOffset(), queryWalkInStudentList.getSort(), queryWalkInStudentList.getOrder()); Page> mapPage = page.setRecords(packagePaymentService.queryWalkInStudentList(page, queryWalkInStudentList)); return mapPage; } /** * 根据id获取数据 * @param id * @return */ @ResponseBody @PostMapping("/coursePackagePayment/queryCoursePackagePaymentById") public TCoursePackagePayment queryCoursePackagePaymentById(@RequestBody Long id){ return packagePaymentService.getById(id); } @ResponseBody @PostMapping("/coursePackagePayment/CountqueryByClassId") public Integer CountqueryByClassId(@RequestBody Integer id){ int coursePackageId = packagePaymentService.count(new QueryWrapper().eq("coursePackageId", id)); return coursePackageId; } /** * 修改数据 * @param coursePackagePayment */ @ResponseBody @PostMapping("/coursePackagePayment/editCoursePackagePayment") public void editCoursePackagePayment(TCoursePackagePayment coursePackagePayment){ packagePaymentService.updateById(coursePackagePayment); } /** * 上课主页-预约操作 */ @ResponseBody @PostMapping("/api/startCource/reverse") @ApiOperation(value = "上课主页-预约操作--2.0改请假操作", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "课包id", name = "courseID", required = true, dataType = "String"), @ApiImplicitParam(value = "时间 yyyy-MM-dd", name = "time", required = true, dataType = "String"), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil reverse(String courseID,String time,Integer stuId){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } List packagePayment = packagePaymentService.list(new LambdaQueryWrapper() .eq(TCoursePackagePayment::getCoursePackageId,courseID ) .eq(TCoursePackagePayment::getAppUserId,appUserId) .eq(TCoursePackagePayment::getStudentId,stuId) ); if (ToolUtil.isEmpty(packagePayment) || packagePayment.size()==0){ return ResultUtil.error("该用户未购买该课包"); } List coursePackageStudent = cspsService.list(new LambdaQueryWrapper() .in(CoursePackageStudent::getCoursePackagePaymentId,packagePayment.stream().map(TCoursePackagePayment::getId).collect(Collectors.toList())) .eq(CoursePackageStudent::getCoursePackageId,courseID) .eq(CoursePackageStudent::getStudentId,stuId) .eq(CoursePackageStudent::getAppUserId,appUserId) ); if (ToolUtil.isNotEmpty(coursePackageStudent)){ for (CoursePackageStudent packageStudent : coursePackageStudent) { if(packageStudent.getReservationStatus()==1){ packageStudent.setSignInOrNot(2); cspsService.updateSignInOrNotById(packageStudent.getId()); } } }else { } return ResultUtil.success(); }catch (Exception e){ return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/coursePack/weeksOfCourseDetailsList") HashMap weeksOfCourseDetailsList(@RequestBody CourseDetailReq courseDetailReq){ HashMap map = new HashMap<>(); ArrayList objects = new ArrayList<>(); try { String time = courseDetailReq.getTime(); Date parse = new SimpleDateFormat("yyyy-MM-dd").parse(time); int i = cn.hutool.core.date.DateUtil.dayOfWeek(parse)-1; String week = week(i); Store store = sreClient.queryStoreById(courseDetailReq.getStoreId()); String lat = store.getLat(); String lon = store.getLon(); Map distance = GeodesyUtil.getDistance(courseDetailReq.getLon() + "," + courseDetailReq.getLat(), lon + "," + lat); double wgs84 = distance.get("WGS84") / 1000; map.put("distance",wgs84); map.put("name",store.getName()); map.put("lon",lon); map.put("lat",lat); String time1 = courseDetailReq.getTime(); // 找出门店的所有课程 排出体验 List list = tcpService.list(new LambdaQueryWrapper().eq(TCoursePackage::getStoreId, courseDetailReq.getStoreId()).ne(TCoursePackage::getType, 3).like(TCoursePackage::getClassWeeks,week)); List collect = list.stream().map(TCoursePackage::getId).collect(Collectors.toList()); if(collect.size()==0){ collect.add(-1); } // 找出购买的课包 List list1 = packagePaymentService.list(new LambdaQueryWrapper().eq(TCoursePackagePayment::getAppUserId, courseDetailReq.getAppUserId()).eq(TCoursePackagePayment::getStudentId, courseDetailReq.getStuId()).in(TCoursePackagePayment::getCoursePackageId, collect)); List collect1 = list1.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); List ids = list1.stream().map(TCoursePackagePayment::getId).collect(Collectors.toList()); for (TCoursePackage tCoursePackage : list) { DetailsListVo detailsListVo = new DetailsListVo(); detailsListVo.setId(tCoursePackage.getId()); detailsListVo.setName(tCoursePackage.getName()); String classStartTime = tCoursePackage.getClassStartTime(); String[] split = classStartTime.split(","); String classEndTime = tCoursePackage.getClassEndTime(); String[] split1 = classEndTime.split(","); ArrayList strings = new ArrayList<>(); for (int i1 = 0; i1 < split.length; i1++) { String s = split[i1] + "-" + split1[i1]; strings.add(s); } detailsListVo.setTime(strings); List list2 = icppcService.list(new LambdaQueryWrapper().eq(CoursePackagePaymentConfig::getCoursePackageId, tCoursePackage.getId()).orderByAsc(CoursePackagePaymentConfig::getCashPayment)); if (list2.size() > 0) { Double cashPayment = list2.get(0).getCashPayment(); detailsListVo.setMoney(cashPayment); } detailsListVo.setNum(tCoursePackage.getNeedNum()); if (collect1.contains(tCoursePackage.getId())) { // 找出排课记录 List list3 = coursePackageSchedulingMapper.selectList(new LambdaQueryWrapper() .eq(CoursePackageScheduling::getCoursePackageId, tCoursePackage.getId()) .like(CoursePackageScheduling::getClassDate, courseDetailReq.getTime()) ); List collect2 = list3.stream().map(CoursePackageScheduling::getId).collect(Collectors.toList()); if(collect2.size()==0){ collect2.add(-1l); } List list4 = cspsService.list(new LambdaQueryWrapper() .eq(CoursePackageStudent::getAppUserId, courseDetailReq.getAppUserId()) .eq(CoursePackageStudent::getCoursePackageId, tCoursePackage.getId()) .in(CoursePackageStudent::getCoursePackageSchedulingId, collect2). in(CoursePackageStudent::getCoursePackagePaymentId, ids) ); detailsListVo.setType(1); if(list4.size()>0){ Integer signInOrNot = list4.get(0).getSignInOrNot(); if(signInOrNot==2){ detailsListVo.setType(3); } } } else { detailsListVo.setType(2); } objects.add(detailsListVo); } map.put("data",objects); return map; } catch (ParseException e) { e.printStackTrace(); } return map; } private String week(int i){ String a = ""; switch (i){ case 1: a="周一"; break; case 2: a="周二"; break; case 3: a="周三"; break; case 4: a="周四"; break; case 5: a="周五"; break; case 6: a="周六"; break; case 7: a="周日"; break; } return a; } }