瀏覽代碼

Merge branch 'feature/1113-vipCourse' of http://git.dayaedu.com/yonge/cooleshow into develop-new

zouxuan 8 月之前
父節點
當前提交
f81dc804b8
共有 100 個文件被更改,包括 651 次插入519 次删除
  1. 1 1
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/StudentFeignService.java
  2. 3 3
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/PracticeController.java
  3. 2 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/io/request/coupon/CouponIssueVo.java
  4. 3 19
      cooleshow-app/src/main/java/com/yonge/cooleshow/classroom/controller/RoomController.java
  5. 2 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/CourseHomeworkController.java
  6. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java
  7. 7 6
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java
  8. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/SubjectController.java
  9. 2 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  10. 2 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/io/request/CouponInfoVO.java
  11. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/task/TaskController.java
  12. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/vo/UserPaymentOrderVo.java
  13. 3 3
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/CourseHomeworkController.java
  14. 3 3
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java
  15. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/SubjectController.java
  16. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  17. 4 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java
  18. 2 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/UserOrderController.java
  19. 2 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/io/request/CouponInfoVO.java
  20. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/vo/UserPaymentOrderVo.java
  21. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/vo/UserPaymentOrderVo.java
  22. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/StudentController.java
  23. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/TeacherController.java
  24. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/TeacherFreeTimeController.java
  25. 4 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/WebCourseScheduleController.java
  26. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/open/OpenSubjectController.java
  27. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/open/SubjectController.java
  28. 14 7
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  29. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/CourseConstant.java
  30. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java
  31. 8 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  32. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java
  33. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  34. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserAccountRecordDao.java
  35. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CheckCourseTimeDto.java
  36. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomResult.java
  37. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/LiveCourseGroupDto.java
  38. 5 120
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PracticeScheduleDto.java
  39. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PracticeTimesSetting.java
  40. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/SubjectHomeSearch.java
  41. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  42. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HomeworkAdminSearch.java
  43. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HomeworkSearch.java
  44. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java
  45. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/PlatformCashAccountRecordSearch.java
  46. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserAccountRecordSearch.java
  47. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlanStandard.java
  48. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseGroup.java
  49. 7 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseSchedule.java
  50. 4 21
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleDate.java
  51. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleStudentPayment.java
  52. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseTimeEntity.java
  53. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PlatformCashAccountRecord.java
  54. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/StudentTime.java
  55. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessage.java
  56. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAccountRecord.java
  57. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantTeacherAccountRecord.java
  58. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccountRecord.java
  59. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java
  60. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java
  61. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java
  62. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseScheduleEnum.java
  63. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  64. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/course/CourseTypeEnum.java
  65. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/CouponIssueQueryInfo.java
  66. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  67. 9 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  68. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentPaymentService.java
  69. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java
  70. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/PaymentDivMemberRecordService.java
  71. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentAttendanceService.java
  72. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherFreeTimeService.java
  73. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserPaymentCoreService.java
  74. 9 35
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  75. 11 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  76. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  77. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  78. 291 162
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  79. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java
  80. 19 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java
  81. 21 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  82. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PlatformCashAccountRecordServiceImpl.java
  83. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserServiceImpl.java
  84. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  85. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountRecordServiceImpl.java
  86. 9 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  87. 52 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java
  88. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityPlanVo.java
  89. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ArrangeCourseVo.java
  90. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupPracticeDetailVo.java
  91. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupPracticeVo.java
  92. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkDetailVo.java
  93. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseStudent.java
  94. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseGroupVo.java
  95. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java
  96. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/SubjectHomeVo.java
  97. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundVo.java
  98. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/coupon/CouponIssueWrapper.java
  99. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/AccountTotal.java
  100. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/HomeTotalStudent.java

+ 1 - 1
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/StudentFeignService.java

