puzhibing
2023-07-07 0be58dbf7774fef98ddac83c3f454b49c6d5a6c1
Merge remote-tracking branch 'origin/master'

# Conflicts:
# cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
# cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java
# cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
# cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
# cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
# cloud-server-other/src/main/java/com/dsh/other/controller/ImgConfigController.java
# cloud-server-other/src/main/java/com/dsh/other/controller/ProtocolController.java
# cloud-server-other/src/main/java/com/dsh/other/controller/StoreConfigController.java
32个文件已修改
3个文件已删除
46个文件已添加
2440 ■■■■ 已修改文件
cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/CoachController.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/CoachClient.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CourseTypeResp.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PurchaseVo.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/other/SysLogClient.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/TokenUtil.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/IntroduceRewardsController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/CouponStore.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/JSONConpon.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/BenefitVideoClient.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/StoreClient.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/model/StoreDetailOfCourse.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponStoreMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserCouponMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/ConponJsonRuleModel.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/request/CouponPackageReq.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/response/CouponPackageResp.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/CouponStoreService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/UserCouponService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponStoreServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/web/PointsMerchandiseController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/resources/mapper/CouponStoreMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/mapper/UserCompetitionMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/service/UserCompetitionService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/UserCompetitionServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/resources/mapper/UserCompetitionMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/UserVideoDetails.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/account/CoachClient.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Coach.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/BenefitVideoClient.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/BenefitsVideos.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/model/PurchaseVo.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/PostCourseVideoMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/UserVideoDetailsMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/StuCourseRequest.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseOfAfterRequest.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/UpdateCourseVideoStatusRequest.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseOfVideoResponse.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/UserVideoDetailsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java 295 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/UserVideoDetailsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/resources/mapper/UserVideoDetailsMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/UserLoginLogController.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/SysLoginLog.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/feignclient/SysLogClient.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/mapper/SysLoginLogMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/SysLoginLogService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/SysLoginLogServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/mapper/SysLoginLogMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
@@ -108,7 +108,6 @@
    @PostMapping("/api/startCource/addData")
    @ApiOperation(value = "添加学员信息", tags = {"APP-开始上课"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "学员信息", name = "stu", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    @Transactional
@@ -370,57 +369,6 @@
        }catch (Exception e){
            return ResultUtil.runErr();
        }
    }
    /**
     * 课后视频课表
     */
    @ResponseBody
    @PostMapping("/api/startCource/afterSourceDetails")
    @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 queryAfterSourceDetails(@RequestParam("stuId") Integer stuId){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            // TODO: 2023/7/4
            return ResultUtil.success();
        }catch (Exception e){
            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....."),
            @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"),
    })
    public ResultUtil<List<RegisterCourseVo>> queryRegisteredCoursesDetails(@RequestParam("stuId") Integer stuId){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            return ResultUtil.success();
        }catch (Exception e){
            return ResultUtil.runErr();
        }
    }
