瀏覽代碼

Merge remote-tracking branch 'origin/feature/1113-vipCourse' into feature/1113-vipCourse

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

+ 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:过期")

+ 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;
         

+ 8 - 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,7 +307,7 @@ public interface SysConfigConstant {
      */
     String MALL_SHARE_FEE = "mall_share_fee";
     /**
-     * 陪练课账期
+     * 趣纠课账期
      */
     String PRACTICE_ACCOUNT_PERIOD = "practice_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 - 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

+ 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
      */

+ 283 - 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,200 @@ 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) {
+        //储存节假日数据,避免重复查询
+        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);
+                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) {
+        List<CourseTimeEntity> result = new ArrayList<>();
+        for (CourseTimeEntity courseTimeEntity : courseTime) {
+            if (courseTimeEntity.getEndTime().getTime() - courseTimeEntity.getStartTime().getTime() >= courseMinutes * 60 * 1000) {
+                long time = courseTimeEntity.getEndTime().getTime() - courseTimeEntity.getStartTime().getTime();
+                long startTime = courseTimeEntity.getStartTime().getTime();
+                while (time >= courseMinutes * 60 * 1000) {
+                    CourseTimeEntity entity = new CourseTimeEntity();
+                    entity.setStartTime(new Date(startTime));
+                    entity.setEndTime(new Date(startTime + courseMinutes * 60 * 1000));
+                    result.add(entity);
+                    startTime = startTime + courseMinutes * 60 * 1000;
+                    time = time - courseMinutes * 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;
+    }
+
     /**
-     * 生成老师陪练课日历
-     * <p>陪练课的日历需要查询老师设置的陪练课时间,根据设置的时间来生成日历
+     *
+     * 获取可排课时间段
+     * @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>趣纠课的日历需要查询老师设置的趣纠课时间,根据设置的时间来生成日历
      */
     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 +747,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 +791,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 +837,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 +848,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
 
     /**
-     * 老师端-首页-我的课程-陪练
+     * 老师端-首页-我的课程-趣纠
      * search:{"classMonth":"2022-03","status":"COMPLETE","subjectId":1}
      * <p>
      * 老师端-首页-课后评价
@@ -686,7 +861,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 +902,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     @Override
     public Integer countTeacherNoDecorateHomework(HomeworkSearch homeworkSearch) {
 
-        // 陪练课 课程状态为完成,有学生考勤记录 没有布置作业
+        // 趣纠课 课程状态为完成,有学生考勤记录 没有布置作业
         return baseMapper.countTeacherNoDecorateHomework(homeworkSearch);
     }
 
@@ -774,7 +949,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 +1016,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 +1034,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * @Description: 学生端-首页-陪练课老师列表
+     * @Description: 学生端-首页-趣纠课老师列表
      * @Author: cy
      * @Date: 2022/4/19
      */
@@ -895,9 +1070,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 +1142,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * @Description: 陪练课购买记录
+     * @Description: 趣纠课购买记录
      * @Author: cy
      * @Date: 2022/5/16
      */
@@ -984,34 +1159,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 +1187,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 +1239,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * @Description: 学生购买陪练
+     * @Description: 学生购买趣纠
      * @Author: cy
      * @Date: 2022/4/21
      */
@@ -1094,7 +1253,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 +1263,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * 学生购买陪练课-成功-回调
+     * 学生购买趣纠课-成功-回调
      */
     @Transactional(rollbackFor = Exception.class)
     public void buyPracticeCourseSuccess(UserOrderDetailVo orderParam) {
@@ -1122,7 +1281,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 +1341,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 +1372,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * 学生购买陪练课-失败-回调
+     * 学生购买趣纠课-失败-回调
      */
     @Transactional(rollbackFor = Exception.class)
     public void buyPracticeCourseFailed(UserOrderDetailVo orderParam) {
@@ -1314,9 +1473,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 +1493,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 +1523,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 +1549,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 +1608,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 +1634,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());
     }
 
     /**
@@ -1578,7 +1705,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));
@@ -1779,7 +1906,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())
@@ -1956,6 +2083,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);
@@ -2020,7 +2150,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分") + "的课程时间重复!");
                 }
@@ -2028,7 +2158,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) {
@@ -2058,6 +2188,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);
@@ -2486,47 +2617,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());
@@ -2535,11 +2656,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();
 
                 //每课实际价格
@@ -2553,8 +2669,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);
@@ -2568,7 +2685,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);//预计价格
@@ -2578,7 +2695,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();
@@ -2760,6 +2877,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();
 
         //校验学生信息
@@ -2769,12 +2887,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()) {
@@ -2782,35 +2922,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) {

+ 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("趣纠课消息推送失败");
         }
 
     }

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

@@ -275,7 +275,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"))
@@ -291,7 +291,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

@@ -1010,7 +1010,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())){

+ 3 - 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);

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

@@ -177,7 +177,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 +192,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
 
         // 机构专辑
         orderGoodsCreate.put(GoodTypeEnum.TENANT_ALBUM, tenantAlbumService::orderCreate);
+        orderGoodsCreate.put(GoodTypeEnum.VIP_COURSE, scheduleService::buyPracticeCourse);
 
         /**********订单生成后 数据处理******************/
         //曲目购买
@@ -204,8 +205,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 +218,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 +759,7 @@ DISCOUNT("畅学卡","DISCOUNT"),
 
     VIP("开通会员"),
 SVIP("开通会员 SVIP"),
-PRACTICE("陪练课购买"),
+PRACTICE("趣纠课购买"),
 LIVE("直播课购买"),
 VIDEO("视频课购买"),
 MUSIC("单曲点播"),
@@ -867,7 +870,17 @@ DISCOUNT("畅学卡")
         ActivityPlanVo activityPlan = activityPlanService.detail(orderReq.getActivityId());
         if (activityPlan != null && activityPlan.getActivityState() == 1) {
             if (ActivityTypeEnum.MEMBER == activityPlan.getActivityType()) {
-                // TODO 检查购买次数是否符合要求 待支付,支付中,支付完成的订单小于次数才可以继续购买
+                //  检查购买次数是否符合要求 待支付,支付中,支付完成的订单小于次数才可以继续购买
+                if (activityPlan.getBuyCount() !=null && activityPlan.getBuyCount() !=-1) {
+                    int count = userOrderService.lambdaQuery()
+                            .eq(UserOrder::getActivityId, orderReq.getActivityId())
+                            .in(UserOrder::getStatus, OrderStatusEnum.WAIT_PAY.getCode(),
+                                    OrderStatusEnum.PAYING.getCode(), OrderStatusEnum.PAID.getCode())
+                            .count();
+                    if (count >= activityPlan.getBuyCount()) {
+                        throw new BizException("活动以达到参与最大次数");
+                    }
+                }
 
                 // 会员买赠活动 判断购买商品是否符合活动要求
                 Map<String, List<Long>> map = orderReq.getGoodsInfos().stream()
@@ -1678,7 +1691,6 @@ DISCOUNT("畅学卡")
     /**
      * 关闭订单
      *
-     * @param userInfo     JwtUserInfo
      * @param paymentOrder UserPaymentOrder
      * @return PaymentResp
      */

+ 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;

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

@@ -20,7 +20,7 @@ public class OrderCreateRes {
     private Boolean res;
     @ApiModelProperty("商家id")
     private Long merchId;
-    @ApiModelProperty("商品类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
+    @ApiModelProperty("商品类型:  VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
     private GoodTypeEnum goodType;
     @ApiModelProperty("业务id")
     private Long bizId;

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

@@ -15,7 +15,7 @@ public class RefundCreateRes {
     @ApiModelProperty("实际价格(必填)")
     private BigDecimal actualPrice;
 
-    @ApiModelProperty("商品类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
+    @ApiModelProperty("商品类型:  VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
     private GoodTypeEnum goodType;
     @ApiModelProperty(value = "冗余字段,用于传递参数用")
     private Object bizParam;

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAccountRecordWrapper.java

@@ -40,7 +40,7 @@ public class TenantAccountRecordWrapper {
         @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;
 
@@ -88,7 +88,7 @@ public class TenantAccountRecordWrapper {
         @ApiModelProperty("入账状态 WAIT 待入账 FROZEN 冻结入账 RECORDED 已入账 CANCEL 取消")
         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、商品分润")
         private String bizType;
 
         @ApiModelProperty("业务id")
@@ -160,7 +160,7 @@ public class TenantAccountRecordWrapper {
         @ExcelIgnore
         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、商品分润")
         @ExcelProperty("收入类型")
         private String bizType;
 

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java

@@ -840,7 +840,7 @@ public class UserPaymentOrderWrapper {
         @ApiModelProperty(value = "订单详情号 ", hidden = true)
         private String subOrderNo;
 
-        @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
+        @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
         private GoodTypeEnum goodType;
 
         @ApiModelProperty("业务id ")
@@ -892,7 +892,7 @@ public class UserPaymentOrderWrapper {
     @ApiModel("OrderPayTypeReq-订单支付方式")
     public static class OrderPayTypeReq implements Serializable {
 
-        @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
+        @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、趣纠课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
         private GoodTypeEnum goodType;
 
         @ApiModelProperty("业务id ")

+ 5 - 5
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -11,6 +11,7 @@
         <result column="class_date_" jdbcType="TIMESTAMP" property="classDate"/>
         <result column="start_time_" jdbcType="TIMESTAMP" property="startTime"/>
         <result column="end_time_" jdbcType="TIMESTAMP" property="endTime"/>
+        <result column="free_end_time_" jdbcType="TIMESTAMP" property="freeEndTime"/>
         <result column="lock_" jdbcType="INTEGER" property="lock"/>
         <result column="lock_time_" jdbcType="TIMESTAMP" property="lockTime"/>
         <result column="ex_student_num_" jdbcType="INTEGER" property="exStudentNum"/>
@@ -108,6 +109,7 @@
                b.class_date_,
                b.start_time_,
                b.end_time_,
+               b.free_end_time_,
                b.lock_,
                b.lock_time_,
                b.ex_student_num_,
@@ -847,12 +849,10 @@
         group by class_date_
     </select>
     <select id="selectPrice" resultType="java.math.BigDecimal">
-        SELECT p.subject_price_
-        FROM teacher_free_time t
-        LEFT JOIN teacher_subject_price p ON t.id_=p.teacher_free_time_id
+        SELECT t.subject_price_
+        FROM teacher_subject_price t
         WHERE t.teacher_id_=#{teacherId}
-        AND p.subject_id_=#{subjectId}
-        AND t.default_flag_=1
+        AND t.subject_id_=#{subjectId} and t.course_type_ = #{courseTypeEnum}
     </select>
     <select id="selectSchedule" resultType="com.yonge.cooleshow.biz.dal.entity.CourseSchedule"
             parameterType="java.lang.Integer">