Browse Source

优化直播课课程组查询,增加是否已经购买过改课程组标识

hgw 2 years ago
parent
commit
ac6714a54e

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

@@ -121,7 +121,16 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         result.setPlanList(coursePlanService.queryCoursePlanByGroupId(groupId));
         //课程组学员信息
         result.setStudentList(courseScheduleStudentPaymentService.queryStudentInfoByGroupId(groupId));
-
+        //查询是否购买过该课程组
+        Long id = getSysUser().getId();
+        List<CourseScheduleStudentPayment> paymentList = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                .eq(CourseScheduleStudentPayment::getUserId, id)
+                .eq(CourseScheduleStudentPayment::getCourseGroupId, groupId)
+        );
+        result.setExistBuy(0);
+        if (CollectionUtils.isNotEmpty(paymentList)) {
+            result.setExistBuy(1);
+        }
         return result;
     }
 
@@ -141,6 +150,27 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         Page<CourseGroupVo> pageInfo = PageUtil.getPageInfo(param);
         pageInfo.setAsc("b.created_time_");
         IPage<CourseGroupVo> page = baseMapper.queryTeacherCourseGroup(pageInfo, param);
+        //学生端查询报名中的课程组需要标明该学生是否已经购买过该课程组
+        String os = WrapperUtil.toStr(param, "os");
+        if ("student".equals(os) && CollectionUtils.isNotEmpty(page.getRecords())) {
+            //获取当前课程组Id
+            List<CourseGroupVo> records = page.getRecords();
+            List<Long> groupId = records.stream().map(CourseGroupVo::getCourseGroupId).collect(Collectors.toList());
+            //根据学生id 及 课程组id集合查询购买记录
+            List<CourseScheduleStudentPayment> paymentList = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                    .eq(CourseScheduleStudentPayment::getUserId, getSysUser().getId())
+                    .in(CourseScheduleStudentPayment::getCourseGroupId, groupId)
+            );
+            if (CollectionUtils.isNotEmpty(paymentList)) {
+                Map<Long, List<CourseScheduleStudentPayment>> payMap = WrapperUtil.groupList(paymentList, CourseScheduleStudentPayment::getCourseGroupId);
+                records.forEach(o -> {
+                    o.setExistBuy(0);
+                    if (payMap.containsKey(o.getCourseGroupId())) {
+                        o.setExistBuy(1);
+                    }
+                });
+            }
+        }
         return PageUtil.pageInfo(page);
     }
 
@@ -253,9 +283,10 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     /**
      * 创建课时写到缓存锁定时间
      */