cloud-server-account/src/main/java/com/dsh/account/controller/CoachController.java
New file
@@ -0,0 +1,31 @@
package com.dsh.account.controller;
import com.dsh.account.entity.Coach;
import com.dsh.account.service.CoachService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("")
public class CoachController {
    @Autowired
    private CoachService service;
    /**
     * 根据门店
     * @param id
     * @return
     */
    @ResponseBody
    @PostMapping("/coach/queryCoachById")
    public Coach queryCoachById( Integer id){
        try {
            return service.getById(id);
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
}
cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java
@@ -58,7 +58,7 @@
    @ResponseBody
    @PostMapping("/base/exploreWP/noticeDetail")
    @ApiOperation(value = "联系客服-公告详情", tags = {"APP-探索玩湃"})
    public ResultUtil<SysNotice> queryNotice(@RequestBody Integer noId){
    public ResultUtil<SysNotice> queryNotice(Integer noId){
        try {
            return ResultUtil.success(tsService.queryNoticeData(noId));
        }catch (Exception e){
@@ -82,7 +82,7 @@
    @ResponseBody
    @PostMapping("/base/exploreWP/exceptionDetail")
    @ApiOperation(value = "联系客服-常见问题详情", tags = {"APP-探索玩湃"})
    public ResultUtil<QuestionIns> queryQuestionData(@RequestBody Integer quesId){
    public ResultUtil<QuestionIns> queryQuestionData(Integer quesId){
        try {
            return ResultUtil.success(tsService.queryQuestionDataInfo(quesId));
        }catch (Exception e){
cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
@@ -2,6 +2,7 @@
import com.dsh.account.entity.TAppUser;
import com.dsh.account.feignclient.other.SysLogClient;
import com.dsh.account.model.vo.userBenefitDetail.AppUserDetailsVo;
import com.dsh.account.model.vo.userBenefitDetail.BillingDetailsVo;
import com.dsh.account.model.vo.userBenefitDetail.IndexOfUserBenefirVo;
@@ -16,6 +17,10 @@
import java.text.SimpleDateFormat;
/**
 * 使用福利 控制器
 */
@RestController
@RequestMapping("")
public class UseBenefitsController {
@@ -26,6 +31,9 @@
    @Autowired
    private TokenUtil tokenUtil;
    @Autowired
    private SysLogClient slClient;
    private final SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
@@ -78,6 +86,58 @@
        }
    }
    @ResponseBody
    @PostMapping("/api/useBenefit/cancellation")
    @ApiOperation(value = "个人信息-注销账号", tags = {"APP-使用福利"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
    })
    public ResultUtil cancellationAccount(){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
//            变更账号的状态为删除
            tauService.cancellation(appUserId);
//            增加一条注销账号的日志
            slClient.cancellation(appUserId);
//            删除redis中用户key
            tokenUtil.logout();
            return ResultUtil.success();
        }catch (Exception e){
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @PostMapping("/api/useBenefit/logOut")
    @ApiOperation(value = "个人信息-退出登录", tags = {"APP-使用福利"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
    })
    public ResultUtil logOutAccount(){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            //            增加一条退出账号的日志
            slClient.logOut(appUserId);
            //            删除redis中用户key
            tokenUtil.logout();
            return ResultUtil.success();
        }catch (Exception e){
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @PostMapping("/api/useBenefit/userBilling")
    @ApiOperation(value = "账单", tags = {"APP-使用福利"})
cloud-server-account/src/main/java/com/dsh/account/feignclient/CoachClient.java
New file
@@ -0,0 +1,15 @@
package com.dsh.account.feignclient;
import com.dsh.account.entity.Coach;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "mb-cloud-account")
public interface CoachClient {
    @PostMapping("/coach/queryCoachById")
    Coach queryCoachById(@RequestBody Integer id);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
@@ -27,4 +27,7 @@
    @PostMapping("/base/coursePack/afterCourseTwos")
    List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId);
    @PostMapping("/base/coursePack/courseOfPurchased")
     List<PurchaseVo> getAppUsersCourseData(@RequestBody Integer appUserId);
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CourseTypeResp.java
New file
@@ -0,0 +1,16 @@
package com.dsh.account.feignclient.course.model;
import lombok.Data;
@Data
public class CourseTypeResp {
    private Integer appUserId;
    private Integer courseTypeId;
    private String search;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PurchaseVo.java
New file
@@ -0,0 +1,37 @@
package com.dsh.account.feignclient.course.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PurchaseVo {
    @ApiModelProperty(value = "课包id")
    private Integer courseId;
    @ApiModelProperty(value = "课包封面图")
    private String packageImg;
    @ApiModelProperty(value = "课包名称")
    private String courseName;
    @ApiModelProperty(value = "上课时间段")
    private String courseTime;
    @ApiModelProperty(value = "授课老师id")
    private Integer teacherId;
    @ApiModelProperty(value = "门店id")
    private Integer storeId;
    @ApiModelProperty(value = "已上课时数")
    private Integer courseNums;
    @ApiModelProperty(value = "课包状态 1=待支付 2=已购买")
    private Integer courseStatus;
    @ApiModelProperty(value = "课包类型id")
    private Integer courseTypeId;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/other/SysLogClient.java
New file
@@ -0,0 +1,16 @@
package com.dsh.account.feignclient.other;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "mb-cloud-other")
public interface SysLogClient {
    @PostMapping("/appUser/logOut")
    void logOut(@RequestBody Integer appUserId);
    @PostMapping("/appUser/cancellation")
    void cancellation(@RequestBody Integer appUserId);
}
cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
@@ -109,4 +109,10 @@
     */
    BillingDetailsVo queryUserBillingDetails(String yearMonth, Integer recordId);
    /**
     * 注销账号
     * @param appUserId
     */
    void cancellation(Integer appUserId);
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -463,8 +463,28 @@
    @Override
    public BillingDetailsVo queryUserBillingDetails(String yearMonth, Integer recordId) {
        System.out.println("账单传参:yearMonth"+yearMonth+"|"+"recordId"+recordId);
        // TODO: 2023/7/4
        return null;
        BillingDetailsVo vo = new BillingDetailsVo();
        if (null != yearMonth){
            Date monthStart = DateTimeHelper.getCurrentIdetMouthStart(yearMonth);
            Date monthEnd = DateTimeHelper.getCurrentIdeaMouthEnd(yearMonth);
        }else {
            Date currentMouthStart = DateTimeHelper.getCurrentMouthStart();
            Date currentMouthEnd = DateTimeHelper.getCurrentMouthEnd();
        }
        return vo;
    }
    @Override
    public void cancellation(Integer appUserId) {
        TAppUser tAppUser = this.baseMapper.selectById(appUserId);
        if (null != tAppUser){
            tAppUser.setState(3);
            this.baseMapper.updateById(tAppUser);
        }
    }
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
@@ -374,7 +374,7 @@
    @Override
    public ResultUtil renewClassPayment(Integer userIdFormRedis, ClasspaymentRequest request) {
        // TODO: 2023/7/5
        // TODO: 2023/7/5 续课支付
        switch (request.getPayType()){
            case 1:
                WeChatPayment();
cloud-server-account/src/main/java/com/dsh/account/util/TokenUtil.java
@@ -33,4 +33,22 @@
            return null;
        }
    }
    public void logout() {
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = servletRequestAttributes.getRequest();
        String requestHeader = request.getHeader("Authorization");
        if (requestHeader != null && requestHeader.startsWith("Bearer ")) {
            requestHeader = requestHeader.substring(requestHeader.indexOf(" ") + 1);
            String key = null;
            int length = requestHeader.length();
            if (length > 32) {
                key = requestHeader.substring(length - 32);
            } else {
                key = requestHeader;
            }
            redisUtil.remove(key); // 删除存储在Redis中的对应用户信息
        }
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java
New file
@@ -0,0 +1,29 @@
package com.dsh.activity.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.activity.entity.BenefitsVideos;
import com.dsh.activity.service.BenefitsVideosService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("")
public class BenefitVideoController {
    @Autowired
    private BenefitsVideosService bfvService;
    @PostMapping("base/benefitVideo/getList")
    public BenefitsVideos getVideosWithIds(@RequestBody Integer id){
        return bfvService.getOne(new QueryWrapper<BenefitsVideos>().eq("id",id).eq("state",1));
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java
@@ -2,7 +2,10 @@
import com.dsh.activity.entity.Coupon;
import com.dsh.activity.model.CouponListVo;
import com.dsh.activity.model.request.CouponPackageReq;
import com.dsh.activity.model.response.CouponPackageResp;
import com.dsh.activity.service.ICouponService;
import com.dsh.activity.service.UserCouponService;
import com.dsh.activity.util.ResultUtil;
import com.dsh.activity.util.TokenUtil;
import io.swagger.annotations.ApiImplicitParam;
@@ -26,6 +29,9 @@
    @Autowired
    private TokenUtil tokenUtil;
    @Autowired
    private UserCouponService ucService;
@@ -71,4 +77,30 @@
            return null;
        }
    }
    /**
     *  我的券包列表
     * @param req
     * @return
     */
    @ResponseBody
    @PostMapping("/api/coupon/queryCouponPackage")
    @ApiOperation(value = "我的券包列表", tags = {"APP-使用福利"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil<List<CouponPackageResp>> queryAppuserCouponList( CouponPackageReq req){
        try {
            Integer uid = tokenUtil.getUserIdFormRedis();
            if(null == uid){
                return ResultUtil.tokenErr();
            }
            return ResultUtil.success(ucService.queryCouponPackagesList(uid, req));
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.success();
        }
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/controller/IntroduceRewardsController.java
@@ -28,7 +28,7 @@
    @PostMapping("/base/introduce/useOfRewards")
    public List<PurchaseRecordVo> queryAppUsersofIntroduce(@RequestBody IntrduceOfUserRequest request){
    public List<PurchaseRecordVo> queryAppUsersofIntroduce( IntrduceOfUserRequest request){
        List<PurchaseRecordVo> recordVos = new ArrayList<>();
        List<IntroduceRewards> list = idrService.list(new QueryWrapper<IntroduceRewards>()
                .ge("startTime",request.getStartTime())
cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java
New file
@@ -0,0 +1,74 @@
package com.dsh.activity.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 福利视频
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_benefits_videos")
public class BenefitsVideos extends Model<BenefitsVideos> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 分类id
     */
    private Integer benefitsVideoClassificationId;
    /**
     * 视频名称
     */
    private String name;
    /**
     * 视频封面
     */
    private String cover;
    /**
     * 视频简介
     */
    private String introduction;
    /**
     * 视频地址
     */
    private String videos;
    /**
     * 可得积分
     */
    private String integral;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/entity/CouponStore.java
New file
@@ -0,0 +1,49 @@
package com.dsh.activity.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * 优惠券使用门店关系数据
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_coupon_store")
public class CouponStore extends Model<CouponStore> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 优惠券id
     */
    private Integer couponId;
    /**
     * 门店id
     */
    private Integer storeId;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/entity/JSONConpon.java
File was deleted
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/BenefitVideoClient.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.feignclient;
import com.dsh.activity.entity.BenefitsVideos;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "mb-cloud-activity")
public interface BenefitVideoClient {
    @PostMapping("base/benefitVideo/getList")
    BenefitsVideos getVideosWithIds(@RequestBody Integer id);
}
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/StoreClient.java
New file
@@ -0,0 +1,14 @@
package com.dsh.activity.feignclient.other;
import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(value = "mb-cloud-other")
public interface StoreClient {
    @PostMapping("/base/protocol/storeDetail/courseOfSto")
    StoreDetailOfCourse getCourseOfStore(@RequestParam("storeId") Integer storeId);
}
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/model/StoreDetailOfCourse.java
New file
@@ -0,0 +1,13 @@
package com.dsh.activity.feignclient.other.model;
import lombok.Data;
@Data
public class StoreDetailOfCourse {
    String storeName;
    String storeAddr;
}
cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.activity.entity.BenefitsVideos;
/**
 * <p>
 * 福利视频 Mapper 接口
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
public interface BenefitsVideosMapper extends BaseMapper<BenefitsVideos> {
}
cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponStoreMapper.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.activity.entity.CouponStore;
/**
 * <p>
 * 优惠券使用门店关系数据 Mapper 接口
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
public interface CouponStoreMapper extends BaseMapper<CouponStore> {
}
cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserCouponMapper.java
@@ -2,7 +2,6 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.activity.entity.UserCoupon;
import com.dsh.activity.model.CouponListVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -30,4 +29,5 @@
    List<Map<String, Object>> queryAvailableCouponList(@Param("uid") Integer uid, @Param("storeId") Integer storeId,
                                       @Param("provinceCode") String provinceCode, @Param("cityCode") String cityCode);
}
cloud-server-activity/src/main/java/com/dsh/activity/model/ConponJsonRuleModel.java
@@ -1,5 +1,6 @@
package com.dsh.activity.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -9,14 +10,17 @@
    /**
     * 条件金额
     */
    double conditionalAmount;
    @ApiModelProperty("条件金额(例如 :满xx可用)")
    String conditionalAmount;
    /**
     * 抵扣金额(代金券 取 该字段)
     */
    double deductionAmount;
    @ApiModelProperty("抵扣金额(代金券 取 该字段) 例如:¥ xxx")
    String deductionAmount;
    /**
     * 体验券名称
     */
    @ApiModelProperty("体验券名称 ")
    String experienceName;
}
cloud-server-activity/src/main/java/com/dsh/activity/model/request/CouponPackageReq.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.model.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CouponPackageReq {
    @ApiModelProperty(value = "(1=满减券,2=代金券,3=体验券)")
    Integer couponType;
    @ApiModelProperty(value = "(1=未使用 2=已使用 3=已过期)")
    Integer useStatus;
}
cloud-server-activity/src/main/java/com/dsh/activity/model/response/CouponPackageResp.java
New file
@@ -0,0 +1,41 @@
package com.dsh.activity.model.response;
import com.dsh.activity.model.ConponJsonRuleModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CouponPackageResp {
    @ApiModelProperty("优惠券id")
    private Integer id;
    @ApiModelProperty("优惠券名称")
    private String name;
    @ApiModelProperty("优惠券类型(1=满减券,2=代金券,3=体验券)")
    private Integer type;
    @ApiModelProperty("适用范围1全国通用 2指定城市可用 3指定门店可用")
    private Integer useCondition;
    @ApiModelProperty("适用范围名称")
    private String available;
    @ApiModelProperty("useCondition = 2,为地址字符串;useCondition = 3,为门店名称+地址字符串")
    private String cityOrStore;
    @ApiModelProperty("优惠券说明(使用说明)")
    private String instructionsForUse;
    @ApiModelProperty("金额条件封装")
    private ConponJsonRuleModel ruleModel;
    @ApiModelProperty("有效时间(2021-05-05)")
    private String effectiveTime;
    @ApiModelProperty("使用状态(1未使用 2已使用 3已过期)")
    private Integer useStatus;
}
cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.activity.entity.BenefitsVideos;
/**
 * <p>
 * 福利视频 服务类
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
public interface BenefitsVideosService extends IService<BenefitsVideos> {
}
cloud-server-activity/src/main/java/com/dsh/activity/service/CouponStoreService.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.activity.entity.CouponStore;
/**
 * <p>
 * 优惠券使用门店关系数据 服务类
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
public interface CouponStoreService extends IService<CouponStore> {
}
cloud-server-activity/src/main/java/com/dsh/activity/service/UserCouponService.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.activity.entity.UserCoupon;
import com.dsh.activity.model.CouponListVo;
import com.dsh.activity.model.request.CouponPackageReq;
import com.dsh.activity.model.response.CouponPackageResp;
import java.util.List;
@@ -24,4 +26,6 @@
     * @return
     */
    List<CouponListVo> queryAvailableCouponList(Integer uid, Integer coursePackageId, Double price, String lon, String lat) throws Exception;
    List<CouponPackageResp> queryCouponPackagesList(Integer uid, CouponPackageReq req);
}
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.dsh.activity.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.activity.entity.BenefitsVideos;
import com.dsh.activity.mapper.BenefitsVideosMapper;
import com.dsh.activity.service.BenefitsVideosService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 福利视频 服务实现类
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
@Service
public class BenefitsVideosServiceImpl extends ServiceImpl<BenefitsVideosMapper, BenefitsVideos> implements BenefitsVideosService {
}
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponStoreServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.dsh.activity.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.activity.entity.CouponStore;
import com.dsh.activity.mapper.CouponStoreMapper;
import com.dsh.activity.service.CouponStoreService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 优惠券使用门店关系数据 服务实现类
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
@Service
public class CouponStoreServiceImpl extends ServiceImpl<CouponStoreMapper, CouponStore> implements CouponStoreService {
}
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserCouponServiceImpl.java
@@ -4,20 +4,35 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.activity.entity.Coupon;
import com.dsh.activity.entity.CouponStore;
import com.dsh.activity.entity.UserCoupon;
import com.dsh.activity.feignclient.account.AppUserClient;
import com.dsh.activity.feignclient.account.StudentClient;
import com.dsh.activity.feignclient.account.model.AppUser;
import com.dsh.activity.feignclient.course.CoursePackageClient;
import com.dsh.activity.feignclient.course.model.CoursePackage;
import com.dsh.activity.feignclient.other.StoreClient;
import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse;
import com.dsh.activity.mapper.CouponMapper;
import com.dsh.activity.mapper.CouponStoreMapper;
import com.dsh.activity.mapper.UserCouponMapper;
import com.dsh.activity.model.ConponJsonRuleModel;
import com.dsh.activity.model.CouponListVo;
import com.dsh.activity.model.request.CouponPackageReq;
import com.dsh.activity.model.response.CouponPackageResp;
import com.dsh.activity.service.UserCouponService;
import com.dsh.activity.util.DateUtil;
import com.dsh.activity.util.GDMapGeocodingUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * <p>
@@ -36,6 +51,20 @@
    @Autowired
    private GDMapGeocodingUtil gdMapGeocodingUtil;
    @Autowired
    private AppUserClient appClient;
    @Autowired
    private StudentClient studentClient;
    @Autowired
    private CouponMapper couponMapper;
    @Autowired
    private StoreClient storeClient;
    @Autowired
    private CouponStoreMapper csMapper;
    /**
     * 获取购买课程可用优惠券列表
@@ -87,4 +116,100 @@
        }
        return listVos;
    }
    @Override
    public List<CouponPackageResp> queryCouponPackagesList(Integer uid, CouponPackageReq req) {
        List<CouponPackageResp> respList = new ArrayList<>();
        AppUser appUser = appClient.queryAppUser(uid);
        if (null != appUser) {
            List<UserCoupon> userCoupons = this.baseMapper.selectList(new QueryWrapper<UserCoupon>()
                    .eq("userId",appUser.getId() )
                    .orderByDesc("insertTime"));
            if (userCoupons.size() > 0){
                for (UserCoupon userCoupon : userCoupons) {
                    Coupon coupon = couponMapper.selectById(userCoupon.getCouponId());
                    CouponPackageResp packageResp = new CouponPackageResp();
                    packageResp.setId(coupon.getId());
                    packageResp.setName(coupon.getName());
                    packageResp.setType(coupon.getType());
                    packageResp.setUseCondition(coupon.getUseScope());
                    switch (coupon.getUseScope()){
                        case 1:
                            packageResp.setAvailable("全国通用");
                            break;
                        case 2:
                            packageResp.setAvailable("指定城市可用");
                            packageResp.setCityOrStore("");
                            break;
                        case 3:
                            packageResp.setAvailable("指定门店可用");
                            CouponStore couponStore = csMapper.selectOne(new QueryWrapper<CouponStore>()
                                    .eq("couponId",coupon.getId()));
                            StoreDetailOfCourse courseOfStore = storeClient.getCourseOfStore(couponStore.getStoreId());
                            packageResp.setCityOrStore(courseOfStore.getStoreName()+","+courseOfStore.getStoreAddr());
                            break;
                        default:
                            break;
                    }
                    packageResp.setInstructionsForUse(coupon.getIllustrate());
                    ConponJsonRuleModel ruleModel = new ConponJsonRuleModel();
                    JSONObject jsonObject = JSON.parseObject(coupon.getContent());
                    switch (coupon.getType()) {
                        case 1:
//                            满减券
                            Double num1 = jsonObject.getDouble("num1");
                            Double num2 = jsonObject.getDouble("num2");
                            ruleModel.setConditionalAmount("满"+num1+"可用");
                            ruleModel.setDeductionAmount("¥ "+num2);
                            ruleModel.setExperienceName("");
                            break;
                        case 2:
//                            代金券
                            Double jsonObjectDouble = jsonObject.getDouble("num1");
                            ruleModel.setConditionalAmount("");
                            ruleModel.setDeductionAmount("¥ "+jsonObjectDouble);
                            ruleModel.setExperienceName("");
                            break;
                        case 3:
//                            体验券
                            ruleModel.setConditionalAmount("");
                            ruleModel.setDeductionAmount("");
                            ruleModel.setExperienceName(jsonObject.getString("num1"));
                            break;
                        default:
                            break;
                    }
                    packageResp.setRuleModel(ruleModel);
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                    packageResp.setEffectiveTime(simpleDateFormat.format(coupon.getEndTime()));
                    if (userCoupon.getStatus() == 1){
                        if (DateUtil.getDate().before(coupon.getEndTime())){
                            packageResp.setUseStatus(1);
                        }else {
                            packageResp.setUseStatus(3);
                        }
                    }
                    if (userCoupon.getStatus() == 2){
                        packageResp.setUseStatus(2);
                    }
                    respList.add(packageResp);
                }
                if (null != req.getCouponType()){
                    respList = respList.stream()
                            .filter(couponPackageResp -> couponPackageResp.getType().equals(req.getCouponType()))
                            .collect(Collectors.toList());
                }
                if (null != req.getUseStatus()){
                    respList = respList.stream()
                            .filter(couponPackageResp -> couponPackageResp.getUseStatus().equals(req.getUseStatus()))
                            .collect(Collectors.toList());
                }
            }
        }
        return respList;
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/web/PointsMerchandiseController.java
File was deleted
cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.activity.mapper.BenefitsVideosMapper">
</mapper>
cloud-server-activity/src/main/resources/mapper/CouponStoreMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.activity.mapper.CouponStoreMapper">
</mapper>
cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
@@ -59,7 +59,10 @@
                .eq("payType",3 )
                .eq("auditStatus",2));
        List<Integer> comIds = list.stream().map(Competition::getId).collect(Collectors.toList());
        List<UserCompetition> userCompetitions = ucttService.queryUsersCompetetions(sourseList.getStartTime(),sourseList.getEndTime(),sourseList.getAppUserId(),comIds);
        List<UserCompetition> userCompetitions = ucttService.list(new QueryWrapper<UserCompetition>()
                .between("insertTime", sourseList.getStartTime(),sourseList.getEndTime() )
                .eq("userId", sourseList.getAppUserId())
                .in("competitionId",comIds ));
        if (userCompetitions.size() > 0){
            userCompetitions.forEach(coms ->{
                PurchaseRecordVo recordVo = new PurchaseRecordVo();
cloud-server-competition/src/main/java/com/dsh/competition/mapper/UserCompetitionMapper.java
@@ -2,10 +2,6 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.competition.entity.UserCompetition;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
 * <p>
@@ -17,10 +13,5 @@
 */
public interface UserCompetitionMapper extends BaseMapper<UserCompetition> {
    List<UserCompetition> queryUsersCompetetions(@Param("startTime") Date startTime,
                                                 @Param("endTime") Date endTime ,
                                                 @Param("appUserId") Integer appUserId,
                                                 @Param("comIds") List<Integer> comIds);
}
cloud-server-competition/src/main/java/com/dsh/competition/service/UserCompetitionService.java
@@ -3,9 +3,6 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.competition.entity.UserCompetition;
import java.util.Date;
import java.util.List;
/**
 * <p>
 * 赛事报名记录 服务类
@@ -16,7 +13,5 @@
 */
public interface UserCompetitionService extends IService<UserCompetition> {
    List<UserCompetition> queryUsersCompetetions(Date startTime, Date  endTime ,Integer appUserId, List<Integer> comIds);
}
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/UserCompetitionServiceImpl.java
@@ -20,9 +20,4 @@
@Service
public class UserCompetitionServiceImpl extends ServiceImpl<UserCompetitionMapper, UserCompetition> implements UserCompetitionService {
    @Override
    public List<UserCompetition> queryUsersCompetetions(Date startTime, Date endTime , Integer appUserId, List<Integer> comIds) {
        return this.baseMapper.queryUsersCompetetions(startTime,endTime,appUserId,comIds);
    }
}
cloud-server-competition/src/main/resources/mapper/UserCompetitionMapper.xml
@@ -2,37 +2,5 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.competition.mapper.UserCompetitionMapper">
    <select id="queryUsersCompetetions" resultType="com.dsh.competition.entity.UserCompetition">
        SELECT *
        FROM t_user_competition
        UNION ALL
        SELECT *
        FROM t_user_competition1
        UNION ALL
        SELECT *
        FROM t_user_competition2
        UNION ALL
        SELECT *
        FROM t_user_competition3
        UNION ALL
        SELECT *
        FROM t_user_competition4
        UNION ALL
        SELECT *
        FROM t_user_competition5
        WHERE 1 = 1
        <if test=" stuId != null">
            and studentId = #{stuId}
        </if>
        <if test="appUserId != null">
            and competitionId in
        <foreach collection="comIds" item="item" separator="," open="(" index="index" close=")">
            #{item}
        </foreach>
        </if>
        <if test="startTime != null and endTime != null">
            and (insertTime between #{startTime} and #{endTime})
        </if>
    </select>
</mapper>
cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java
@@ -42,8 +42,10 @@
    @PostMapping("/base/cancelSource/cancelList")
    public List<PurchaseRecordVo> getCancelCourseList(@RequestBody GetStuSessionList sessionList){
        List<PurchaseRecordVo> purchaseRecordVos = new ArrayList<>();
        List<TCoursePackagePayment> tCoursePackagePayments = tcppService.queryAllCoursePackage(sessionList.getStartTime(),sessionList.getEndTime(),null,sessionList.getStuId(), sessionList.getAppUserId());
        List<TCoursePackagePayment> tCoursePackagePayments = tcppService.list(new QueryWrapper<TCoursePackagePayment>()
                .between("insertTime", sessionList.getStartTime(),sessionList.getEndTime())
                .eq("appUserId",sessionList.getAppUserId())
                .eq("studentId",sessionList.getStuId()));
        List<Long> coursePackageIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getId).collect(Collectors.toList());
        List<CancelledClasses> list = caceService.list(new QueryWrapper<CancelledClasses>()
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -6,20 +6,33 @@
import com.dsh.course.entity.TCoursePackage;
import com.dsh.course.entity.TCoursePackageDiscount;
import com.dsh.course.entity.TCoursePackagePayment;
import com.dsh.course.entity.TCoursePackageType;
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.service.PostCourseVideoService;
import com.dsh.course.service.TCoursePackageDiscountService;
import com.dsh.course.service.TCoursePackagePaymentService;
import com.dsh.course.service.TCoursePackageService;
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;
import com.dsh.course.util.ResultUtil;
import com.dsh.course.util.StrUtils;
import com.dsh.course.util.TokenUtil;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -51,6 +64,18 @@
    @Autowired
    private PostCourseVideoService pcvService;
    @Autowired
    private CoursePackageStudentService cpsService;
    @Autowired
    private CancelledClassesService cacService;
    @Autowired
    private TCoursePackageTypeService coursePackageTypeService;
    @Autowired
    private TokenUtil tokenUtil;
    private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
    /**
@@ -61,7 +86,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());
@@ -106,7 +134,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>()
@@ -126,7 +157,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();
@@ -147,7 +182,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();
@@ -166,7 +203,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<>();
@@ -242,10 +282,6 @@
            }
            switch (payType) {
                case 1:
                    courseVo.setAmount(cashPaymentValue);
                    courseVo.setVipAmount(discountMember);
                    courseVo.setWpGold(playPaiCoin);
                    break;
                case 2:
                    courseVo.setAmount(cashPaymentValue);
                    courseVo.setVipAmount(discountMember);
@@ -264,14 +300,207 @@
    @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;
    }
    @ResponseBody
    @PostMapping("/api/course/queryArrangeCourseList")
    @ApiOperation(value = "获取布置课程列表", tags = {"APP-课程列表"})
    @ApiImplicitParams({
    })
    public ResultUtil<List<BaseVo>> queryArrangePackageType(){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
                    .eq("appUserId",appUserId));
            List<BaseVo> 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();
        }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<List<AppUserVideoResponse>> queryAfterSourceList( CourseOfAfterRequest search){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            List<Integer> courseIds = new ArrayList<>();
            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());
            }
            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<CourseOfVideoResponse> 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/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<List<BaseVo>> queryCoursePackageType(){
        try {
            List<TCoursePackageType> coursePackageTypes = coursePackageTypeService.list(new QueryWrapper<TCoursePackageType>().eq("state", 1));
            List<BaseVo> 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<List<RegisterCourseVo>> 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....."),
    })
    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();
        }
    }
cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java
@@ -38,7 +38,12 @@
        Integer sult = 0;
        TCoursePackage coursePackage = tcpService.getById(course.getCourseId());
        if (null != coursePackage && coursePackage.getStatus() == 3){
            List<CoursePackageStudent> coursePackageStudents = cosService.queryStuDeduClassHourNums(course.getCourseId(), course.getStuId(), course.getAppUserId());
            List<CoursePackageStudent> coursePackageStudents = cosService.list(new QueryWrapper<CoursePackageStudent>()
                    .eq("coursePackageId",course.getCourseId() )
                    .eq("studentId",course.getStuId() )
                    .eq("appUserId", course.getAppUserId())
                    .eq("signInOrNot",1));
            if (coursePackageStudents.size() > 0){
                List<CancelledClasses> list = caccService.list(new QueryWrapper<CancelledClasses>()
                        .eq("coursePackageId",course.getCourseId() ));
cloud-server-course/src/main/java/com/dsh/course/entity/UserVideoDetails.java
New file
@@ -0,0 +1,63 @@
package com.dsh.course.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 用户观看视频记录
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_user_video_details")
public class UserVideoDetails extends Model<UserVideoDetails> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键id
     */
    private Integer id;
    /**
     * 用户id
     */
    private Integer appUserId;
    /**
     * 课包id
     */
    private Integer coursePackageId;
    /**
     * 课后视频id
     */
    private Integer courseId;
    /**
     * 状态(1未学习 2已学习)
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
    /**
     * 更新时间
     */
    private Date updateTime;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
@@ -28,4 +28,8 @@
    @PostMapping("/base/coursePack/afterCourseTwos")
    List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId);
    @PostMapping("/base/coursePack/courseOfPurchased")
    public List<PurchaseVo> getAppUsersCourseData(@RequestBody Integer appUserId);
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/account/CoachClient.java
New file
@@ -0,0 +1,15 @@
package com.dsh.course.feignclient.account;
import com.dsh.course.feignclient.account.model.Coach;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "mb-cloud-account")
public interface CoachClient {
    @PostMapping("/coach/queryCoachById")
    Coach queryCoachById(@RequestBody Integer id);
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Coach.java
New file
@@ -0,0 +1,104 @@
package com.dsh.course.feignclient.account.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.util.Date;
/**
 * <p>
 * 教练
 * </p>
 *
 * @author jqs
 * @since 2023-07-05
 */
@Data
public class Coach  {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 省
     */
    private String province;
    /**
     * 省编号
     */
    private String provinceCode;
    /**
     * 市
     */
    private String city;
    /**
     * 市编号
     */
    private String cityCode;
    /**
     * 城市管理员id
     */
    private Integer cityManagerId;
    /**
     * 教练类型id
     */
    private Integer coachTypeId;
    /**
     * 姓名
     */
    private String name;
    /**
     * 生日
     */
    private Date birthday;
    /**
     * 性别(1=男,2=女)
     */
    private Integer gender;
    /**
     * 电话
     */
    private String phone;
    /**
     * 身份证号码
     */
    private String idcard;
    /**
     * 身高(厘米)
     */
    private Double height;
    /**
     * 体重(KG)
     */
    private Double weight;
    /**
     * 毕业院校
     */
    private String graduateSchool;
    /**
     * 毕业证照片
     */
    private String diploma;
    /**
     * 资格证书(多个逗号分隔)
     */
    private String certificate;
    /**
     * 证书照片
     */
    private String certificateImg;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/BenefitVideoClient.java
New file
@@ -0,0 +1,16 @@
package com.dsh.course.feignclient.activity;
import com.dsh.course.feignclient.activity.model.BenefitsVideos;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "mb-cloud-activity")
public interface BenefitVideoClient {
    @PostMapping("base/benefitVideo/getList")
    BenefitsVideos getVideosWithIds(@RequestBody Integer id);
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/model/BenefitsVideos.java
New file
@@ -0,0 +1,61 @@
package com.dsh.course.feignclient.activity.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.util.Date;
/**
 * <p>
 * 福利视频
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
@Data
public class BenefitsVideos  {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 分类id
     */
    private Integer benefitsVideoClassificationId;
    /**
     * 视频名称
     */
    private String name;
    /**
     * 视频封面
     */
    private String cover;
    /**
     * 视频简介
     */
    private String introduction;
    /**
     * 视频地址
     */
    private String videos;
    /**
     * 可得积分
     */
    private String integral;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/model/PurchaseVo.java
New file
@@ -0,0 +1,37 @@
package com.dsh.course.feignclient.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PurchaseVo {
    @ApiModelProperty(value = "课包id")
    private Integer courseId;
    @ApiModelProperty(value = "课包封面图")
    private String packageImg;
    @ApiModelProperty(value = "课包名称")
    private String courseName;
    @ApiModelProperty(value = "上课时间段")
    private String courseTime;
    @ApiModelProperty(value = "授课老师id")
    private Integer teacherId;
    @ApiModelProperty(value = "门店id")
    private Integer storeId;
    @ApiModelProperty(value = "已上课时数")
    private Integer courseNums;
    @ApiModelProperty(value = "课包状态 1=待支付 2=已购买")
    private Integer courseStatus;
    @ApiModelProperty(value = "课包类型id")
    private Integer courseTypeId;
}
cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java
@@ -2,9 +2,6 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.course.entity.CoursePackageStudent;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -16,8 +13,5 @@
 */
public interface CoursePackageStudentMapper extends BaseMapper<CoursePackageStudent> {
    List<CoursePackageStudent> queryStuDeduClassHourNums(@Param("courseId") Integer courseId,
                                                         @Param("stuId") Integer stuId,
                                                         @Param("appUserId") Integer appUserId);
}
cloud-server-course/src/main/java/com/dsh/course/mapper/PostCourseVideoMapper.java
@@ -13,4 +13,5 @@
 */
public interface PostCourseVideoMapper extends BaseMapper<PostCourseVideo> {
}
cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
@@ -1,11 +1,8 @@
package com.dsh.course.mapper;
import com.dsh.course.entity.TCoursePackagePayment;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.course.entity.TCoursePackagePayment;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
 * <p>
@@ -17,11 +14,6 @@
 */
public interface TCoursePackagePaymentMapper extends BaseMapper<TCoursePackagePayment> {
    List<TCoursePackagePayment> queryAllCoursePackage(@Param("startTime")Date startTime,
                                                      @Param("endTime")Date  endTime  ,
                                                      @Param("coursePackId") Integer coursePackId,
                                                      @Param("stuId") Integer stuId,
                                                      @Param("appUserId") Integer appUserId);
    /**
cloud-server-course/src/main/java/com/dsh/course/mapper/UserVideoDetailsMapper.java
New file
@@ -0,0 +1,17 @@
package com.dsh.course.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.course.entity.UserVideoDetails;
/**
 * <p>
 * 用户观看视频记录 Mapper 接口
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
public interface UserVideoDetailsMapper extends BaseMapper<UserVideoDetails> {
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java
New file
@@ -0,0 +1,31 @@
package com.dsh.course.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class RegisterCourseVo {
    @ApiModelProperty(value = "课包id")
    private Integer coursePackageId;
    @ApiModelProperty(value = "课包封面图")
    private String packageImg;
    @ApiModelProperty(value = "课包名称+门店名称")
    private String courseNameStore;
    @ApiModelProperty(value = "上课时间段")
    private String courseTime;
    @ApiModelProperty(value = "授课老师")
    private String courseTeacher;
    @ApiModelProperty(value = "已上课时数")
    private Integer courseNums;
    @ApiModelProperty(value = "支付状态 1未支付 2已支付")
    private Integer payStatus;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/StuCourseRequest.java
File was deleted
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java
New file
@@ -0,0 +1,29 @@
package com.dsh.course.model.vo.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class ClasspaymentRequest {
    @ApiModelProperty(value = "课包id")
    private Integer lessonId;
    @ApiModelProperty(value = "学员id")
    private Integer stuId;
    @ApiModelProperty(value = "支付方式(1=微信 2=支付宝 3=玩湃币)")
    private Integer payType;
    @ApiModelProperty(value = "是否使用优惠券 1是 2否")
    private Integer useConpon;
    @ApiModelProperty(value = "优惠券Id")
    private Integer conponId;
    @ApiModelProperty(value = "课时id")
    private Long courseConfigId;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseOfAfterRequest.java
New file
@@ -0,0 +1,17 @@
package com.dsh.course.model.vo.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CourseOfAfterRequest {
    @ApiModelProperty(value = "课程类型id",dataType = "int",required = false)
    private Integer courseTypeId;
    @ApiModelProperty(value = "课程名称/门店名称",dataType = "string",required = false)
    private String search;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/CourseWithDetailsRequest.java
New file
@@ -0,0 +1,16 @@
package com.dsh.course.model.vo.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CourseWithDetailsRequest {
    @ApiModelProperty(value = "视频id")
    private Integer videoId;
    @ApiModelProperty(value = "课包id")
    private Integer coursePackageId;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/UpdateCourseVideoStatusRequest.java
New file
@@ -0,0 +1,20 @@
package com.dsh.course.model.vo.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class UpdateCourseVideoStatusRequest {
    @ApiModelProperty(value = "视频id")
    private Integer videoId;
    @ApiModelProperty(value = "课包id")
    private Integer coursePackageId;
    @ApiModelProperty(value = "是否看完 1是 2否")
    private Integer isOver;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/response/AppUserVideoResponse.java
New file
@@ -0,0 +1,34 @@
package com.dsh.course.model.vo.response;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class AppUserVideoResponse {
    @ApiModelProperty(value = "视频id")
    private Integer videoId;
    @ApiModelProperty(value = "课包id")
    private Integer coursePackageId;
    @ApiModelProperty(value = "封面图")
    private String  coverImage;
    @ApiModelProperty(value = "视频名称")
    private String videoName;
    @ApiModelProperty(value = "布置课程名称")
    private String packageName;
    @ApiModelProperty(value = "简介")
    private String synopsis;
    @ApiModelProperty(value = "可得积分")
    private String integral;
    @ApiModelProperty(value = "学习状态 1未学习 2已学习")
    private Integer studyStatus;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java
New file
@@ -0,0 +1,41 @@
package com.dsh.course.model.vo.response;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CourseDetailsResponse {
    @ApiModelProperty(value = "课包id")
    private Integer coursePackageId;
    @ApiModelProperty(value = "课包封面图")
    private String coverDrawing;
    @ApiModelProperty(value = "课包名称")
    private String coursePackageName;
    @ApiModelProperty(value = "上课周 (每周一、周二 )")
    private String weeks;
    @ApiModelProperty(value = "上课时间范围")
    private String courseTimeFrame;
    @ApiModelProperty(value = "课包介绍图片")
    private String introduceDrawing;
    @ApiModelProperty(value = "支付价格")
    private double amount;
    @ApiModelProperty(value = "会员价")
    private double vipAmount;
    @ApiModelProperty(value = "玩湃币")
    private double wpGold;
    @ApiModelProperty(value = "支付状态 1未支付 2续课")
    private Integer payStatus;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseOfVideoResponse.java
New file
@@ -0,0 +1,37 @@
package com.dsh.course.model.vo.response;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CourseOfVideoResponse {
    @ApiModelProperty(value = "视频id")
    private Integer videoId;
    @ApiModelProperty(value = "课包id")
    private Integer coursePackageId;
    @ApiModelProperty(value = "视频url")
    private String  videoURL;
    @ApiModelProperty(value = "视频名称")
    private String videoName;
    @ApiModelProperty(value = "可得积分")
    private String integral;
    @ApiModelProperty(value = "学习状态 1未学习 2已学习")
    private Integer studyStatus;
    @ApiModelProperty(value = "布置课程名称")
    private String packageName;
    @ApiModelProperty(value = "视频简介")
    private String synopsis;
    @ApiModelProperty(value = "课程介绍图片")
    private String detailedDiagram;
}
cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java
@@ -3,8 +3,6 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.course.entity.CoursePackageStudent;
import java.util.List;
/**
 * <p>
 * 学员上课记录 服务类
@@ -15,6 +13,6 @@
 */
public interface CoursePackageStudentService extends IService<CoursePackageStudent> {
    List<CoursePackageStudent> queryStuDeduClassHourNums(Integer courseId, Integer stuId, Integer appUserId);
}
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
@@ -2,8 +2,16 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.course.entity.TCoursePackagePayment;
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.util.ResultUtil;
import java.util.Date;
import java.util.List;
/**
@@ -16,7 +24,6 @@
 */
public interface TCoursePackagePaymentService extends IService<TCoursePackagePayment> {
    List<TCoursePackagePayment> queryAllCoursePackage(Date startTime, Date  endTime ,Integer lessionId,Integer stuId, Integer appUserId);
    /**
@@ -25,4 +32,49 @@
     * @return
     */
    Integer queryCountNumber(Integer coursePackageId);
    /**
     * 查询课包发布的课后视频列表
     * @param search
     * @param courseIds
     * @return
     */
    List<AppUserVideoResponse> queryAfterVideo(CourseOfAfterRequest search,List<Integer> courseIds);
    /**
     * 获取课后视频详情
     * @param detailsRequest
     * @param appUserId
     * @return
     */
    CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest,Integer appUserId);
    /**
     * 更新视频学习状态
     * @param detailsRequest
     * @param appUserId
     * @return
     */
    String updateVideoStatus(UpdateCourseVideoStatusRequest detailsRequest, Integer appUserId);
    /**
     * 获取用户已报名课程
     * @param courseTypeId
     * @param appUserId
     * @return
     */
    List<RegisterCourseVo> queryRegisteredCourseList(CourseOfAfterRequest courseTypeId, Integer appUserId);
    /**
     * 获取已报名课包详情
     * @param coursePackageId
     * @param appUserId
     * @return
     */
    CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePackageId, Integer appUserId);
    ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request);
}
cloud-server-course/src/main/java/com/dsh/course/service/UserVideoDetailsService.java
New file
@@ -0,0 +1,16 @@
package com.dsh.course.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.course.entity.UserVideoDetails;
/**
 * <p>
 * 用户观看视频记录 服务类
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
public interface UserVideoDetailsService extends IService<UserVideoDetails> {
}
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java
@@ -6,8 +6,6 @@
import com.dsh.course.service.CoursePackageStudentService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 学员上课记录 服务实现类
@@ -19,8 +17,5 @@
@Service
public class CoursePackageStudentServiceImpl extends ServiceImpl<CoursePackageStudentMapper, CoursePackageStudent> implements CoursePackageStudentService {
    @Override
    public List<CoursePackageStudent> queryStuDeduClassHourNums(Integer courseId, Integer stuId, Integer appUserId) {
        return this.baseMapper.queryStuDeduClassHourNums(courseId,stuId,appUserId);
    }
}
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -1,13 +1,37 @@
package com.dsh.course.service.impl;
import com.dsh.course.entity.TCoursePackagePayment;
import com.dsh.course.mapper.TCoursePackagePaymentMapper;
import com.dsh.course.service.TCoursePackagePaymentService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.course.entity.*;
import com.dsh.course.feignclient.account.CoachClient;
import com.dsh.course.feignclient.account.model.Coach;
import com.dsh.course.feignclient.activity.BenefitVideoClient;
import com.dsh.course.feignclient.activity.model.BenefitsVideos;
import com.dsh.course.feignclient.other.StoreClient;
import com.dsh.course.feignclient.other.model.Store;
import com.dsh.course.mapper.*;
import com.dsh.course.model.dto.DiscountJsonDto;
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.TCoursePackagePaymentService;
import com.dsh.course.util.ResultUtil;
import com.dsh.course.util.StrUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
 * <p>
@@ -20,10 +44,36 @@
@Service
public class TCoursePackagePaymentServiceImpl extends ServiceImpl<TCoursePackagePaymentMapper, TCoursePackagePayment> implements TCoursePackagePaymentService {
    @Override
    public List<TCoursePackagePayment> queryAllCoursePackage(Date startTime, Date  endTime , Integer coursePackId, Integer stuId, Integer appUserId) {
        return this.baseMapper.queryAllCoursePackage(startTime,endTime,coursePackId,stuId,appUserId);
    }
    @Autowired
    private BenefitVideoClient bfvoClient;
    @Autowired
    private UserVideoDetailsMapper uvdmapper;
    @Autowired
    private PostCourseVideoMapper pcvMapper;
    @Autowired
    private TCoursePackageMapper tcpmapper;
    @Autowired
    private StoreClient stoClient;
    @Autowired
    private CoachClient coachClient;
    @Autowired
    private CoursePackageStudentMapper cpsMapper;
    @Autowired
    private CancelledClassesMapper cacMapper;
    @Autowired
    private TCoursePackageDiscountMapper tcpdMapper;
    /**
     * 获取课包购买人数
@@ -34,4 +84,231 @@
    public Integer queryCountNumber(Integer coursePackageId) {
        return this.baseMapper.queryCountNumber(coursePackageId);
    }
    @Override
    public List<AppUserVideoResponse> queryAfterVideo(CourseOfAfterRequest search,List<Integer> courseIds) {
        List<AppUserVideoResponse> responses = new ArrayList<>();
        List<PostCourseVideo> videoList = pcvMapper.selectList(new QueryWrapper<PostCourseVideo>()
                .eq("coursePackageId", courseIds));
        if (videoList.size() > 0){
            List<Integer> videoIds = videoList.stream().map(PostCourseVideo::getCourseId).collect(Collectors.toList());
            List<UserVideoDetails> userVideoDetails = uvdmapper.selectList(new QueryWrapper<UserVideoDetails>()
                    .in("courseId", videoIds));
            if (userVideoDetails.size() > 0){
                for (UserVideoDetails userVideoDetail : userVideoDetails) {
                    AppUserVideoResponse response = new AppUserVideoResponse();
                    TCoursePackage coursePackage = tcpmapper.selectById(userVideoDetail.getCoursePackageId());
                    response.setPackageName(coursePackage.getName());
                    response.setCoursePackageId(userVideoDetail.getCoursePackageId());
                    BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(userVideoDetail.getCourseId());
                    response.setVideoId(userVideoDetail.getCourseId());
                    response.setCoverImage(videosWithIds.getCover());
                    if (null != search.getSearch()){
//                        根据正则模糊匹配
                        String pattern = ".*" + search.getSearch() + ".*";
                        Pattern regex = Pattern.compile(pattern);
                        Matcher matcher = regex.matcher(videosWithIds.getName());
                        if (matcher.matches()) {
                            response.setVideoName(videosWithIds.getName());
                        }
                    }else {
                        response.setVideoName(videosWithIds.getName());
                    }
                    response.setSynopsis(videosWithIds.getIntroduction());
                    response.setIntegral(videosWithIds.getIntegral());
                    response.setStudyStatus(userVideoDetail.getState());
                    responses.add(response);
                }
                Collections.sort(responses, Comparator.comparing(AppUserVideoResponse::getStudyStatus));
            }
        }
        return responses;
    }
    @Override
    public CourseOfVideoResponse queryVideoDetails(CourseWithDetailsRequest detailsRequest,Integer appUserId) {
        CourseOfVideoResponse response = new CourseOfVideoResponse();
        BenefitsVideos videosWithIds = bfvoClient.getVideosWithIds(detailsRequest.getVideoId());
        TCoursePackage coursePackage = tcpmapper.selectById(detailsRequest.getCoursePackageId());
        if (null != videosWithIds && null != coursePackage){
            response.setCoursePackageId(coursePackage.getId());
            response.setVideoId(videosWithIds.getId());
            response.setVideoURL(videosWithIds.getVideos());
            response.setVideoName(videosWithIds.getName());
            response.setIntegral(videosWithIds.getIntegral());
            UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>()
                    .eq("appUserId",appUserId )
                    .eq("coursePackageId",coursePackage.getId())
                    .eq("courseId",videosWithIds.getId()));
            response.setStudyStatus(userVideoDetails.getState());
            response.setPackageName(coursePackage.getName());
            response.setSynopsis(videosWithIds.getIntroduction());
            response.setDetailedDiagram(coursePackage.getIntroduceDrawing());
        }
        return response;
    }
    @Override
    public String updateVideoStatus(UpdateCourseVideoStatusRequest detailsRequest, Integer appUserId) {
        UserVideoDetails userVideoDetails = uvdmapper.selectOne(new QueryWrapper<UserVideoDetails>()
                .eq("appUserId",appUserId )
                .eq("coursePackageId",detailsRequest.getCoursePackageId())
                .eq("courseId",detailsRequest.getVideoId())
                );
        if (null != userVideoDetails && userVideoDetails.getState() ==1 && detailsRequest.getIsOver() == 1){
            userVideoDetails.setState(2);
            userVideoDetails.setUpdateTime(new Date());
            uvdmapper.updateById(userVideoDetails);
            return "SUCCESS";
        }
        return null;
    }
    @Override
    public List<RegisterCourseVo> queryRegisteredCourseList(CourseOfAfterRequest courseTypeId, Integer appUserId) {
        List<RegisterCourseVo> courseVos = new ArrayList<>();
        List<TCoursePackagePayment> tCoursePackagePayments = this.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("appUserId",appUserId ));
        if (tCoursePackagePayments.size() > 0){
            for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) {
                TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId());
                Store store = stoClient.queryStoreById(coursePackage.getStoreId());
                RegisterCourseVo registerCourseVo = new RegisterCourseVo();
                registerCourseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId());
                registerCourseVo.setPackageImg(coursePackage.getCoverDrawing());
                String storeAndCourse = coursePackage.getName()+"("+ store.getName() +")";
                registerCourseVo.setCourseNameStore(storeAndCourse);
                registerCourseVo.setCourseTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime());
                Coach coach = coachClient.queryCoachById(coursePackage.getCoachId());
                registerCourseVo.setCourseTeacher(coach.getName());
                List<CoursePackageStudent> coursePackageStudents = cpsMapper.selectList(new QueryWrapper<CoursePackageStudent>()
                        .eq("coursePackageId",coursePackage.getId())
                        .eq("studentId",appUserId ));
                registerCourseVo.setCourseNums(coursePackageStudents.size() * 2);
                registerCourseVo.setPayStatus(tCoursePackagePayment.getPayStatus());
                courseVos.add(registerCourseVo);
            }
        }
        return courseVos;
    }
    @Override
    public CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePackageId, Integer appUserId) {
        CourseDetailsResponse response = new CourseDetailsResponse();
        List<TCoursePackagePayment> tCoursePackagePayments = this.list(new QueryWrapper<TCoursePackagePayment>()
                .eq("coursePackageId",coursePackageId )
                .eq("appUserId",appUserId));
        if (tCoursePackagePayments.size() > 0){
            TCoursePackagePayment tCoursePackagePayment = tCoursePackagePayments.get(0);
            TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId());
            response.setCoursePackageId(tCoursePackagePayment.getCoursePackageId());
            response.setCoverDrawing(coursePackage.getCoverDrawing());
            response.setCoursePackageName(coursePackage.getName());
            List<Integer> integers = StrUtils.dealStrToList(coursePackage.getClassWeeks());
            if (integers.size() > 0){
                StringBuilder courWeeks = new StringBuilder("每");
                for (Integer integer : integers) {
                    switch (integer){
                        case 1:
                            courWeeks.append("周一、");
                            break;
                        case 2:
                            courWeeks.append("周二、");
                            break;
                        case 3:
                            courWeeks.append("周三、");
                            break;
                        case 4:
                            courWeeks.append("周四、");
                            break;
                        case 5:
                            courWeeks.append("周五、");
                            break;
                        case 6:
                            courWeeks.append("周六、");
                            break;
                        case 7:
                            courWeeks.append("周末、");
                            break;
                        default:
                            break;
                    }
                }
                if (courWeeks.length() > 0 && courWeeks.charAt(courWeeks.length() - 1) == ','){
                    courWeeks.deleteCharAt(courWeeks.length() - 1);
                }
                response.setWeeks(courWeeks.toString());
            }
            response.setCourseTimeFrame(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime());
            response.setIntroduceDrawing(coursePackage.getIntroduceDrawing());
            Integer payType = tCoursePackagePayment.getPayType();
            BigDecimal cashPayment = tCoursePackagePayment.getCashPayment();
            double cashPaymentValue = cashPayment.doubleValue();
            Integer playPaiCoin = tCoursePackagePayment.getPlayPaiCoin();
            TCoursePackageDiscount coursePackageDiscount = tcpdMapper.selectOne(new QueryWrapper<TCoursePackageDiscount>()
                    .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:
                    response.setAmount(cashPaymentValue);
                    response.setVipAmount(discountMember);
                    break;
                case 3:
                    response.setWpGold(playPaiCoin);
                    break;
            }
            response.setPayStatus(tCoursePackagePayment.getPayStatus());
        }
        return response;
    }
    @Override
    public ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request) {
        // TODO: 2023/7/5 报名课程支付
        switch (request.getPayType()){
            case 1:
                WeChatPayment();
                break;
            case 2:
                AlipayPayment();
                break;
            case 3:
                PlaypaiGoldPayment();
                break;
            default:
                break;
        }
        return ResultUtil.success();
    }
    public void WeChatPayment(){
    }
    public void AlipayPayment(){
    }
    public void PlaypaiGoldPayment(){
    }
}
cloud-server-course/src/main/java/com/dsh/course/service/impl/UserVideoDetailsServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.dsh.course.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.course.entity.UserVideoDetails;
import com.dsh.course.mapper.UserVideoDetailsMapper;
import com.dsh.course.service.UserVideoDetailsService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 用户观看视频记录 服务实现类
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
@Service
public class UserVideoDetailsServiceImpl extends ServiceImpl<UserVideoDetailsMapper, UserVideoDetails> implements UserVideoDetailsService {
}
cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml
@@ -3,33 +3,4 @@
<mapper namespace="com.dsh.course.mapper.CoursePackageStudentMapper">
    <select id="queryStuDeduClassHourNums" resultType="com.dsh.course.entity.CoursePackageStudent">
        SELECT *
        FROM t_course_package_student
        UNION ALL
        SELECT *
        FROM t_course_package_student1
        UNION ALL
        SELECT *
        FROM t_course_package_student2
        UNION ALL
        SELECT *
        FROM t_course_package_student3
        UNION ALL
        SELECT *
        FROM t_course_package_student4
        UNION ALL
        SELECT *
        FROM t_course_package_student5
        WHERE signInOrNot = 1
        <if test="courseId != null">
            and coursePackageId = #{courseId}
        </if>
        <if test="stuId != null ">
            and studentId = #{stuId}
        </if>
        <if test="appUserId != null">
            and appUserId = #{appUserId}
        </if>
    </select>
</mapper>
cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
@@ -25,38 +25,6 @@
        <result column="state" property="state" />
        <result column="insertTime" property="insertTime" />
    </resultMap>
    <select id="queryAllCoursePackage" resultType="com.dsh.course.entity.TCoursePackagePayment">
        SELECT *
        FROM t_course_package_payment
        UNION ALL
        SELECT *
        FROM t_course_package_payment1
        UNION ALL
        SELECT *
        FROM t_course_package_payment2
        UNION ALL
        SELECT *
        FROM t_course_package_payment3
        UNION ALL
        SELECT *
        FROM t_course_package_payment4
        UNION ALL
        SELECT *
        FROM t_course_package_payment5
        WHERE 1=1
        <if test=" stuId != null">
            and studentId  = #{stuId}
        </if>
        <if test="appUserId != null">
            and appUserId = #{appUserId}
        </if>
        <if test="startTime != null and endTime != null">
            and (insertTime between #{startTime} and #{endTime})
        </if>
        <if test="coursePackId != null ">
            and coursePackageId = #{coursePackId}
        </if>
    </select>
    <select id="queryCountNumber" resultType="int">
cloud-server-course/src/main/resources/mapper/UserVideoDetailsMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.course.mapper.UserVideoDetailsMapper">
</mapper>
cloud-server-other/src/main/java/com/dsh/other/controller/UserLoginLogController.java
New file
@@ -0,0 +1,44 @@
package com.dsh.other.controller;
import com.dsh.other.entity.SysLoginLog;
import com.dsh.other.service.SysLoginLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
@RestController
@RequestMapping("")
public class UserLoginLogController {
    @Autowired
    private SysLoginLogService ssllService;
    @PostMapping("/appUser/logOut")
    public void logOut(@RequestBody Integer appUserId){
        SysLoginLog sysLoginLog = new SysLoginLog();
        sysLoginLog.setCreatetime(new Date());
        sysLoginLog.setUserid(appUserId);
        sysLoginLog.setSucceed("执行成功");
        sysLoginLog.setMessage("退出成功");
        sysLoginLog.setLogname("APP用户退出账号");
        ssllService.save(sysLoginLog);
    }
    @PostMapping("/appUser/cancellation")
    public void cancellation(@RequestBody Integer appUserId){
        SysLoginLog sysLoginLog = new SysLoginLog();
        sysLoginLog.setCreatetime(new Date());
        sysLoginLog.setUserid(appUserId);
        sysLoginLog.setSucceed("执行成功");
        sysLoginLog.setMessage("注销成功");
        sysLoginLog.setLogname("APP用户注销账号");
        ssllService.save(sysLoginLog);
    }
}
cloud-server-other/src/main/java/com/dsh/other/entity/SysLoginLog.java
New file
@@ -0,0 +1,66 @@
package com.dsh.other.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 登录记录
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_login_log")
public class SysLoginLog extends Model<SysLoginLog> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 日志名称
     */
    private String logname;
    /**
     * 管理员id
     */
    private Integer userid;
    /**
     * 创建时间
     */
    private Date createtime;
    /**
     * 是否执行成功
     */
    private String succeed;
    /**
     * 具体消息
     */
    private String message;
    /**
     * 登录ip
     */
    private String ip;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-other/src/main/java/com/dsh/other/feignclient/SysLogClient.java
New file
@@ -0,0 +1,16 @@
package com.dsh.other.feignclient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "mb-cloud-other")
public interface SysLogClient {
    @PostMapping("/appUser/logOut")
    void logOut(@RequestBody Integer appUserId);
    @PostMapping("/appUser/cancellation")
    void cancellation(@RequestBody Integer appUserId);
}
cloud-server-other/src/main/java/com/dsh/other/mapper/SysLoginLogMapper.java
New file
@@ -0,0 +1,16 @@
package com.dsh.other.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.other.entity.SysLoginLog;
/**
 * <p>
 * 登录记录 Mapper 接口
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
public interface SysLoginLogMapper extends BaseMapper<SysLoginLog> {
}
cloud-server-other/src/main/java/com/dsh/other/service/SysLoginLogService.java
New file
@@ -0,0 +1,16 @@
package com.dsh.other.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.other.entity.SysLoginLog;
/**
 * <p>
 * 登录记录 服务类
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
public interface SysLoginLogService extends IService<SysLoginLog> {
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/SysLoginLogServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.dsh.other.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.other.entity.SysLoginLog;
import com.dsh.other.mapper.SysLoginLogMapper;
import com.dsh.other.service.SysLoginLogService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 登录记录 服务实现类
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
@Service
public class SysLoginLogServiceImpl extends ServiceImpl<SysLoginLogMapper, SysLoginLog> implements SysLoginLogService {
}
cloud-server-other/src/main/resources/mapper/SysLoginLogMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.other.mapper.SysLoginLogMapper">
</mapper>