@@ -32,7 +32,7 @@ public interface StudentFeignService {
     HttpResponseResult<Boolean> studentFirstBuy();
 
     /**
-     * @Description: 当日陪练课未对老师评价(每晚9点,已评价不发)
+     * @Description: 当日趣纠课未对老师评价(每晚9点,已评价不发)
      * @Author: cy
      * @Date: 2022/5/6
      */

+ 3 - 3
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/PracticeController.java

@@ -18,20 +18,20 @@ import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 @RequestMapping("${app-config.url.admin:}/pactice")
-@Api(value = "陪练课")
+@Api(value = "趣纠课")
 public class PracticeController extends BaseController {
 
     @Autowired
     private PracticeService pacticeService;
 
-    @ApiOperation(value = "陪练课-老师详情")
+    @ApiOperation(value = "趣纠课-老师详情")
     @PostMapping("/teacherPactice")
     public HttpResponseResult<PageInfo<PracticeVo>> teacherPactice(@RequestBody PracticeSearch search) {
         IPage<PracticeVo> pages = pacticeService.selectTeacherPactice(PageUtil.getPage(search), search);
         return succeed(PageUtil.pageInfo(pages));
     }
 
-    @ApiOperation(value = "陪练课-学生详情")
+    @ApiOperation(value = "趣纠课-学生详情")
     @PostMapping("/studentPactice")
     public HttpResponseResult<PageInfo<PracticeVo>> studentPactice(@RequestBody PracticeSearch search) {
         IPage<PracticeVo> pages = pacticeService.selectStudentPactice(PageUtil.getPage(search), search);

+ 2 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/io/request/coupon/CouponIssueVo.java

@@ -455,7 +455,7 @@ public class CouponIssueVo {
         @ApiModelProperty("优惠券类型 ")
         private CouponTypeEnum couponType;
 
-        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:趣纠课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
         private CouponCategoryEnum couponCategory;
 
         @ApiModelProperty("获取途径 PLATFORM:平台,ACTIVITY:活动")
@@ -562,7 +562,7 @@ public class CouponIssueVo {
         @ApiModelProperty("优惠券类型 ")
         private CouponTypeEnum couponType;
 
-        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:趣纠课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
         private CouponCategoryEnum couponCategory;
 
         @ApiModelProperty("使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期")

+ 3 - 19
cooleshow-app/src/main/java/com/yonge/cooleshow/classroom/controller/RoomController.java

@@ -2,17 +2,7 @@ package com.yonge.cooleshow.classroom.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
-import com.yonge.cooleshow.biz.dal.dto.BasicUserInfoDto;
-import com.yonge.cooleshow.biz.dal.dto.ETencentTRTCCallbackCommand;
-import com.yonge.cooleshow.biz.dal.dto.ImChannelStateNotify;
-import com.yonge.cooleshow.biz.dal.dto.ImNetworkBaseDto;
-import com.yonge.cooleshow.biz.dal.dto.ImNetworkCustomMessage;
-import com.yonge.cooleshow.biz.dal.dto.ImNetworkDeviceControlDto;
-import com.yonge.cooleshow.biz.dal.dto.ImNetworkDisplayDataDto;
-import com.yonge.cooleshow.biz.dal.dto.ImNetworkMusicSheetDto;
-import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomResult;
-import com.yonge.cooleshow.biz.dal.dto.RoomStatusNotify;
-import com.yonge.cooleshow.biz.dal.dto.TencentData;
+import com.yonge.cooleshow.biz.dal.dto.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.RoleEnum;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
@@ -25,13 +15,7 @@ import io.swagger.annotations.ApiOperation;
 import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-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.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -56,7 +40,7 @@ public class RoomController extends BaseController {
     private ImNetworkRoomService imNetworkRoomService;
     @Resource
     private SysUserService sysUserService;
-    @Autowired
+    @Resource
     private ImGroupService imGroupService;
 
     @ApiOperation("加入网络教室")

+ 2 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/CourseHomeworkController.java

@@ -51,7 +51,7 @@ public class CourseHomeworkController extends BaseController {
     private ImGroupService imGroupService;
 
 
-    @ApiOperation(value = "首页-我的课程-课程详情(陪练课)-课后作业信息详情",notes = "传入课程编号ID")
+    @ApiOperation(value = "首页-我的课程-课程详情(趣纠课)-课后作业信息详情",notes = "传入课程编号ID")
     @GetMapping(value = "/detail/{courseId}")
     public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
                                                                  @PathVariable("courseId") Long courseId) {
@@ -74,7 +74,7 @@ public class CourseHomeworkController extends BaseController {
     }
 
 
-    @ApiOperation(value = "陪练课-作业提交", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @ApiOperation(value = "趣纠课-作业提交", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/submit", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Boolean> reviewCourseHomework(@Valid @RequestBody CourseHomeworkSubmitDto submitDto) {
         Long userId = sysUserService.getUserId();

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java

@@ -108,7 +108,7 @@ public class StudentController extends BaseController {
     @ApiOperation(value = "获取声部搜索下拉框")
     @PostMapping("/querySubjectItem")
     public HttpResponseResult<List<Subject>> querySubjectItem(
-            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
+            @ApiParam(value = "类型 PRACTICE 趣纠课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
         List<Subject> subjects = studentService.querySubjectItem(sysUserService.getUserId(), type);
         subjectService.convertSubject(subjects);
         return succeed(subjects);

+ 7 - 6
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java

@@ -56,7 +56,7 @@ public class StudentCourseScheduleController extends BaseController {
         return succeed(courseScheduleService.selectRoomConfig());
     }
 
-    @ApiOperation("学生端-我的-我的课程-陪练课")
+    @ApiOperation("学生端-我的-我的课程-趣纠课")
     @PostMapping("/queryStudentPracticeCourse")
     public HttpResponseResult<PageInfo<MyCourseVo>> queryStudentPracticeCourse(@RequestBody MyCourseSearch search) {
         search.setStudentId(sysUserService.getUserId());
@@ -64,14 +64,14 @@ public class StudentCourseScheduleController extends BaseController {
         return succeed(PageUtil.pageInfo(pages));
     }
 
-    @ApiOperation(value = "学生端-我的-我的课程-课程详情-评价陪练课", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @ApiOperation(value = "学生端-我的-我的课程-课程详情-评价趣纠课", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/replied", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Object> replied(@Validated @RequestBody CourseScheduleReplied replied) {
         repliedService.replied(replied, sysUserService.getUser());
         return succeed();
     }
 
-    @ApiOperation(value = "学生端-我的-我的课程-课程详情-查询陪练课评价")
+    @ApiOperation(value = "学生端-我的-我的课程-课程详情-查询趣纠课评价")
     @PostMapping(value = "/selectReplied")
     public HttpResponseResult<CourseScheduleReplied> selectReplied(@Validated @RequestBody CourseScheduleReplied replied) {
         replied.setStudentId(sysUserService.getUserId());
@@ -85,7 +85,7 @@ public class StudentCourseScheduleController extends BaseController {
         return succeed(courseScheduleService.queryCourseScheduleStudent(search));
     }
 
-    @ApiOperation(value = "学生端-首页-陪练课老师列表", notes = "search:{\"subjectId\":null,\"search\":\"\",\"sort\":\"starGrade ASC,expTime DESC,subjectPrice DESC\"}")
+    @ApiOperation(value = "学生端-首页-趣纠课老师列表", notes = "search:{\"subjectId\":null,\"search\":\"\",\"sort\":\"starGrade ASC,expTime DESC,subjectPrice DESC\"}")
     @PostMapping("/teacherList")
     public HttpResponseResult<PageInfo<PracticeTeacherVo>> teacherList(@RequestBody PracticeTeacherSearch search) {
         IPage<PracticeTeacherVo> pages = courseScheduleService.teacherList(PageUtil.getPage(search), search);
@@ -128,14 +128,15 @@ public class StudentCourseScheduleController extends BaseController {
             @ApiImplicitParam(name = "year", dataType = "Integer", value = "年"),
             @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
             @ApiImplicitParam(name = "day", dataType = "Integer", value = "日"),
+            @ApiImplicitParam(name = "teacherSubjectPriceId", dataType = "Integer", value = "老师声部价格ID"),
     })
-    @ApiOperation("陪练课日历-用于学生购买指定老师陪练课")
+    @ApiOperation("趣纠课日历-用于学生购买指定老师趣纠课")
     @PostMapping("/createPracticeCourseCalendar")
     public HttpResponseResult<List<CourseCalendarEntity>> generatePracticeCourseCalender(@RequestBody Map<String, Object> param) {
         return succeed(courseScheduleService.createPracticeCourseCalender(param));
     }
 
-    @ApiOperation("查询老师陪练课配置")
+    @ApiOperation("查询老师趣纠课配置")
     @GetMapping("/getTeacherSubjectPrice")
     public HttpResponseResult<List<TeacherSubjectPrice>> getTeacherSubjectPrice(@NotNull Long teacherId) {
         return succeed(courseScheduleService.teacherSubjectPrice(teacherId));

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/SubjectController.java

@@ -41,7 +41,7 @@ public class SubjectController extends BaseController {
     @ApiOperation(value = "获取声部")
     @GetMapping("/subjectSelect")
     public HttpResponseResult<List<Subject>> subjectSelect(
-            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
+            @ApiParam(value = "类型 PRACTICE 趣纠课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
     	
     	String userExtSubjectIds = null;
         

+ 2 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -149,12 +149,12 @@ public class UserOrderController extends BaseController {
     @ApiImplicitParams({
             @ApiImplicitParam(
                     name = "goodType",
-                    value = "订单类型:  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名",
+                    value = "订单类型:  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名",
                     paramType = "query", dataType = "String", required = true
             ),
             @ApiImplicitParam(
                     name = "bizId",
-                    value = "业务id 直播课、陪练课购买为课程组id;陪练课为老师id;单曲点播传曲子id",
+                    value = "业务id 直播课、趣纠课购买为课程组id;趣纠课为老师id;单曲点播传曲子id",
                     paramType = "query", dataType = "Long"
             )
     })

+ 2 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/student/io/request/CouponInfoVO.java

@@ -45,7 +45,7 @@ public class CouponInfoVO {
         private String useState;
 
 
-        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:趣纠课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
         private CouponCategoryEnum couponCategory;
 
 
@@ -106,7 +106,7 @@ public class CouponInfoVO {
         private Long endTime;
 
 
-        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:趣纠课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
         private CouponCategoryEnum couponCategory;
 
     }

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/student/task/TaskController.java

@@ -70,7 +70,7 @@ public class TaskController extends BaseController {
     }
 
     /**
-     * @Description: 当日陪练课未对老师评价(每晚9点,已评价不发)
+     * @Description: 当日趣纠课未对老师评价(每晚9点,已评价不发)
      * @Author: cy
      * @Date: 2022/5/6
      */

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/student/vo/UserPaymentOrderVo.java

@@ -132,7 +132,7 @@ public class UserPaymentOrderVo {
         private String bizId;
 
         @NotNull(message = "订单类型不能为空")
-        @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
+        @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
         private OrderTypeEnum orderType;
 
         @ApiModelProperty("现价")

+ 3 - 3
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/CourseHomeworkController.java

@@ -72,7 +72,7 @@ public class CourseHomeworkController extends BaseController {
         return succeed(countVo);
     }
 
-    @ApiOperation(value = "首页-我的课程-课程详情(陪练课)-课后作业信息详情",notes = "传入课程编号ID")
+    @ApiOperation(value = "首页-我的课程-课程详情(趣纠课)-课后作业信息详情",notes = "传入课程编号ID")
     @GetMapping(value = "/detail/{courseId}/{studentId}")
     public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
                                                                  @PathVariable("courseId") Long courseId,
@@ -104,7 +104,7 @@ public class CourseHomeworkController extends BaseController {
         return null;
     }
 
-    @ApiOperation(value = "陪练课-布置作业", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @ApiOperation(value = "趣纠课-布置作业", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/decorate", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Boolean> decorateCourseHomework(@Valid @RequestBody CourseHomeworkSaveDto saveDto) {
         Long userId = sysUserService.getUserId();
@@ -114,7 +114,7 @@ public class CourseHomeworkController extends BaseController {
         return succeed(courseHomeworkService.decorateCourseHomework(saveDto));
     }
 
-    @ApiOperation(value = "陪练课-作业点评", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @ApiOperation(value = "趣纠课-作业点评", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/review", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Boolean> reviewCourseHomework(@Valid @RequestBody CourseHomeworkReviewDto reviewDto) {
         Long userId = sysUserService.getUserId();

+ 3 - 3
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java

@@ -25,7 +25,7 @@ import javax.annotation.Resource;
  * @Author: cy
  * @Date: 2022/4/12
  */
-@Api(tags = "陪练课")
+@Api(tags = "趣纠课")
 @RestController
 @RequestMapping("${app-config.url.teacher:}/courseReplied")
 public class CourseRepliedController extends BaseController {
@@ -34,14 +34,14 @@ public class CourseRepliedController extends BaseController {
     @Resource
     private CourseRepliedService repliedService;
 
-    @ApiOperation(value = "首页-我的课程-课程详情-评价陪练课", httpMethod = "POST", consumes = "application/json", produces = "application/json")
+    @ApiOperation(value = "首页-我的课程-课程详情-评价趣纠课", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/replied", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<Object> replied(@Validated @RequestBody CourseScheduleReplied replied) {
         repliedService.replied(replied,sysUserService.getUser());
         return succeed();
     }
 
-    @ApiOperation(value = "首页-我的课程-课程详情-查询陪练课评价")
+    @ApiOperation(value = "首页-我的课程-课程详情-查询趣纠课评价")
     @PostMapping(value = "/selectReplied")
     public HttpResponseResult<CourseRepliedVo> selectReplied(@Validated @RequestBody CourseScheduleReplied replied) {
         return succeed(repliedService.selectReplied(replied));

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/SubjectController.java

@@ -50,7 +50,7 @@ public class SubjectController extends BaseController {
 	@ApiOperation(value = "获取声部")
 	@GetMapping("/subjectSelect")
     public HttpResponseResult<List<Subject>> subjectSelect(
-			@ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type){
+			@ApiParam(value = "类型 PRACTICE 趣纠课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type){
 		
 		String userExtSubjectIds = null;
         

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -114,7 +114,7 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "获取声部搜索下拉框")
     @PostMapping("/querySubjectItem")
     public HttpResponseResult<List<Subject>> querySubjectItem(
-            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
+            @ApiParam(value = "类型 PRACTICE 趣纠课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
         List<Subject> subjects = teacherService.querySubjectItem(sysUserService.getUserId(), type);
         subjectService.convertSubject(subjects);
         return succeed(subjects);

+ 4 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java

@@ -79,14 +79,14 @@ public class TeacherCourseScheduleController extends BaseController {
             @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
             @ApiImplicitParam(name = "day", dataType = "Integer", value = "日"),
     })
-    @ApiOperation("陪练课日历-用于学生购买指定老师陪练课")
+    @ApiOperation("趣纠课日历-用于学生购买指定老师趣纠课")
     @PostMapping("/createPracticeCourseCalendar")
     public HttpResponseResult<List<CourseCalendarEntity>> generatePracticeCourseCalender(@RequestBody Map<String, Object> param) {
         return succeed(courseScheduleService.createPracticeCourseCalender(param));
     }
 
-    @ApiOperation(value = "陪练课查询",
-            notes = "老师端-首页-我的课程-陪练课\n" +
+    @ApiOperation(value = "趣纠课查询",
+            notes = "老师端-首页-我的课程-趣纠课\n" +
                     "search:{\"classMonth\":\"2022-03\",\"status\":\"COMPLETE\",\"subjectId\":1}\n" +
                     "老师端-首页-课后评价\n" +
                     "search:{\"classMonth\":\"2022-03\",\"replied\":0,\"studentName\":\"测试王\"}\n" +
@@ -95,7 +95,7 @@ public class TeacherCourseScheduleController extends BaseController {
                     "老师端-课表\n" +
                     "search:{\"classDate\":\"2022-03-27\"}\n" +
                     "     search:{\"classMonth\":\"2022-03\"}\n" +
-                    "老师端-课表-陪练课\n" +
+                    "老师端-课表-趣纠课\n" +
                     "     search:{\"classDate\":\"2022-03-27\"}")
     @PostMapping("/queryTeacherPracticeCourse")
     public HttpResponseResult<PageInfo<MyCourseVo>> queryTeacherPracticeCourse(@RequestBody MyCourseSearch search) {

+ 2 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/UserOrderController.java

@@ -144,12 +144,12 @@ public class UserOrderController extends BaseController {
     @ApiImplicitParams({
         @ApiImplicitParam(
             name = "goodType",
-            value = "订单类型:  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名",
+            value = "订单类型:  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名",
             paramType = "query", dataType = "String", required = true
         ),
         @ApiImplicitParam(
             name = "bizId",
-            value = "业务id 直播课、陪练课购买为课程组id;陪练课为老师id;单曲点播传曲子id",
+            value = "业务id 直播课、趣纠课购买为课程组id;趣纠课为老师id;单曲点播传曲子id",
             paramType = "query", dataType = "Long"
         )
     })

+ 2 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/io/request/CouponInfoVO.java

@@ -44,7 +44,7 @@ public class CouponInfoVO {
         private String useState;
 
 
-        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:趣纠课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
         private CouponCategoryEnum couponCategory;
 
         @ApiModelProperty("订单金额")
@@ -113,7 +113,7 @@ public class CouponInfoVO {
         private Integer usable;
 
 
-        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+        @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:趣纠课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
         private CouponCategoryEnum couponCategory;
 
     }

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/vo/UserPaymentOrderVo.java

@@ -131,7 +131,7 @@ public class UserPaymentOrderVo {
         private String bizId;
 
         @NotNull(message = "订单类型不能为空")
-        @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
+        @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
         private OrderTypeEnum orderType;
 
         @ApiModelProperty("现价")

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/vo/UserPaymentOrderVo.java

@@ -131,7 +131,7 @@ public class UserPaymentOrderVo {
         private String bizId;
 
         @NotNull(message = "订单类型不能为空")
-        @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
+        @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
         private OrderTypeEnum orderType;
 
         @ApiModelProperty("现价")

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/StudentController.java

@@ -93,7 +93,7 @@ public class StudentController extends BaseController {
     @ApiOperation(value = "获取声部搜索下拉框")
     @PostMapping("/querySubjectItem")
     public HttpResponseResult<List<Subject>> querySubjectItem(
-            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
+            @ApiParam(value = "类型 PRACTICE 趣纠课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/TeacherController.java

@@ -89,7 +89,7 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "获取声部搜索下拉框")
     @PostMapping("/querySubjectItem")
     public HttpResponseResult<List<Subject>> querySubjectItem(
-            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
+            @ApiParam(value = "类型 PRACTICE 趣纠课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
         List<Subject> subjects = teacherService.querySubjectItem(sysUserService.getUserId(), type);
         subjectService.convertSubject(subjects);
         return succeed(subjects);

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/TeacherFreeTimeController.java

@@ -30,7 +30,7 @@ public class TeacherFreeTimeController extends BaseController {
     @Resource
     private SysUserService sysUserService;
 
-    @ApiOperation(value = "新增、修改老师陪练课设置")
+    @ApiOperation(value = "新增、修改老师趣纠课设置")
     @PostMapping("/upSet")
     public HttpResponseResult upSet(@RequestBody TeacherFreeTime teacherFreeTime){
         teacherFreeTime.setTeacherId(sysUserService.getUserId());

+ 4 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/WebCourseScheduleController.java

@@ -90,14 +90,14 @@ public class WebCourseScheduleController extends BaseController {
             @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
             @ApiImplicitParam(name = "day", dataType = "Integer", value = "日"),
     })
-    @ApiOperation("陪练课日历-用于学生购买指定老师陪练课")
+    @ApiOperation("趣纠课日历-用于学生购买指定老师趣纠课")
     @PostMapping("/createPracticeCourseCalendar")
     public HttpResponseResult<List<CourseCalendarEntity>> generatePracticeCourseCalender(@RequestBody Map<String, Object> param) {
         return succeed(courseScheduleService.createPracticeCourseCalender(param));
     }
 
-    @ApiOperation(value = "陪练课查询",
-            notes = "老师端-首页-我的课程-陪练课\n" +
+    @ApiOperation(value = "趣纠课查询",
+            notes = "老师端-首页-我的课程-趣纠课\n" +
                     "search:{\"classMonth\":\"2022-03\",\"status\":\"COMPLETE\",\"subjectId\":1}\n" +
                     "老师端-首页-课后评价\n" +
                     "search:{\"classMonth\":\"2022-03\",\"replied\":0,\"studentName\":\"测试王\"}\n" +
@@ -106,7 +106,7 @@ public class WebCourseScheduleController extends BaseController {
                     "老师端-课表\n" +
                     "search:{\"classDate\":\"2022-03-27\"}\n" +
                     "     search:{\"classMonth\":\"2022-03\"}\n" +
-                    "老师端-课表-陪练课\n" +
+                    "老师端-课表-趣纠课\n" +
                     "     search:{\"classDate\":\"2022-03-27\"}")
     @PostMapping("/queryTeacherPracticeCourse")
     public HttpResponseResult<PageInfo<MyCourseVo>> queryTeacherPracticeCourse(@RequestBody MyCourseSearch search) {

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/open/OpenSubjectController.java

@@ -35,7 +35,7 @@ public class OpenSubjectController extends BaseController {
     @ApiOperation(value = "获取声部")
     @GetMapping("/subjectSelect")
     public HttpResponseResult<List<Subject>> subjectSelect(
-            @ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
+            @ApiParam(value = "类型 PRACTICE 趣纠课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type) {
         List<Subject> subjectSelect = subjectService.subjectSelect(type, null);
         subjectService.convertSubSubject(subjectSelect);
         return succeed(subjectSelect);

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/website/controller/open/SubjectController.java

@@ -49,7 +49,7 @@ public class SubjectController extends BaseController {
 	@ApiOperation(value = "获取声部")
 	@GetMapping("/subjectSelect")
     public HttpResponseResult<List<Subject>> subjectSelect(
-			@ApiParam(value = "类型 PRACTICE 陪练课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type, @ApiParam(value = "客户端 TEACHER/STUDENT") String clientId){
+			@ApiParam(value = "类型 PRACTICE 趣纠课 LIVE 直播课 VIDEO 视频课 PIANO_ROOM 琴房 MUSIC 曲目 ") String type, @ApiParam(value = "客户端 TEACHER/STUDENT") String clientId){
 
 		String userExtSubjectIds = null;
         

+ 14 - 7
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -21,11 +21,12 @@ public interface SysConfigConstant {
     String OPEN_LIVE_OVER_CLASS = "open_list_over_class";
 
     /**
-     * 陪练课服务费
+     * 趣纠课服务费
      */
     String PRACTICE_SERVICE_FEE = "practice_service_fee";
+    String VIP_COURSE_SERVICE_FEE = "vip_course_service_fee";
     /**
-     * 陪练课可选时长配置
+     * 趣纠课可选时长配置
      */
     String PRACTICE_TIMES_SETTING = "practice_times_setting";
     /**
@@ -45,7 +46,7 @@ public interface SysConfigConstant {
      */
     String PRE_CREATE_LIVE_ROOM_MINUTE = "pre_create_live_room_minute";
     /**
-     * 提前XX分钟创建/进入陪练课房间时间
+     * 提前XX分钟创建/进入趣纠课房间时间
      */
     String PRE_CREATE_PRACTICE_ROOM_MINUTE = "pre_create_practice_room_minute";
     /**
@@ -57,7 +58,7 @@ public interface SysConfigConstant {
      */
     String DESTROY_EXPIRED_LIVE_ROOM_MINUTE = "destroy_expired_live_room_minute";
     /**
-     * 陪练课结束后,XX分钟关闭房间
+     * 趣纠课结束后,XX分钟关闭房间
      */
     String DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE = "destroy_expired_practice_room_minute";
     /**
@@ -75,7 +76,7 @@ public interface SysConfigConstant {
     String LIVE_TIME_SETTING = "live_time_setting";
 
     /**
-     * 学生购买陪练课时间段锁定时间
+     * 学生购买趣纠课时间段锁定时间
      */
     String STUDENT_BUY_PRACTICE_TIME_LOCK_MINUTE = "student_buy_practice_time_lock_minute";
 
@@ -126,7 +127,7 @@ public interface SysConfigConstant {
      */
     String GOOD_LOGO_VIDEO = "good_logo_video";
     /***
-     * 商品陪练课图片
+     * 商品趣纠课图片
      * @author liweifan
      * @updateTime 2022/4/20 11:43
      */
@@ -306,9 +307,15 @@ public interface SysConfigConstant {
      */
     String MALL_SHARE_FEE = "mall_share_fee";
     /**
-     * 陪练课账期
+     * 趣纠课账期
      */
     String PRACTICE_ACCOUNT_PERIOD = "practice_account_period";
+
+    /**
+     * vip课帐期
+     */
+    String VIP_COURSE_ACCOUNT_PERIOD = "vip_course_account_period";
+
     /**
      * 直播课账期
      */

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/CourseConstant.java

@@ -6,7 +6,7 @@ public interface CourseConstant {
 
     /**
      * 未正式写入数据库的排课时间临时数据
-     * <p>用途将未写入数据库的排课数据写入缓存,然后生成日历及陪练课买课时校验课时将缓存时间拿出来比对
+     * <p>用途将未写入数据库的排课数据写入缓存,然后生成日历及趣纠课买课时校验课时将缓存时间拿出来比对
      * <p>返回结果 List<CourseTimeEntity>
      */
     String LOCK_COURSE_TIME_INFO = String.join(":", LiveRoomConstant.COOLESHOW, "LOCK_COURSE_TIME_INFO", TEACHER_ID);

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java

@@ -95,7 +95,7 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
                                                                            @Param("param") LiveCourseGroupStudentCourseSearch query);
 
     /**
-     * 查询陪练
+     * 查询趣纠
      *
      * @param page
      * @param search
@@ -105,7 +105,7 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
                                                      @Param("param") CourseGroupSearch search);
 
     /**
-     * 查询陪练课-详情
+     * 查询趣纠课-详情
      *
      * @param page
      * @param search

+ 8 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -10,6 +10,8 @@ import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.course.CourseTypeEnum;
 import com.yonge.cooleshow.biz.dal.queryInfo.TeacherBindingUserQueryInfo;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.userBindingTeacher.UserBindingCourseWrapper;
@@ -70,7 +72,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
      * @param param 传入参数
      *              <p> - teacherId 老师id
      *              <p> - status 课程状态 NOT_START未开始 ING进行中 COMPLETE已完成
-     *              <p> - type  PRACTICE 陪练课 LIVE 直播课
+     *              <p> - type  PRACTICE 趣纠课 LIVE 直播课
      *              <p> - startDate 开始时间
      *              <p> - endDate 结束时间
      *              <p> - subjectId 声部id
@@ -84,7 +86,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     /**
      * 老师未布置的课程作业数量
      * <p>
-     * 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+     * 趣纠课 课程状态为完成,有学生考勤记录 没有布置作业
      *
      * @param param 查询条件
      * @return number
@@ -103,7 +105,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     //老师端-课表-日历-用户
     List<CourseStudent> queryCourseUser(@Param("param") MyCourseSearch search);
 
-    //学生端-首页-陪练课老师列表
+    //学生端-首页-趣纠课老师列表
     List<PracticeTeacherVo> teacherList(IPage<PracticeTeacherVo> page, @Param("param") PracticeTeacherSearch search);
 
     List<Long> teacherIdList();
@@ -122,7 +124,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
      *              <p> - startDate 开始时间
      *              <p> - endDate 结束时间
      *              <p> - subjectId 声部id
-     *              <p> - type PRACTICE 陪练课 LIVE 直播课
+     *              <p> - type PRACTICE 趣纠课 LIVE 直播课
      *              <p> - orderState OrderStatusEnum支付状态
      */
     <T> IPage<T> queryStudentLiveCourse(Page<T> page, @Param("param") Map<String, Object> param);
@@ -142,7 +144,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     //学生端-首页-最近一堂课
     StudentHomePage.RecentCourses selectRecentCourses(Long studentId);
 
-    //老师端-首页-最近一堂课(陪练课\VIP课)
+    //老师端-首页-最近一堂课(趣纠课\VIP课)
     StudentHomePage.RecentCourses selectRecentCoursesPractice(Long teacherId);
 
     //老师端-首页-最近一堂课(直播课)
@@ -213,7 +215,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     List<CourseHomeVo.CourseHomeInfoVo> queryCourseHomeOfMonth(@Param("param") Map<String, Object> param);
 
     //查询老师声部价格
-    BigDecimal selectPrice(@Param("teacherId") Long teacherId, @Param("subjectId") Long subjectId);
+    BigDecimal selectPrice(@Param("teacherId") Long teacherId, @Param("subjectId") Long subjectId, @Param("courseTypeEnum") CourseScheduleEnum courseTypeEnum);
 
     //查询课程
     List<CourseSchedule> selectSchedule(Integer courseId);

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java

@@ -32,7 +32,7 @@ public interface CourseScheduleRepliedDao extends BaseMapper<CourseScheduleRepli
 	List<CourseScheduleRepliedVo> selectPage(@Param("page") IPage page, @Param("param") CourseScheduleRepliedSearch courseScheduleReplied);
 
 	/**
-	 * @Description: 修改陪练课评论
+	 * @Description: 修改趣纠课评论
 	 * @Author: cy
 	 * @Date: 2022/4/12
 	 */

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -44,7 +44,7 @@ public interface CourseScheduleStudentPaymentDao extends BaseMapper<CourseSchedu
      */
     List<LiveCourseInfoVo.CourseBuyStudentVo> queryStudentInfoByGroupId(@Param("param") Map<String, Object> param);
 
-    //查询所有购买陪练课用户id
+    //查询所有购买趣纠课用户id
     List<Long> selectAll();
 
     //根据查询锁定中的课程

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserAccountRecordDao.java

@@ -17,7 +17,7 @@ import org.springframework.security.core.parameters.P;
 
 /**
  * 账户记账规则
- * 陪练课 每次课程结束 记录入账
+ * 趣纠课 每次课程结束 记录入账
  * 直播课 每次课程结束,对每个学员都记录一次入账
  * 用户购买老师乐谱后 记录入账
  */

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/CheckCourseTimeDto.java

@@ -25,7 +25,7 @@ public class CheckCourseTimeDto implements Serializable {
     private Integer loop;
 
     @NotBlank(message = "课程类型不能为空")
-    @ApiModelProperty(value = "PRACTICE:陪练课,LIVE:直播课")
+    @ApiModelProperty(value = "PRACTICE:趣纠课,LIVE:直播课")
     private String  courseType;
 
     @NotNull(message = "课程数不能为空")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImNetworkRoomResult.java

@@ -13,7 +13,7 @@ import java.util.List;
 @Data
 public class ImNetworkRoomResult extends ImNetworkRoom {
 
-    @ApiModelProperty(value = "陪练课结束后,XX分钟关闭房间")
+    @ApiModelProperty(value = "趣纠课结束后,XX分钟关闭房间")
     private String autoCloseNetworkRoomTime = "15";
 
     @ApiModelProperty(value = "课程结束后是否关闭教室")

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/LiveCourseGroupDto.java

@@ -78,6 +78,10 @@ public class LiveCourseGroupDto implements Serializable {
 
 
 
+    @NotNull(message = "课程休息时长不能为空")
+    @ApiModelProperty(value = "课程休息时长")
+    private Integer courseFreeMinutes;
+
     @ApiModelProperty(value = "版本号")
     private String version;
 
@@ -103,6 +107,17 @@ public class LiveCourseGroupDto implements Serializable {
         private Long planId;
 
 
+        @ApiModelProperty(value = "休息时长结束时间")
+        private Date freeEndTime;
+
+        public Date getFreeEndTime() {
+            return freeEndTime;
+        }
+
+        public void setFreeEndTime(Date freeEndTime) {
+            this.freeEndTime = freeEndTime;
+        }
+
         public Long getPlanId() {
             return planId;
         }
@@ -128,6 +143,14 @@ public class LiveCourseGroupDto implements Serializable {
         }
     }
 
+    public Integer getCourseFreeMinutes() {
+        return courseFreeMinutes;
+    }
+
+    public void setCourseFreeMinutes(Integer courseFreeMinutes) {
+        this.courseFreeMinutes = courseFreeMinutes;
+    }
+
     public Long getId() {
         return id;
     }

+ 5 - 120
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PracticeScheduleDto.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleDate;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -15,6 +16,7 @@ import java.util.List;
  * @Author: cy
  * @Date: 2022/4/20
  */
+@Data
 @ApiModel(value = "PracticeScheduleDto")
 public class PracticeScheduleDto implements Serializable {
     @ApiModelProperty(value = "课程组id")
@@ -23,7 +25,7 @@ public class PracticeScheduleDto implements Serializable {
     private Long studentId;
     @ApiModelProperty(value = "老师id")
     private Long teacherId;
-    @ApiModelProperty(value = "类型 practice陪练课 live直播课")
+    @ApiModelProperty(value = "类型 practice趣纠课 live直播课")
     private String type;
     @ApiModelProperty(value = "课程组名称")
     private String courseGroupName;
@@ -31,6 +33,8 @@ public class PracticeScheduleDto implements Serializable {
     private Long subjectId;
     @ApiModelProperty(value = "单课时长")
     private Integer singleCourseMinutes;
+    @ApiModelProperty(value = "老师声部价格ID")
+    private Long teacherSubjectPriceId;
     @ApiModelProperty(value = "课程数")
     private Integer courseNum;
     @ApiModelProperty(value = "课程介绍")
@@ -50,123 +54,4 @@ public class PracticeScheduleDto implements Serializable {
     @ApiModelProperty(value = "上课时间")
     private List<CourseScheduleDate> classTime;
 
-    public BigDecimal getUnitPrice() {
-        return unitPrice;
-    }
-
-    public void setUnitPrice(BigDecimal unitPrice) {
-        this.unitPrice = unitPrice;
-    }
-
-    public Long getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(Long groupId) {
-        this.groupId = groupId;
-    }
-
-    public Long getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Long studentId) {
-        this.studentId = studentId;
-    }
-
-    public Long getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Long teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getCourseGroupName() {
-        return courseGroupName;
-    }
-
-    public void setCourseGroupName(String courseGroupName) {
-        this.courseGroupName = courseGroupName;
-    }
-
-    public Long getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Long subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public Integer getSingleCourseMinutes() {
-        return singleCourseMinutes;
-    }
-
-    public void setSingleCourseMinutes(Integer singleCourseMinutes) {
-        this.singleCourseMinutes = singleCourseMinutes;
-    }
-
-    public Integer getCourseNum() {
-        return courseNum;
-    }
-
-    public void setCourseNum(Integer courseNum) {
-        this.courseNum = courseNum;
-    }
-
-    public String getCourseIntroduce() {
-        return courseIntroduce;
-    }
-
-    public void setCourseIntroduce(String courseIntroduce) {
-        this.courseIntroduce = courseIntroduce;
-    }
-
-    public BigDecimal getCoursePrice() {
-        return coursePrice;
-    }
-
-    public void setCoursePrice(BigDecimal coursePrice) {
-        this.coursePrice = coursePrice;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public Integer getMixStudentNum() {
-        return mixStudentNum;
-    }
-
-    public void setMixStudentNum(Integer mixStudentNum) {
-        this.mixStudentNum = mixStudentNum;
-    }
-
-    public Date getCourseStartTime() {
-        return courseStartTime;
-    }
-
-    public void setCourseStartTime(Date courseStartTime) {
-        this.courseStartTime = courseStartTime;
-    }
-
-    public List<CourseScheduleDate> getClassTime() {
-        return classTime;
-    }
-
-    public void setClassTime(List<CourseScheduleDate> classTime) {
-        this.classTime = classTime;
-    }
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PracticeTimesSetting.java

@@ -5,7 +5,7 @@ import lombok.Data;
 
 import javax.validation.constraints.NotNull;
 
-//陪练课可选单课时时长配置
+//趣纠课可选单课时时长配置
 @Data
 public class PracticeTimesSetting {
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/SubjectHomeSearch.java

@@ -13,7 +13,7 @@ import io.swagger.annotations.ApiModelProperty;
 @ApiModel("内容数据-声部查询")
 public class SubjectHomeSearch extends QueryInfo {
 
-    @ApiModelProperty("排序类型 MUSIC:乐谱 PLATFORM_MUSIC:平台乐谱 TEACHER_MUSIC:老师乐谱 PRACTICE :陪练课 PIANO:琴房课  LIVE:直播课  VIDEO:视频课 ")
+    @ApiModelProperty("排序类型 MUSIC:乐谱 PLATFORM_MUSIC:平台乐谱 TEACHER_MUSIC:老师乐谱 PRACTICE :趣纠课 PIANO:琴房课  LIVE:直播课  VIDEO:视频课 ")
     private String sortType;
 
     @ApiModelProperty("desc:倒序 asc:正序")

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java

@@ -32,7 +32,7 @@ public class OrderReq {
     @ApiModelProperty(value = "订单名称 ", required = true)
     private String orderName;
     @NotNull(message = "订单类型不能为空")
-    @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  SVIP:SVIP PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
+    @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  SVIP:SVIP PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
     private OrderTypeEnum orderType;
     @ApiModelProperty(value = "订单描述信息 ")
     private String orderDesc;
@@ -67,7 +67,7 @@ public class OrderReq {
         @ApiModelProperty(value = "订单详情号", hidden = true)
         private String subOrderNo;
         @NotNull(message = "商品类型不能为空")
-        @ApiModelProperty(value = "商品类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端( PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
+        @ApiModelProperty(value = "商品类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端( PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
         private GoodTypeEnum goodType;
         @ApiModelProperty("商品名称 ")
         private String goodName;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HomeworkAdminSearch.java

@@ -34,7 +34,7 @@ public class HomeworkAdminSearch extends QueryInfo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
-    @ApiModelProperty(value = "课程类型: PRACTICE 陪练课; LIVE 直播课",hidden = true)
+    @ApiModelProperty(value = "课程类型: PRACTICE 趣纠课; LIVE 直播课",hidden = true)
     private List<CourseScheduleEnum> courseType;
 
     @ApiModelProperty(value = "课程状态: NOT_START:未开始; ING:进行中; COMPLETE:已完成; CANCEL:已取消",hidden = true)

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HomeworkSearch.java

@@ -24,7 +24,7 @@ public class HomeworkSearch extends QueryInfo {
     @ApiModelProperty(value = "老师id",hidden = true)
     private Long teacherId;
 
-    @ApiModelProperty(value = "课程类型: PRACTICE 陪练课; LIVE 直播课 PIANO_ROOM_CLASS 琴房",hidden = true)
+    @ApiModelProperty(value = "课程类型: PRACTICE 趣纠课; LIVE 直播课 PIANO_ROOM_CLASS 琴房",hidden = true)
     private List<CourseScheduleEnum> courseType;
 
     @ApiModelProperty(value = "课程状态: NOT_START:未开始; ING:进行中; COMPLETE:已完成; CANCEL:已取消",hidden = true)

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java

@@ -22,7 +22,7 @@ public class OrderSearch extends QueryInfo{
 	@ApiModelProperty("下单应用:STUDENT 学生端 TEACHER 老师端")
 	private String orderClient;
 
-	@ApiModelProperty("交易类型:  VIP、开通会员  SVIP、开通会员 PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名(多选用,分割)、VIP_COURSE VIP定制课、DISCOUNT 畅学卡")
+	@ApiModelProperty("交易类型:  VIP、开通会员  SVIP、开通会员 PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名(多选用,分割)、VIP_COURSE VIP定制课、DISCOUNT 畅学卡")
 	private String orderType;
 
 	@ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 FAIL 支付失败 (多选用,分割)")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/PlatformCashAccountRecordSearch.java

@@ -22,7 +22,7 @@ public class PlatformCashAccountRecordSearch extends QueryInfo {
 	@ApiModelProperty("收支类型(IN-收入  OUT-支出)")
 	private String inOrOut;
 
-	@ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 ACTI_REGIST、活动报名 WITHDRAWAL、提现 " +
+	@ApiModelProperty("业务类型:PRACTICE、趣纠课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 ACTI_REGIST、活动报名 WITHDRAWAL、提现 " +
 			"LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润 MUSIC_SHARE、乐谱分润 VIP_SHARE、会员分润 MALL_SHARE、商品分润 ACTI_REGIST_SHARE、活动报名分润 ")
 	private AccountBizTypeEnum bizType;
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserAccountRecordSearch.java

@@ -32,7 +32,7 @@ public class UserAccountRecordSearch extends QueryInfo{
 	@ApiModelProperty(value = "入账状态 WAIT 待入账 FROZEN 冻结入账 RECORDED 已入账 CANCEL 退费 ")
 	private PostStatusEnum postStatus;
 
-	@ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 ACTI_REGIST、活动报名 WITHDRAWAL、提现 " +
+	@ApiModelProperty("业务类型:PRACTICE、趣纠课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 ACTI_REGIST、活动报名 WITHDRAWAL、提现 " +
 			"LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润 MUSIC_SHARE、乐谱分润 VIP_SHARE、会员分润 MALL_SHARE、商品分润 ACTI_REGIST_SHARE、活动报名分润 ")
 	private AccountBizTypeEnum bizType;
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlanStandard.java

@@ -22,7 +22,7 @@ public class ActivityPlanStandard implements Serializable {
     @ApiModelProperty("主键 ")
     @TableId(value = "id_")
     private Long id;
-    @ApiModelProperty("达标条件:ENTRY 达人认证 LIVEING 开通直播 PRACTICE 首次完成陪练课设置 LIVE 首次创建直播课 VIDEO 首次创建视频课 BIND_STUDENT 学员绑定 REGISTER_STUDENT 学员注册 REGISTER_TEACHER 老师注册")
+    @ApiModelProperty("达标条件:ENTRY 达人认证 LIVEING 开通直播 PRACTICE 首次完成趣纠课设置 LIVE 首次创建直播课 VIDEO 首次创建视频课 BIND_STUDENT 学员绑定 REGISTER_STUDENT 学员注册 REGISTER_TEACHER 老师注册")
 	@TableField(value = "condition_")
     private String condition;
     @ApiModelProperty("计算方式:AND 全部满足 OR 满足其一 ")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseGroup.java

@@ -28,7 +28,7 @@ public class CourseGroup implements Serializable {
     private Long id;
 
     @TableField("type_")
-    @ApiModelProperty(value = "类型 practice陪练课 live直播课")
+    @ApiModelProperty(value = "类型 practice趣纠课 live直播课")
     private String type;
 
     @TableField("teacher_id_")

+ 7 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseSchedule.java

@@ -32,7 +32,7 @@ public class CourseSchedule implements Serializable {
     private String roomUid;
 
     @TableField("type_")
-    @ApiModelProperty(value = "类型 practice陪练课 live直播课  CourseScheduleEnum")
+    @ApiModelProperty(value = "类型 practice趣纠课 live直播课  CourseScheduleEnum")
     private String type;
 
     @TableField("status_")
@@ -59,8 +59,13 @@ public class CourseSchedule implements Serializable {
     @ApiModelProperty(value = "下课时间")
     private Date endTime;
 
+    @TableField("free_end_time_")
+    @ApiModelProperty(value = "休息时长结束时间")
+    private Date freeEndTime;
+
+
     @TableField("lock_")
-    @ApiModelProperty(value = "购买陪练课及创建直播课时需要锁定课时 0未锁 1锁定")
+    @ApiModelProperty(value = "购买趣纠课及创建直播课时需要锁定课时 0未锁 1锁定")
     private Integer lock;
 
     @TableField("lock_time_")

+ 4 - 21
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleDate.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -12,6 +13,7 @@ import java.util.Date;
  * @Author: cy
  * @Date: 2022/4/20
  */
+@Data
 @ApiModel(value = "CourseScheduleDate")
 public class CourseScheduleDate implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd")
@@ -29,28 +31,9 @@ public class CourseScheduleDate implements Serializable {
     @ApiModelProperty(value = "下课时间")
     private Date endTime;
 
-    public Date getClassDate() {
-        return classDate;
-    }
 
-    public void setClassDate(Date classDate) {
-        this.classDate = classDate;
-    }
+    @ApiModelProperty(value = "休息时长结束时间")
+    private Date freeEndTime;
 
-    public Date getStartTime() {
-        return startTime;
-    }
-
-    public void setStartTime(Date startTime) {
-        this.startTime = startTime;
-    }
-
-    public Date getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(Date endTime) {
-        this.endTime = endTime;
-    }
 }
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleStudentPayment.java

@@ -62,7 +62,7 @@ public class CourseScheduleStudentPayment implements Serializable {
     private Date updatedTime;
 
     @TableField("course_type_")
-    @ApiModelProperty(value = "类型 practice陪练课 live直播课")
+    @ApiModelProperty(value = "类型 practice趣纠课 live直播课")
     private String courseType;
 
     @TableField(value = "group_join_")

+ 20 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseTimeEntity.java

@@ -25,6 +25,26 @@ public class CourseTimeEntity implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date endTime;
 
+
+    @ApiModelProperty(value = "休息时长结束时间")
+    private Date freeEndTime;
+
+    public CourseTimeEntity() {
+    }
+
+    public CourseTimeEntity(Date startTime, Date endTime) {
+        this.startTime = startTime;
+        this.endTime = endTime;
+    }
+
+    public Date getFreeEndTime() {
+        return freeEndTime;
+    }
+
+    public void setFreeEndTime(Date freeEndTime) {
+        this.freeEndTime = freeEndTime;
+    }
+
     public Date getStartTime() {
         return startTime;
     }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PlatformCashAccountRecord.java

@@ -50,7 +50,7 @@ public class PlatformCashAccountRecord implements Serializable {
     private PostStatusEnum postStatus;
 
     @TableField("biz_type_")
-    @ApiModelProperty(value = "业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 VIP、会员充值 MALL、商品购买 PIANO_ROOM、琴房充值 ACTI_REGIST、活动报名 LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润  MUSIC_SHARE、乐谱分润  VIP_SHARE、会员分润  MALL_SHARE、商品分润")
+    @ApiModelProperty(value = "业务类型:PRACTICE、趣纠课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 VIP、会员充值 MALL、商品购买 PIANO_ROOM、琴房充值 ACTI_REGIST、活动报名 LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润  MUSIC_SHARE、乐谱分润  VIP_SHARE、会员分润  MALL_SHARE、商品分润")
     private AccountBizTypeEnum bizType;
 
     @TableField("biz_id_")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/StudentTime.java

@@ -32,7 +32,7 @@ public class StudentTime implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date firstSvipTime;
-    @ApiModelProperty("第一次购买陪练课时间 ")
+    @ApiModelProperty("第一次购买趣纠课时间 ")
     @TableField(value = "first_practice_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessage.java

@@ -21,7 +21,7 @@ public class SysMessage extends BaseEntity {
 	@ApiModelProperty("消息配置表id")
 	private Long messageConfigId;
 
-	@ApiModelProperty("TEACHER_AUTH:达人认证,MUSICIAN_AUTH:音乐人认证,PRACTICE:陪练课,LIVE:直播课,VIDEO:视频课,MUSIC_SHEET:乐谱," +
+	@ApiModelProperty("TEACHER_AUTH:达人认证,MUSICIAN_AUTH:音乐人认证,PRACTICE:趣纠课,LIVE:直播课,VIDEO:视频课,MUSIC_SHEET:乐谱," +
 			"COURSE:课程,INCOME:收入,HOMEWORK:作业,EVALUATE:评价,GROUP_CHAT:群聊,VIP:会员,NOTICE:公告")
 	private String subType;
 	

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantAccountRecord.java

@@ -60,7 +60,7 @@ public class TenantAccountRecord implements Serializable {
 	@TableField(value = "post_status_")
     private String postStatus;
 
-    @ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、提现 LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润 MUSIC_SHARE、乐谱分润 VIP_SHARE、会员分润 MALL_SHARE、商品分润") 
+    @ApiModelProperty("业务类型:PRACTICE、趣纠课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、提现 LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润 MUSIC_SHARE、乐谱分润 VIP_SHARE、会员分润 MALL_SHARE、商品分润") 
 	@TableField(value = "biz_type_")
     private String bizType;
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantTeacherAccountRecord.java

@@ -62,7 +62,7 @@ public class TenantTeacherAccountRecord implements Serializable {
 	@TableField(value = "post_status_")
     private String postStatus;
 
-    @ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、提现 LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润 MUSIC_SHARE、乐谱分润 VIP_SHARE、会员分润 MALL_SHARE、商品分润") 
+    @ApiModelProperty("业务类型:PRACTICE、趣纠课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、提现 LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润 MUSIC_SHARE、乐谱分润 VIP_SHARE、会员分润 MALL_SHARE、商品分润") 
 	@TableField(value = "biz_type_")
     private String bizType;
 

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccountRecord.java

@@ -42,11 +42,11 @@ public class UserAccountRecord implements Serializable {
     @ApiModelProperty(value = "入账状态 WAIT 待入账 FROZEN 冻结入账 RECORDED 已入账 CANCEL 退费 ")
     @TableField(value = "post_status_")
     private PostStatusEnum postStatus;
-    @ApiModelProperty(value = "业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、提现 " +
+    @ApiModelProperty(value = "业务类型:PRACTICE、趣纠课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、提现 " +
             "LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润 MUSIC_SHARE、乐谱分润 VIP_SHARE、会员分润 MALL_SHARE、商品分润 ACTI_REGIST_SHARE、活动报名分润",required = true)
     @TableField(value = "biz_type_")
     private AccountBizTypeEnum bizType;
-    @ApiModelProperty("业务id(陪练课,直播课course_schedule_id_ | 视频课,乐谱为课程组曲子id | 提现为提现记录id | 会员分润为会员购买记录id | 商品分润为商品订单id)")
+    @ApiModelProperty("业务id(趣纠课,直播课course_schedule_id_ | 视频课,乐谱为课程组曲子id | 提现为提现记录id | 会员分润为会员购买记录id | 商品分润为商品订单id)")
     @TableField(value = "biz_id_")
     private Long bizId;
     @ApiModelProperty("业务名称 ")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java

@@ -83,7 +83,7 @@ public class UserOrder implements Serializable {
     @TableField(value = "order_client_")
     private ClientEnum orderClient;
 
-    @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 TENANT_ALBUM 平台专辑) " +
+    @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 TENANT_ALBUM 平台专辑) " +
             "老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
     @TableField(value = "order_type_")
     private OrderTypeEnum orderType;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java

@@ -37,7 +37,7 @@ public class UserOrderDetail implements Serializable {
     @ApiModelProperty("卖家id ")
     @TableField(value = "merch_id_")
     private Long merchId;
-    @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
+    @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
     @TableField(value = "good_type_")
     private GoodTypeEnum goodType;
     @ApiModelProperty("业务id ")

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java

@@ -26,6 +26,7 @@ public enum AccountBizTypeEnum implements BaseEnum<String, AccountBizTypeEnum> {
     VIP_COURSE("VIP定制课"),
     DISCOUNT("畅学卡"),
 
+
     LIVE_SHARE("直播课分润"),
     VIDEO_SHARE("视频课分润"),
     MUSIC_SHARE("乐谱分润"),

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseScheduleEnum.java

@@ -16,7 +16,7 @@ public enum CourseScheduleEnum implements BaseEnum<String, CourseScheduleEnum> {
     PRACTICE("趣纠课"),
     LIVE("直播课"),
     PIANO_ROOM_CLASS("琴房课"),
-    VIP("VIP课"),
+    VIP("VIP定制课"),
     //课程状态
     NOT_START("未开始"),
     ING("进行中"),

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -154,6 +154,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     SYS_SUGGEST_FEEDBACK_STUDENT("意见反馈推送"),
     SYS_SUGGEST_FEEDBACK_TEACHER("意见反馈推送"),
+    STUDENT_BUY_COURSE_TO_TEACHER("约课提醒"),
+    STUDENT_BUY_COURSE_TO_STUDENT("约课成功")
     ;
 
     MessageTypeEnum(String msg) {

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/course/CourseTypeEnum.java

@@ -14,6 +14,7 @@ public enum CourseTypeEnum implements BaseEnum<String, CourseTypeEnum> {
     LIVE("直播课"),
     PIANO_ROOM_CLASS("琴房课"),
     VIDEO("视频课"),
+    VIP("VIP课"),
     ;
 
     @EnumValue

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/CouponIssueQueryInfo.java

@@ -60,7 +60,7 @@ public class CouponIssueQueryInfo implements Serializable {
     // 订单金额
     private BigDecimal amount;
 
-    // 可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券
+    // 可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:趣纠课购买券 LIVE:直播课购买券  VIDEO:视频课购买券
     private CouponCategoryEnum couponCategory;
 
     // 可用品类

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -183,7 +183,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
     void refundCancel(UserOrderDetailVo userOrderDetailVo);
 
     /**
-     * 课程组管理-陪练
+     * 课程组管理-趣纠
      *
      * @param page
      * @param search
@@ -192,7 +192,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
     IPage<CourseGroupPracticeVo> selectPracticeGroup(IPage<CourseGroupPracticeVo> page, CourseGroupSearch search);
 
     /**
-     * 课程组管理-陪练课-详情
+     * 课程组管理-趣纠课-详情
      *
      * @param page
      * @param search

+ 9 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java

@@ -7,10 +7,8 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
-import com.yonge.cooleshow.biz.dal.entity.CourseCalendarEntity;
-import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
-import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
-import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
+import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.vo.ArrangeCourseVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseAdjustVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseScheduleRecordVo;
@@ -128,7 +126,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
     List<String> getHoliday(int year);
 
     /**
-     * 生成陪练课日历-用于学生购买指定老师陪练
+     * 生成趣纠课日历-用于学生购买指定老师趣纠
      *
      * @param param 传入参数
      *              <p> - teacherId 老师id
@@ -144,7 +142,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
 
     /**
      * 老师未布置的课程作业数量
-     * 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+     * 趣纠课 课程状态为完成,有学生考勤记录 没有布置作业
      *
      * @param homeworkSearch 查询信息
      * @return number
@@ -238,10 +236,12 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
 
     void practiceSend(Long teacherId, Long studentId, String courseNum, String orderNo);
 
+    void practiceSend(Long teacherId, Long studentId, String courseNum, String orderNo, CourseScheduleEnum type);
+
     void courseRemind();
 
     /**
-     * 发送"当日陪练课未评价/布置作业
+     * 发送"当日趣纠课未评价/布置作业
      * (每晚9点30,已评价/已布置不发)"
      */
     void sendTodayNotRepliedAndNotDecorateHomework();
@@ -291,13 +291,13 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
     CourseScheduleWrapper.LiveRoomTime getLiveCourseScheduleTime(String roomUid);
 
     /**
-     * 购买陪练
+     * 购买趣纠
      *
      */
     void buyPracticeCourse(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo);
 
     /**
-     * 购买陪练课后
+     * 购买趣纠课后
      *
      */
     void buyPracticeCourseAfter(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo);

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleStudentPaymentService.java

@@ -31,7 +31,7 @@ public interface CourseScheduleStudentPaymentService extends IService<CourseSche
     List<LiveCourseInfoVo.CourseBuyStudentVo> queryStudentInfoByGroupId(Map<String, Object> param);
 
     /**
-     * 根据陪练课 课程id查看购买记录
+     * 根据趣纠课 课程id查看购买记录
      *
      * @param courseId 课程id
      * @return 购买记录

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java

@@ -49,7 +49,7 @@ public interface HomeService {
      *
      * @param param 传入参数
      *              <p> - dateTime  如果查询年数据 yyyy   如果查询月数据 yyyy-mm
-     *              <p> - type 类型  PRACTICE陪练课  LIVE直播课
+     *              <p> - type 类型  PRACTICE趣纠课  LIVE直播课
      *              <p> - timeType 时间类型 MONTH、月度 YEAR
      */
     CourseHomeVo queryCourseHomeData(Map<String, Object> param);

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/PaymentDivMemberRecordService.java

@@ -70,7 +70,7 @@ public interface PaymentDivMemberRecordService extends IService<PaymentDivMember
     void musicSheet(UserOrderDetailVo userOrderDetailVo);
 
     /**
-     * 陪练
+     * 趣纠
      */
     void practiceCourse(UserOrderDetailVo userOrderDetailVo);
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentAttendanceService.java

@@ -35,7 +35,7 @@ public interface StudentAttendanceService extends IService<StudentAttendance>  {
 	/**
 	 * 获取学生考勤信息
 	 *
-	 * @param courseType 课程类型 PRACTICE:陪练课、LIVE:直播课
+	 * @param courseType 课程类型 PRACTICE:趣纠课、LIVE:直播课
 	 * @param courseScheduleId 课程id
 	 * @return 考勤对象
 	 */

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherFreeTimeService.java

@@ -21,7 +21,7 @@ public interface TeacherFreeTimeService extends IService<TeacherFreeTime> {
     TeacherFreeTimeDao getDao();
 
     /**
-    * @description: 更新陪练课排课设置
+    * @description: 更新趣纠课排课设置
      * @param teacherFreeTime
     * @return void
     * @author zx

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserPaymentCoreService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
 import com.microsvc.toolkit.middleware.payment.common.api.entity.PaymentResp;
 import com.microsvc.toolkit.middleware.payment.common.api.entity.RefundResp;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -40,6 +41,8 @@ public interface UserPaymentCoreService {
     UserPaymentOrderWrapper.PaymentConfig executeOrderCreate(UserPaymentOrderWrapper.UserPaymentOrder orderReq);
 
 
+    int getActivityCount(Long userId, ClientEnum client, Long activityId);
+
     /**
      * 用户支付请求
      * @param userInfo JwtUserInfo

+ 9 - 35
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java

@@ -7,11 +7,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanDao;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
-import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanPayDto;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
@@ -23,23 +21,13 @@ import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.enums.activity.ActivityRankingMethodEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.vo.ActivityMusicVo;
-import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
-import com.yonge.cooleshow.biz.dal.vo.ActivityRankingVo;
-import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.activity.ActivityTeacherWrapper;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
-import com.yonge.cooleshow.common.enums.ActivityShareEnum;
-import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
-import com.yonge.cooleshow.common.enums.CacheNameEnum;
-import com.yonge.cooleshow.common.enums.EStatus;
-import com.yonge.cooleshow.common.enums.RegistrationMethodEnum;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.cooleshow.common.enums.*;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.base.util.ThreadPool;
@@ -60,13 +48,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
@@ -93,7 +75,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     private ActivityRewardService activityRewardService;
 
     @Resource
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
 
     @Autowired
     private ActivityRegistrationService activityRegistrationService;
@@ -115,7 +97,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     private UserOrderService userOrderService;
 
     @Autowired
-    private RedisCacheService redisCacheService;
+    private UserPaymentCoreService userPaymentCoreService;
 
     @Autowired
     private TeacherService teacherService;
@@ -176,6 +158,9 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         //查询活动奖品
         List<ActivityPlanRewardDto> activityRewardList = activityPlanRewardService.queryActivityPlanReward(id);
         detail.setActivityRewardList(activityRewardList);
+        //获取已购买次数
+        Long userId = sysUserService.getUserId();
+        detail.setBuyNum(userPaymentCoreService.getActivityCount(userId,ClientEnum.STUDENT,id));
         return detail;
     }
 
@@ -677,9 +662,6 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     public HttpResponseResult<OrderCreateRes> orderCreate(OrderReq.OrderReqInfo orderReqInfo) {
 
         log.info("活动购买 参数 --> {}", orderReqInfo);
-
-        // 检查用户
-        getSysUser(orderReqInfo.getUserId());
         ActivityPlanPayDto activityPlanPayDto = JSON.parseObject(
                 JSON.toJSONString(orderReqInfo.getBizContent()), ActivityPlanPayDto.class);
 
@@ -1011,8 +993,6 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
 
         log.info("活动购买 参数 --> {}", JSON.toJSONString(orderGoodsInfo));
 
-        // 检查用户
-        getSysUser(orderGoodsInfo.getUserId());
         ActivityPlanPayDto activityPlanPayDto = JSON.parseObject(
                 JSON.toJSONString(orderGoodsInfo.getBizContent()), ActivityPlanPayDto.class);
 
@@ -1055,7 +1035,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     private void sendMessage(String activityName, Long userId) {
         try {
             //  发送消息
-            SysUser user = sysUserFeignService.queryUserById(userId);
+            SysUser user = sysUserService.getByUserId(userId);
 
             Map<Long, String> receivers = new HashMap<>();
             receivers.put(userId, user.getPhone());
@@ -1084,10 +1064,4 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             throw new BizException("活动已结束");
         }
     }
-
-    private SysUser getSysUser(Long userId) {
-        return Optional.ofNullable(userId)
-                .map(sysUserFeignService::queryUserById)
-                .orElseThrow(() -> new BizException("用户不存在"));
-    }
 }

+ 11 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -243,8 +243,11 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void addLiveCourse(LiveCourseGroupDto dto) {
+        for (CoursePlanDto coursePlanDto : dto.getCoursePlanList()) {
+            coursePlanDto.setFreeEndTime(DateUtil.offsetMinute(coursePlanDto.getStartTime(), dto.getSingleCourseMinutes()));
+        }
         //批量检查老师课时在数据库是否重复
-        batchCheckTeacherCourseTime(dto.getTeacherId(), dto.getCoursePlanList(), CoursePlanDto::getStartTime, CoursePlanDto::getEndTime);
+        batchCheckTeacherCourseTime(dto.getTeacherId(), dto.getCoursePlanList(), CoursePlanDto::getStartTime, CoursePlanDto::getFreeEndTime);
         //获取锁定课时缓存,没有问题就刷新缓存
         RMap<Long, List<CourseTimeEntity>> cacheTime = getExpireLiveLockTimeCache(dto.getTeacherId());
         List<CourseTimeEntity> timeEntities = new ArrayList<>();
@@ -252,6 +255,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             CourseTimeEntity time = new CourseTimeEntity();
             time.setStartTime(o.getStartTime());
             time.setEndTime(o.getEndTime());
+            time.setFreeEndTime(o.getFreeEndTime());
             timeEntities.add(time);
         });
         cacheTime.fastPut(dto.getTeacherId(), timeEntities);
@@ -288,6 +292,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             course.setTeacherId(dto.getTeacherId());
             course.setClassDate(o.getStartTime());
             course.setStartTime(o.getStartTime());
+            course.setFreeEndTime(o.getFreeEndTime());
             course.setEndTime(o.getEndTime());
             course.setCreatedBy(dto.getTeacherId());
             course.setCreatedTime(now);
@@ -561,7 +566,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      */
     @Override
     public List<CourseTimeEntity> lockCourseToCache(CheckCourseTimeDto dto) {
-        // true:陪练课PRACTICE     false:LIVE直播课
+        // true:趣纠课PRACTICE     false:LIVE直播课
         boolean courseTypeFlag = CourseScheduleEnum.existCourseType(dto.getCourseType(), "课程类型不正确!").equals(CourseScheduleEnum.PRACTICE);
         //先自校验传入时间是否交集
         List<CourseTimeEntity> timeList = dto.getTimeList();
@@ -592,7 +597,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         }
         //获取老师锁课缓存
         RMap<Long, List<CourseTimeEntity>> map = getExpireLiveLockTimeCache(dto.getTeacherId());
-        //陪练课/琴房课无需锁定时间
+        //趣纠课/琴房课无需锁定时间
         boolean coursePianoFlag = CourseScheduleEnum.existCourseType(dto.getCourseType(), "课程类型不正确!").equals(CourseScheduleEnum.PIANO_ROOM_CLASS);
         if (!courseTypeFlag && !coursePianoFlag) {
             //直播课添加课时数据
@@ -643,7 +648,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      * @param teacherId      老师id
      * @param totalCourseNum 总课程数量
      * @param paramTimeList  当前课程的时间段
-     * @param courseTypeFlag true:陪练课PRACTICE     false:LIVE直播课
+     * @param courseTypeFlag true:趣纠课PRACTICE     false:LIVE直播课
      * @return 自动排课后的全部课时
      */
     private List<CourseTimeEntity> autoPlanningLiveCourseTime(Long teacherId, int totalCourseNum, List<CourseTimeEntity> paramTimeList, boolean courseTypeFlag) {
@@ -651,11 +656,11 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         boolean skipHoliday = false;
         Long studentId = null;
         if (courseTypeFlag) {
-            //查询老师陪练课设置
+            //查询老师趣纠课设置
             TeacherFreeTime teacherTime = teacherFreeTimeService.getOne(Wrappers.<TeacherFreeTime>lambdaQuery()
                     .eq(TeacherFreeTime::getTeacherId, teacherId)
             );
-            Optional.ofNullable(teacherTime).orElseThrow(() -> new BizException("未查询到老师陪练课设置!"));
+            Optional.ofNullable(teacherTime).orElseThrow(() -> new BizException("未查询到老师趣纠课设置!"));
             skipHoliday = teacherTime.getSkipHolidayFlag();
             studentId = sysUserService.getUserId();
         }

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java

@@ -94,7 +94,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
                                                  .map(CourseHomeworkVo::getCourseId)
                                                  .collect(Collectors.toList());
 
-        // 学生信息 陪练课展示
+        // 学生信息 趣纠课展示
         List<CourseHomeworkVo> studentInfoList;
         if (CollectionUtils.isEmpty(practiceRecordIdList)) {
             studentInfoList = new ArrayList<>();
@@ -232,7 +232,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean decorateCourseHomework(CourseHomeworkSaveDto saveDto) {
-        // 检查 老师 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+        // 检查 老师 趣纠课 课程状态为完成,有学生考勤记录 没有布置作业
         checkCourseSchedule(saveDto.getCourseScheduleId());
 
         // 检查已经布置了课后作业
@@ -310,7 +310,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         if (wordFilter.include(reviewDto.getReview(), 3)) {
             throw new BizException("文本包含敏感信息");
         }
-        // 检查 老师 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+        // 检查 老师 趣纠课 课程状态为完成,有学生考勤记录 没有布置作业
         checkCourseSchedule(reviewDto.getCourseScheduleId());
         // 检查已经布置了课后作业
         if (checkHasHomework(reviewDto.getCourseScheduleId()) == null) {
@@ -352,7 +352,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean submitCourseHomework(CourseHomeworkSubmitDto submitDto) {
-        // 检查 老师 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+        // 检查 老师 趣纠课 课程状态为完成,有学生考勤记录 没有布置作业
         checkCourseSchedule(submitDto.getCourseScheduleId());
 
         // 检查已经布置了课后作业

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java

@@ -61,7 +61,7 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
     }
 
     /**
-     * @Description: 首页-我的课程-课程详情-评价陪练
+     * @Description: 首页-我的课程-课程详情-评价趣纠
      * @Author: cy
      * @Date: 2022/4/12
      */
@@ -116,7 +116,7 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
     }
 
     /**
-     * @Description: 陪练课评价消息推送
+     * @Description: 趣纠课评价消息推送
      * @Author: cy
      * @Date: 2022/5/6
      */
@@ -192,7 +192,7 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
     }
 
     /**
-     * @Description: 当日陪练课未对老师评价(每晚9点,已评价不发)
+     * @Description: 当日趣纠课未对老师评价(每晚9点,已评价不发)
      * @Author: cy
      * @Date: 2022/5/6
      */

+ 291 - 162
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -215,7 +215,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         String ymd = DateUtil.format(startTime, DateUtil.DEFAULT_PATTERN);
         //查询老师当天未开始、进行中的课程
         List<CourseSchedule> list = getTeacherCourseTime(teacherId, ymd, ymd);
-        return checkCourseTime(list, CourseSchedule::getStartTime, CourseSchedule::getEndTime, startTime, endTime);
+        return checkCourseTime(list, CourseSchedule::getStartTime, CourseSchedule::getFreeEndTime, startTime, endTime);
     }
 
     /**
@@ -375,6 +375,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 .in(CourseSchedule::getStatus, statusList)
                 .ge(CourseSchedule::getClassDate, startDate)
                 .le(CourseSchedule::getClassDate, endDate)
+                .orderByAsc(CourseSchedule::getStartTime)
         );
     }
 
@@ -467,7 +468,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * 生成陪练课日历-用于学生购买指定老师陪练
+     * 生成趣纠课日历-用于学生购买指定老师趣纠
      *
      * @param param 传入参数
      *              <p> - teacherId 老师id
@@ -482,31 +483,201 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Long studentId = WrapperUtil.toLong(param, "studentId", "学生id不能为空!");
         Integer year = WrapperUtil.toInt(param, "year", "日历的时间年份不能为空!");
         Integer month = WrapperUtil.toInt(param, "month", "日历的时间月份不能为空!");
+        Integer teacherSubjectPriceId = WrapperUtil.toInt(param, "teacherSubjectPriceId", "老师声部价格ID不能为空!");
 
         //获取开始日期
         LocalDate firstDay = LocalDate.of(year, month, 1);
         //根据firstDay计算出该月的最后一天
         LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth());
-        //查询老师陪练课设置
+        //查询老师趣纠课设置
         TeacherFreeTime teacherTime = teacherFreeTimeService.getOne(Wrappers.<TeacherFreeTime>lambdaQuery()
                 .eq(TeacherFreeTime::getTeacherId, teacherId)
         );
-        Optional.ofNullable(teacherTime).orElseThrow(() -> new BizException("未查询到老师陪练课设置!"));
-        //根据老师设置的陪练课时间生成当月日历
+        TeacherSubjectPrice teacherSubjectPrice = teacherSubjectPriceService.getById(teacherSubjectPriceId);
+
+        Optional.ofNullable(teacherSubjectPrice).orElseThrow(() -> new BizException("未查询到老师课程设置!"));
+        Optional.ofNullable(teacherTime).orElseThrow(() -> new BizException("未查询到老师课程设置!"));
+        //根据老师设置的趣纠课时间生成当月日历
         List<CourseCalendarEntity> courseCalendarEntities = generatePracticeCalendar(teacherTime, firstDay, lastDay);
         //查询老师及当前学生的课时
         Map<String, List<CourseTimeEntity>> nowCourseMap = getAllPracticeCourseTime(teacherId, studentId, firstDay.toString(), lastDay.toString());
         //和生成的日历对比,筛选出空余的课程时间
-        opsCourseCalendarData(nowCourseMap, courseCalendarEntities, teacherTime.getSkipHolidayFlag() ? 1 : 0);
+        opsNewCourseCalendarData(nowCourseMap, courseCalendarEntities, Boolean.TRUE.equals(teacherTime.getSkipHolidayFlag()) ? 1 : 0 ,
+                teacherSubjectPrice.getCourseMinutes(),teacherSubjectPrice.getFreeMinutes());
         return courseCalendarEntities;
     }
 
+    private void opsNewCourseCalendarData(Map<String, List<CourseTimeEntity>> nowCourseMap, List<CourseCalendarEntity> courseCalendarEntities,
+                                          Integer skipHoliday,Integer courseMinutes,Integer freeMinutes) {
+        //储存节假日数据,避免重复查询
+        Map<Integer, List<String>> holidayMap = new HashMap<>();
+        courseCalendarEntities.forEach(calendarEntity -> {
+            //获取课程数据,并剔除交集时间段数据
+            List<CourseTimeEntity> nowCourse = nowCourseMap.get(calendarEntity.getDate());
+            if (CollectionUtils.isEmpty(nowCourse)) {
+                //当日没课
+                calendarEntity.setFullCourse(0);//  0:未满 1满
+            } else {
+                //将日历时间与课程时间进行对比,如果有交集则将日历的时间数据删除
+                if (CollectionUtils.isEmpty(calendarEntity.getCourseTime())) {
+                    return;
+                }
+
+                nowCourse = mergeTime(nowCourse);
+
+                List<CourseTimeEntity> courseTime = new ArrayList<>();
+                Iterator<CourseTimeEntity> iterator = calendarEntity.getCourseTime().iterator();
+                while (iterator.hasNext()) {
+                    CourseTimeEntity next = iterator.next();
+                    // 去除 next 上 有交集的时间段
+                    courseTime.addAll(delOverlapTime(nowCourse, next));
+                }
+
+                // 检查时间段是否满足课程时间,不满足则删除,满足 并且可多段的情况下,将时间段拆分
+                courseTime = splitTime(courseTime,courseMinutes,freeMinutes);
+                calendarEntity.setCourseTime(courseTime);
+
+                //如果日历时间集合数据删没了,那么就证明当天课程已经满了  0:未满 1满
+                if (CollectionUtils.isEmpty(calendarEntity.getCourseTime())) {
+                    calendarEntity.setFullCourse(1);
+                } else {
+                    calendarEntity.setFullCourse(0);
+                }
+            }
+            //获取节假日信息
+            int calendarYear = LocalDate.parse(calendarEntity.getDate()).getYear();
+            List<String> holiday = Optional.of(calendarYear)
+                    .map(holidayMap::get)
+                    .filter(CollectionUtils::isNotEmpty)
+                    .orElseGet(() -> {
+                        List<String> list = getHoliday(calendarYear);
+                        holidayMap.put(calendarYear, list);
+                        return list;
+                    });
+            //是否是节假日 1是 0:不是
+            int holidayFlag = holiday.contains(calendarEntity.getDate()) ? 1 : 0;
+            calendarEntity.setHoliday(holidayFlag);
+
+            //是节假日又有需要跳过节假日
+            if (holidayFlag == 1 && skipHoliday == 1) {
+                calendarEntity.setSkipHoliday(1);//跳过节假日
+                calendarEntity.setCourseTime(null);//清空课程时间
+            } else {
+                calendarEntity.setSkipHoliday(0);//不跳过节假日
+            }
+        });
+    }
+
+    // 检查时间段是否满足课程时间,不满足则删除,满足 并且可多段的情况下,将时间段拆分
+    private List<CourseTimeEntity> splitTime(List<CourseTimeEntity> courseTime, Integer courseMinutes,Integer freeMinutes) {
+        Integer mergeMinutes = courseMinutes + freeMinutes;
+        List<CourseTimeEntity> result = new ArrayList<>();
+        for (CourseTimeEntity courseTimeEntity : courseTime) {
+            if (courseTimeEntity.getEndTime().getTime() - courseTimeEntity.getStartTime().getTime() >= mergeMinutes * 60 * 1000) {
+                long time = courseTimeEntity.getEndTime().getTime() - courseTimeEntity.getStartTime().getTime();
+                long startTime = courseTimeEntity.getStartTime().getTime();
+                while (time >= mergeMinutes * 60 * 1000) {
+                    CourseTimeEntity entity = new CourseTimeEntity();
+                    entity.setStartTime(new Date(startTime));
+                    entity.setEndTime(new Date(startTime + courseMinutes * 60 * 1000));
+                    result.add(entity);
+                    startTime = startTime + mergeMinutes * 60 * 1000;
+                    time = time - mergeMinutes * 60 * 1000;
+                }
+            }
+        }
+        return result;
+    }
+
+    private List<CourseTimeEntity> delOverlapTime(List<CourseTimeEntity> nowCourse, CourseTimeEntity next) {
+        List<CourseTimeEntity> result = new ArrayList<>();
+        result.addAll(getPlanTime(nowCourse,next));
+        return result;
+    }
+
+    /**
+     *
+     * 获取可排课时间段
+     * @param timeList 已被使用时间
+     * @param time 待排课时间
+     *
+      */
+    private  List<CourseTimeEntity> getPlanTime(List<CourseTimeEntity> timeList, CourseTimeEntity time) {
+        List<CourseTimeEntity> result = new ArrayList<>(timeList);
+        if (CollectionUtils.isEmpty(timeList)) {
+            result.add(time);
+            return result;
+        }
+        for (CourseTimeEntity trainingPlanTimeDetail : timeList) {
+            if (time.getStartTime().compareTo(trainingPlanTimeDetail.getStartTime()) < 0) {
+                if (time.getEndTime().compareTo(trainingPlanTimeDetail.getStartTime()) <= 0) {
+                    result.add(time);
+                    return result;
+                } else if (time.getEndTime().compareTo(trainingPlanTimeDetail.getEndTime()) <= 0) {
+                    CourseTimeEntity trainingPlanTimeDetail1 = new CourseTimeEntity();
+                    trainingPlanTimeDetail1.setStartTime(time.getStartTime());
+                    trainingPlanTimeDetail1.setEndTime(trainingPlanTimeDetail.getStartTime());
+                    result.add(trainingPlanTimeDetail1);
+                    return result;
+                } else {
+                    CourseTimeEntity trainingPlanTimeDetail1 = new CourseTimeEntity();
+                    trainingPlanTimeDetail1.setStartTime(time.getStartTime());
+                    trainingPlanTimeDetail1.setEndTime(trainingPlanTimeDetail.getStartTime());
+                    result.add(trainingPlanTimeDetail1);
+                    time.setStartTime(trainingPlanTimeDetail.getEndTime());
+                }
+            } else if (time.getStartTime().compareTo(trainingPlanTimeDetail.getEndTime()) <= 0) {
+                if (time.getEndTime().compareTo(trainingPlanTimeDetail.getEndTime()) > 0) {
+                    time.setStartTime(trainingPlanTimeDetail.getEndTime());
+                } else {
+                    return result;
+                }
+            }
+        }
+        if (time.getStartTime().compareTo(time.getEndTime()) < 0) {
+            result.add(time);
+        }
+        return result;
+    }
+
+    // 将多个时间段合并
+    private List<CourseTimeEntity> mergeTime(List<CourseTimeEntity> timeList) {
+        List<CourseTimeEntity> result = new ArrayList<>();
+
+        // 按开始时间排序
+        timeList.sort(Comparator.comparing(CourseTimeEntity::getStartTime));
+
+        // 从第一个开始
+        CourseTimeEntity time = timeList.get(0);
+        for (int i = 1; i < timeList.size(); i++) {
+            CourseTimeEntity nextTime = timeList.get(i);
+            // 如果下一个时间段的开始时间小于等于上一个时间段的结束时间
+            if (nextTime.getStartTime().compareTo(time.getEndTime()) <= 0 ) {
+                // 合并时间段
+                if (nextTime.getEndTime().compareTo(time.getEndTime()) >= 0) {
+                    time.setEndTime(nextTime.getEndTime());
+                }
+            } else {
+                // 保存上一个时间段
+                result.add(time);
+                // 重置时间段
+                if (nextTime.getEndTime().compareTo(time.getEndTime()) >= 0) {
+                    time = nextTime;
+                }
+            }
+        }
+        // 保存最后一个时间段
+        result.add(time);
+
+        return result;
+    }
+
     /**
-     * 生成老师陪练课日历
-     * <p>陪练课的日历需要查询老师设置的陪练课时间,根据设置的时间来生成日历
+     * 生成老师趣纠课日历
+     * <p>趣纠课的日历需要查询老师设置的趣纠课时间,根据设置的时间来生成日历
      */
     private List<CourseCalendarEntity> generatePracticeCalendar(TeacherFreeTime teacherTime, LocalDate firstDay, LocalDate lastDay) {
-        //将老师设置的陪练课时间结构化   key::数字周几 1~7  value:具体的时间 开始时间-结束时间
+        //将老师设置的趣纠课时间结构化   key::数字周几 1~7  value:具体的时间 开始时间-结束时间
         Map<Integer, JSONArray> teacherPracticeTime = getTeacherPracticeTime(teacherTime);
         //每日日期数据
         List<CourseCalendarEntity> list = new ArrayList<>();
@@ -577,13 +748,13 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * 将老师设置的陪练课时间结构化
+     * 将老师设置的趣纠课时间结构化
      *
      * @return key::数字周几 1~7  value:具体的时间 开始时间-结束时间
      */
     private Map<Integer, JSONArray> getTeacherPracticeTime(TeacherFreeTime teacherTime) {
         Map<Integer, JSONArray> teacherPracticeTime = new HashMap<>();
-        //将老师设置的陪练课时间放入map中
+        //将老师设置的趣纠课时间放入map中
         BiConsumer<String, Integer> timeCon = (timeStr, weekNum) -> {
             Optional.ofNullable(timeStr)
                     .map(JSONObject::parseArray)
@@ -621,6 +792,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         param.put("endClassDate", endDate);
         param.put("statusList", Lists.newArrayList(CourseScheduleEnum.NOT_START.getCode(), CourseScheduleEnum.ING.getCode()));
         List<CourseSchedule> studentCourse = baseMapper.queryStudentCourse(param);
+        // 学生不计算课间时间
+        studentCourse.forEach(course -> {
+            course.setFreeEndTime(course.getEndTime());
+        });
+
         //将数据合并
         if (CollectionUtils.isNotEmpty(studentCourse)) {
             courseList.addAll(studentCourse);
@@ -662,7 +838,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                         v.forEach(course -> {
                             CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
                             courseTimeEntity.setStartTime(course.getStartTime());
-                            courseTimeEntity.setEndTime(course.getEndTime());
+                            courseTimeEntity.setEndTime(course.getFreeEndTime());
                             value.add(courseTimeEntity);
                         });
                         nowCourse.put(DateUtil.dateToString(k), value);
@@ -673,7 +849,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
 
     /**
-     * 老师端-首页-我的课程-陪练
+     * 老师端-首页-我的课程-趣纠
      * search:{"classMonth":"2022-03","status":"COMPLETE","subjectId":1}
      * <p>
      * 老师端-首页-课后评价
@@ -686,7 +862,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * search:{"classDate":"2022-03-27"}
      * search:{"classMonth":"2022-03"}
      * <p>
-     * 老师端-课表-陪练
+     * 老师端-课表-趣纠
      * search:{"classDate":"2022-03-27"}
      *
      * @Description: 根据老师id查询购课学员
@@ -727,7 +903,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     @Override
     public Integer countTeacherNoDecorateHomework(HomeworkSearch homeworkSearch) {
 
-        // 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+        // 趣纠课 课程状态为完成,有学生考勤记录 没有布置作业
         return baseMapper.countTeacherNoDecorateHomework(homeworkSearch);
     }
 
@@ -774,7 +950,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
         List<MyCourseVo> records = baseMapper.queryStudentPracticeCourse(page, monthToDate(search));
 
-        // 陪练课老师IM聊天ID
+        // 趣纠课老师IM聊天ID
         if (CollectionUtils.isNotEmpty(records)) {
 
             for (MyCourseVo item : records) {
@@ -841,7 +1017,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         sysConfig.put("vipEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_VIP_ROOM_MINUTE));
         //提前XX分钟创建/进入陪练课房间时间
         sysConfig.put("practiceStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
-        //陪练课结束后,XX分钟关闭房间
+        //趣纠课结束后,XX分钟关闭房间
         sysConfig.put("practiceEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
         //提前XX分钟创建/进入直播房间的时间
         sysConfig.put("liveStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE));
@@ -859,7 +1035,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * @Description: 学生端-首页-陪练课老师列表
+     * @Description: 学生端-首页-趣纠课老师列表
      * @Author: cy
      * @Date: 2022/4/19
      */
@@ -895,9 +1071,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         }
 
         Map<String, String> sysConfig = new HashMap<>();
-        //提前XX分钟创建/进入陪练课房间时间
+        //提前XX分钟创建/进入趣纠课房间时间
         sysConfig.put("practiceStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
-        //陪练课结束后,XX分钟关闭房间
+        //趣纠课结束后,XX分钟关闭房间
         sysConfig.put("practiceEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
         //提前XX分钟创建/进入直播房间的时间
         sysConfig.put("liveStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE));
@@ -967,7 +1143,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * @Description: 陪练课购买记录
+     * @Description: 趣纠课购买记录
      * @Author: cy
      * @Date: 2022/5/16
      */
@@ -984,34 +1160,22 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         List<CourseScheduleDate> dateList = scheduleDto.getClassTime();
         Integer courseNum = scheduleDto.getCourseNum();//课程数
 
+        if (scheduleDto.getTeacherSubjectPriceId() ==null) {
+            throw new BizException("老师声部价格ID不能为空");
+        }
         //校验课时数
         if (dateList.size() != courseNum) {
             throw new BizException("课程数与课时数不符");
         }
-        BigDecimal price = baseMapper.selectPrice(scheduleDto.getTeacherId(), scheduleDto.getSubjectId());//老师设置声部价格
+        TeacherSubjectPrice teacherSubjectPrice = teacherSubjectPriceService.getById(scheduleDto.getTeacherSubjectPriceId());//老师设置声部价格
         BigDecimal decimal = new BigDecimal(courseNum);//选购课程节数
-        BigDecimal multiply = price.multiply(decimal);//预计总价
+        BigDecimal multiply = teacherSubjectPrice.getSubjectPrice().multiply(decimal);//预计总价
         if (multiply.compareTo(scheduleDto.getCoursePrice()) != 0) {
             throw new BizException("价格异常。预计价格:{},实际价格:{}", multiply, orderReqInfo.getActualPrice());
         }
 
         //获取老师锁课缓存
-        RMap<Long, List<CourseTimeEntity>> map = courseGroupService.getExpireLiveLockTimeCache(scheduleDto.getTeacherId());
-        if (map.isExists()) {
-            List<CourseTimeEntity> courseTimeCache = map.get(scheduleDto.getTeacherId());
-            //校验缓存中的时间和当前自动生成的时间有没有重复
-            dateList.forEach(item ->
-            {
-                if (checkCourseTime(courseTimeCache, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime, item.getStartTime(), item.getEndTime())) {
-                    throw new BizException("与缓存中时间存在冲突");
-                }
-            });
-        }
-
-        //批量检查老师课时在数据库是否重复
-        batchCheckTeacherCourseTime(scheduleDto.getTeacherId(), dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
-        //批量检查学生课时在数据库是否重复
-        batchCheckStudentCourseTime(studentId, dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
+        checkCourseTime(scheduleDto, dateList, studentId);
 
         String orderNo = orderReqInfo.getOrderNo();
         scheduleDto.setType(CourseScheduleEnum.PRACTICE.getCode());
@@ -1024,10 +1188,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Long groupId = scheduleDto.getGroupId();
 
         //根据老师id获取默认配置声部原价
-        TeacherSubjectPrice teacherSubjectPrice = teacherSubjectPriceService.lambdaQuery()
-                .eq(TeacherSubjectPrice::getTeacherId, scheduleDto.getTeacherId())
-                .eq(TeacherSubjectPrice::getSubjectId, scheduleDto.getSubjectId())
-                .eq(TeacherSubjectPrice::getCourseType, CourseScheduleEnum.PRACTICE.getCode()).one();
         BigDecimal subjectPrice = teacherSubjectPrice.getSubjectPrice();
 
         //每课实际价格
@@ -1080,7 +1240,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * @Description: 学生购买陪练
+     * @Description: 学生购买趣纠
      * @Author: cy
      * @Date: 2022/4/21
      */
@@ -1094,7 +1254,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 return buyPracticeCourseTran(orderReqInfo);
             }
         } catch (InterruptedException e) {
-            throw new BizException("创建陪练课失败:{}", e.getMessage());
+            throw new BizException("创建趣纠课失败:{}", e.getMessage());
         } finally {
             if (lock.isLocked() && lock.isHeldByCurrentThread()) {
                 lock.unlock();
@@ -1104,7 +1264,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * 学生购买陪练课-成功-回调
+     * 学生购买趣纠课-成功-回调
      */
     @Transactional(rollbackFor = Exception.class)
     public void buyPracticeCourseSuccess(UserOrderDetailVo orderParam) {
@@ -1122,7 +1282,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         warp.set("status_", "ING").eq("id_", paymentList.get(0).getCourseGroupId());
         courseGroupService.update(warp);
 
-        //查询陪练课服务费
+        //查询趣纠课服务费
         String practiceServiceRateStr = sysConfigService.findConfigValue(SysConfigConstant.PRACTICE_SERVICE_FEE);
         BigDecimal practiceServiceRate = new BigDecimal(practiceServiceRateStr).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
 
@@ -1182,7 +1342,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         try {
             practiceSend(paymentList.get(0).getTeacherId(), orderParam.getUserId(), paymentList.size() + "", orderNo);
         } catch (Exception e) {
-            log.error("陪练课消息推送失败");
+            log.error("趣纠课消息推送失败");
         }
     }
 
@@ -1213,7 +1373,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * 学生购买陪练课-失败-回调
+     * 学生购买趣纠课-失败-回调
      */
     @Transactional(rollbackFor = Exception.class)
     public void buyPracticeCourseFailed(UserOrderDetailVo orderParam) {
@@ -1314,9 +1474,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         sendCourseAdjustMessage(teacherId,studentPayment.getUserId(),adjustVo.getCourseId(),adjustVo.getStartTime());
     }
 
-    //{老师昵称}已将{课程类型陪练课、琴房课}{课程名称}课调整到{上课时间yyyy-MM-dd HH:mm:ss},请注意查看
+    //{老师昵称}已将{课程类型趣纠课、琴房课}{课程名称}课调整到{上课时间yyyy-MM-dd HH:mm:ss},请注意查看
     private void sendCourseAdjustMessage(Long teacherId,Long studentId,Integer courseScheduleId,Date date) {
-        //  陪练课调整模板
+        //  趣纠课调整模板
         try {
             //  发送消息
             SysUser teacher = sysUserService.getByUserId(teacherId);
@@ -1334,10 +1494,10 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             receivers.put(studentId, student.getPhone());
 
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_ADJUST, receivers, null,
-                                               0, null, ClientEnum.STUDENT.getCode(), teacher.getUsername(),"陪练课",courseName,dateString);
+                                               0, null, ClientEnum.STUDENT.getCode(), teacher.getUsername(),"趣纠课",courseName,dateString);
 
         } catch (Exception e) {
-            log.error("陪练课调整发送消息失败--> {}", e.fillInStackTrace());
+            log.error("趣纠课调整发送消息失败--> {}", e.fillInStackTrace());
         }
     }
 
@@ -1364,7 +1524,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             homePage.setRecentCourses(baseMapper.selectRecentCourses(studentId));
         }
         if (studentId == null) {
-            //vip课和陪练
+            //vip课和趣纠
             StudentHomePage.RecentCourses coursesPractice = baseMapper.selectRecentCoursesPractice(teacherId);
             StudentHomePage.RecentCourses coursesLive = baseMapper.selectRecentCoursesLive(teacherId);//直播课&琴房课共用coursesLive
 
@@ -1390,14 +1550,14 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * @Description: 查询老师陪练课配置
+     * @Description: 查询老师趣纠课配置
      * @Author: cy
      * @Date: 2022/4/26
      */
     public List<TeacherSubjectPrice> teacherSubjectPrice(Long teacherId) {
         TeacherFreeTime teacherFreeTime = teacherFreeTimeService.lambdaQuery().eq(TeacherFreeTime::getTeacherId, teacherId).one();
         if (teacherFreeTime == null) {
-            log.info("未查到陪练课配置,老师id:{}", teacherId);
+            log.info("未查到趣纠课配置,老师id:{}", teacherId);
             return new ArrayList<>();
         }
 
@@ -1449,18 +1609,23 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                         teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
                         info.getRepliedNum(), info.getDecorateNum());
             } catch (Exception e) {
-                log.warn("老师当日陪练课未评价/布置作业消息发送失败,{}", e.getMessage());
+                log.warn("老师当日趣纠课未评价/布置作业消息发送失败,{}", e.getMessage());
             }
         }
     }
 
+
+    @Override
+    public void practiceSend(Long teacherId, Long studentId, String courseNum, String orderNo) {
+        practiceSend(teacherId, studentId, courseNum, orderNo, CourseScheduleEnum.PRACTICE);
+    }
     /**
-     * @Description: 购买陪练课消息推送
+     * @Description: 购买趣纠课消息推送
      * @Author: cy
      * @Date: 2022/5/6
      */
     @Override
-    public void practiceSend(Long teacherId, Long studentId, String courseNum, String orderNo) {
+    public void practiceSend(Long teacherId, Long studentId, String courseNum, String orderNo, CourseScheduleEnum type) {
         //查询老师&学生信息
         SysUser teacher = sysUserService.getByUserId(teacherId);
         SysUser student = sysUserService.getByUserId(studentId);
@@ -1470,51 +1635,14 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         teacherReceivers.put(teacherId, teacher.getPhone());
         Map<Long, String> studentReceivers = new HashMap<>();
         studentReceivers.put(studentId, student.getPhone());
-        Map<Long, String> teacherSms = new HashMap<>();
-        teacherSms.put(teacherId, teacher.getPhone());
-        Map<Long, String> studentSms = new HashMap<>();
-        studentSms.put(studentId, student.getPhone());
-
-        //老师端-学生买陪练课
-        String teacherUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.STUDENT_BUY_PRACTICE.getCode());
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_BUY_PRACTICE,
-                teacherReceivers, null, 0, teacherUrl, ClientEnum.TEACHER.getCode(),
-                student.getUsername(), courseNum);
-        log.info("send success {}", MessageTypeEnum.STUDENT_BUY_PRACTICE);
-
-        //老师端-学生买陪练课(短信)
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_STUDENT_BUY_PRACTICE,
-                teacherSms, null, 0, null, null,
-                student.getUsername(), courseNum);
-        log.info("send success {}", MessageTypeEnum.SMS_STUDENT_BUY_PRACTICE);
-
-        //学生端-买陪练课
-        String studentUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.PRACTICE_BUY.getCode());
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_BUY,
-                studentReceivers, null, 0, studentUrl, ClientEnum.STUDENT.getCode(),
-                teacher.getUsername(), courseNum);
-        log.info("send success {}", MessageTypeEnum.PRACTICE_BUY);
-
-        //学生端-买陪练课(短信)
-        String studentSmsUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.SMS_PRACTICE_BUY.getCode());
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_PRACTICE_BUY,
-                studentSms, null, 0, null, null,
-                teacher.getUsername(), courseNum, studentSmsUrl);
-        log.info("send success {}", MessageTypeEnum.SMS_PRACTICE_BUY);
-
-        List<String> startTimeList = baseMapper.selectStartTime(orderNo);
-        for (String startTime : startTimeList) {
-            //老师端-陪练课开课提醒
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PRACTICE_REMINDER,
-                    teacherReceivers, DateUtil.offsetMinute(startTime, -20), 0, null, ClientEnum.TEACHER.getCode(),
-                    student.getUsername());
-
-            //学生端-陪练课开课提醒
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_REMIND,
-                    studentReceivers, DateUtil.offsetMinute(startTime, -20), 0, null, ClientEnum.STUDENT.getCode(),
-                    teacher.getUsername());
-        }
-        log.info("send success {}", MessageTypeEnum.PRACTICE_REMIND);
+
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_BUY_COURSE_TO_STUDENT,
+                studentReceivers, null, 0, null, ClientEnum.STUDENT.getCode(),
+                teacher.getUsername(), courseNum,type.getMsg());
+
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_BUY_COURSE_TO_TEACHER,
+                teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
+                student.getUsername(), courseNum,type.getMsg());
     }
 
     /**
@@ -1572,9 +1700,13 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      */
     public Map<String, String> selectRoomConfig() {
         Map<String, String> sysConfig = new HashMap<>();
+        //提前XX分钟创建/进入VIP课房间时间
+        sysConfig.put("vipStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_VIP_ROOM_MINUTE));
+        //VIP课结束后,XX分钟关闭房间
+        sysConfig.put("vipEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_VIP_ROOM_MINUTE));
         //提前XX分钟创建/进入陪练课房间时间
         sysConfig.put("practiceStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
-        //陪练课结束后,XX分钟关闭房间
+        //趣纠课结束后,XX分钟关闭房间
         sysConfig.put("practiceEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
         //提前XX分钟创建/进入直播房间的时间
         sysConfig.put("liveStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE));
@@ -1775,7 +1907,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         List<CourseScheduleStudentVo> userList = paymentDao.selectUser();
         if (CollectionUtils.isNotEmpty(userList)) {
             List<CourseScheduleStudentVo> practiceList = userList.stream().filter(s -> s.getType().equals(CourseScheduleEnum.PRACTICE.getCode())).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(practiceList)) {//陪练
+            if (CollectionUtils.isNotEmpty(practiceList)) {//趣纠
                 //老师课酬状态改为待结算
                 courseScheduleTeacherSalaryService.update(null, Wrappers.<CourseScheduleTeacherSalary>lambdaUpdate()
                         .set(CourseScheduleTeacherSalary::getStatus, TeacherSalaryEnum.WAIT.getCode())
@@ -1952,6 +2084,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Integer consumTime = classNum * singleClassTime * n;//消耗时长 课程数*单课时长*人数
 
         List<CourseTimeEntity> timeList = arrangeCourseVo.getTimeList();//选课时间
+        for (CourseTimeEntity courseTimeEntity : timeList) {
+            courseTimeEntity.setFreeEndTime(DateUtil.offsetMinute(courseTimeEntity.getEndTime(), arrangeCourseVo.getCourseFreeMinutes()));
+        }
         Integer consumeTime = arrangeCourseVo.getConsumeTime();
 
         log.info("classNum:" + classNum);
@@ -2016,7 +2151,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 }
                 CourseTimeEntity o = timeList.get(i);
                 List<CourseTimeEntity> newList = timeList.subList(i + 1, timeList.size());
-                boolean checkParamTime = this.checkCourseTime(newList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime, o.getStartTime(), o.getEndTime());
+                boolean checkParamTime = this.checkCourseTime(newList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime, o.getStartTime(), o.getFreeEndTime());
                 if (checkParamTime) {
                     throw new BizException(DateUtil.dateToString(o.getStartTime(), "yyyy年MM月dd号 HH点mm分") + "的课程时间重复!");
                 }
@@ -2024,7 +2159,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         }
 
         //批量检查老师课时在数据库是否重复
-        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
+        this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getFreeEndTime);
 
         //校验购买的课程组每节课时间是否和自己的课时冲突
         for (Long studentId : studentIds) {
@@ -2054,6 +2189,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             schedule.setClassDate(DateUtil.trunc(courseTimeEntity.getStartTime()));
             schedule.setStartTime(courseTimeEntity.getStartTime());
             schedule.setEndTime(courseTimeEntity.getEndTime());
+            schedule.setFreeEndTime(courseTimeEntity.getFreeEndTime());
             schedule.setLock(0);
             schedule.setStatus(CourseScheduleEnum.NOT_START.getCode());
             schedule.setCreatedBy(teacherId);
@@ -2482,47 +2618,37 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
 
     /**
-     * 购买陪练课后
+     * 购买趣纠课后
      *
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void buyPracticeCourseAfter(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo) {
+        CourseScheduleEnum courseScheduleEnum = null;
+        if (orderGoodsInfo.getGoodType() == GoodTypeEnum.PRACTICE) {
+            courseScheduleEnum = CourseScheduleEnum.PRACTICE;
+        } else if (orderGoodsInfo.getGoodType() == GoodTypeEnum.VIP_COURSE) {
+            courseScheduleEnum = CourseScheduleEnum.VIP;
+        } else {
+            throw new BizException("课程类型错误");
+        }
 
         ObjectMapper objectMapper = new ObjectMapper();
         PracticeScheduleDto scheduleDto = objectMapper.convertValue(orderGoodsInfo.getBizContent(), PracticeScheduleDto.class);
         List<CourseScheduleDate> dateList = scheduleDto.getClassTime();
-        Integer courseNum = scheduleDto.getCourseNum();//课程数
 
-        //校验课时数
-        if (dateList.size() != courseNum) {
-            throw new BizException("课程数与课时数不符");
+        TeacherSubjectPrice teacherSubjectPrice = teacherSubjectPriceService.getById(scheduleDto.getTeacherSubjectPriceId());//老师设置声部价格
+        for (CourseScheduleDate courseScheduleDate : dateList) {
+            courseScheduleDate.setFreeEndTime(DateUtil.offsetMinute(courseScheduleDate.getEndTime(), teacherSubjectPrice.getFreeMinutes()));
         }
 
         RLock lock = redissonClient.getLock("teacherId:" + scheduleDto.getTeacherId());
         try {
             if (lock.tryLock(10, 60, TimeUnit.SECONDS)) {
-                //获取老师锁课缓存
-                RMap<Long, List<CourseTimeEntity>> map = courseGroupService.getExpireLiveLockTimeCache(scheduleDto.getTeacherId());
-                if (map.isExists()) {
-                    List<CourseTimeEntity> courseTimeCache = map.get(scheduleDto.getTeacherId());
-                    //校验缓存中的时间和当前自动生成的时间有没有重复
-                    dateList.forEach(item ->
-                    {
-                        if (checkCourseTime(courseTimeCache, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime, item.getStartTime(), item.getEndTime())) {
-                            throw new BizException("与缓存中时间存在中途");
-                        }
-                    });
-                }
-
-                //批量检查老师课时在数据库是否重复
-                batchCheckTeacherCourseTime(scheduleDto.getTeacherId(), dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
-                //批量检查学生课时在数据库是否重复
-                batchCheckStudentCourseTime(orderGoodsInfo.getUserId(), dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
-
+                checkCourseTime(scheduleDto, dateList, orderGoodsInfo.getUserId());
 
                 String orderNo = orderGoodsInfo.getOrderNo();
-                scheduleDto.setType(CourseScheduleEnum.PRACTICE.getCode());
+                scheduleDto.setType(courseScheduleEnum.getCode());
                 scheduleDto.setStatus(CourseGroupEnum.NOT_SALE.getCode());
                 scheduleDto.setMixStudentNum(1);
                 scheduleDto.setStudentId(orderGoodsInfo.getUserId());
@@ -2531,11 +2657,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 baseMapper.addCourseGroup(scheduleDto);
                 Long groupId = scheduleDto.getGroupId();
 
-                //根据老师id获取默认配置声部原价
-                TeacherSubjectPrice teacherSubjectPrice = teacherSubjectPriceService.lambdaQuery()
-                        .eq(TeacherSubjectPrice::getTeacherId, scheduleDto.getTeacherId())
-                        .eq(TeacherSubjectPrice::getSubjectId, scheduleDto.getSubjectId())
-                        .eq(TeacherSubjectPrice::getCourseType, CourseScheduleEnum.PRACTICE.getCode()).one();
                 BigDecimal subjectPrice = teacherSubjectPrice.getSubjectPrice();
 
                 //每课实际价格
@@ -2549,8 +2670,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                     schedule.setClassDate(date.getClassDate());
                     schedule.setStartTime(date.getStartTime());
                     schedule.setEndTime(date.getEndTime());
+                    schedule.setFreeEndTime(date.getFreeEndTime());
                     schedule.setCourseGroupId(groupId);
-                    schedule.setType(CourseScheduleEnum.PRACTICE.getCode());
+                    schedule.setType(courseScheduleEnum.getCode());
                     schedule.setClassNum(i + 1);
                     schedule.setTeacherId(scheduleDto.getTeacherId());
                     schedule.setLock(1);
@@ -2564,7 +2686,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                     payment.setUserId(scheduleDto.getStudentId());
                     payment.setCourseId(scheduleId);
                     payment.setCourseGroupId(groupId);
-                    payment.setCourseType(CourseScheduleEnum.PRACTICE.getCode());
+                    payment.setCourseType(courseScheduleEnum.getCode());
                     payment.setOrderNo(orderNo);
                     payment.setOriginalPrice(subjectPrice);//原价
                     payment.setExpectPrice(subjectPrice);//预计价格
@@ -2574,7 +2696,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 }
             }
         } catch (InterruptedException e) {
-            throw new BizException("创建陪练课失败:{}", e.getMessage());
+            throw new BizException("创建课失败:{}", e.getMessage());
         } finally {
             if (lock.isLocked() && lock.isHeldByCurrentThread()) {
                 lock.unlock();
@@ -2637,6 +2759,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> userMap = sysUserService.getMapByIds(studentIds);
         List<CourseScheduleWrapper.MyCourseVo> courseVos = Lists.newArrayList();
         CourseGroup courseGroup = courseGroupService.lambdaQuery().eq(CourseGroup::getId, query.getCourseGroupId()).one();
+        Subject subject = subjectService.get(courseGroup.getSubjectId());
         for (CourseSchedule courseSchedule : courseSchedules) {
             CourseScheduleWrapper.MyCourseVo courseVo = new CourseScheduleWrapper.MyCourseVo();
             courseVo.setCourseId(courseSchedule.getId());
@@ -2646,6 +2769,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             courseVo.setStatus(courseSchedule.getStatus());
             courseVo.setCourseGoupId(courseGroup.getId());
             courseVo.setCourseGroupName(courseGroup.getName());
+            courseVo.setSubjectId(courseGroup.getSubjectId());
+            courseVo.setSubjectName(subject.getName());
             if(query.getAttendanceStatus() == null){
                 courseVo.setAttendanceStatus(attendanceList.stream().anyMatch(studentAttendance -> studentAttendance.getCourseScheduleId().equals(courseSchedule.getId())));
             }else {
@@ -2753,6 +2878,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
     private UserOrderDetail buyPracticeCourseTranV2(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo) {
         log.info("buyPracticeCourse  param:{}", JSON.toJSONString(orderGoodsInfo));
+
         Long studentId = orderGoodsInfo.getUserId();
 
         //校验学生信息
@@ -2762,12 +2888,34 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         PracticeScheduleDto scheduleDto = objectMapper.convertValue(orderGoodsInfo.getBizContent(), PracticeScheduleDto.class);
         List<CourseScheduleDate> dateList = scheduleDto.getClassTime();
         Integer courseNum = scheduleDto.getCourseNum();//课程数
-
+        if (scheduleDto.getTeacherSubjectPriceId() ==null) {
+            throw new BizException("老师声部价格ID不能为空");
+        }
         //校验课时数
         if (dateList.size() != courseNum) {
             throw new BizException("课程数与课时数不符");
         }
+        checkCourseTime(scheduleDto, dateList, studentId);
+
+        TeacherSubjectPrice teacherSubjectPrice = teacherSubjectPriceService.getById(scheduleDto.getTeacherSubjectPriceId());//老师设置声部价格
+        BigDecimal decimal = new BigDecimal(courseNum);//选购课程节数
+        BigDecimal multiply = teacherSubjectPrice.getSubjectPrice().multiply(decimal);//预计总价
+
+        UserOrderDetail userOrderDetail = JSON.parseObject(JSON.toJSONString(orderGoodsInfo), UserOrderDetail.class);
+
+        userOrderDetail.setGoodUrl(userOrderService.getGoodUrlByType(orderGoodsInfo.getGoodType()));
+        userOrderDetail.setMerchId(scheduleDto.getTeacherId());
+        userOrderDetail.setGoodNum(scheduleDto.getCourseNum());
+        userOrderDetail.setOriginalPrice(multiply);
+        userOrderDetail.setCouponAmount(BigDecimal.ZERO);
+        userOrderDetail.setExpectPrice(multiply);
+        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
+        log.info("buyPracticeCourse  return {}", userOrderDetail);
+        return userOrderDetail;
+    }
+
+    private void checkCourseTime(PracticeScheduleDto scheduleDto, List<CourseScheduleDate> dateList, Long studentId) {
         //获取老师锁课缓存
         RMap<Long, List<CourseTimeEntity>> map = courseGroupService.getExpireLiveLockTimeCache(scheduleDto.getTeacherId());
         if (map.isExists()) {
@@ -2775,35 +2923,16 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             //校验缓存中的时间和当前自动生成的时间有没有重复
             dateList.forEach(item ->
             {
-                if (checkCourseTime(courseTimeCache, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime, item.getStartTime(), item.getEndTime())) {
+                if (checkCourseTime(courseTimeCache, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime, item.getStartTime(), item.getFreeEndTime())) {
                     throw new BizException("与缓存中时间存在冲突");
                 }
             });
         }
 
         //批量检查老师课时在数据库是否重复
-        batchCheckTeacherCourseTime(scheduleDto.getTeacherId(), dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
+        batchCheckTeacherCourseTime(scheduleDto.getTeacherId(), dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getFreeEndTime);
         //批量检查学生课时在数据库是否重复
         batchCheckStudentCourseTime(studentId, dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
-
-
-        BigDecimal price = baseMapper.selectPrice(scheduleDto.getTeacherId(), scheduleDto.getSubjectId());//老师设置声部价格
-        BigDecimal decimal = new BigDecimal(courseNum);//选购课程节数
-        BigDecimal multiply = price.multiply(decimal);//预计总价
-
-        UserOrderDetail userOrderDetail = JSON.parseObject(JSON.toJSONString(orderGoodsInfo), UserOrderDetail.class);
-
-        userOrderDetail.setGoodUrl(userOrderService.getGoodUrlByType(orderGoodsInfo.getGoodType()));
-        userOrderDetail.setMerchId(scheduleDto.getTeacherId());
-        userOrderDetail.setGoodNum(scheduleDto.getCourseNum());
-        userOrderDetail.setOriginalPrice(multiply);
-        userOrderDetail.setCouponAmount(BigDecimal.ZERO);
-        userOrderDetail.setExpectPrice(multiply);
-        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
-
-
-        log.info("buyPracticeCourse  return {}", userOrderDetail);
-        return userOrderDetail;
     }
 
     @Override

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java

@@ -192,7 +192,7 @@ public class HomeServiceImpl implements HomeService {
      *
      * @param param 传入参数
      *              <p> - dateTime  如果查询年数据 yyyy   如果查询月数据 yyyy-mm
-     *              <p> - type 类型  PRACTICE陪练课  LIVE直播课
+     *              <p> - type 类型  PRACTICE趣纠课  LIVE直播课
      *              <p> - timeType 时间类型 MONTH、月度 YEAR
      */
     public CourseHomeVo queryCourseHomeData(Map<String, Object> param) {

+ 19 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java

@@ -111,7 +111,12 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
         //获取老师基本信息
         BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(courseSchedule.getTeacherId());
         //XX分钟关闭房间
-        String configValue = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE);
+        String configValue;
+        if(StringUtils.equals(courseSchedule.getType(),"VIP")){
+            configValue = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_VIP_ROOM_MINUTE);
+        }else {
+            configValue = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE);
+        }
 
         ImNetworkRoomResult joinRoomResult = new ImNetworkRoomResult();
         String imUserId = imGroupService.getImUserId(sysUser.getUserId(), userRole);
@@ -282,7 +287,13 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
         }
         joinRoomResult.setMembers(members);
         //课程结束后关闭教室的时间
-        joinRoomResult.setAutoCloseNetworkRoomTime(sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
+        String configValue;
+        if(StringUtils.equals(courseSchedule.getType(),"VIP")){
+            configValue = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_VIP_ROOM_MINUTE);
+        }else {
+            configValue = sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE);
+        }
+        joinRoomResult.setAutoCloseNetworkRoomTime(configValue);
         //获取腾讯所需基本信息配置
         joinRoomResult.setRtcRoomConfig(roomService.getRtcRoomConfig(courseSchedule.getServiceProvider(),roomMember));
         joinRoomResult.setGroupId(roomId);
@@ -712,7 +723,12 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     //校验用户是否提前进入教室
     private boolean roomNotStart(CourseSchedule courseSchedule){
         //是否提前进入教室
-        String courseBeforeBufferTime = sysConfigDao.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE);
+        String courseBeforeBufferTime;
+        if(StringUtils.equals(courseSchedule.getType(),"VIP")){
+            courseBeforeBufferTime = sysConfigDao.findConfigValue(SysConfigConstant.PRE_CREATE_VIP_ROOM_MINUTE);
+        }else {
+            courseBeforeBufferTime = sysConfigDao.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE);
+        }
         if (StringUtils.isEmpty(courseBeforeBufferTime)) {
             courseBeforeBufferTime = "5";
         }

+ 21 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java

@@ -370,6 +370,14 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void practiceCourse(UserOrderDetailVo userPaymentOrder) {
+        CourseScheduleEnum courseScheduleEnum = null;
+        if (userPaymentOrder.getGoodType() == GoodTypeEnum.PRACTICE) {
+            courseScheduleEnum = CourseScheduleEnum.PRACTICE;
+        } else if (userPaymentOrder.getGoodType() == GoodTypeEnum.VIP_COURSE) {
+            courseScheduleEnum = CourseScheduleEnum.VIP;
+        } else {
+            throw new BizException("课程类型错误");
+        }
 
 
         // 先计算分账金额,写入流水,最后执行分账,在写入分账数据
@@ -399,8 +407,14 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         warp.set("status_", "ING").eq("id_", paymentList.get(0).getCourseGroupId());
         courseGroupService.update(warp);
 
-        //查询陪练课服务费
-        String practiceServiceRateStr = sysConfigService.findConfigValue(SysConfigConstant.PRACTICE_SERVICE_FEE);
+        //查询服务费
+        String practiceServiceRateStr = null;
+
+        if (courseScheduleEnum == CourseScheduleEnum.PRACTICE) {
+            practiceServiceRateStr = sysConfigService.findConfigValue(SysConfigConstant.PRACTICE_SERVICE_FEE);
+        } else {
+            practiceServiceRateStr = sysConfigService.findConfigValue(SysConfigConstant.VIP_COURSE_SERVICE_FEE);
+        }
         BigDecimal practiceServiceRate = new BigDecimal(practiceServiceRateStr).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
 
         //写course_schedule_teacher_salary
@@ -422,7 +436,8 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             BigDecimal actualSalary = expectPrice.subtract(expectPrice.multiply(practiceServiceRate)).setScale(2, RoundingMode.HALF_UP);
             teacherSalary.setActualSalary(actualSalary);//实际薪水(扣除手续费)
             teacherSalary.setReduceSalary(expectPrice.subtract(actualSalary));//扣除薪水 = 预计 - 实际
-            teacherSalary.setReduceSalaryRemark(SysConfigConstant.PRACTICE_SERVICE_FEE);//扣除原因
+            teacherSalary.setReduceSalaryRemark(courseScheduleEnum == CourseScheduleEnum.PRACTICE?
+                    SysConfigConstant.PRACTICE_SERVICE_FEE:SysConfigConstant.VIP_COURSE_SERVICE_FEE);//扣除原因
             teacherSalary.setStatus(TeacherSalaryEnum.NOT_START.getCode());
             teacherSalary.setCreateTime(now);
 
@@ -466,10 +481,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         studentIds.add(studentId);
         try {
             imUserFriendService.saveUserFriend(teacherId, studentIds, EImUserFriendSourceForm.TEACHER);
-            //imUserFriendService.refreshCustomer(teacherId, ClientEnum.TEACHER, new ArrayList<>(studentIds), ClientEnum.STUDENT);
             log.info("保存用户通讯录成功,teacherId:{},studentIds:{}", teacherId, studentIds);
         } catch (Exception e) {
-            log.error("保存用户通讯录失败,teacherId:{},studentIds:{},e:{}", teacherId, studentIds, e);
+            log.error("保存用户通讯录失败,teacherId:{},studentIds:{}", teacherId, studentIds, e);
         }
 
         //消息推送
@@ -477,10 +491,10 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 
             // 平台学生 发送推送
             if(checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient())) {
-                courseScheduleService.practiceSend(paymentList.get(0).getTeacherId(), userPaymentOrder.getUserId(), paymentList.size() + "", orderNo);
+                courseScheduleService.practiceSend(paymentList.get(0).getTeacherId(), userPaymentOrder.getUserId(), paymentList.size() + "", orderNo,courseScheduleEnum);
             }
         } catch (Exception e) {
-            log.error("陪练课消息推送失败");
+            log.error("趣纠课消息推送失败");
         }
 
     }

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PlatformCashAccountRecordServiceImpl.java

@@ -76,6 +76,7 @@ public class PlatformCashAccountRecordServiceImpl extends ServiceImpl<PlatformCa
         paramNames.add(AccountBizTypeEnum.ALBUM_SHARE.getCode());
         paramNames.add(AccountBizTypeEnum.VIP.getCode());
         paramNames.add(AccountBizTypeEnum.SVIP.getCode());
+        paramNames.add(AccountBizTypeEnum.DISCOUNT.getCode());
         paramNames.add(AccountBizTypeEnum.VIP_SHARE.getCode());
         paramNames.add(AccountBizTypeEnum.ACTI_REGIST.getCode());
         paramNames.add(AccountBizTypeEnum.ACTI_REGIST_SHARE.getCode());

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserServiceImpl.java

@@ -276,7 +276,7 @@ public class SysUserServiceImpl implements SysUserService {
             }
 
             // 存在进行中的课程
-            // 陪练
+            // 趣纠
             List<CourseGroup> list = courseGroupService.lambdaQuery()
                 .eq(CourseGroup::getTeacherId, userId)
                 .in(CourseGroup::getType, Arrays.asList("PRACTICE", "LIVE", "PIANO_ROOM_CLASS"))
@@ -292,7 +292,7 @@ public class SysUserServiceImpl implements SysUserService {
                     if (courseMsg.length() > 0) {
                         courseMsg+="/";
                     }
-                    courseMsg += "陪练课";
+                    courseMsg += "趣纠课";
                 }
                 if (courseTypes.contains(CourseScheduleEnum.PIANO_ROOM_CLASS.name())){
                     if (courseMsg.length() > 0) {

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -1013,7 +1013,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         if (wordFilter.include(teacherDto.getIntroduction(), 3)) {
             throw new BizException("文本包含敏感信息");
         }
-        //获取已经配置的vip、陪练课声部
+        //获取已经配置的vip、趣纠课声部
         List<TeacherSubjectPrice> subjectPrices = teacherSubjectPriceService.lambdaQuery()
                 .eq(TeacherSubjectPrice::getTeacherId, teacherDto.getUserId())
                 .list();

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountRecordServiceImpl.java

@@ -152,7 +152,7 @@ public class UserAccountRecordServiceImpl extends ServiceImpl<UserAccountRecordD
     @Override
     public List<UserAccountRecord> selectRecordByOrderDetail(UserOrderDetailVo userOrderDetailVo) {
         List<UserAccountRecord> records = new ArrayList<>();
-        //订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)
+        //订单类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)
         //获取业务id
         List<Long> bizIds = new ArrayList<>();
         if (GoodTypeEnum.VIP.equals(userOrderDetailVo.getGoodType())){

+ 9 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -170,7 +170,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderCreate.put(GoodTypeEnum.SVIP, memberPriceSettingsService::orderCreate);
         //直播课程购买
         orderCreate.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourse);
-        //陪练课购买
+        //趣纠课购买
         orderCreate.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourse);
         //视频课购买
         orderCreate.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourse);
@@ -195,7 +195,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderSuccess.put(GoodTypeEnum.SVIP, memberPriceSettingsService::orderSuccess);
         //直播课程购买
         orderSuccess.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourseSuccess);
-        //陪练课购买
+        //趣纠课购买
         orderSuccess.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourseSuccess);
         //视频课购买
         orderSuccess.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourseSuccess);
@@ -212,7 +212,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderSuccess.put(GoodTypeEnum.TENANT_ALBUM, tenantAlbumService::orderSuccess);
 
         /**********订单取消后******************/
-        //陪练课购买
+        //趣纠课购买
         orderCancel.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourseFailed);
         //视频课购买
         orderCancel.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourseFailed);
@@ -1428,6 +1428,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             instance.add(Calendar.DAY_OF_MONTH, Integer.parseInt(sysConfigService.findConfigValue(SysConfigConstant.ALBUM_ACCOUNT_PERIOD)));
         } else if (GoodTypeEnum.ACTI_REGIST.equals(goodType)) {
             instance.add(Calendar.DAY_OF_MONTH, Integer.parseInt(sysConfigService.findConfigValue(SysConfigConstant.ACTI_REGIST_ACCOUNT_PERIOD)));
+        } else if (GoodTypeEnum.VIP_COURSE.equals(goodType)) {
+            instance.add(Calendar.DAY_OF_MONTH, Integer.parseInt(sysConfigService.findConfigValue(SysConfigConstant.VIP_COURSE_ACCOUNT_PERIOD)));
         }
         return instance.getTime();
     }
@@ -1514,6 +1516,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             return new BigDecimal(sysConfigService.findConfigValue(SysConfigConstant.MUSIC_SHEET_SERVICE_FEE))
                     .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
         }
+        if (GoodTypeEnum.VIP_COURSE.equals(goodType)) {
+            return new BigDecimal(sysConfigService.findConfigValue(SysConfigConstant.VIP_COURSE_SERVICE_FEE))
+                    .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
+        }
         return BigDecimal.ZERO;
     }
 

+ 52 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java

@@ -17,7 +17,6 @@ import com.microsvc.toolkit.middleware.payment.enums.EPaymentVendor;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
-import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 import com.yonge.cooleshow.biz.dal.mapper.CouponInfoMapper;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
@@ -177,7 +176,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         orderGoodsCreate.put(GoodTypeEnum.DISCOUNT, memberPriceSettingsService::discountCreate);
         //直播课程购买
         orderGoodsCreate.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourse);
-        //陪练课购买
+        //趣纠课购买
         orderGoodsCreate.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourse);
         //视频课购买
         orderGoodsCreate.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourse);
@@ -192,6 +191,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
 
         // 机构专辑
         orderGoodsCreate.put(GoodTypeEnum.TENANT_ALBUM, tenantAlbumService::orderCreate);
+        orderGoodsCreate.put(GoodTypeEnum.VIP_COURSE, scheduleService::buyPracticeCourse);
 
         /**********订单生成后 数据处理******************/
         //曲目购买
@@ -204,8 +204,9 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
 
         //直播课程购买
         orderSuccessAfter.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourseAfter);
-        //陪练课购买
+        //趣纠课购买
         orderSuccessAfter.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourseAfter);
+        orderSuccessAfter.put(GoodTypeEnum.VIP_COURSE, scheduleService::buyPracticeCourseAfter);
         //视频课购买
         orderSuccessAfter.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourseAfter);
 
@@ -216,6 +217,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         paymentSuccess.put(GoodTypeEnum.TENANT_ALBUM, paymentDivMemberRecordService::tenantAlbum);
         paymentSuccess.put(GoodTypeEnum.MUSIC, paymentDivMemberRecordService::musicSheet);
         paymentSuccess.put(GoodTypeEnum.PRACTICE, paymentDivMemberRecordService::practiceCourse);
+        paymentSuccess.put(GoodTypeEnum.VIP_COURSE, paymentDivMemberRecordService::practiceCourse);
         paymentSuccess.put(GoodTypeEnum.LIVE, paymentDivMemberRecordService::liveCourse);
         paymentSuccess.put(GoodTypeEnum.VIDEO, paymentDivMemberRecordService::videoCourse);
         paymentSuccess.put(GoodTypeEnum.ALBUM, paymentDivMemberRecordService::musicSheet);
@@ -756,7 +758,7 @@ DISCOUNT("畅学卡","DISCOUNT"),
 
     VIP("开通会员"),
 SVIP("开通会员 SVIP"),
-PRACTICE("陪练课购买"),
+PRACTICE("趣纠课购买"),
 LIVE("直播课购买"),
 VIDEO("视频课购买"),
 MUSIC("单曲点播"),
@@ -867,7 +869,8 @@ DISCOUNT("畅学卡")
         ActivityPlanVo activityPlan = activityPlanService.detail(orderReq.getActivityId());
         if (activityPlan != null && activityPlan.getActivityState() == 1) {
             if (ActivityTypeEnum.MEMBER == activityPlan.getActivityType()) {
-                // TODO 检查购买次数是否符合要求 待支付,支付中,支付完成的订单小于次数才可以继续购买
+
+                checkActivityTimes(orderReq.getUserId(),orderReq.getPaymentClient(), activityPlan.getId());
 
                 // 会员买赠活动 判断购买商品是否符合活动要求
                 Map<String, List<Long>> map = orderReq.getGoodsInfos().stream()
@@ -908,6 +911,50 @@ DISCOUNT("畅学卡")
         }
     }
 
+
+    /**
+     * 检查活动购买次数
+     *
+     * @param userId 用户ID
+     * @param client 客户端
+     * @param activityId 活动ID
+     */
+    private void checkActivityTimes(Long userId,ClientEnum client, Long activityId) {
+        ActivityPlan activityPlan = activityPlanService.getById(activityId);
+        if (activityPlan == null) {
+            throw new BizException("活动不存在");
+        }
+
+        //  检查购买次数是否符合要求 待支付,支付中,支付完成的订单小于次数才可以继续购买
+        if (activityPlan.getBuyCount() !=null && activityPlan.getBuyCount() !=-1) {
+            int count = getActivityCount(userId, client, activityId);
+            if (count >= activityPlan.getBuyCount()) {
+                throw new BizException("活动以达到参与最大次数");
+            }
+
+        }
+
+    }
+
+    /**
+     * 查询活动参与次数
+     *
+     * @param userId 用户ID
+     * @param client 客户端
+     * @param activityId 活动ID
+     * @return int 活动参与次数
+     */
+    @Override
+    public int getActivityCount(Long userId, ClientEnum client, Long activityId) {
+        return userOrderService.lambdaQuery()
+                    .eq(UserOrder::getActivityId, activityId)
+                    .eq(UserOrder::getUserId, userId)
+                    .eq(UserOrder::getOrderClient, client)
+                    .in(UserOrder::getStatus, OrderStatusEnum.WAIT_PAY.getCode(),
+                            OrderStatusEnum.PAYING.getCode(), OrderStatusEnum.PAID.getCode())
+                    .count();
+    }
+
     /**
      * 用户支付请求
      *
@@ -1678,7 +1725,6 @@ DISCOUNT("畅学卡")
     /**
      * 关闭订单
      *
-     * @param userInfo     JwtUserInfo
      * @param paymentOrder UserPaymentOrder
      * @return PaymentResp
      */

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityPlanVo.java

@@ -36,6 +36,17 @@ public class ActivityPlanVo extends ActivityPlan{
 	@ApiModelProperty("最后操作人")
 	private String updateByName;
 
+	@ApiModelProperty("当前用户购买次数")
+	private Integer buyNum;
+
+	public Integer getBuyNum() {
+		return buyNum;
+	}
+
+	public void setBuyNum(Integer buyNum) {
+		this.buyNum = buyNum;
+	}
+
 	public ActivityPlanEvaluation getPlanEvaluation() {
 		return planEvaluation;
 	}

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ArrangeCourseVo.java

@@ -27,9 +27,22 @@ public class ArrangeCourseVo implements Serializable {
     private Integer singleClssTime;
     @ApiModelProperty("消耗时长")
     private Integer consumeTime;
+
+
+    @ApiModelProperty(value = "课程休息时长")
+    private Integer courseFreeMinutes;
+
     @ApiModelProperty("上课时间")
     private List<CourseTimeEntity> timeList;
 
+    public Integer getCourseFreeMinutes() {
+        return courseFreeMinutes;
+    }
+
+    public void setCourseFreeMinutes(Integer courseFreeMinutes) {
+        this.courseFreeMinutes = courseFreeMinutes;
+    }
+
     public Integer getConsumeTime() {
         return consumeTime;
     }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupPracticeDetailVo.java

@@ -14,7 +14,7 @@ import java.util.Date;
  */
 @ApiModel
 public class CourseGroupPracticeDetailVo extends BaseEntity {
-    @ApiModelProperty("陪练课id")
+    @ApiModelProperty("趣纠课id")
     private Long courseId;
     @ApiModelProperty("声部名称")
     private String subjectName;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupPracticeVo.java

@@ -12,7 +12,7 @@ import lombok.Data;
 @Data
 @ApiModel
 public class CourseGroupPracticeVo extends BaseEntity {
-    @ApiModelProperty("陪练课组id")
+    @ApiModelProperty("趣纠课组id")
     private Long groupId;
     @ApiModelProperty("声部id")
     private Long subjectId;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseHomeworkDetailVo.java

@@ -44,7 +44,7 @@ public class CourseHomeworkDetailVo {
     @ApiModelProperty("学生课程作业id")
     private Long studentHomeworkId;
 
-    @ApiModelProperty("课程类型 PRACTICE 陪练课 LIVE直播课")
+    @ApiModelProperty("课程类型 PRACTICE 趣纠课 LIVE直播课")
     private CourseScheduleEnum courseType;
 
     @ApiModelProperty("上课日期")

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseStudent.java

@@ -35,18 +35,18 @@ public class CourseStudent implements Serializable {
     @ApiModelProperty(value = "课程状态(NOT_START:未开始 ING:进行中 COMPLETE:已完成 CANCEL:已取消)")
     private String status;
 
-    @ApiModelProperty(value = "课程类型(LIVE:直播课 PRACTICE:陪练课 PIANO_ROOM_CLASS:琴房课")
+    @ApiModelProperty(value = "课程类型(LIVE:直播课 PRACTICE:趣纠课 PIANO_ROOM_CLASS:琴房课")
     private String courseType;
 
     @ApiModelProperty(value = "用户id")
     private String userId;
 
-    @ApiModelProperty(value = "陪练课:用户名,直播课:课程名")
+    @ApiModelProperty(value = "趣纠课:用户名,直播课:课程名")
     private String name;
 
     private String realName;
 
-    @ApiModelProperty(value = "陪练课:用户头像,直播课:直播背景图")
+    @ApiModelProperty(value = "趣纠课:用户头像,直播课:直播背景图")
     private String cover;
 
     @ApiModelProperty(value = "直播课购课人数")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseGroupVo.java

@@ -62,7 +62,7 @@ public class LiveCourseGroupVo {
     @ApiModelProperty("订单号")
     private String orderNo;
 
-    @ApiModelProperty(value = "类型 practice陪练课 live直播课")
+    @ApiModelProperty(value = "类型 practice趣纠课 live直播课")
     private String type;
 
     @ApiModelProperty("下架原因")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java

@@ -41,7 +41,7 @@ public class StudentHomePage implements Serializable {
         private Long courseGroupId;
         @ApiModelProperty(value = "课程组名称")
         private String courseGroupName;
-        @ApiModelProperty(value = "课程类型(PRACTICE陪练课 LIVE直播课 PIANO_ROOM_CLASS琴房课)")
+        @ApiModelProperty(value = "课程类型(PRACTICE趣纠课 LIVE直播课 PIANO_ROOM_CLASS琴房课)")
         private String courseType;
         @ApiModelProperty(value = "课程状态(NOT_START未开始 ING进行中 )")
         private String status;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/SubjectHomeVo.java

@@ -42,7 +42,7 @@ public class SubjectHomeVo {
     private Integer musicTeacherSheetNum;
 
 
-    @ApiModelProperty("陪练课程组")
+    @ApiModelProperty("趣纠课程组")
     private Integer practiceNum;
 
     @ApiModelProperty("琴房课课程组")

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundVo.java

@@ -18,7 +18,7 @@ public class UserOrderRefundVo extends UserOrderRefund{
     @TableField(value = "order_name_")
     private String orderName;
 
-    @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
+    @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
     @TableField(value = "order_type_")
     private OrderTypeEnum orderType;
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/coupon/CouponIssueWrapper.java

@@ -37,7 +37,7 @@ public class CouponIssueWrapper {
     @ApiModelProperty("优惠券类型 ")
     private CouponTypeEnum couponType;
 
-    @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
+    @ApiModelProperty("可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:趣纠课购买券 LIVE:直播课购买券  VIDEO:视频课购买券")
     private CouponCategoryEnum couponCategory;
 
 

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/AccountTotal.java

@@ -14,9 +14,9 @@ import java.util.List;
 public class AccountTotal {
     @ApiModelProperty("总收入")
     private BigDecimal totalInAmount = BigDecimal.ZERO;
-    @ApiModelProperty("陪练课")
+    @ApiModelProperty("趣纠课")
     private BigDecimal practiceAmount = BigDecimal.ZERO;
-    @ApiModelProperty("陪练课-百分比")
+    @ApiModelProperty("趣纠课-百分比")
     private BigDecimal practiceRate = BigDecimal.ZERO;
     @ApiModelProperty("直播课")
     private BigDecimal liveAmount = BigDecimal.ZERO;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/HomeTotalStudent.java

@@ -17,7 +17,7 @@ public class HomeTotalStudent {
     private Integer vipNum;
     @ApiModelProperty("新增会员学员 ")
     private Integer svipNum;
-    @ApiModelProperty("新增陪练课学员 ")
+    @ApiModelProperty("新增趣纠课学员 ")
     private Integer practiceNum;
     @ApiModelProperty("新增视频课学员 ")
     private Integer videoNum;

部分文件因文件數量過多而無法顯示