+    @Override
     public List<CourseTimeEntity> lockCourseToCache(CheckCourseTimeDto dto) {
-        //获取课程类型
-        CourseScheduleEnum courseType = CourseScheduleEnum.existCourseType(dto.getCourseType(), "课程类型不正确!");
+        // true:陪练课PRACTICE     false:LIVE直播课
+        boolean courseTypeFlag = CourseScheduleEnum.existCourseType(dto.getCourseType(), "课程类型不正确!").equals(CourseScheduleEnum.PRACTICE);
         //先自校验传入时间是否交集
         List<CourseTimeEntity> timeList = dto.getTimeList();
         if (timeList.size() > 1) {
@@ -273,21 +304,21 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         }
         //批量检查老师课时在数据库是否重复
         batchCheckTeacherCourseTime(dto.getTeacherId(), timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
-        //获取老师锁课缓存并添加课时数据
-        RMap<Long, List<CourseTimeEntity>> map = getExpireLiveLockTimeCache(dto.getTeacherId());
-        map.fastPut(dto.getTeacherId(), timeList);
 
         //需要自动补全课时
         if (dto.getLoop() == 1) {
             //自动排课,获取排课后所有的课程时间
-            List<CourseTimeEntity> allCourseTime = autoPlanningLiveCourseTime(dto.getTeacherId(), dto.getCourseNum(), timeList, courseType);
-            allCourseTime.sort(Comparator.comparing(CourseTimeEntity::getStartTime));
-            //替换掉原有的课时
-            dto.setTimeList(allCourseTime);
-            //将自动排课后的课时写入缓存覆盖原有的
-            map.fastPut(dto.getTeacherId(), dto.getTimeList());
+            timeList = autoPlanningLiveCourseTime(dto.getTeacherId(), dto.getCourseNum(), timeList, courseTypeFlag);
+            timeList.sort(Comparator.comparing(CourseTimeEntity::getStartTime));
+        }
+        //获取老师锁课缓存
+        RMap<Long, List<CourseTimeEntity>> map = getExpireLiveLockTimeCache(dto.getTeacherId());
+        //陪练课无需锁定时间
+        if (!courseTypeFlag) {
+            //直播课添加课时数据
+            map.fastPut(dto.getTeacherId(), timeList);
         }
-        return dto.getTimeList();
+        return timeList;
     }
 
     /**
@@ -331,14 +362,12 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      * @param teacherId      老师id
      * @param totalCourseNum 总课程数量
      * @param paramTimeList  当前课程的时间段
-     * @param courseType     PRACTICE陪练课  LIVE直播课
+     * @param courseTypeFlag true:陪练课PRACTICE     false:LIVE直播课
      * @return 自动排课后的全部课时
      */
-    private List<CourseTimeEntity> autoPlanningLiveCourseTime(Long teacherId, int totalCourseNum, List<CourseTimeEntity> paramTimeList, CourseScheduleEnum courseType) {
+    private List<CourseTimeEntity> autoPlanningLiveCourseTime(Long teacherId, int totalCourseNum, List<CourseTimeEntity> paramTimeList, boolean courseTypeFlag) {
         //是否跳过节假日
         boolean skipHoliday = false;
-        //true 陪练课
-        boolean courseTypeFlag = courseType.equals(CourseScheduleEnum.PRACTICE);
         if (courseTypeFlag) {
             //查询老师陪练课设置
             TeacherFreeTime teacherTime = teacherFreeTimeService.getOne(Wrappers.<TeacherFreeTime>lambdaQuery()

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

@@ -73,6 +73,9 @@ public class CourseGroupVo implements Serializable {
     @ApiModelProperty(value = "直播课成课后生成的im群id")
     private String imGroupId;
 
+    @ApiModelProperty(value = "当前学生有没有购买该课程组   0没有购买    1已经购买过 ")
+    private Integer existBuy;
+
     public Long getCourseGroupId() {
         return courseGroupId;
     }
@@ -216,4 +219,12 @@ public class CourseGroupVo implements Serializable {
     public void setImGroupId(String imGroupId) {
         this.imGroupId = imGroupId;
     }
+
+    public Integer getExistBuy() {
+        return existBuy;
+    }
+
+    public void setExistBuy(Integer existBuy) {
+        this.existBuy = existBuy;
+    }
 }

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

@@ -485,7 +485,7 @@
             g.pre_student_num_ AS buyCount
         FROM course_group g
         LEFT JOIN sys_user u ON g.teacher_id_=u.id_
-        WHERE type_='LIVE'
+        WHERE type_='LIVE' and g.status_ = 'APPLY'
         ORDER BY courseStartTime DESC LIMIT 4
     </select>
     <select id="selectVideo" resultType="com.yonge.cooleshow.biz.dal.vo.StudentHomePage$Video">

+ 1 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseGroupController.java

@@ -47,6 +47,7 @@ public class StudentCourseGroupController extends BaseController {
     @ApiOperation("分页查询直播课课程组列表")
     @PostMapping("/queryPageCourseGroup")
     public HttpResponseResult<PageInfo<CourseGroupVo>> queryPageLiveCourseGroup(@RequestBody Map<String, Object> param) {
+        param.put("os","student");
         return succeed(courseGroupService.queryPageLiveCourseGroup(param));
     }
 

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

@@ -49,6 +49,7 @@ public class TeacherCourseGroupController extends BaseController {
     @ApiOperation("分页查询直播课课程组列表")
     @PostMapping("/queryPageCourseGroup")
     public HttpResponseResult<PageInfo<CourseGroupVo>> queryPageLiveCourseGroup(@RequestBody Map<String, Object> param) {
+        param.put("os","teacher");
         return succeed(courseGroupService.queryPageLiveCourseGroup(param));
     }