puzhibing
2023-07-12 aa43a92c7ec9053dbaef92fe5ccb3011b670442c
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -6,15 +6,19 @@
import com.dsh.course.entity.TCoursePackageDiscount;
import com.dsh.course.entity.TCoursePackagePayment;
import com.dsh.course.entity.TCoursePackageType;
import com.dsh.course.entity.*;
import com.dsh.course.feignclient.account.StudentClient;
import com.dsh.course.feignclient.model.*;
import com.dsh.course.model.BaseVo;
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.ClasspaymentRequest;
import com.dsh.course.model.vo.request.CourseOfAfterRequest;
import com.dsh.course.model.vo.request.CourseWithDetailsRequest;
import com.dsh.course.model.vo.request.UpdateCourseVideoStatusRequest;
import com.dsh.course.model.vo.response.AppUserVideoResponse;
import com.dsh.course.model.vo.response.CourseDetailsResponse;
import com.dsh.course.model.vo.response.CourseOfVideoResponse;
import com.dsh.course.service.*;
import com.dsh.course.util.DateUtil;
@@ -73,6 +77,9 @@
    @Autowired
    private TokenUtil tokenUtil;
    @Autowired
    private CancelledClassesService cancelledClassesService;
    private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
    /**
@@ -83,7 +90,10 @@
    @PostMapping("/base/coursePack/queryPayment")
    public List<StuCourseResp> getStuCoursePackagePayment(@RequestParam("stuId") Integer stuId,@RequestParam("appUserId") Integer appUserId){
        List<StuCourseResp> resps = new ArrayList<>();
        List<TCoursePackagePayment> byUserId = packagePaymentService.queryAllCoursePackage(null,null,null,stuId,appUserId);
        List<TCoursePackagePayment> byUserId = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("appUserId",appUserId)
                .eq("studentId",stuId));
        if (byUserId.size() > 0 ){
            for (TCoursePackagePayment tCoursePackagePayment : byUserId) {
                TCoursePackage tCoursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId());
@@ -128,7 +138,10 @@
    @PostMapping("/base/coursePack/sessionNames")
    public List<StuSessionDetailsVo> getStuSessionList(@RequestBody CourseDetailRequest request){
        List<StuSessionDetailsVo> detailsVos = new ArrayList<>();
        List<TCoursePackagePayment> byUserId = packagePaymentService.queryAllCoursePackage(request.getStartTime(),request.getEndTime(),null,request.getStuId(),request.getAppUserId());
        List<TCoursePackagePayment> byUserId = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .between("insertTime", request.getStartTime(),request.getEndTime())
                .eq("appUserId",request.getAppUserId())
                .eq("studentId",request.getStuId()));
        if (byUserId.size() > 0){
            List<Integer> collect = byUserId.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList());
            List<TCoursePackage> list = tcpService.list(new QueryWrapper<TCoursePackage>()
@@ -148,7 +161,11 @@
    @PostMapping("/base/coursePack/paymentCourse")
    public List<PurchaseRecordVo> queryCourseDetails(@RequestParam("startTime") Date startTime, @RequestParam("endTime") Date  endTime,@RequestParam("stuId") Integer stuId, @RequestParam("appUserId") Integer appUserId) {
        List<PurchaseRecordVo> purchaseRecordVos = new ArrayList<>();
        List<TCoursePackagePayment> coursePackage = packagePaymentService.queryAllCoursePackage(startTime,endTime,null,stuId, appUserId);
        List<TCoursePackagePayment> coursePackage = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .between("insertTime", startTime,endTime)
                .eq("appUserId",appUserId)
                .eq("studentId",stuId));
        if (coursePackage.size() > 0 ){
            coursePackage.forEach( cspackage -> {
                PurchaseRecordVo recordVo = new PurchaseRecordVo();
@@ -169,7 +186,9 @@
        Integer totalNu = 0;
        Integer dedutNu = 0;
        Integer remainNu = 0;
        List<TCoursePackagePayment> byUserId = packagePaymentService.queryAllCoursePackage(null,null,null,getStuOfCoursesDetails.getStuId(),getStuOfCoursesDetails.getAppUserId());
        List<TCoursePackagePayment> byUserId = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("appUserId",getStuOfCoursesDetails.getAppUserId())
                .eq("studentId",getStuOfCoursesDetails.getStuId()));
        if (byUserId.size() > 0 ){
            for (TCoursePackagePayment tCoursePackagePayment : byUserId) {
                totalNu = totalNu + tCoursePackagePayment.getTotalClassHours();
@@ -188,7 +207,10 @@
    @PostMapping("/base/coursePack/continuingCourse")
    public StudentOfCourseVo getStudentCourse(@RequestBody GetStudentCourse getStudentCourse){
        StudentOfCourseVo courseVo = new StudentOfCourseVo();
        List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,getStudentCourse.getCourseId(),getStudentCourse.getStuId(),getStudentCourse.getAppUserId());
        List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("appUserId", getStudentCourse.getAppUserId())
                .eq("coursePackageId", getStudentCourse.getCourseId())
                .eq("studentId", getStudentCourse.getStuId()));
        if (tCoursePackagePayments.size() > 0 ){
            List<CourseHoursType> typeList = new ArrayList<>();
@@ -282,13 +304,22 @@
    @PostMapping("/base/coursePack/afterCourseTwos")
    public List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId){
        List<AfterVideoVo> videoVos = new ArrayList<>();
        List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,null,null,appUserId);
        List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("appUserId", appUserId));
        List<Integer> coursePackageIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList());
//        List<PostCourseVideo> videoList = pcvService.queryAllVideoNoneShow(coursePackageIds);
        // TODO: 2023/7/6 两个课后视频
        return videoVos;
    }
    @PostMapping("/base/coursePack/allPaymentCourseList")
    public List<TCoursePackagePayment> getAppuserCourseList(@RequestBody Integer appUserId){
        return packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("appUserId",appUserId)
                .eq("payType",3)
                .eq("payStatus",2)
                .eq("state",1));
    }
    @ResponseBody
@@ -302,7 +333,8 @@
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,null,null,appUserId);
            List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                    .eq("appUserId",appUserId));
            List<BaseVo> list = new ArrayList<>();
            tCoursePackagePayments.forEach(c -> {
                BaseVo baseVo = new BaseVo();
@@ -327,9 +359,8 @@
    @ApiOperation(value = "课后视频课表", tags = {"APP-开始上课"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(name = "search",value = "视频名称",  required = true, dataType = "int"),
    })
    public ResultUtil<List<AppUserVideoResponse>> queryAfterSourceList(@RequestBody CourseOfAfterRequest search){
    public ResultUtil<List<AppUserVideoResponse>> queryAfterSourceList( CourseOfAfterRequest search){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
@@ -337,7 +368,9 @@
                return ResultUtil.tokenErr();
            }
            List<Integer> courseIds = new ArrayList<>();
            List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,search.getCourseTypeId(),null,appUserId);
            List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                    .eq("coursePackageId",search.getCourseTypeId())
                    .eq("appUserId",appUserId));
            if (tCoursePackagePayments.size() > 0 ){
                courseIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList());
            }
@@ -355,9 +388,8 @@
    @ApiOperation(value = "课后视频详情", tags = {"APP-开始上课"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(name = "search",value = "视频名称",  required = true, dataType = "int"),
    })
    public ResultUtil<CourseOfVideoResponse> queryAfterSourceDetails(@RequestBody CourseWithDetailsRequest detailsRequest){
    public ResultUtil<CourseOfVideoResponse> queryAfterSourceDetails( CourseWithDetailsRequest detailsRequest){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
@@ -378,9 +410,8 @@
    @ApiOperation(value = "更新课后视频学习状态", tags = {"APP-开始上课"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(name = "search",value = "视频名称",  required = true, dataType = "int"),
    })
    public ResultUtil updateVideoStatus(@RequestBody UpdateCourseVideoStatusRequest detailsRequest){
    public ResultUtil updateVideoStatus( UpdateCourseVideoStatusRequest detailsRequest){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
@@ -415,42 +446,6 @@
        }
    }
//
//    @PostMapping("/base/coursePack/courseOfPurchased")
//    public List<PurchaseVo> getAppUsersCourseData(@RequestBody Integer appUserId){
//        List<PurchaseVo> voList = new ArrayList<>();
////        查询够课包记录
//        List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.queryAllCoursePackage(null,null,null,null,appUserId);
//        //查询上课记录
//        List<Integer> coursePackageIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList());
//        List<CoursePackageStudent> packageStudents = cpsService.queryAppUserOfStuAttendClass(appUserId,coursePackageIds);
//        Map<Integer, Long> collect = packageStudents.stream()
//                .collect(Collectors.groupingBy(CoursePackageStudent::getCoursePackageId, Collectors.counting()));
//
//        if (tCoursePackagePayments.size() > 0){
//            for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) {
//                TCoursePackage coursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId());
//                PurchaseVo purchaseVo = new PurchaseVo();
//                purchaseVo.setCourseId(tCoursePackagePayment.getCoursePackageId());
//                purchaseVo.setCourseName(coursePackage.getName());
//                purchaseVo.setCourseTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime());
//                purchaseVo.setStoreId(coursePackage.getStoreId());
//                purchaseVo.setTeacherId(coursePackage.getCoachId());
//                purchaseVo.setPackageImg(coursePackage.getCoverDrawing());
//                purchaseVo.setCourseStatus(tCoursePackagePayment.getPayStatus());
//                purchaseVo.setCourseTypeId(coursePackage.getCoursePackageTypeId());
//                for (Map.Entry<Integer, Long> entry : collect.entrySet()) {
//                    int coursePackageId = entry.getKey();
//                    if (tCoursePackagePayment.getCoursePackageId() == coursePackageId) {
//                        purchaseVo.setCourseNums((int) (entry.getValue()*2));
//                    }
//                }
//                voList.add(purchaseVo);
//            }
//        }
//        return voList;
//    }
    /**
     * 已报名课程列表
@@ -461,7 +456,7 @@
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
    })
    public ResultUtil<List<RegisterCourseVo>> queryRegisteredCoursesDetails(@RequestBody CourseOfAfterRequest courseTypeId){
    public ResultUtil<List<RegisterCourseVo>> queryRegisteredCoursesDetails( CourseOfAfterRequest courseTypeId){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
@@ -475,5 +470,139 @@
    }
    /**
     * 已报名课程详情
     */
    @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....."),
    })
    public ResultUtil<CourseDetailsResponse> getRegisteredData( Integer coursePackageId){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            return ResultUtil.success(packagePaymentService.queryRegisteredCourseDetails(coursePackageId,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();
            }
            return packagePaymentService.ContinuationOrpaymentCourse(userIdFormRedis,request);
        }catch (Exception e){
            return ResultUtil.runErr();
        }
    }
    /**
     * 获取学员剩余课时
     * @param id
     * @return
     */
    @ResponseBody
    @PostMapping("/coursePackagePayment/queryResidueClassHour")
    public Integer queryResidueClassHour(@RequestBody Integer id){
        try {
            List<TCoursePackagePayment> list = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().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 paymentDeductionClassHour
     */
    @ResponseBody
    @PostMapping("/coursePackagePayment/paymentDeductionClassHour")
    public void paymentDeductionClassHour(@RequestBody PaymentDeductionClassHour paymentDeductionClassHour){
        try {
            List<TCoursePackagePayment> list = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().eq("studentId", paymentDeductionClassHour.getId()).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);
                    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<CancelledClasses> voucher = cancelledClassesService.list(new QueryWrapper<CancelledClasses>().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();
        }
    }
}