Pārlūkot izejas kodu

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

zouxuan 9 mēneši atpakaļ
vecāks
revīzija
3e900748cd
16 mainītis faili ar 303 papildinājumiem un 120 dzēšanām
  1. 18 30
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/CourseHomeworkController.java
  2. 17 18
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseGroupController.java
  3. 8 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java
  4. 20 40
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/CourseHomeworkController.java
  5. 8 20
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/CourseRepliedController.java
  6. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseGroupController.java
  7. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java
  8. 5 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  9. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  10. 25 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  11. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  12. 78 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  13. 41 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/course/CourseGroupWrapper.java
  14. 42 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/course/CourseScheduleWrapper.java
  15. 31 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml
  16. 2 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml

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

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

@@ -5,25 +5,19 @@ 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 +31,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 +87,12 @@ 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)));
+    }
 }
 

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

@@ -12,6 +12,7 @@ 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 +68,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 +76,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));
     }
 
@@ -160,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));
+    }
 }
 

+ 20 - 40
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));
     }

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

@@ -140,7 +140,7 @@ 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));
     }
 

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

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

@@ -368,7 +368,11 @@ 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);

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

@@ -303,5 +303,7 @@ 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);
 }
 

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

@@ -393,9 +393,9 @@ 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());
@@ -406,6 +406,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                     .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) {
@@ -438,6 +439,28 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     }
 
     @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());
+                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)

+ 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("不能布置课后作业");
         }

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

@@ -2675,6 +2675,84 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         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).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();
+        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());
+            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));
         Long studentId = orderGoodsInfo.getUserId();

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

@@ -19,8 +19,14 @@ public class CourseGroupWrapper {
         @ApiModelProperty("老师编号")
         private Long teacherId;
 
+        @ApiModelProperty("学员编号")
+        private Long studentId;
+
         @ApiModelProperty("课程组类型")
         private String courseType;
+
+        @ApiModelProperty("课程组编号")
+        private Long courseGroupId;
     }
 
     @Data
@@ -58,6 +64,41 @@ public class CourseGroupWrapper {
         @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

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

@@ -68,6 +68,45 @@ public class CourseScheduleWrapper {
         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 = "老师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{
@@ -98,5 +137,8 @@ public class CourseScheduleWrapper {
 
         @ApiModelProperty(value = "考勤状态 , false:未考勤 true:已考勤")
         private Boolean attendanceStatus;
+
+        @ApiModelProperty(value = "学员编号")
+        private Long studentId;
     }
 }

+ 31 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -1014,11 +1014,12 @@
         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,cg.status_ status,
                cg.subject_id_ subjectId,
-               cg.complete_course_num_ completeCourseNum,cg.course_num_ courseNum,cg.id_ courseGroupId,cg.course_plan_ coursePlan
+               cg.complete_course_num_ completeCourseNum,cg.course_num_ courseNum,
+               cg.id_ courseGroupId,cg.course_plan_ coursePlan
         from course_group cg
         <where>
             <if test="param.teacherId != null">
@@ -1030,6 +1031,34 @@
             <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>

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