刘俊驰 8 месяцев назад
Родитель
Сommit
5a25831012
43 измененных файлов с 878 добавлено и 1506 удалено
  1. 3 44
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/AdminCourseGroupController.java
  2. 2 17
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java
  3. 18 30
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/CourseHomeworkController.java
  4. 27 18
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseGroupController.java
  5. 8 3
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java
  6. 58 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/open/OpenSubjectController.java
  7. 21 41
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/CourseHomeworkController.java
  8. 8 20
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java
  9. 24 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseGroupController.java
  10. 6 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java
  11. 38 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherSubjectPriceController.java
  12. 8 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  13. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java
  14. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  15. 4 129
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/CourseGroupSearch.java
  16. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MyCourseSearch.java
  17. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseGroup.java
  18. 0 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherTotal.java
  19. 7 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  20. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  21. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherSubjectPriceService.java
  22. 101 36
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  23. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  24. 178 31
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  25. 2 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  26. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserServiceImpl.java
  27. 8 23
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherSubjectPriceServiceImpl.java
  28. 4 72
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupInfoVo.java
  29. 4 95
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupLiveVo.java
  30. 4 87
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupPianoVo.java
  31. 4 104
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupPracticeVo.java
  32. 4 167
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVo.java
  33. 9 158
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseStudent.java
  34. 4 126
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/LiveCourseGroupVo.java
  35. 7 143
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java
  36. 12 109
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLiveCourseInfoVo.java
  37. 10 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TeacherSubjectPriceWrapper.java
  38. 70 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/course/CourseGroupWrapper.java
  39. 111 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/course/CourseScheduleWrapper.java
  40. 59 22
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml
  41. 22 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  42. 2 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  43. 11 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

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

@@ -1,8 +1,6 @@
 package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.LiveSaleOutDto;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch;
@@ -20,14 +18,10 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.List;
 
@@ -41,23 +35,14 @@ import java.util.List;
 @RestController
 @RequestMapping("${app-config.url.admin:}/courseGroup")
 public class AdminCourseGroupController extends BaseController {
-    /**
-     * 服务对象
-     */
-    @Autowired
+    @Resource
     private CourseGroupService courseGroupService;
 
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "老师直播课列表", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/live/list", consumes="application/json", produces="application/json")
     public HttpResponseResult<PageInfo<LiveCourseGroupVo>> teacherList(@Validated(value = LiveCourseGroupSearch.TeacherGroup.class)
                                                                            @RequestBody LiveCourseGroupSearch query) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
         query.setCourseType(CourseScheduleEnum.LIVE);
 
         IPage<LiveCourseGroupVo> liveCourseGroupVoIPage = courseGroupService
@@ -70,10 +55,6 @@ public class AdminCourseGroupController extends BaseController {
     @PostMapping(value="/live/list/student", consumes="application/json", produces="application/json")
     public HttpResponseResult<PageInfo<LiveCourseGroupVo>> studentList(@Validated(value = LiveCourseGroupSearch.StudentGroup.class)
                                                                            @RequestBody LiveCourseGroupSearch query) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
         query.setCourseType(CourseScheduleEnum.LIVE);
 
         IPage<LiveCourseGroupVo> liveCourseGroupVoIPage = courseGroupService
@@ -85,10 +66,6 @@ public class AdminCourseGroupController extends BaseController {
     @PostMapping(value="/detail/{courseGroupId}")
     public HttpResponseResult<LiveCourseGroupVo> detail(@ApiParam(value = "课程组编号ID", required = true)
                                                                    @PathVariable("courseGroupId") Long courseGroupId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
         if (courseGroupId == null) {
             return failed("课程组id不能为空");
         }
@@ -104,10 +81,6 @@ public class AdminCourseGroupController extends BaseController {
     @ApiOperation(value = "直播课下架")
     @PostMapping(value="/live/saleOut")
     public HttpResponseResult<Boolean> liveSaleOut(@RequestBody @Valid LiveSaleOutDto dto) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
         if (dto.getCourseGroupId() == null) {
             return failed("课程组id不能为空");
         }
@@ -120,11 +93,6 @@ public class AdminCourseGroupController extends BaseController {
     @ApiOperation(value = "老师详情-直播课购买学员信息", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/live/student", consumes="application/json", produces="application/json")
     public HttpResponseResult<PageInfo<LiveCourseGroupStudentVo>> student(@Valid @RequestBody LiveCourseGroupStudentSearch query) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
-
         IPage<LiveCourseGroupStudentVo> liveCourseGroupVoIPage = courseGroupService
                 .selectAdminLiveStudentPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(liveCourseGroupVoIPage));
@@ -135,10 +103,6 @@ public class AdminCourseGroupController extends BaseController {
     @PostMapping(value="/live/{courseGroupId}")
     public HttpResponseResult<List<LiveCourseGroupPlanVo>> student(@ApiParam(value = "课程组编号ID", required = true)
                                                                               @PathVariable("courseGroupId") Long courseGroupId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
         if (courseGroupId == null) {
             return failed("课程组id不能为空");
         }
@@ -150,11 +114,6 @@ public class AdminCourseGroupController extends BaseController {
     @ApiOperation(value = "学生详情-直播课详情-学生上课状态", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/live/student/course", consumes="application/json", produces="application/json")
     public HttpResponseResult<PageInfo<LiveCourseGroupStudentCourseVo>> studentCourse(@Valid @RequestBody LiveCourseGroupStudentCourseSearch query) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
-
         IPage<LiveCourseGroupStudentCourseVo> liveCourseGroupStudentCourseVoIPage = courseGroupService
                 .selectAdminLiveStudentCoursePage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(liveCourseGroupStudentCourseVoIPage));

+ 2 - 17
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java

@@ -5,18 +5,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.CourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
-import com.yonge.cooleshow.biz.dal.vo.CourseGroupInfoVo;
-import com.yonge.cooleshow.biz.dal.vo.CourseGroupLiveVo;
-import com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.CourseGroupPianoVo;
-import com.yonge.cooleshow.biz.dal.vo.CourseGroupPracticeDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.CourseGroupPracticeVo;
-import com.yonge.cooleshow.biz.dal.vo.CourseGroupStudentVo;
-import com.yonge.cooleshow.biz.dal.vo.CourseGroupVideoVo;
-import com.yonge.cooleshow.biz.dal.vo.CourseSchedulePaymentVo;
-import com.yonge.cooleshow.biz.dal.vo.CourseSchedulePlanVo;
-import com.yonge.cooleshow.biz.dal.vo.PianoRoomTimeVo;
-import com.yonge.cooleshow.biz.dal.vo.StudentSignVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
@@ -25,11 +14,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.validation.constraints.NotNull;
 import java.util.List;

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

@@ -1,8 +1,6 @@
 package com.yonge.cooleshow.student.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSubmitDto;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
@@ -10,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -21,14 +20,9 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
@@ -44,16 +38,16 @@ import java.util.List;
 @RequestMapping("${app-config.url.student:}/homework")
 public class CourseHomeworkController extends BaseController {
 
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
+    @Resource
+    private SysUserService sysUserService;
 
-    @Autowired
+    @Resource
     private CourseScheduleService courseScheduleService;
 
-    @Autowired
+    @Resource
     private CourseHomeworkService courseHomeworkService;
 
-    @Autowired
+    @Resource
     private ImGroupService imGroupService;
 
 
@@ -62,21 +56,18 @@ public class CourseHomeworkController extends BaseController {
     public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
                                                                  @PathVariable("courseId") Long courseId) {
 
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        HttpResponseResult info = checkCourseSchedule(courseId,sysUser);
+        Long userId = sysUserService.getUserId();
+        HttpResponseResult info = checkCourseSchedule(courseId,userId);
         if (info != null) return info;
-        CourseHomeworkDetailVo detailVo = courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId, sysUser.getId());
+        CourseHomeworkDetailVo detailVo = courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId, userId);
         if (detailVo != null) {
             detailVo.setImUserId(imGroupService.getImUserId(String.valueOf(detailVo.getTeacherId()),ClientEnum.TEACHER.name()));
         }
         return succeed(detailVo);
     }
 
-    private HttpResponseResult checkCourseSchedule(Long courseId,SysUser sysUser) {
-        if (sysUser == null  || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
-        if (!courseScheduleService.checkStudentCourseSchedule(sysUser.getId(), courseId)) {
+    private HttpResponseResult checkCourseSchedule(Long courseId,Long userId) {
+        if (!courseScheduleService.checkStudentCourseSchedule(userId, courseId)) {
             return failed("学生只能看自己购买的课程详情");
         }
         return null;
@@ -86,26 +77,23 @@ public class CourseHomeworkController extends BaseController {
     @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) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        HttpResponseResult info = checkCourseSchedule(submitDto.getCourseScheduleId(),sysUser);
+        Long userId = sysUserService.getUserId();
+        HttpResponseResult info = checkCourseSchedule(submitDto.getCourseScheduleId(),userId);
         if (info != null) return info;
-        submitDto.setStudentId(sysUser.getId());
+        submitDto.setStudentId(userId);
         return succeed(courseHomeworkService.submitCourseHomework(submitDto));
     }
 
     @ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<PageInfo<CourseHomeworkVo>> list(@Valid @RequestBody HomeworkSearch query) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (query.getSubmit() == null) {
-            return failed("提交状态不能为空");
-        }
         query.setDecorate(YesOrNoEnum.YES);
-        query.setStudentId(sysUser.getId());
+        query.setStudentId(sysUserService.getUserId());
         query.setCourseStatus(CourseScheduleEnum.COMPLETE);
         List<CourseScheduleEnum> list = new ArrayList<>();
         list.add(CourseScheduleEnum.PIANO_ROOM_CLASS);
         list.add(CourseScheduleEnum.PRACTICE);
+        list.add(CourseScheduleEnum.VIP);
         query.setCourseType(list);
 
         IPage<CourseHomeworkVo> page = courseHomeworkService.selectPage(PageUtil.getPage(query), query);

+ 27 - 18
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseGroupController.java

@@ -1,29 +1,24 @@
 package com.yonge.cooleshow.student.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.vo.CourseGroupVo;
 import com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo;
+import com.yonge.cooleshow.biz.dal.wrapper.course.CourseGroupWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import io.swagger.annotations.*;
+import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 
@@ -37,13 +32,11 @@ import java.util.Map;
 @RestController
 @RequestMapping("${app-config.url.student:}/courseGroup")
 public class StudentCourseGroupController extends BaseController {
-    /**
-     * 服务对象
-     */
-    @Autowired
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
     private CourseGroupService courseGroupService;
-
-    @Autowired
+    @Resource
     private AppVersionInfoService appVersionInfoService;
 
     @ApiOperation("直播课详情")
@@ -95,5 +88,21 @@ public class StudentCourseGroupController extends BaseController {
         List<Subject> subjectList = courseGroupService.liveSubject();
         return succeed(subjectList);
     }
+
+    @ApiOperation("学生端我的课程组")
+    @PostMapping("/myCourseGroup")
+    public HttpResponseResult<PageInfo<CourseGroupWrapper.StudentCourseGroupDto>> myCourseGroup(@RequestBody CourseGroupWrapper.TeacherCourseGroupQuery query) {
+        query.setStudentId(sysUserService.getUserId());
+        return succeed(PageUtil.pageInfo(courseGroupService.studentCourseGroup(PageUtil.getPage(query), query)));
+    }
+
+    @ApiOperation("学生端获取单个课程组")
+    @PostMapping("/getCourseGroup")
+    public HttpResponseResult<CourseGroupWrapper.StudentCourseGroupDto> getCourseGroup(Long courseGroupId) {
+        CourseGroupWrapper.TeacherCourseGroupQuery query = new CourseGroupWrapper.TeacherCourseGroupQuery();
+        query.setCourseGroupId(courseGroupId);
+        IPage<CourseGroupWrapper.StudentCourseGroupDto> pages = courseGroupService.studentCourseGroup(PageUtil.getPage(query), query);
+        return succeed(pages.getRecords().get(0));
+    }
 }
 

+ 8 - 3
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java

@@ -8,10 +8,10 @@ import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseCalendarEntity;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
 import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
-import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.wrapper.TeacherFreeTimeWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.course.CourseScheduleWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
@@ -67,7 +67,6 @@ public class StudentCourseScheduleController extends BaseController {
     @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) {
-        replied.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
         repliedService.replied(replied, sysUserService.getUser());
         return succeed();
     }
@@ -76,7 +75,6 @@ public class StudentCourseScheduleController extends BaseController {
     @PostMapping(value = "/selectReplied")
     public HttpResponseResult<CourseScheduleReplied> selectReplied(@Validated @RequestBody CourseScheduleReplied replied) {
         replied.setStudentId(sysUserService.getUserId());
-        replied.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
         return succeed(repliedService.selectReplied(replied));
     }
 
@@ -161,5 +159,12 @@ public class StudentCourseScheduleController extends BaseController {
         IPage<PracticeTeacherVo> pages = teacherFreeTimeService.queryTeacherList(PageUtil.getPage(query),query);
         return succeed(PageUtil.pageInfo(pages));
     }
+
+    @ApiOperation(value = "获取课程列表")
+    @PostMapping("/list")
+    public HttpResponseResult<List<CourseScheduleWrapper.StudentCourseList>> queryList(@RequestBody CourseScheduleWrapper.CourseQuery query){
+        query.setStudentId(sysUserService.getUserId());
+        return succeed(courseScheduleService.queryListByStudent(query));
+    }
 }
 

+ 58 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/open/OpenSubjectController.java

@@ -0,0 +1,58 @@
+package com.yonge.cooleshow.student.controller.open;
+
+import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.queryInfo.SubjectQueryInfo;
+import com.yonge.cooleshow.biz.dal.service.SubjectService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@RequestMapping("${app-config.url.student:}/open/subject")
+@Api(tags = "声部服务")
+@RestController
+public class OpenSubjectController extends BaseController {
+
+    @Autowired
+    private SubjectService subjectService;
+
+    @ApiOperation(value = "根据声部编号查询声部")
+    @GetMapping("/get/{id}")
+    public Object get(@ApiParam(value = "声部编号", required = true) @PathVariable("id") Long id) {
+        return succeed(subjectService.get(id));
+    }
+
+    @ApiOperation(value = "分页查询声部树状列表")
+    @PostMapping("/queryPageTree")
+    public HttpResponseResult<PageInfo<Subject>> queryPageTree(@RequestBody SubjectQueryInfo queryInfo) {
+        return succeed(subjectService.queryPageTree(queryInfo));
+    }
+
+    @ApiOperation(value = "分页查询声部列表")
+    @GetMapping("/queryPage")
+    public HttpResponseResult<PageInfo<Subject>> queryPage(SubjectQueryInfo queryInfo) {
+        PageInfo<Subject> pageInfo = subjectService.queryPage(queryInfo);
+
+        if (pageInfo.getRows().size() == 0) {
+            return succeed(pageInfo);
+        }
+
+        Map<Long, Subject> map =
+                subjectService.findBySubjectByIdList(pageInfo.getRows().stream().map(Subject::getParentSubjectId).collect(Collectors.toList())).stream()
+                .collect(Collectors.toMap(Subject::getId, t -> t));
+
+        pageInfo.getRows().forEach(row -> {
+            if (row.getParentSubjectId() != null && row.getParentSubjectId() > 0) {
+                row.setParentSubjectName(map.get(row.getParentSubjectId()).getName());
+            }
+        });
+        return succeed(pageInfo);
+    }
+}

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

@@ -1,8 +1,6 @@
 package com.yonge.cooleshow.teacher.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkReviewDto;
 import com.yonge.cooleshow.biz.dal.dto.CourseHomeworkSaveDto;
 import com.yonge.cooleshow.biz.dal.dto.CourseScheduleHomeworkSearch;
@@ -12,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.vo.CountVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
@@ -25,14 +24,9 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
@@ -48,28 +42,24 @@ import java.util.List;
 @RequestMapping("${app-config.url.teacher:}/homework")
 public class CourseHomeworkController extends BaseController {
 
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
+    @Resource
+    private SysUserService sysUserService;
 
-    @Autowired
+    @Resource
     private CourseScheduleService courseScheduleService;
 
-    @Autowired
+    @Resource
     private CourseHomeworkService courseHomeworkService;
 
-    @Autowired
+    @Resource
     private ImGroupService imGroupService;
 
     @ApiOperation(value = "未布置的课后作业数量")
     @GetMapping(value="/count")
     public HttpResponseResult<CountVo> countTeacherNoDecorateHomework() {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null  || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
         HomeworkSearch homeworkSearch = new HomeworkSearch();
-        // 默认查当前老师,趣纠课 课程状态为完成, 没有学生课程记录
-        homeworkSearch.setTeacherId(sysUser.getId());
+        // 默认查当前老师,陪练课 课程状态为完成, 没有学生课程记录
+        homeworkSearch.setTeacherId(sysUserService.getUserId());
         homeworkSearch.setCourseStatus(CourseScheduleEnum.COMPLETE);
         List<CourseScheduleEnum> list = new ArrayList<>();
         list.add(CourseScheduleEnum.PIANO_ROOM_CLASS);
@@ -88,8 +78,7 @@ public class CourseHomeworkController extends BaseController {
                                                                  @PathVariable("courseId") Long courseId,
                                                              @PathVariable("studentId") Long studentId) {
 
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        HttpResponseResult info = checkCourseSchedule(courseId,sysUser);
+        HttpResponseResult info = checkCourseSchedule(courseId,sysUserService.getUserId());
         if (info != null) return info;
         CourseHomeworkDetailVo detailVo = courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId, studentId);
         if (detailVo != null) {
@@ -103,18 +92,13 @@ public class CourseHomeworkController extends BaseController {
     @ApiOperation(value = "首页-我的课程-课程详情(琴房)-课后作业列表",notes = "传入课程编号ID")
     @PostMapping(value = "/detail/list")
     public HttpResponseResult<CourseScheduleHomeworkVo> detail(@RequestBody @Valid CourseScheduleHomeworkSearch query) {
-
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        HttpResponseResult info = checkCourseSchedule(query.getCourseId(),sysUser);
+        HttpResponseResult info = checkCourseSchedule(query.getCourseId(),sysUserService.getUserId());
         if (info != null) return info;
         return succeed(courseHomeworkService.getCourseHomeworkDetailByCourseId(query));
     }
 
-    private HttpResponseResult checkCourseSchedule(Long courseId,SysUser sysUser) {
-        if (sysUser == null  || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
-        if (!courseScheduleService.checkTeacherCourseSchedule(sysUser.getId(), courseId)) {
+    private HttpResponseResult checkCourseSchedule(Long courseId,Long userId) {
+        if (!courseScheduleService.checkTeacherCourseSchedule(userId, courseId)) {
             return failed("老师只能看自己的课程详情");
         }
         return null;
@@ -123,31 +107,27 @@ public class CourseHomeworkController extends BaseController {
     @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) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        HttpResponseResult info = checkCourseSchedule(saveDto.getCourseScheduleId(),sysUser);
+        Long userId = sysUserService.getUserId();
+        HttpResponseResult info = checkCourseSchedule(saveDto.getCourseScheduleId(),userId);
         if (info != null) return info;
-        saveDto.setTeacherId(sysUser.getId());
+        saveDto.setTeacherId(userId);
         return succeed(courseHomeworkService.decorateCourseHomework(saveDto));
     }
 
     @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) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        HttpResponseResult info = checkCourseSchedule(reviewDto.getCourseScheduleId(),sysUser);
+        Long userId = sysUserService.getUserId();
+        HttpResponseResult info = checkCourseSchedule(reviewDto.getCourseScheduleId(),userId);
         if (info != null) return info;
-        reviewDto.setTeacherId(sysUser.getId());
+        reviewDto.setTeacherId(userId);
         return succeed(courseHomeworkService.reviewCourseHomework(reviewDto));
     }
 
     @ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
     @PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
     public HttpResponseResult<PageInfo<CourseHomeworkVo>> list(@Valid @RequestBody HomeworkSearch query) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (query.getDecorate() == null) {
-            return failed("布置状态不能为空");
-        }
-        query.setTeacherId(sysUser.getId());
+        query.setTeacherId(sysUserService.getUserId());
         query.setCourseStatus(CourseScheduleEnum.COMPLETE);
         List<CourseScheduleEnum> list = new ArrayList<>();
         list.add(CourseScheduleEnum.PIANO_ROOM_CLASS);

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

@@ -1,12 +1,10 @@
 package com.yonge.cooleshow.teacher.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
-import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseRepliedService;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.vo.CourseRepliedVo;
 import com.yonge.cooleshow.biz.dal.vo.MyRepliedVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -15,13 +13,14 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+
 /**
  * @Author: cy
  * @Date: 2022/4/12
@@ -30,39 +29,28 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("${app-config.url.teacher:}/courseReplied")
 public class CourseRepliedController extends BaseController {
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
-    @Autowired
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
     private CourseRepliedService repliedService;
 
     @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) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null  || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
-
-        replied.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
-        repliedService.replied(replied,sysUser);
+        repliedService.replied(replied,sysUserService.getUser());
         return succeed();
     }
 
     @ApiOperation(value = "首页-我的课程-课程详情-查询趣纠课评价")
     @PostMapping(value = "/selectReplied")
     public HttpResponseResult<CourseRepliedVo> selectReplied(@Validated @RequestBody CourseScheduleReplied replied) {
-        replied.setCourseGroupType(CourseScheduleEnum.PRACTICE.getCode());
         return succeed(repliedService.selectReplied(replied));
     }
 
     @ApiOperation(value = "首页-我收到的评价")
     @PostMapping(value = "/myReplied")
     public HttpResponseResult<PageInfo<MyRepliedVo>> myReplied(@RequestBody MyCourseSearch search) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null  || sysUser.getId() == null) {
-            return failed("用户信息获取失败");
-        }
-        search.setTeacherId(sysUser.getId());
+        search.setTeacherId(sysUserService.getUserId());
         IPage<MyRepliedVo> pages = repliedService.myReplied(PageUtil.getPage(search), search);
         return succeed(PageUtil.pageInfo(pages));
     }

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

@@ -4,6 +4,7 @@ package com.yonge.cooleshow.teacher.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto;
+import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
@@ -139,8 +140,30 @@ public class TeacherCourseGroupController extends BaseController {
     @PostMapping("/myCourseGroup")
     public HttpResponseResult<PageInfo<CourseGroupWrapper.TeacherCourseGroupDto>> myCourseGroup(@RequestBody CourseGroupWrapper.TeacherCourseGroupQuery query) {
         query.setTeacherId(sysUserService.getUserId());
-        IPage<CourseGroupWrapper.TeacherCourseGroupDto> pages = courseGroupService.myCourseGroup(PageUtil.getPage(query), query);
+        IPage<CourseGroupWrapper.TeacherCourseGroupDto> pages = courseGroupService.teacherCourseGroup(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
     }
+
+    @ApiOperation("老师端获取单个课程组")
+    @PostMapping("/getCourseGroup")
+    public HttpResponseResult<CourseGroupWrapper.TeacherCourseGroupDto> getCourseGroup(Long courseGroupId) {
+        CourseGroupWrapper.TeacherCourseGroupQuery query = new CourseGroupWrapper.TeacherCourseGroupQuery();
+        query.setCourseGroupId(courseGroupId);
+        IPage<CourseGroupWrapper.TeacherCourseGroupDto> pages = courseGroupService.teacherCourseGroup(PageUtil.getPage(query), query);
+        return succeed(pages.getRecords().get(0));
+    }
+
+    @ApiOperation("获取课程组关联的学员")
+    @PostMapping("/queryStudentByGroupId")
+    public HttpResponseResult<List<CourseGroupWrapper.CourseStudentVo>> queryStudentByGroupId(Long groupId) {
+        return succeed(courseGroupService.queryStudentByGroupId(groupId));
+    }
+
+    @ApiOperation("修改课程规划")
+    @PostMapping("/updateCoursePlan")
+    public HttpResponseResult<Object> updateCoursePlan(Long groupId, String coursePlan) {
+        courseGroupService.lambdaUpdate().eq(CourseGroup::getId, groupId).set(CourseGroup::getCoursePlan, coursePlan).update();
+        return succeed();
+    }
 }
 

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

@@ -256,5 +256,11 @@ public class TeacherCourseScheduleController extends BaseController {
 
         return succeed(courseScheduleService.getLiveCourseScheduleTime(roomUid));
     }
+
+    @ApiOperation(value = "获取课程列表")
+    @PostMapping("/list")
+    public HttpResponseResult<List<CourseScheduleWrapper.MyCourseVo>> queryList(@RequestBody CourseScheduleWrapper.CourseQuery query){
+        return succeed(courseScheduleService.queryList(query));
+    }
 }
 

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

@@ -1,11 +1,15 @@
 package com.yonge.cooleshow.teacher.controller;
 
+import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
+import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.TeacherSubjectPriceService;
 import com.yonge.cooleshow.biz.dal.wrapper.TeacherSubjectPriceWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
@@ -17,6 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 
@@ -28,12 +33,22 @@ public class TeacherSubjectPriceController extends BaseController {
     private TeacherSubjectPriceService teacherSubjectPriceService;
     @Resource
     private SysUserService sysUserService;
+    @Resource
+    private SubjectService subjectService;
 
     @ApiOperation(value = "新增、修改老师课程价格配置")
     @PostMapping("/saveOrUpdate")
-    public HttpResponseResult<Long> saveOrUpdate(@RequestBody TeacherSubjectPrice teacherSubjectPrice){
-        teacherSubjectPrice.setTeacherId(sysUserService.getUserId());
-        return succeed(teacherSubjectPriceService.upSet(teacherSubjectPrice));
+    public HttpResponseResult saveOrUpdate(@RequestBody List<TeacherSubjectPrice> teacherSubjectPriceList){
+        if (CollectionUtils.isEmpty(teacherSubjectPriceList)) {
+            throw new BizException("参数不能为空");
+        }
+        Long userId = sysUserService.getUserId();
+        for (TeacherSubjectPrice e : teacherSubjectPriceList) {
+            e.setTeacherId(userId);
+            e.setId(null);
+        }
+        teacherSubjectPriceService.upSet(teacherSubjectPriceList);
+        return succeed();
     }
 
     @ApiOperation(value = "删除老师课程价格配置")
@@ -58,7 +73,7 @@ public class TeacherSubjectPriceController extends BaseController {
             TeacherSubjectPriceWrapper.TeacherSubjectPriceDto dto = new TeacherSubjectPriceWrapper.TeacherSubjectPriceDto();
             String subjectIds = list.stream().map(e->e.getSubjectId().toString()).distinct().collect(Collectors.joining(","));
             String subjectNames = list.stream().map(TeacherSubjectPrice::getSubjectName).distinct().collect(Collectors.joining(","));
-            dto.setSubjectId(subjectIds);
+            dto.setSubjectIds(subjectIds);
             dto.setSubjectName(subjectNames);
             dto.setTeacherId(list.get(0).getTeacherId());
             dto.setCourseType(list.get(0).getCourseType());
@@ -69,5 +84,24 @@ public class TeacherSubjectPriceController extends BaseController {
         }
         return succeed();
     }
+
+    @ApiOperation(value = "获取老师课程价格配置")
+    @PostMapping("/list")
+    public HttpResponseResult<List<TeacherSubjectPriceWrapper.TeacherSubjectPriceDto>> list(@RequestBody TeacherSubjectPriceWrapper.PriceSearch query){
+        List<TeacherSubjectPrice> list = teacherSubjectPriceService.lambdaQuery()
+                .eq(TeacherSubjectPrice::getTeacherId, sysUserService.getUserId())
+                .eq(query.getSubjectId() != null, TeacherSubjectPrice::getSubjectId, query.getSubjectId())
+                .eq(StringUtils.isNotEmpty(query.getCourseType()), TeacherSubjectPrice::getCourseType, query.getCourseType())
+                .list();
+        if(CollectionUtils.isNotEmpty(list)){
+            List<TeacherSubjectPriceWrapper.TeacherSubjectPriceDto> results = JSONObject.parseArray(JSONObject.toJSONString(list), TeacherSubjectPriceWrapper.TeacherSubjectPriceDto.class);
+            List<Long> subjectIds = list.stream().map(TeacherSubjectPrice::getSubjectId).distinct().collect(Collectors.toList());
+            List<Subject> subjectList = subjectService.findBySubjectByIdList(subjectIds);
+            Map<Long, String> subjectMap = subjectList.stream().collect(Collectors.toMap(Subject::getId, Subject::getImg));
+            results.forEach(e->e.setSubjectPic(subjectMap.get(e.getSubjectId())));
+            return succeed(results);
+        }
+        return succeed();
+    }
 }
 

+ 8 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -50,6 +50,10 @@ public interface SysConfigConstant {
      */
     String PRE_CREATE_PRACTICE_ROOM_MINUTE = "pre_create_practice_room_minute";
     /**
+     * 提前XX分钟创建/进入VIP课房间时间
+     */
+    String PRE_CREATE_VIP_ROOM_MINUTE = "pre_create_vip_course_room_minute";
+    /**
      * 直播结束后,XX分钟关闭房间
      */
     String DESTROY_EXPIRED_LIVE_ROOM_MINUTE = "destroy_expired_live_room_minute";
@@ -58,6 +62,10 @@ public interface SysConfigConstant {
      */
     String DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE = "destroy_expired_practice_room_minute";
     /**
+     * VIP课结束后,XX分钟关闭房间
+     */
+    String DESTROY_EXPIRED_VIP_ROOM_MINUTE = "destroy_expired_vip_course_room_minute";
+    /**
      * 课程结束后,XX天后结算课酬
      */
     String COURSE_SETTLEMENT_TIME_DAY = "course_settlement_time_day";

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

@@ -265,7 +265,10 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
      */
     List<Subject> selectLiveSubject();
 
-    List<CourseGroupWrapper.TeacherCourseGroupDto> myCourseGroup(@Param("page") IPage<CourseGroupWrapper.TeacherCourseGroupDto> page,
+    List<CourseGroupWrapper.TeacherCourseGroupDto> teacherCourseGroup(@Param("page") IPage<CourseGroupWrapper.TeacherCourseGroupDto> page,
+                                                                 @Param("param") CourseGroupWrapper.TeacherCourseGroupQuery query);
+
+    List<CourseGroupWrapper.StudentCourseGroupDto> studentCourseGroup(@Param("page") IPage<CourseGroupWrapper.StudentCourseGroupDto> page,
                                                                  @Param("param") CourseGroupWrapper.TeacherCourseGroupQuery query);
 }
 

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

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
 import com.yonge.cooleshow.biz.dal.vo.CourseScheduleStudentPaymentVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseScheduleStudentVo;
 import com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo;
+import com.yonge.cooleshow.biz.dal.wrapper.course.CourseGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;

+ 4 - 129
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/CourseGroupSearch.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
@@ -15,6 +16,7 @@ import java.util.Date;
  * @Date: 2022/5/19
  */
 @ApiModel
+@Data
 public class CourseGroupSearch extends QueryInfo {
     @ApiModelProperty(value = "课程组、老师、学员编号/名称")
     private String search;
@@ -68,133 +70,6 @@ public class CourseGroupSearch extends QueryInfo {
     @ApiModelProperty(value = "是否草稿 (0:否  1:是)",hidden = true)
     private Integer draftFlag;
 
-    public CourseRelationTypeEnum getRelationType() {
-        return relationType;
-    }
-
-    public void setRelationType(CourseRelationTypeEnum relationType) {
-        this.relationType = relationType;
-    }
-
-    public YesOrNoEnum getTopFlag() {
-        return topFlag;
-    }
-
-    public void setTopFlag(YesOrNoEnum topFlag) {
-        this.topFlag = topFlag;
-    }
-
-    public Integer getDraftFlag() {
-        return draftFlag;
-    }
-
-    public void setDraftFlag(Integer draftFlag) {
-        this.draftFlag = draftFlag;
-    }
-
-    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 Long getCourseId() {
-        return courseId;
-    }
-
-    public void setCourseId(Long courseId) {
-        this.courseId = courseId;
-    }
-
-    public String getSalaryStatus() {
-        return salaryStatus;
-    }
-
-    public void setSalaryStatus(String salaryStatus) {
-        this.salaryStatus = salaryStatus;
-    }
-
-    public Long getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(Long groupId) {
-        this.groupId = groupId;
-    }
-
-    public String getOrderNo() {
-        return orderNo;
-    }
-
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
-    }
-
-    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;
-    }
-
-    @Override
-    public String getSearch() {
-        return search;
-    }
-
-    @Override
-    public void setSearch(String search) {
-        this.search = search;
-    }
-
-    public Long getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Long subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public Integer getShelvesFlag() {
-        return shelvesFlag;
-    }
-
-    public void setShelvesFlag(Integer shelvesFlag) {
-        this.shelvesFlag = shelvesFlag;
-    }
-
-    public String getPayType() {
-        return payType;
-    }
-
-    public void setPayType(String payType) {
-        this.payType = payType;
-    }
+    @ApiModelProperty(value = "课程组类型 VIP 、PRACTICE")
+    private String groupType = "PRACTICE";
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MyCourseSearch.java

@@ -49,4 +49,7 @@ public class MyCourseSearch extends QueryInfo {
 
     @ApiModelProperty(value = "课程类型")
     private String courseType = "PRACTICE";
+
+    @ApiModelProperty(value = "考勤状态 , false:未考勤 true:已考勤")
+    private Boolean attendanceStatus;
 }

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

@@ -103,6 +103,10 @@ public class CourseGroup implements Serializable {
     @ApiModelProperty(value = "是否审核时可见 (0:否  1:是)")
     private YesOrNoEnum auditVersion = YesOrNoEnum.NO;
 
+    @TableField("course_plan_")
+    @ApiModelProperty(value = "课程规划")
+    private String coursePlan;
+
     @TableField("created_by_")
     @ApiModelProperty(value = "创建人")
     private Long createdBy;

+ 0 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherTotal.java

@@ -49,8 +49,4 @@ public class TeacherTotal implements Serializable {
     @ApiModelProperty("曲谱数 ")
     @TableField(value = "music_sheet_num_")
     private Integer musicSheetNum = 0;
-
-    @TableField("practice_flag_")
-    @ApiModelProperty(value = "是否开启趣纠课(1是 0否)")
-    private Boolean practiceFlag = false;
 }

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

@@ -368,7 +368,13 @@ public interface CourseGroupService extends IService<CourseGroup> {
     void buyLiveCourseAfter(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo);
 
     //老师端-我的课程组
-    IPage<CourseGroupWrapper.TeacherCourseGroupDto> myCourseGroup(IPage<CourseGroupWrapper.TeacherCourseGroupDto> page,
+    IPage<CourseGroupWrapper.TeacherCourseGroupDto> teacherCourseGroup(IPage<CourseGroupWrapper.TeacherCourseGroupDto> page,
                                                                   CourseGroupWrapper.TeacherCourseGroupQuery query);
+
+    //老师端-我的课程组
+    IPage<CourseGroupWrapper.StudentCourseGroupDto> studentCourseGroup(IPage<CourseGroupWrapper.StudentCourseGroupDto> page,
+                                                                  CourseGroupWrapper.TeacherCourseGroupQuery query);
+
+    List<CourseGroupWrapper.CourseStudentVo> queryStudentByGroupId(Long groupId);
 }
 

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

@@ -302,5 +302,8 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      */
     void buyPracticeCourseAfter(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo);
 
+    List<CourseScheduleWrapper.MyCourseVo> queryList(CourseScheduleWrapper.CourseQuery query);
+
+    List<CourseScheduleWrapper.StudentCourseList> queryListByStudent(CourseScheduleWrapper.CourseQuery query);
 }
 

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

@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.TeacherSubjectPriceDao;
 import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
 
+import java.util.List;
+
 public interface TeacherSubjectPriceService extends IService<TeacherSubjectPrice> {
 
     TeacherSubjectPriceDao getDao();
 
-    Long upSet(TeacherSubjectPrice teacherSubjectPrice);
+    void upSet(List<TeacherSubjectPrice> teacherSubjectPriceList);
 }
 

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

@@ -6,8 +6,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
-import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
-import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.constant.CourseConstant;
 import com.yonge.cooleshow.biz.dal.dao.CourseGroupDao;
@@ -51,7 +49,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.text.MessageFormat;
 import java.time.LocalDate;
 import java.time.ZoneId;
 import java.util.*;
@@ -75,7 +72,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     private final static Logger log = LoggerFactory.getLogger(CourseGroupServiceImpl.class);
 
     @Autowired
-    private SysUserFeignService sysUserFeignService;
+    private SysUserService sysUserService;
     @Autowired
     private RedissonClient redissonClient;
     @Autowired
@@ -129,7 +126,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      */
     @Override
     public LiveCourseInfoVo queryLiveCourseInfo(Long groupId) {
-        return queryLiveCourseInfo(groupId, getSysUser());
+        return queryLiveCourseInfo(groupId, sysUserService.getUser());
     }
 
     /**
@@ -159,7 +156,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         result.setMixStudentNum(group.getMixStudentNum());
         result.setImGroupId(group.getImGroupId());
         result.setAuditVersion(group.getAuditVersion());
-        SysUser teacherUser = getSysUser(group.getTeacherId());
+        SysUser teacherUser = sysUserService.getByUserId(group.getTeacherId());
         if (teacherUser == null) {
             throw new BizException("用户不存在");
         }
@@ -230,11 +227,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         pageInfo.setAsc("b.created_time_");
         String os = WrapperUtil.toStr(param, "os");
         if (StringUtils.isNotBlank(os) && os.equals("student")) {
-            Long studentId = getSysUser().getId();
-            if (Objects.isNull(studentId)) {
-                throw new BizException("未查询到用户信息请重新登录");
-            }
-            param.put("studentId", studentId);
+            param.put("studentId", sysUserService.getUserId());
             IPage<CourseGroupVo> page = baseMapper.queryStudentCourseGroup(pageInfo, param);
             return PageUtil.pageInfo(page);
         }
@@ -361,7 +354,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         Long groupId = WrapperUtil.toLong(param, "groupId", "课程组id不能为空!");
         Long studentId = orderGoodsInfo.getUserId();
         //校验学生信息
-        getSysUser(studentId);
+        sysUserService.findUserById(studentId);
         //课程组信息
         CourseGroup courseGroup = this.getOne(Wrappers.<CourseGroup>lambdaQuery()
                 .eq(CourseGroup::getId, groupId)
@@ -405,18 +398,101 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     }
 
     @Override
-    public IPage<CourseGroupWrapper.TeacherCourseGroupDto> myCourseGroup(IPage<CourseGroupWrapper.TeacherCourseGroupDto> page,
+    public IPage<CourseGroupWrapper.TeacherCourseGroupDto> teacherCourseGroup(IPage<CourseGroupWrapper.TeacherCourseGroupDto> page,
                                                                          CourseGroupWrapper.TeacherCourseGroupQuery query) {
-        List<CourseGroupWrapper.TeacherCourseGroupDto> records = this.baseMapper.myCourseGroup(page, query);
+        List<CourseGroupWrapper.TeacherCourseGroupDto> records = this.baseMapper.teacherCourseGroup(page, query);
         if (CollectionUtils.isNotEmpty(records)) {
+            List<Long> courseIds = records.stream().map(CourseGroupWrapper.TeacherCourseGroupDto::getCourseGroupId).distinct().collect(Collectors.toList());
             List<Long> subjectIds = records.stream().map(CourseGroupWrapper.TeacherCourseGroupDto::getSubjectId).distinct().collect(Collectors.toList());
             List<Subject> subjectList = subjectService.findBySubjectByIdList(subjectIds);
             Map<Long, String> subjectMap = subjectList.stream().collect(Collectors.toMap(Subject::getId, Subject::getName));
-            records.forEach(e -> e.setSubjectName(subjectMap.get(e.getSubjectId())));
+            List<CourseScheduleStudentPayment> list = courseScheduleStudentPaymentService.lambdaQuery()
+                    .in(CourseScheduleStudentPayment::getCourseGroupId, courseIds)
+                    .list();
+            Map<Long, List<CourseScheduleStudentPayment>> map = list.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getCourseGroupId));
+            //获取所有用户编号
+
+            List<Long> userIds = list.stream().map(CourseScheduleStudentPayment::getUserId).distinct().collect(Collectors.toList());
+            Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> userMap = sysUserService.getMapByIds(userIds);
+            for (CourseGroupWrapper.TeacherCourseGroupDto e : records) {
+                e.setSubjectName(subjectMap.get(e.getSubjectId()));
+                if(StringUtils.equals(query.getCourseType(),"PIANO_ROOM_CLASS")){
+                    List<CourseScheduleStudentPayment> studentPayments = map.get(e.getCourseGroupId());
+                    e.setStudentNum(studentPayments.size());
+                    StringBuffer studentName = new StringBuffer();
+                    for (int i = 0; i < studentPayments.size(); i++) {
+                        if(studentName.length() > 0){
+                            studentName.append(",");
+                        }
+                        studentName.append(userMap.get(studentPayments.get(i).getUserId()).getUsername());
+                        if (i > 0) {
+                            studentName.append("等").append(studentPayments.size()).append("人");
+                            break;
+                        }
+                    }
+                    e.setStudentName(studentName.toString());
+                }else{
+                    CourseScheduleStudentPayment studentPayment = map.get(e.getCourseGroupId()).get(0);
+                    com.yonge.cooleshow.biz.dal.entity.SysUser sysUser = userMap.get(studentPayment.getUserId());
+                    e.setStudentName(sysUser.getUsername());
+                    e.setCourseGroupName(e.getCourseGroupName() + "-" + sysUser.getUsername());
+                    e.setStudentAvatar(sysUser.getAvatar());
+                }
+            }
         }
         return page.setRecords(records);
     }
 
+    @Override
+    public IPage<CourseGroupWrapper.StudentCourseGroupDto> studentCourseGroup(IPage<CourseGroupWrapper.StudentCourseGroupDto> page,
+                                                                         CourseGroupWrapper.TeacherCourseGroupQuery query) {
+        List<CourseGroupWrapper.StudentCourseGroupDto> records = this.baseMapper.studentCourseGroup(page, query);
+        if (CollectionUtils.isNotEmpty(records)) {
+            List<Long> subjectIds = records.stream().map(CourseGroupWrapper.StudentCourseGroupDto::getSubjectId).distinct().collect(Collectors.toList());
+            List<Subject> subjectList = subjectService.findBySubjectByIdList(subjectIds);
+            Map<Long, String> subjectMap = subjectList.stream().collect(Collectors.toMap(Subject::getId, Subject::getName));
+            //获取所有用户编号
+
+            List<Long> userIds = records.stream().map(CourseGroupWrapper.StudentCourseGroupDto::getTeacherId).distinct().collect(Collectors.toList());
+            Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> userMap = sysUserService.getMapByIds(userIds);
+            for (CourseGroupWrapper.StudentCourseGroupDto e : records) {
+                e.setSubjectName(subjectMap.get(e.getSubjectId()));
+                com.yonge.cooleshow.biz.dal.entity.SysUser user = userMap.get(e.getTeacherId());
+                if(Objects.nonNull(user)){
+                    e.setTeacherName(user.getRealName());
+                    e.setTeacherAvatar(user.getAvatar());
+                }
+            }
+        }
+        return page.setRecords(records);
+    }
+
+    @Override
+    public List<CourseGroupWrapper.CourseStudentVo> queryStudentByGroupId(Long groupId) {
+        List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentService.lambdaQuery()
+                .eq(CourseScheduleStudentPayment::getCourseGroupId, groupId)
+                .isNotNull(CourseScheduleStudentPayment::getUserId)
+                .list();
+        if (CollectionUtils.isNotEmpty(studentPayments)) {
+            List<Long> userIds = studentPayments.stream().map(CourseScheduleStudentPayment::getUserId).distinct().collect(Collectors.toList());
+            Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> mapByIds = sysUserService.getMapByIds(userIds);
+            List<CourseGroupWrapper.CourseStudentVo> result = new ArrayList<>();
+            userIds.forEach(e -> {
+                CourseGroupWrapper.CourseStudentVo vo = new CourseGroupWrapper.CourseStudentVo();
+                vo.setStudentId(e);
+                com.yonge.cooleshow.biz.dal.entity.SysUser sysUser = mapByIds.get(e);
+                vo.setStudentName(sysUser.getRealName());
+                vo.setUserName(sysUser.getUsername());
+                vo.setAvatar(sysUser.getAvatar());
+                vo.setImUserId(imGroupService.getImUserId(String.valueOf(e),
+                        ClientEnum.STUDENT.name()));
+                result.add(vo);
+            });
+            return result;
+        }
+        return Collections.emptyList();
+    }
+
     /**
      *
      * 直播课购买后数据写入
@@ -557,7 +633,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         timeList.forEach(o -> {
             boolean checkDataTime = courseScheduleService.checkStudentCourseTime(studentId, startTimeFun.apply(o), endTimeFun.apply(o));
             if (checkDataTime) {
-                SysUser sysUser = sysUserFeignService.queryUserById(studentId);
+                SysUser sysUser = sysUserService.getByUserId(studentId);
                 throw new BizException("学生:" + sysUser.getUsername() + ",预计安排在" + DateUtil.dateToString(startTimeFun.apply(o), "yyyy年MM月dd号 HH点mm分") + "的课程时间存在冲突!");
             }
         });
@@ -586,7 +662,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             );
             Optional.ofNullable(teacherTime).orElseThrow(() -> new BizException("未查询到老师趣纠课设置!"));
             skipHoliday = teacherTime.getSkipHolidayFlag();
-            studentId = getSysUser().getId();
+            studentId = sysUserService.getUserId();
         }
 
         //获取当前课程
@@ -826,7 +902,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         Long groupId = WrapperUtil.toLong(param, "groupId", "课程组id不能为空!");
         Long studentId = orderReqInfo.getUserId();
         //校验学生信息
-        getSysUser(studentId);
+        sysUserService.findUserById(studentId);
         //课程组信息
         CourseGroup courseGroup = this.getOne(Wrappers.<CourseGroup>lambdaQuery()
                 .eq(CourseGroup::getId, groupId)
@@ -1023,9 +1099,9 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Override
     public void buyLiveSendMessage(CourseScheduleStudentPayment studentPayment, CourseGroup courseGroup) {
         //查询老师信息
-        SysUser teacherInfo = getSysUser(courseGroup.getTeacherId());
+        SysUser teacherInfo = sysUserService.findUserById(courseGroup.getTeacherId());
         //查询学生信息
-        SysUser studentInfo = getSysUser(studentPayment.getUserId());
+        SysUser studentInfo = sysUserService.findUserById(studentPayment.getUserId());
         try {
 
             String payType = "";
@@ -1107,17 +1183,6 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                 .eq(CourseScheduleStudentPayment::getOrderNo, orderParam.getOrderNo()));
     }
 
-    private SysUser getSysUser(Long userId) {
-        return Optional.ofNullable(userId)
-                .map(sysUserFeignService::queryUserById)
-                .orElseThrow(() -> new BizException("用户不存在"));
-    }
-
-    private SysUser getSysUser() {
-        return Optional.ofNullable(sysUserFeignService.queryUserInfo())
-                .orElseThrow(() -> new BizException("用户不存在"));
-    }
-
     /**
      * <p>定时将符合开售日期的未开售的直播课课程组修改为报名中状态-每隔10分钟执行一次
      * <p>定时将符合结束售卖日期的在售卖中的直播课课程组修改为取消或者成课状态状态-每隔10分钟执行一次
@@ -1335,7 +1400,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     private void sendStudentMessage(Set<Long> userIds, CourseGroup courseGroup) {
         for (Long userId : userIds) {
 
-                SysUser user = sysUserFeignService.queryUserById(userId);
+                SysUser user = sysUserService.getByUserId(userId);
                 // 发短信
                 try {
                     Map<Long, String> receivers = new HashMap<>();
@@ -1401,7 +1466,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         }
         // 发短信
         try {
-            SysUser user = sysUserFeignService.queryUserById(courseGroup.getTeacherId());
+            SysUser user = sysUserService.getByUserId(courseGroup.getTeacherId());
             Map<Long, String> receivers = new HashMap<>();
             receivers.put(user.getId(), user.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_LIVE_COMPLETION_FAIL,
@@ -1412,7 +1477,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
 
         // 发推送
         try {
-            SysUser user = sysUserFeignService.queryUserById(courseGroup.getTeacherId());
+            SysUser user = sysUserService.getByUserId(courseGroup.getTeacherId());
             Map<Long, String> receivers = new HashMap<>();
             receivers.put(user.getId(), user.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.LIVE_COMPLETION_FAIL,
@@ -1512,7 +1577,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Override
     public ShareProfitVo shareLiveCourseProfit(SysUser sysUser, Long liveGroupId) {
         LiveCourseInfoVo liveCourseInfoVo = queryLiveCourseInfo(liveGroupId, sysUser);
-        SysUser teacher = this.getSysUser(liveCourseInfoVo.getTeacherId());
+        SysUser teacher = sysUserService.getByUserId(liveCourseInfoVo.getTeacherId());
 
         LiveCourseGroupShareVo liveCourseGroupShareVo = new LiveCourseGroupShareVo();
         BeanUtils.copyProperties(liveCourseInfoVo, liveCourseGroupShareVo);
@@ -1585,7 +1650,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     private void sendOutSaleMessage(LiveSaleOutDto dto, CourseGroup liveCourseGroupVo) {
         // 发送课程下架通知
         try {
-            SysUser user = sysUserFeignService.queryUserById(liveCourseGroupVo.getTeacherId());
+            SysUser user = sysUserService.getByUserId(liveCourseGroupVo.getTeacherId());
             Map<Long, String> receivers = new HashMap<>();
             receivers.put(user.getId(), user.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.LIVE_COURSE_OUT_SALE_REASON,

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

@@ -452,6 +452,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         // 1. 检查课程类型
         CourseSchedule courseSchedule = courseScheduleService.getById(courseScheduleId);
         if (!CourseScheduleEnum.PRACTICE.getCode().equals(courseSchedule.getType())
+                && !CourseScheduleEnum.VIP.getCode().equals(courseSchedule.getType())
                 && !CourseScheduleEnum.PIANO_ROOM_CLASS.getCode().equals(courseSchedule.getType())) {
             throw new BizException("不能布置课后作业");
         }

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

@@ -141,6 +141,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     @Autowired
     private TeacherService teacherService;
 
+    @Autowired
+    private StudentAttendanceService studentAttendanceService;
+    @Autowired
+    private SubjectService subjectService;
+
     @Override
     public CourseScheduleDao getDao() {
         return this.baseMapper;
@@ -162,20 +167,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             CourseScheduleEnum.existCourseState(status, "查询条件错误,课程状态不正确");
         }
         param.put("status", status);
-        String classDate = WrapperUtil.toStr(param, "classDate", "查询时间不能为空!");
-        //本月的第一天
-        LocalDate firstDay;
-        try {
-            String[] classDateSp = classDate.split("-");
-            firstDay = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
-        } catch (Exception e) {
-            throw new BizException("查询时间格式不正确 [" + classDate + "]");
-        }
-        //本月的最后一天
-        LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth());
-        //查询该月的所有课程
-        param.put("startDate", firstDay.toString());
-        param.put("endDate", lastDay.toString());
         param.put("teacherId", sysUserService.getUserId());
         param.put("type", CourseScheduleEnum.LIVE.getCode());
         param.put("groupState", String.join(",", CourseGroupEnum.ING.getCode(), CourseGroupEnum.COMPLETE.getCode()));
@@ -1019,7 +1010,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         }
 
         Map<String, String> sysConfig = new HashMap<>();
-        //提前XX分钟创建/进入趣纠课房间时间
+        //提前XX分钟创建/进入VIP课房间时间
+        sysConfig.put("vipStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_VIP_ROOM_MINUTE));
+        //VIP课结束后,XX分钟关闭房间
+        sysConfig.put("vipEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_VIP_ROOM_MINUTE));
+        //提前XX分钟创建/进入陪练课房间时间
         sysConfig.put("practiceStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
         //趣纠课结束后,XX分钟关闭房间
         sysConfig.put("practiceEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
@@ -1105,19 +1100,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      */
     @Override
     public PageInfo<CourseStudent> queryStudentLiveCourse(Map<String, Object> param) {
-        String classDate = WrapperUtil.toStr(param, "classDate");
-        String[] classDateSp = classDate.split("-");
-        LocalDate firstDay;
-        try {
-            firstDay = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
-        } catch (Exception e) {
-            throw new BizException("查询时间格式不正确 [" + classDate + "]");
-        }
         //本月的最后一天
-        LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth());
         param.put("type", CourseScheduleEnum.LIVE.getCode());
-        param.put("startDate", firstDay.toString());
-        param.put("endDate", lastDay.toString());
         param.put("orderState", OrderStatusEnum.PAID.getCode());
         Page<CourseStudent> pageInfo = PageUtil.getPageInfo(param);
         pageInfo.setAsc(" cs.start_time_");
@@ -1570,11 +1554,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Date: 2022/4/26
      */
     public List<TeacherSubjectPrice> teacherSubjectPrice(Long teacherId) {
-        TeacherTotal teacherTotal = teacherTotalService.lambdaQuery().eq(TeacherTotal::getUserId, teacherId)
-                .eq(TeacherTotal::getPracticeFlag, true).one();
-        if (teacherTotal == null) {
-            throw new BizException("老师未开启趣纠课");
-        }
         TeacherFreeTime teacherFreeTime = teacherFreeTimeService.lambdaQuery().eq(TeacherFreeTime::getTeacherId, teacherId).one();
         if (teacherFreeTime == null) {
             log.info("未查到趣纠课配置,老师id:{}", teacherId);
@@ -2721,6 +2700,174 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
     }
 
+    @Override
+    public List<CourseScheduleWrapper.MyCourseVo> queryList(CourseScheduleWrapper.CourseQuery query) {
+        //获取所有课程列表
+        List<CourseSchedule> courseSchedules = this.lambdaQuery().eq(CourseSchedule::getCourseGroupId, query.getCourseGroupId())
+                .eq(StringUtils.isNotEmpty(query.getStatus()), CourseSchedule::getStatus, query.getStatus())
+                .ne(query.getAttendanceStatus() != null,CourseSchedule::getStatus,"NOT_START")
+                .orderByDesc(CourseSchedule::getStartTime)
+                .list();
+        if (CollectionUtils.isEmpty(courseSchedules)) {
+            return Lists.newArrayList();
+        }
+        if(StringUtils.isNotEmpty(query.getClassMonth())){
+            courseSchedules = courseSchedules.stream().
+                    filter(courseSchedule -> query.getClassMonth().equals(DateUtil.dateToString(courseSchedule.getStartTime(),"yyyy-MM"))).collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(courseSchedules)) {
+                return Lists.newArrayList();
+            }
+        }
+        if(query.getAttendanceStatus() != null){
+            List<Long> courseIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+            List<StudentAttendance> list = studentAttendanceService.lambdaQuery().in(StudentAttendance::getCourseScheduleId, courseIds).list();
+            if(query.getAttendanceStatus()){
+                if (CollectionUtils.isEmpty(list)) {
+                    return Lists.newArrayList();
+                }
+                courseSchedules = courseSchedules.stream().filter(courseSchedule -> list.stream()
+                        .anyMatch(studentAttendance -> studentAttendance.getCourseScheduleId().equals(courseSchedule.getId()))).collect(Collectors.toList());
+            }else {
+                if (CollectionUtils.isNotEmpty(list)) {
+                    courseSchedules = courseSchedules.stream().filter(courseSchedule -> list.stream()
+                            .noneMatch(studentAttendance -> studentAttendance.getCourseScheduleId().equals(courseSchedule.getId()))).collect(Collectors.toList());
+                }
+            }
+        }
+        if (CollectionUtils.isEmpty(courseSchedules)) {
+            return Lists.newArrayList();
+        }
+        List<Long> courseScheduleIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+        //获取所有学生列表
+        List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentService.lambdaQuery()
+                .in(CourseScheduleStudentPayment::getCourseId, courseScheduleIds)
+                .list();
+        if (CollectionUtils.isEmpty(studentPayments)) {
+            return Lists.newArrayList();
+        }
+        //获取所有学生信息
+        List<Long> studentIds = studentPayments.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
+        List<StudentAttendance> attendanceList = Lists.newArrayList();
+        if(query.getAttendanceStatus() == null){
+            attendanceList = studentAttendanceService.lambdaQuery().in(StudentAttendance::getCourseScheduleId, courseScheduleIds).list();
+        }
+        Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> userMap = sysUserService.getMapByIds(studentIds);
+        List<CourseScheduleWrapper.MyCourseVo> courseVos = Lists.newArrayList();
+        CourseGroup courseGroup = courseGroupService.lambdaQuery().eq(CourseGroup::getId, query.getCourseGroupId()).one();
+        for (CourseSchedule courseSchedule : courseSchedules) {
+            CourseScheduleWrapper.MyCourseVo courseVo = new CourseScheduleWrapper.MyCourseVo();
+            courseVo.setCourseId(courseSchedule.getId());
+            courseVo.setClassDate(courseSchedule.getClassDate());
+            courseVo.setStartTime(courseSchedule.getStartTime());
+            courseVo.setEndTime(courseSchedule.getEndTime());
+            courseVo.setStatus(courseSchedule.getStatus());
+            courseVo.setCourseGoupId(courseGroup.getId());
+            courseVo.setCourseGroupName(courseGroup.getName());
+            if(query.getAttendanceStatus() == null){
+                courseVo.setAttendanceStatus(attendanceList.stream().anyMatch(studentAttendance -> studentAttendance.getCourseScheduleId().equals(courseSchedule.getId())));
+            }else {
+                courseVo.setAttendanceStatus(query.getAttendanceStatus());
+            }
+            courseVo.setCourseStudentVos(studentPayments.stream().filter(studentPayment -> studentPayment.getCourseId().equals(courseSchedule.getId()))
+                    .map(studentPayment -> {
+                        CourseScheduleWrapper.CourseStudentVo studentVo = new CourseScheduleWrapper.CourseStudentVo();
+                        studentVo.setUserId(studentPayment.getUserId());
+                        com.yonge.cooleshow.biz.dal.entity.SysUser user = userMap.get(studentPayment.getUserId());
+                        studentVo.setUserName(user.getUsername());
+                        studentVo.setAvatar(user.getAvatar());
+                        studentVo.setImUserId(imGroupService.getImUserId(String.valueOf(user.getId()),ClientEnum.STUDENT.name()));
+                        return studentVo;
+                    }).collect(Collectors.toList()));
+            courseVos.add(courseVo);
+        }
+        return courseVos;
+    }
+
+    @Override
+    public List<CourseScheduleWrapper.StudentCourseList> queryListByStudent(CourseScheduleWrapper.CourseQuery query) {
+        //获取所有课程列表
+        List<CourseScheduleStudentPayment> scheduleStudentPayments = courseScheduleStudentPaymentService.lambdaQuery()
+                .eq(CourseScheduleStudentPayment::getUserId, query.getStudentId())
+                .eq(CourseScheduleStudentPayment::getCourseGroupId, query.getCourseGroupId())
+                .list();
+        if (CollectionUtils.isEmpty(scheduleStudentPayments)) {
+            return Lists.newArrayList();
+        }
+        List<Long> courseIds = scheduleStudentPayments.stream().map(CourseScheduleStudentPayment::getCourseId).collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(courseIds)) {
+            return Lists.newArrayList();
+        }
+
+        if(query.getAttendanceStatus() != null){
+            List<StudentAttendance> list = studentAttendanceService.lambdaQuery().in(StudentAttendance::getCourseScheduleId, courseIds).list();
+            if(query.getAttendanceStatus()){
+                if (CollectionUtils.isEmpty(list)) {
+                    return Lists.newArrayList();
+                }
+                courseIds = courseIds.stream().filter(courseId -> list.stream()
+                        .anyMatch(studentAttendance -> studentAttendance.getCourseScheduleId().equals(courseId))).collect(Collectors.toList());
+            }else {
+                if (CollectionUtils.isNotEmpty(list)) {
+                    courseIds = courseIds.stream().filter(courseId -> list.stream()
+                            .noneMatch(studentAttendance -> studentAttendance.getCourseScheduleId().equals(courseId))).collect(Collectors.toList());
+                }
+            }
+        }
+        if (CollectionUtils.isEmpty(courseIds)) {
+            return Lists.newArrayList();
+        }
+        List<CourseSchedule> courseSchedules = this.lambdaQuery()
+                .in(CourseSchedule::getId, courseIds)
+                .ne(query.getAttendanceStatus() != null,CourseSchedule::getStatus,"NOT_START")
+                .orderByDesc(CourseSchedule::getStartTime).list();
+        if(StringUtils.isNotEmpty(query.getClassMonth())){
+            courseSchedules = courseSchedules.stream().
+                    filter(courseSchedule -> query.getClassMonth().equals(DateUtil.dateToString(courseSchedule.getStartTime(),"yyyy-MM"))).collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(courseSchedules)) {
+                return Lists.newArrayList();
+            }
+        }
+        if (CollectionUtils.isEmpty(courseSchedules)) {
+            return Lists.newArrayList();
+        }
+        List<Long> courseScheduleIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+        Map<Long,Boolean> attendanceMap = new HashMap<>();
+        if(query.getAttendanceStatus() == null){
+            List<StudentAttendance> attendanceList = studentAttendanceService.lambdaQuery().in(StudentAttendance::getCourseScheduleId, courseScheduleIds).list();
+            attendanceMap = attendanceList.stream().collect(Collectors.toMap(StudentAttendance::getCourseScheduleId,studentAttendance -> true));
+        }
+        //获取所有老师
+        List<Long> teacherIds = courseSchedules.stream().map(CourseSchedule::getTeacherId).collect(Collectors.toList());
+        Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> userMap = sysUserService.getMapByIds(teacherIds);
+        List<CourseScheduleWrapper.StudentCourseList> courseVos = Lists.newArrayList();
+        CourseGroup courseGroup = courseGroupService.lambdaQuery().eq(CourseGroup::getId, query.getCourseGroupId()).one();
+        Subject subject = subjectService.get(courseGroup.getSubjectId());
+        for (CourseSchedule courseSchedule : courseSchedules) {
+            CourseScheduleWrapper.StudentCourseList courseVo = new CourseScheduleWrapper.StudentCourseList();
+            courseVo.setCourseId(courseSchedule.getId());
+            courseVo.setClassDate(courseSchedule.getClassDate());
+            courseVo.setStartTime(courseSchedule.getStartTime());
+            courseVo.setEndTime(courseSchedule.getEndTime());
+            courseVo.setStatus(courseSchedule.getStatus());
+            courseVo.setCourseGoupId(courseGroup.getId());
+            courseVo.setCourseGroupName(courseGroup.getName());
+            courseVo.setSubjectId(courseGroup.getSubjectId());
+            courseVo.setSubjectName(subject.getName());
+            if(query.getAttendanceStatus() == null){
+                courseVo.setAttendanceStatus(attendanceMap.getOrDefault(courseSchedule.getId(),false));
+            }else {
+                courseVo.setAttendanceStatus(query.getAttendanceStatus());
+            }
+            courseVo.setUserId(courseSchedule.getTeacherId());
+            com.yonge.cooleshow.biz.dal.entity.SysUser user = userMap.get(courseSchedule.getTeacherId());
+            courseVo.setUserName(user.getRealName());
+            courseVo.setAvatar(user.getAvatar());
+            courseVo.setImUserId(imGroupService.getImUserId(String.valueOf(user.getId()),ClientEnum.TEACHER.name()));
+            courseVos.add(courseVo);
+        }
+        return courseVos;
+    }
+
     private UserOrderDetail buyPracticeCourseTranV2(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo) {
         log.info("buyPracticeCourse  param:{}", JSON.toJSONString(orderGoodsInfo));
 

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

@@ -1,19 +1,14 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
-import com.yonge.cooleshow.biz.dal.dto.ImNetworkCustomMessage;
-import com.yonge.cooleshow.biz.dal.dto.ImNetworkRoomMusicSheetDownloadData;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleStudentPaymentService;
 import com.yonge.cooleshow.biz.dal.vo.LiveCourseInfoVo;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
@@ -55,6 +50,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends ServiceImpl<CourseS
         List<CourseScheduleEnum> courseScheduleEnumList = new ArrayList<>();
         courseScheduleEnumList.add(CourseScheduleEnum.PIANO_ROOM_CLASS);
         courseScheduleEnumList.add(CourseScheduleEnum.PRACTICE);
+        courseScheduleEnumList.add(CourseScheduleEnum.VIP);
         List<CourseScheduleStudentPayment> list = this.lambdaQuery()
                 .eq(CourseScheduleStudentPayment::getCourseId, courseId)
                 .in(CourseScheduleStudentPayment::getCourseType,courseScheduleEnumList)

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

@@ -130,7 +130,7 @@ public class SysUserServiceImpl implements SysUserService {
     public SysUser findUserById(Long userId) {
         Optional<SysUser> optional = Optional.ofNullable(sysUserFeignService.queryUserById(userId));
         optional.map(SysUser::getId).
-                orElseThrow(()-> new BizException("请登录"));
+                orElseThrow(()-> new BizException("用户信息不存在"));
         return optional.get();
     }
 

+ 8 - 23
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherSubjectPriceServiceImpl.java

@@ -10,6 +10,8 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 @Service("TeacherSubjectPriceService")
 public class TeacherSubjectPriceServiceImpl extends ServiceImpl<TeacherSubjectPriceDao, TeacherSubjectPrice> implements TeacherSubjectPriceService {
 
@@ -22,29 +24,12 @@ public class TeacherSubjectPriceServiceImpl extends ServiceImpl<TeacherSubjectPr
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Long upSet(TeacherSubjectPrice teacherSubjectPrice) {
-        if (teacherSubjectPrice.getId() == null) {
-            TeacherSubjectPrice one = this.lambdaQuery().eq(TeacherSubjectPrice::getTeacherId, teacherSubjectPrice.getTeacherId())
-                    .eq(TeacherSubjectPrice::getSubjectId, teacherSubjectPrice.getSubjectId())
-                    .eq(TeacherSubjectPrice::getCourseType, teacherSubjectPrice.getCourseType()).one();
-            if (one != null) {
-                teacherSubjectPrice.setId(one.getId());
-                this.updateById(teacherSubjectPrice);
-            } else {
-                this.save(teacherSubjectPrice);
-            }
-        } else {
-            TeacherSubjectPrice one = this.lambdaQuery().ne(TeacherSubjectPrice::getId, teacherSubjectPrice.getId())
-                    .eq(TeacherSubjectPrice::getTeacherId, teacherSubjectPrice.getTeacherId())
-                    .eq(TeacherSubjectPrice::getSubjectId, teacherSubjectPrice.getSubjectId())
-                    .eq(TeacherSubjectPrice::getCourseType, teacherSubjectPrice.getCourseType()).one();
-            if (one != null) {
-                throw new BizException("已存在相同课程类型的课程价格配置");
-            } else {
-                this.updateById(teacherSubjectPrice);
-            }
-        }
-        return teacherSubjectPrice.getId();
+    public void upSet(List<TeacherSubjectPrice> teacherSubjectPriceList) {
+        Long teacherId = teacherSubjectPriceList.get(0).getTeacherId();
+        String courseType = teacherSubjectPriceList.get(0).getCourseType();
+        this.lambdaUpdate().eq(TeacherSubjectPrice::getTeacherId, teacherId)
+                .eq(TeacherSubjectPrice::getCourseType, courseType).remove();
+        this.saveBatch(teacherSubjectPriceList);
     }
 
 }

+ 4 - 72
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupInfoVo.java

@@ -1,8 +1,8 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -12,6 +12,7 @@ import java.util.Date;
  * @Author: cy
  * @Date: 2022/5/24
  */
+@Data
 @ApiModel
 public class CourseGroupInfoVo implements Serializable {
     @ApiModelProperty(value = "课程组id")
@@ -41,75 +42,6 @@ public class CourseGroupInfoVo implements Serializable {
     @ApiModelProperty(value = "创建时间")
     private Date createdTime;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Long getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Long subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public Integer getCourseNum() {
-        return courseNum;
-    }
-
-    public void setCourseNum(Integer courseNum) {
-        this.courseNum = courseNum;
-    }
-
-    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 String getCourseIntroduce() {
-        return courseIntroduce;
-    }
-
-    public void setCourseIntroduce(String courseIntroduce) {
-        this.courseIntroduce = courseIntroduce;
-    }
-
-    public Date getCreatedTime() {
-        return createdTime;
-    }
-
-    public void setCreatedTime(Date createdTime) {
-        this.createdTime = createdTime;
-    }
+    @ApiModelProperty(value = "课程规划")
+    private String coursePlan;
 }

+ 4 - 95
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupLiveVo.java

@@ -3,11 +3,13 @@ package com.yonge.cooleshow.biz.dal.vo;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * @Author: cy
  * @Date: 2022/5/19
  */
+@Data
 @ApiModel
 public class CourseGroupLiveVo extends BaseEntity {
     @ApiModelProperty("直播课组id")
@@ -35,99 +37,6 @@ public class CourseGroupLiveVo extends BaseEntity {
     @ApiModelProperty("第一节课开始时间")
     private String startTime;
 
-    public Long getCourseGroupId() {
-        return courseGroupId;
-    }
-
-    public void setCourseGroupId(Long courseGroupId) {
-        this.courseGroupId = courseGroupId;
-    }
-
-    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 String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public Integer getStudentNum() {
-        return studentNum;
-    }
-
-    public void setStudentNum(Integer studentNum) {
-        this.studentNum = studentNum;
-    }
-
-    public Integer getCourseNum() {
-        return courseNum;
-    }
-
-    public void setCourseNum(Integer courseNum) {
-        this.courseNum = courseNum;
-    }
-
-    public Integer getCompleteCount() {
-        return completeCount;
-    }
-
-    public void setCompleteCount(Integer completeCount) {
-        this.completeCount = completeCount;
-    }
-
-    public Long getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Long teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public String getTeacherRealName() {
-        return teacherRealName;
-    }
-
-    public void setTeacherRealName(String teacherRealName) {
-        this.teacherRealName = teacherRealName;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getStartTime() {
-        return startTime;
-    }
-
-    public void setStartTime(String startTime) {
-        this.startTime = startTime;
-    }
+    @ApiModelProperty("课程规划")
+    private String coursePlan;
 }

+ 4 - 87
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupPianoVo.java

@@ -3,11 +3,13 @@ package com.yonge.cooleshow.biz.dal.vo;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * @Author: cy
  * @Date: 2022/6/15
  */
+@Data
 @ApiModel
 public class CourseGroupPianoVo extends BaseEntity {
     @ApiModelProperty("课程组id")
@@ -33,91 +35,6 @@ public class CourseGroupPianoVo extends BaseEntity {
     @ApiModelProperty("第一节课开始时间")
     private String startTime;
 
-    public Long getCourseGroupId() {
-        return courseGroupId;
-    }
-
-    public void setCourseGroupId(Long courseGroupId) {
-        this.courseGroupId = courseGroupId;
-    }
-
-    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 String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public Integer getCourseNum() {
-        return courseNum;
-    }
-
-    public void setCourseNum(Integer courseNum) {
-        this.courseNum = courseNum;
-    }
-
-    public Integer getCompleteCount() {
-        return completeCount;
-    }
-
-    public void setCompleteCount(Integer completeCount) {
-        this.completeCount = completeCount;
-    }
-
-    public Long getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Long teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public String getTeacherRealName() {
-        return teacherRealName;
-    }
-
-    public void setTeacherRealName(String teacherRealName) {
-        this.teacherRealName = teacherRealName;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getStartTime() {
-        return startTime;
-    }
-
-    public void setStartTime(String startTime) {
-        this.startTime = startTime;
-    }
+    @ApiModelProperty("课程规划")
+    private String coursePlan;
 }

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

@@ -3,11 +3,13 @@ package com.yonge.cooleshow.biz.dal.vo;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * @Author: cy
  * @Date: 2022/5/19
  */
+@Data
 @ApiModel
 public class CourseGroupPracticeVo extends BaseEntity {
     @ApiModelProperty("趣纠课组id")
@@ -36,108 +38,6 @@ public class CourseGroupPracticeVo extends BaseEntity {
     private String status;
     @ApiModelProperty("第一节课开始时间")
     private String startTime;
-
-    public Long getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(Long groupId) {
-        this.groupId = groupId;
-    }
-
-    public Long getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Long subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public Integer getCourseNum() {
-        return courseNum;
-    }
-
-    public void setCourseNum(Integer courseNum) {
-        this.courseNum = courseNum;
-    }
-
-    public Integer getCompleteCount() {
-        return completeCount;
-    }
-
-    public void setCompleteCount(Integer completeCount) {
-        this.completeCount = completeCount;
-    }
-
-    public Long getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Long teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public String getTeacherRealName() {
-        return teacherRealName;
-    }
-
-    public void setTeacherRealName(String teacherRealName) {
-        this.teacherRealName = teacherRealName;
-    }
-
-    public Long getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Long studentId) {
-        this.studentId = studentId;
-    }
-
-    public String getStudentName() {
-        return studentName;
-    }
-
-    public void setStudentName(String studentName) {
-        this.studentName = studentName;
-    }
-
-    public String getStudentRealName() {
-        return studentRealName;
-    }
-
-    public void setStudentRealName(String studentRealName) {
-        this.studentRealName = studentRealName;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getStartTime() {
-        return startTime;
-    }
-
-    public void setStartTime(String startTime) {
-        this.startTime = startTime;
-    }
+    @ApiModelProperty("课程规划")
+    private String coursePlan;
 }

+ 4 - 167
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVo.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.vo;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -13,6 +14,7 @@ import java.util.Date;
  * @author hgw
  * Created by 2022-03-29
  */
+@Data
 @ApiModel(value = "TeacherCourseGroupVo", description = "课程组信息")
 public class CourseGroupVo implements Serializable {
 
@@ -82,171 +84,6 @@ public class CourseGroupVo implements Serializable {
     @ApiModelProperty("下架原因")
     private String reason;
 
-    public String getReason() {
-        return reason;
-    }
-
-    public void setReason(String reason) {
-        this.reason = reason;
-    }
-
-    public Long getCourseGroupId() {
-        return courseGroupId;
-    }
-
-    public void setCourseGroupId(Long courseGroupId) {
-        this.courseGroupId = courseGroupId;
-    }
-
-    public String getCourseGroupName() {
-        return courseGroupName;
-    }
-
-    public void setCourseGroupName(String courseGroupName) {
-        this.courseGroupName = courseGroupName;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public Date getCourseStartTime() {
-        return courseStartTime;
-    }
-
-    public void setCourseStartTime(Date courseStartTime) {
-        this.courseStartTime = courseStartTime;
-    }
-
-    public Integer getSingleCourseMinutes() {
-        return singleCourseMinutes;
-    }
-
-    public void setSingleCourseMinutes(Integer singleCourseMinutes) {
-        this.singleCourseMinutes = singleCourseMinutes;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public Integer getStudentCount() {
-        return studentCount;
-    }
-
-    public void setStudentCount(Integer studentCount) {
-        this.studentCount = studentCount;
-    }
-
-    public String getBackgroundPic() {
-        return backgroundPic;
-    }
-
-    public void setBackgroundPic(String backgroundPic) {
-        this.backgroundPic = backgroundPic;
-    }
-
-    public Long getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Long teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public BigDecimal getCoursePrice() {
-        return coursePrice;
-    }
-
-    public void setCoursePrice(BigDecimal coursePrice) {
-        this.coursePrice = coursePrice;
-    }
-
-    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 String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
-    public Date getSalesStartDate() {
-        return salesStartDate;
-    }
-
-    public void setSalesStartDate(Date salesStartDate) {
-        this.salesStartDate = salesStartDate;
-    }
-
-    public Date getSalesEndDate() {
-        return salesEndDate;
-    }
-
-    public void setSalesEndDate(Date salesEndDate) {
-        this.salesEndDate = salesEndDate;
-    }
-
-    public Integer getMixStudentNum() {
-        return mixStudentNum;
-    }
-
-    public void setMixStudentNum(Integer mixStudentNum) {
-        this.mixStudentNum = mixStudentNum;
-    }
-
-    public String getImGroupId() {
-        return imGroupId;
-    }
-
-    public void setImGroupId(String imGroupId) {
-        this.imGroupId = imGroupId;
-    }
-
-    public Integer getExistBuy() {
-        return existBuy;
-    }
-
-    public void setExistBuy(Integer existBuy) {
-        this.existBuy = existBuy;
-    }
+    @ApiModelProperty("课程规划")
+    private String coursePlan;
 }

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

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -12,6 +14,7 @@ import java.util.Optional;
  * @Author: cy
  * @Date: 2022/4/18
  */
+@Data
 @ApiModel(value = "CourseStudent")
 public class CourseStudent implements Serializable {
     @ApiModelProperty(value = "课程id")
@@ -73,165 +76,13 @@ public class CourseStudent implements Serializable {
     @ApiModelProperty(value = "IM聊天用户ID")
     private String imUserId;
 
-    public Integer getStudentReplied() {
-        return studentReplied;
-    }
+    @ApiModelProperty(value = "课程数")
+    private Integer courseNum;
 
-    public void setStudentReplied(Integer studentReplied) {
-        this.studentReplied = studentReplied;
-    }
+    @ApiModelProperty(value = "已上完课的课程数")
+    private Integer completeCourseNum;
 
-    public Integer getTeacherReplied() {
-        return teacherReplied;
-    }
-
-    public void setTeacherReplied(Integer teacherReplied) {
-        this.teacherReplied = teacherReplied;
-    }
-
-    public String getRealName() {
-        return realName;
-    }
-
-    public void setRealName(String realName) {
-        this.realName = realName;
-    }
-
-    public Integer getCourseId() {
-        return courseId;
-    }
-
-    public void setCourseId(Integer courseId) {
-        this.courseId = courseId;
-    }
-
-    public Integer getCourseGoupId() {
-        return courseGoupId;
-    }
-
-    public void setCourseGoupId(Integer courseGoupId) {
-        this.courseGoupId = courseGoupId;
-    }
-
-    public Date getClassDate() {
-        return classDate;
-    }
-
-    public void setClassDate(Date classDate) {
-        this.classDate = classDate;
-    }
-
-    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;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getCourseType() {
-        return courseType;
-    }
-
-    public void setCourseType(String courseType) {
-        this.courseType = courseType;
-    }
-
-    public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
-    public String getName() {
-
-        return Optional.ofNullable(name).orElse(getCourseName());
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCover() {
-        return cover;
-    }
-
-    public void setCover(String cover) {
-        this.cover = cover;
-    }
-
-    public String getPayCount() {
-        return payCount;
-    }
-
-    public void setPayCount(String payCount) {
-        this.payCount = payCount;
-    }
-
-    public Integer getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Integer subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
-    public String getImGroupId() {
-        return imGroupId;
-    }
-
-    public void setImGroupId(String imGroupId) {
-        this.imGroupId = imGroupId;
-    }
-
-    public String getCourseName() {
-        return courseName;
-    }
-
-    public void setCourseName(String courseName) {
-        this.courseName = courseName;
-    }
-
-    public String getImUserId() {
-        return imUserId;
-    }
-
-    public void setImUserId(String imUserId) {
-        this.imUserId = imUserId;
-    }
+    @ApiModelProperty(value = "课程介绍")
+    private String courseIntroduce;
 }
 

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

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.CourseGroupEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -14,6 +15,7 @@ import java.util.Date;
  * @author liujunchi
  * @date 2022-04-18
  */
+@Data
 @ApiModel("平台方 老师详情直播课列表")
 public class LiveCourseGroupVo {
 
@@ -66,130 +68,6 @@ public class LiveCourseGroupVo {
     @ApiModelProperty("下架原因")
     private String reason;
 
-    public String getReason() {
-        return reason;
-    }
-
-    public void setReason(String reason) {
-        this.reason = reason;
-    }
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public Long getCourseNum() {
-        return courseNum;
-    }
-
-    public void setCourseNum(Long courseNum) {
-        this.courseNum = courseNum;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getCourseIntroduce() {
-        return courseIntroduce;
-    }
-
-    public void setCourseIntroduce(String courseIntroduce) {
-        this.courseIntroduce = courseIntroduce;
-    }
-
-    public Long getCourseGroupId() {
-        return courseGroupId;
-    }
-
-    public void setCourseGroupId(Long courseGroupId) {
-        this.courseGroupId = courseGroupId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public Integer getEndCourseNum() {
-        return endCourseNum;
-    }
-
-    public void setEndCourseNum(Integer endCourseNum) {
-        this.endCourseNum = endCourseNum;
-    }
-
-    public Integer getNoStartCourseNum() {
-        return noStartCourseNum;
-    }
-
-    public void setNoStartCourseNum(Integer noStartCourseNum) {
-        this.noStartCourseNum = noStartCourseNum;
-    }
-
-    public BigDecimal getCoursePrice() {
-        return coursePrice;
-    }
-
-    public void setCoursePrice(BigDecimal coursePrice) {
-        this.coursePrice = coursePrice;
-    }
-
-    public Integer getPreStudentNum() {
-        return preStudentNum;
-    }
-
-    public void setPreStudentNum(Integer preStudentNum) {
-        this.preStudentNum = preStudentNum;
-    }
-
-    public CourseGroupEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(CourseGroupEnum status) {
-        this.status = status;
-    }
-
-    public String getImGroupId() {
-        return imGroupId;
-    }
-
-    public void setImGroupId(String imGroupId) {
-        this.imGroupId = imGroupId;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getOrderNo() {
-        return orderNo;
-    }
-
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
-    }
+    @ApiModelProperty("课程规划")
+    private String coursePlan;
 }

+ 7 - 143
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyCourseVo.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.vo;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -10,6 +11,7 @@ import java.util.Date;
  * @Author: cy
  * @Date: 2022/4/11
  */
+@Data
 @ApiModel(value = "MyCourseVo")
 public class MyCourseVo implements Serializable {
     @ApiModelProperty(value = "课表id")
@@ -52,6 +54,9 @@ public class MyCourseVo implements Serializable {
     @ApiModelProperty(value = "课程组id")
     private Integer courseGoupId;
 
+    @ApiModelProperty(value = "课程组名称")
+    private String courseGroupName;
+
     @ApiModelProperty(value = "课程id")
     private Integer courseId;
 
@@ -67,148 +72,7 @@ public class MyCourseVo implements Serializable {
     @ApiModelProperty(value = "IM聊天用户ID")
     private String imUserId;
 
-
-    public Boolean getDelFlag() {
-        return delFlag;
-    }
-
-    public void setDelFlag(Boolean delFlag) {
-        this.delFlag = delFlag;
-    }
-    public Integer getStudentReplied() {
-        return studentReplied;
-    }
-
-    public void setStudentReplied(Integer studentReplied) {
-        this.studentReplied = studentReplied;
-    }
-
-    public Integer getTeacherReplied() {
-        return teacherReplied;
-    }
-
-    public void setTeacherReplied(Integer teacherReplied) {
-        this.teacherReplied = teacherReplied;
-    }
-
-    public String getRealName() {
-        return realName;
-    }
-
-    public void setRealName(String realName) {
-        this.realName = realName;
-    }
-
-    public String getSignInTime() {
-        return signInTime;
-    }
-
-    public void setSignInTime(String signInTime) {
-        this.signInTime = signInTime;
-    }
-
-    public Integer getCourseGoupId() {
-        return courseGoupId;
-    }
-
-    public void setCourseGoupId(Integer courseGoupId) {
-        this.courseGoupId = courseGoupId;
-    }
-
-    public Integer getCourseId() {
-        return courseId;
-    }
-
-    public void setCourseId(Integer courseId) {
-        this.courseId = courseId;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
-    public Date getClassDate() {
-        return classDate;
-    }
-
-    public void setClassDate(Date classDate) {
-        this.classDate = classDate;
-    }
-
-    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;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public Integer getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Integer subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public String getImUserId() {
-        return imUserId;
-    }
-
-    public void setImUserId(String imUserId) {
-        this.imUserId = imUserId;
-    }
+    @ApiModelProperty(value = "考勤状态 , false:未考勤 true:已考勤")
+    private Boolean attendanceStatus;
 }
 

+ 12 - 109
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLiveCourseInfoVo.java

@@ -3,7 +3,12 @@ package com.yonge.cooleshow.biz.dal.vo;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -12,6 +17,7 @@ import java.util.Date;
  * Created by 2022-04-06
  */
 @ApiModel(value = "TeacherLiveCourseInfoVo", description = "老师直播课课程")
+@Data
 public class TeacherLiveCourseInfoVo implements Serializable {
 
     @ApiModelProperty(value = "课程组id")
@@ -58,115 +64,12 @@ public class TeacherLiveCourseInfoVo implements Serializable {
     @ApiModelProperty("用户id")
     private Long userId;
 
-    public Long getUserId() {
-        return userId;
-    }
+    @ApiModelProperty(value = "课程数")
+    private Integer courseNum;
 
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
+    @ApiModelProperty(value = "课程介绍")
+    private String courseIntroduce;
 
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
-    public Long getCourseGroupId() {
-        return courseGroupId;
-    }
-
-    public void setCourseGroupId(Long courseGroupId) {
-        this.courseGroupId = courseGroupId;
-    }
-
-    public String getCourseGroupName() {
-        return courseGroupName;
-    }
-
-    public void setCourseGroupName(String courseGroupName) {
-        this.courseGroupName = courseGroupName;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    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;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public Integer getStudentCount() {
-        return studentCount;
-    }
-
-    public void setStudentCount(Integer studentCount) {
-        this.studentCount = studentCount;
-    }
-
-    public String getBackgroundPic() {
-        return backgroundPic;
-    }
-
-    public void setBackgroundPic(String backgroundPic) {
-        this.backgroundPic = backgroundPic;
-    }
-
-    public String getImGroupId() {
-        return imGroupId;
-    }
-
-    public void setImGroupId(String imGroupId) {
-        this.imGroupId = imGroupId;
-    }
-
-    public Long getCourseId() {
-        return courseId;
-    }
-
-    public void setCourseId(Long courseId) {
-        this.courseId = courseId;
-    }
-
-    public Integer getClassNum() {
-        return classNum;
-    }
-
-    public void setClassNum(Integer classNum) {
-        this.classNum = classNum;
-    }
+    @ApiModelProperty(value = "已上完课的课程数")
+    private Integer completeCourseNum;
 }

+ 10 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TeacherSubjectPriceWrapper.java

@@ -21,6 +21,9 @@ public class TeacherSubjectPriceWrapper {
     @Data
     public static class TeacherSubjectPriceDto{
 
+        @ApiModelProperty(value = "id")
+        private Long id;
+
         @ApiModelProperty(value = "老师id")
         private Long teacherId;
 
@@ -34,13 +37,19 @@ public class TeacherSubjectPriceWrapper {
         private Integer courseMinutes;
 
         @ApiModelProperty(value = "声部id")
-        private String subjectId;
+        private Long subjectId;
+
+        @ApiModelProperty(value = "声部id")
+        private String subjectIds;
 
         @ApiModelProperty(value = "声部名称")
         private String subjectName;
 
         @ApiModelProperty(value = "声部价格")
         private BigDecimal subjectPrice;
+
+        @ApiModelProperty(value = "声部图片")
+        private String subjectPic;
     }
 
 }

+ 70 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/course/CourseGroupWrapper.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.wrapper.course;
 
 import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -18,8 +19,14 @@ public class CourseGroupWrapper {
         @ApiModelProperty("老师编号")
         private Long teacherId;
 
+        @ApiModelProperty("学员编号")
+        private Long studentId;
+
         @ApiModelProperty("课程组类型")
         private String courseType;
+
+        @ApiModelProperty("课程组编号")
+        private Long courseGroupId;
     }
 
     @Data
@@ -45,10 +52,73 @@ public class CourseGroupWrapper {
         @ApiModelProperty(value = "课程数")
         private Integer courseNum;
 
+        @ApiModelProperty(value = "学生数")
+        private Integer studentNum = 1;
+
         @ApiModelProperty(value = "学员姓名")
         private String studentName;
 
         @ApiModelProperty(value = "学员头像")
         private String studentAvatar;
+
+        @ApiModelProperty(value = "课程规划")
+        private String coursePlan;
     }
+    @Data
+    public static class StudentCourseGroupDto {
+        @ApiModelProperty(value = "课程组id")
+        private Long courseGroupId;
+
+        @ApiModelProperty(value = "名称")
+        private String courseGroupName;
+
+        @ApiModelProperty(value = "声部名称")
+        private String subjectName;
+
+        @ApiModelProperty(value = "声部id")
+        private Long subjectId;
+
+        @ApiModelProperty(value = "老师编号")
+        private Long teacherId;
+
+        @ApiModelProperty(value = "课程组状态")
+        private String status;
+
+        @ApiModelProperty(value = "已完成课程数")
+        private Integer completeCourseNum;
+
+        @ApiModelProperty(value = "课程数")
+        private Integer courseNum;
+
+        @ApiModelProperty(value = "学员姓名")
+        private String teacherName;
+
+        @ApiModelProperty(value = "学员头像")
+        private String teacherAvatar;
+
+        @ApiModelProperty(value = "课程规划")
+        private String coursePlan;
+    }
+
+    @ApiModel(value = "CourseStudentVo", description = "学员列表")
+    @Data
+    public static class CourseStudentVo {
+
+        @ApiModelProperty(value = "学员id")
+        private Long studentId;
+
+        @ApiModelProperty(value = "学员名称")
+        private String studentName;
+
+        @ApiModelProperty(value = "昵称")
+        private String userName;
+
+        @ApiModelProperty(value = "头像")
+        private String avatar;
+
+        @ApiModelProperty("IM用户ID")
+        private String imUserId;
+    }
+
+
 }

+ 111 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/course/CourseScheduleWrapper.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.Date;
 import java.util.List;
 
 public class CourseScheduleWrapper {
@@ -36,4 +37,114 @@ public class CourseScheduleWrapper {
         @ApiModelProperty("结束时间")
         private long endTime;
     }
+
+    @Data
+    public static class MyCourseVo{
+        @ApiModelProperty(value = "上课日期")
+        private Date classDate;
+
+        @ApiModelProperty(value = "上课时间")
+        private Date startTime;
+
+        @ApiModelProperty(value = "下课时间")
+        private Date endTime;
+
+        @ApiModelProperty(value = "课程状态(NOT_START:未开始 ING:进行中 COMPLETE:已完成 CANCEL:已取消)")
+        private String status;
+
+        @ApiModelProperty(value = "课程组id")
+        private Long courseGoupId;
+
+        @ApiModelProperty(value = "课程组名称")
+        private String courseGroupName;
+
+        @ApiModelProperty(value = "课程id")
+        private Long courseId;
+
+        @ApiModelProperty(value = "考勤状态 , false:未考勤 true:已考勤")
+        private Boolean attendanceStatus;
+
+        @ApiModelProperty(value = "学员列表")
+        private List<CourseStudentVo> courseStudentVos;
+    }
+
+    @Data
+    public static class StudentCourseList{
+        @ApiModelProperty(value = "上课日期")
+        private Date classDate;
+
+        @ApiModelProperty(value = "上课时间")
+        private Date startTime;
+
+        @ApiModelProperty(value = "下课时间")
+        private Date endTime;
+
+        @ApiModelProperty(value = "课程状态(NOT_START:未开始 ING:进行中 COMPLETE:已完成 CANCEL:已取消)")
+        private String status;
+
+        @ApiModelProperty(value = "课程组id")
+        private Long courseGoupId;
+
+        @ApiModelProperty(value = "课程组名称")
+        private String courseGroupName;
+
+        @ApiModelProperty(value = "课程id")
+        private Long courseId;
+
+        @ApiModelProperty(value = "考勤状态 , false:未考勤 true:已考勤")
+        private Boolean attendanceStatus;
+
+        @ApiModelProperty(value = "声部编号")
+        private Long subjectId;
+
+        @ApiModelProperty(value = "声部名称")
+        private String subjectName;
+
+        @ApiModelProperty(value = "老师id")
+        private Long userId;
+
+        @ApiModelProperty(value = "用户姓名")
+        private String userName;
+
+        @ApiModelProperty(value = "头像地址")
+        private String avatar;
+
+        @ApiModelProperty(value = "IM聊天用户ID")
+        private String imUserId;
+    }
+
+
+    @Data
+    public static class CourseStudentVo{
+        @ApiModelProperty(value = "用户id")
+        private Long userId;
+
+        @ApiModelProperty(value = "用户姓名")
+        private String userName;
+
+        @ApiModelProperty(value = "头像地址")
+        private String avatar;
+
+        @ApiModelProperty(value = "IM聊天用户ID")
+        private String imUserId;
+    }
+
+
+    @Data
+    public static class CourseQuery{
+        @ApiModelProperty(value = "课程状态(NOT_START:未开始 ING:进行中 COMPLETE:已完成 CANCEL:已取消)")
+        private String status;
+
+        @ApiModelProperty(value = "上课月份")
+        private String classMonth;
+
+        @ApiModelProperty(value = "课程组编号")
+        private Long courseGroupId;
+
+        @ApiModelProperty(value = "考勤状态 , false:未考勤 true:已考勤")
+        private Boolean attendanceStatus;
+
+        @ApiModelProperty(value = "学员编号")
+        private Long studentId;
+    }
 }

+ 59 - 22
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -25,25 +25,29 @@
         <result column="pre_student_num_" jdbcType="INTEGER" property="preStudentNum"/>
         <result column="im_group_id_" jdbcType="VARCHAR" property="imGroupId"/>
         <result column="reason_" jdbcType="VARCHAR" property="reason"/>
+        <result column="course_plan_" jdbcType="VARCHAR" property="coursePlan"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id_
-        , type_, teacher_id_, name_, subject_id_, single_course_minutes_, course_num_, complete_course_num_, course_introduce_, course_price_, status_, sales_start_date_, sales_end_date_, background_pic_, mix_student_num_,pre_student_num_, im_group_id_, course_start_time_, created_by_, created_time_, updated_by_, updated_time_,reason_
+        , type_, teacher_id_, name_, subject_id_, single_course_minutes_, course_num_,
+        complete_course_num_, course_introduce_, course_price_, status_, sales_start_date_,
+        sales_end_date_, background_pic_, mix_student_num_,pre_student_num_, im_group_id_,
+        course_start_time_, created_by_, created_time_, updated_by_, updated_time_,reason_,course_plan_
     </sql>
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.yonge.cooleshow.biz.dal.entity.CourseGroup">
         insert into course_group(type_, teacher_id_, name_, subject_id_, single_course_minutes_, course_num_,
         complete_course_num_, course_introduce_, course_price_, status_, sales_start_date_, sales_end_date_, background_pic_,
-        mix_student_num_,pre_student_num_,im_group_id_, course_start_time_, created_by_, created_time_, updated_by_, updated_time_,reason_)
+        mix_student_num_,pre_student_num_,im_group_id_, course_start_time_, created_by_, created_time_, updated_by_, updated_time_,reason_,course_plan_)
         values
         <foreach collection="entities" item="entity" separator=",">
             (#{entity.type}, #{entity.teacherId}, #{entity.name}, #{entity.subjectId}, #{entity.singleCourseMinutes},
             #{entity.courseNum}, #{entity.completeCourseNum}, #{entity.courseIntroduce}, #{entity.coursePrice}, #{entity.status},
             #{entity.salesStartDate}, #{entity.salesEndDate}, #{entity.backgroundPic}, #{entity.mixStudentNum},
             #{entity.preStudentNum},#{entity.imGroupId},#{entity.courseStartTime}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updatedBy},
-            #{entity.updatedTime},#{entity.reason})
+            #{entity.updatedTime},#{entity.reason},#{entity.coursePlan})
         </foreach>
     </insert>
 
@@ -67,6 +71,7 @@
         b.mix_student_num_            as mixStudentNum,
         b.im_group_id_              as imGroupId,
         b.reason_ as                   reason,
+        b.course_plan_ as coursePlan,
         0  as existBuy
         from course_group as b
         left join subject as s on b.subject_id_ = s.id_
@@ -114,6 +119,7 @@
                         b.mix_student_num_            as mixStudentNum,
                         b.im_group_id_                as imGroupId,
                         b.reason_ as                   reason,
+                        b.course_plan_ as coursePlan,
                         if(y.status_ = 'PAID', 1, 0)  as existBuy
         from course_group as b
                  left join subject as s on b.subject_id_ = s.id_
@@ -167,7 +173,8 @@
         <if test="param.studentId != null">
             cssp.order_no_ as orderNo,
         </if>
-        cg.im_group_id_  as imGroupId
+        cg.im_group_id_  as imGroupId,
+        cg.course_plan_ as coursePlan
         from course_group cg
         left join course_schedule_student_payment cssp on cg.id_ = cssp.course_group_id_
         left join sys_user su on su.id_ = cssp.user_id_
@@ -298,7 +305,8 @@
             cg.created_time_ as createTime,
             cg.course_introduce_ as courseIntroduce,
         cg.type_ as type,
-            s.name_ as subjectName
+            s.name_ as subjectName,
+            cg.course_plan_ as coursePlan
         from course_group cg
          left join course_schedule_student_payment cssp on cg.id_ = cssp.course_group_id_
         left join subject s on cg.subject_id_ = s.id_
@@ -366,15 +374,16 @@
             su.username_ AS studentName,
             su.real_name_ AS studentRealName,
             cg.status_ AS `status`,
-            cst.start_time_ AS startTime
+            cst.start_time_ AS startTime,
+            cg.course_plan_ AS coursePlan
         FROM course_group cg
         LEFT JOIN `subject` sub ON cg.subject_id_=sub.id_
         LEFT JOIN sys_user tu ON cg.teacher_id_=tu.id_
-        LEFT JOIN (SELECT user_id_,course_group_id_ FROM course_schedule_student_payment WHERE course_type_='PRACTICE' GROUP BY course_group_id_) sp ON cg.id_=sp.course_group_id_
+        LEFT JOIN (SELECT user_id_,course_group_id_ FROM course_schedule_student_payment WHERE course_type_=#{param.groupType} GROUP BY course_group_id_) sp ON cg.id_=sp.course_group_id_
         LEFT JOIN sys_user su ON sp.user_id_=su.id_
-        LEFT JOIN (SELECT course_group_id_,COUNT(1) AS count_ FROM course_schedule WHERE type_='PRACTICE' AND status_='COMPLETE' GROUP BY course_group_id_) cs ON cg.id_=cs.course_group_id_
-        LEFT JOIN (SELECT course_group_id_,start_time_ FROM course_schedule WHERE type_='PRACTICE' GROUP BY course_group_id_) cst ON cg.id_=cst.course_group_id_
-        WHERE cg.type_='PRACTICE' AND cg.status_ IN('ING','COMPLETE')
+        LEFT JOIN (SELECT course_group_id_,COUNT(1) AS count_ FROM course_schedule WHERE type_= #{param.groupType} AND status_='COMPLETE' GROUP BY course_group_id_) cs ON cg.id_=cs.course_group_id_
+        LEFT JOIN (SELECT course_group_id_,start_time_ FROM course_schedule WHERE type_=#{param.groupType} GROUP BY course_group_id_) cst ON cg.id_=cst.course_group_id_
+        WHERE cg.type_=#{param.groupType} AND cg.status_ IN('ING','COMPLETE')
         <if test="param.search != null and param.search != ''">
             AND (
             cg.id_ LIKE concat('%',#{param.search},'%') OR
@@ -427,9 +436,7 @@
         LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
         LEFT JOIN student_attendance sa ON cs.id_=sa.course_schedule_id_
         LEFT JOIN course_schedule_teacher_salary ts ON cs.id_=ts.course_schedule_id_
-        WHERE cs.type_='PRACTICE'
-        AND cs.lock_=0
-        AND cs.course_group_id_=#{param.courseGroupId}) a
+        WHERE cs.lock_=0 AND cs.course_group_id_ = #{param.courseGroupId}) a
         <where>
             <if test="param.search != null and param.search != ''">
                 AND (
@@ -485,7 +492,8 @@
             cg.pre_student_num_ AS studentNum,
             cg.status_ AS `status`,
             IFNULL(cm.count_,0) AS completeCount,
-            st.start_time_ AS startTime
+            st.start_time_ AS startTime,
+            cg.course_plan_ AS coursePlan
         FROM course_group cg
         LEFT JOIN `subject` sb ON cg.subject_id_=sb.id_
         LEFT JOIN sys_user su ON su.id_=cg.teacher_id_
@@ -682,7 +690,8 @@
             g.course_price_ AS coursePrice,
             g.status_ AS `status`,
             g.course_introduce_ AS courseIntroduce,
-            g.created_time_ AS createdTime
+            g.created_time_ AS createdTime,
+            g.course_plan_ AS coursePlan
         FROM course_group g
         LEFT JOIN `subject` s ON g.subject_id_=s.id_
         WHERE g.id_ =#{groupId}
@@ -712,6 +721,7 @@
         su.real_name_ AS teacherRealName,
         cg.course_num_ AS courseNum,
         cg.status_ AS `status`,
+        cg.course_plan_ AS coursePlan,
         IFNULL(cm.count_,0) AS completeCount,
         st.start_time_ AS startTime
         FROM course_group cg
@@ -912,6 +922,7 @@
         cg.course_num_ AS courseNum,
         cg.status_ AS `status`,
         IFNULL(cm.count_,0) AS completeCount,
+        cg.course_plan_ AS coursePlan,
         st.start_time_ AS startTime
         FROM course_group cg
         LEFT JOIN `subject` sb ON cg.subject_id_=sb.id_
@@ -1001,14 +1012,13 @@
         left join subject s on cg.subject_id_ = s.id_
         where cg.status_ = 'APPLY' and cg.type_ = 'LIVE'
     </select>
-    <select id="myCourseGroup"
+    <select id="teacherCourseGroup"
             resultType="com.yonge.cooleshow.biz.dal.wrapper.course.CourseGroupWrapper$TeacherCourseGroupDto">
-        select cg.name_ courseGroupName,su.username_ studentName,cg.status_ status,
-               su.avatar_ studentAvatar,cg.subject_id_ subjectId,
-               cg.complete_course_num_ completeCourseNum,cg.course_num_ courseNum,cg.id_ courseGroupId
+        select cg.name_ courseGroupName,cg.status_ status,
+               cg.subject_id_ subjectId,
+               cg.complete_course_num_ completeCourseNum,cg.course_num_ courseNum,
+               cg.id_ courseGroupId,cg.course_plan_ coursePlan
         from course_group cg
-        LEFT JOIN course_schedule_student_payment cssp ON cssp.course_group_id_ = cg.id_
-        LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
         <where>
             <if test="param.teacherId != null">
                 AND cg.teacher_id_ = #{param.teacherId}
@@ -1019,10 +1029,37 @@
             <if test="param.subjectId != null">
                 AND cg.subject_id_ = #{param.subjectId}
             </if>
+            <if test="param.courseGroupId != null">
+                AND cg.id_ = #{param.courseGroupId}
+            </if>
+            <if test="param.courseType != null and param.courseType != ''">
+                AND cg.type_ = #{param.courseType}
+            </if>
+        </where>
+    </select>
+    <select id="studentCourseGroup"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.course.CourseGroupWrapper$StudentCourseGroupDto">
+        select cg.name_ courseGroupName,cg.status_ status,
+               cg.subject_id_ subjectId,
+               cg.complete_course_num_ completeCourseNum,cg.course_num_ courseNum,
+               cg.id_ courseGroupId,cg.course_plan_ coursePlan,cg.teacher_id_ teacherId
+        from course_group cg
+        <where>
+            <if test="param.teacherId != null">
+                AND cg.teacher_id_ = #{param.teacherId}
+            </if>
+            <if test="param.status != null and param.status != ''">
+                AND cg.status_ = #{param.status}
+            </if>
+            <if test="param.subjectId != null">
+                AND cg.subject_id_ = #{param.subjectId}
+            </if>
+            <if test="param.courseGroupId != null">
+                AND cg.id_ = #{param.courseGroupId}
+            </if>
             <if test="param.courseType != null and param.courseType != ''">
                 AND cg.type_ = #{param.courseType}
             </if>
         </where>
-        group by cg.id_
     </select>
 </mapper>

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

@@ -162,7 +162,10 @@
         b.im_group_id_  as imGroupId,
         su.username_ as username,
         su.id_ as userId,
-        su.avatar_ as avatar
+        su.avatar_ as avatar,
+        b.course_num_ as courseNum,
+        b.complete_course_num_ as completeCourseNum,
+        b.course_introduce_ as courseIntroduce
         from course_schedule as a
         left join course_group as b on a.course_group_id_ = b.id_
         left join subject as s on b.subject_id_ = s.id_
@@ -171,8 +174,6 @@
         where b.teacher_id_ = #{param.teacherId}
         AND a.lock_ = 0
         AND a.type_ = #{param.type}
-        <![CDATA[ AND a.class_date_  >= #{param.startDate} ]]>
-        <![CDATA[ AND a.class_date_  <= #{param.endDate} ]]>
         <if test="param.groupState !=null and param.groupState !=''">
             AND  find_in_set(b.status_, #{param.groupState})
         </if>
@@ -197,17 +198,20 @@
             cs.status_ AS `status`,
             g.subject_id_ AS subjectId,
             sb.name_ AS subjectName,
+            g.name_ AS courseGroupName,
             u.del_flag_ as delFlag,
             p.course_id_ AS courseId,
             p.course_group_id_ AS courseGoupId,
             (r.student_replied_ IS NOT NULL) AS studentReplied,
-            (r.teacher_replied_ IS NOT NULL) AS teacherReplied
+            (r.teacher_replied_ IS NOT NULL) AS teacherReplied,
+            CASE WHEN sa.course_schedule_id_ IS NULL THEN 0 ELSE 1 END AS attendanceStatus
         FROM course_schedule_student_payment p
         LEFT JOIN sys_user u ON p.user_id_ =u.id_
         LEFT JOIN course_schedule cs ON p.course_id_=cs.id_
         LEFT JOIN course_group g ON p.course_group_id_ = g.id_
         LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
         LEFT JOIN course_schedule_replied r ON cs.id_=r.course_schedule_id_
+        LEFT JOIN student_attendance sa ON cs.id_ = sa.course_schedule_id_
         WHERE p.course_id_ IN
         (SELECT s.id_ FROM course_schedule s WHERE s.type_ = #{param.courseType} AND lock_=0 AND s.teacher_id_=#{param.teacherId})
         <if test="param.status !=null and param.status !=''">
@@ -216,6 +220,14 @@
         <if test="param.subjectId !=null">
             AND g.subject_id_ = #{param.subjectId}
         </if>
+        <if test="param.attendanceStatus != null">
+            <if test="param.attendanceStatus == true">
+                AND sa.course_schedule_id_ IS NOT NULL
+            </if>
+            <if test="param.attendanceStatus == false">
+                AND sa.course_schedule_id_ IS NULL
+            </if>
+        </if>
         <if test="param.classDate !=null and param.classDate !=''">
             AND cs.class_date_ = #{param.classDate}
         </if>
@@ -543,14 +555,18 @@
         cs.end_time_ AS endTime,
         cs.status_ AS `status`,
         cs.type_ AS courseType,
-        su.username_ AS userId,
+        su.username_ AS realName,
+        su.id_ AS userId,
         CONCAT(g.name_,'-第',cs.class_num_,'课') AS name,
         IFNULL(g.pre_student_num_, 0) AS payCount,
         g.background_pic_ AS cover,
         g.subject_id_ AS subjectId,
         sb.name_ AS subjectName,
         su.avatar_ AS avatar,
-        g.im_group_id_  as imGroupId
+        g.im_group_id_  as imGroupId,
+        g.course_introduce_ as courseIntroduce,
+        g.course_num_ as courseNum,
+        g.complete_course_num_ as completeCourseNum
         FROM
         course_schedule_student_payment as a
         LEFT JOIN course_schedule cs on a.course_id_ = cs.id_
@@ -560,8 +576,6 @@
         LEFT JOIN user_order o on a.order_no_  = o.order_no_
         WHERE cs.type_=#{param.type}
         AND a.user_id_ = #{param.studentId}
-        <![CDATA[ AND class_date_  >= #{param.startDate} ]]>
-        <![CDATA[ AND class_date_  <= #{param.endDate} ]]>
         <if test="param.orderState != null">
             AND o.status_ = #{param.orderState}
         </if>

+ 2 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml

@@ -144,7 +144,7 @@
         LEFT JOIN `subject` sb ON sb.id_ = g.subject_id_
         LEFT JOIN course_schedule s ON s.id_ = r.course_schedule_id_
         LEFT JOIN sys_user u ON u.id_ = r.student_id_
-        WHERE r.course_group_type_ = 'PRACTICE'
+        WHERE r.course_group_type_ = #{param.courseGroupType}
         AND r.student_replied_ != ""
         AND s.teacher_id_ = #{param.teacherId}
         <if test="param.studentName !=null and param.studentName !=''">
@@ -176,8 +176,7 @@
         LEFT JOIN course_group g ON t.course_group_id_=g.id_
         LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
         WHERE t.course_schedule_id_=#{courseScheduleId}
-        AND t.course_group_id_=#{courseGroupId}
-        AND t.course_group_type_=#{courseGroupType}
+        AND g.id_ = #{courseGroupId}
         ORDER BY s.start_time_
     </select>
     <select id="selectAllClass" resultType="java.lang.Long">

+ 11 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -260,6 +260,17 @@
                             GROUP BY a.subject_id_
                         )
                     </if>
+                    <if test="type == null or type =='VIP'">
+                        union all
+                        (
+                            select
+                                a.subject_id_ as subject_id_
+                            from course_group a
+                            join course_schedule_student_payment a1 on a.id_ = a1.course_group_id_
+                            where a.type_ = 'VIP' and a1.user_id_ = #{userId}
+                            GROUP BY a.subject_id_
+                        )
+                    </if>
                     <if test="type == null or type =='LIVE'">
                         union all
                         (