浏览代码

课程状态

liujc 2 年之前
父节点
当前提交
354614951f

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -619,4 +619,6 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<StudentOrganDto> queryRemainCourseStudent(@Param("organIds") List<Integer> organIds);
 
     List<Map> statCourseFee(@Param("cutFirstDayOfMonth") String cutFirstDayOfMonth, @Param("cutLastDayOfMonth") String cutLastDayOfMonth);
+
+    CourseScheduleStudentPayment getByUserIdAndCourseId(@Param("userId") Integer userId, @Param("courseScheduleId") Long courseScheduleId);
 }

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -420,9 +420,11 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     // 微信公众号secret
     String SCHOOL_IM_GROUP_IMG = "school_im_group_img";
     // 直播课通知学生退出直播间时间
-    String liveClassStudentRemindTime = "live_class_student_remind_time";
+    String LIVE_CLASS_STUDENT_REMIND_TIME = "live_class_student_remind_time";
     // 关闭直播间时间
-    String closeClassStudentRemindTime = "close_class_student_remind_time";
+    String CLOSE_CLASS_STUDENT_REMIND_TIME = "close_class_student_remind_time";
+    // 直播课程开始前XX分钟,发送通知
+    String LIVE_CLASS_START_REMIND_TIME = "live_class_start_remind_time";
 
     static void checkActivityDate(String startTimeStr, String endTimeStr) {
         if(StringUtils.isEmpty(startTimeStr) || StringUtils.isEmpty(startTimeStr)){

+ 45 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -196,6 +196,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	@Autowired
 	private ImLiveBroadcastRoomService imLiveBroadcastRoomService;
 
+    @Autowired
+    private ImLiveRoomVideoService imLiveRoomVideoService;
 
     @Autowired
     private ImLiveRoomVideoDao imLiveRoomVideoDao;
@@ -1282,6 +1284,18 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if (count == 0) {
             dataList = new ArrayList<>();
         }
+
+        // 直播课判断时间,提前30分钟将课程改为进行中
+
+        Integer studentRemindTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.LIVE_CLASS_START_REMIND_TIME).getParanValue());
+        for (CourseScheduleDto record : dataList) {
+            if (CourseScheduleType.LIVE.equals(record.getType()) && CourseStatusEnum.NOT_START.equals(record.getStatus())) {
+                Date date = DateUtil.addMinutes(new Date(), studentRemindTime);
+                if (date.after(record.getStartClassTime())) {
+                    record.setStatus(CourseStatusEnum.UNDERWAY);
+                }
+            }
+        }
         pageInfo.setRows(dataList);
         return pageInfo;
     }
@@ -1302,16 +1316,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						cs.getType().equals(CourseScheduleType.COMM))
                 .map(CourseScheduleDto::getId).collect(Collectors.toList());
 
-        List<CourseScheduleDto> teacherCourseSchedulesWithDate1 = getTeacherCourseFormat(userId, classDate, tenantId, now,
+        return getTeacherCourseFormat(userId, classDate, tenantId,
                 teacherCourseSchedulesWithDate, allCourseScheduleIds, courseScheduleIds);
-        if (teacherCourseSchedulesWithDate1 != null) return teacherCourseSchedulesWithDate1;
-        return teacherCourseSchedulesWithDate;
     }
 
     // 数据整理
     @Nullable
-    private List<CourseScheduleDto> getTeacherCourseFormat(Integer userId, Date classDate, Integer tenantId, Date now,
-                                                         List<CourseScheduleDto> teacherCourseSchedulesWithDate, List<Long> allCourseScheduleIds, List<Long> courseScheduleIds) {
+    private List<CourseScheduleDto> getTeacherCourseFormat(Integer userId, Date classDate, Integer tenantId,
+                                                           List<CourseScheduleDto> teacherCourseSchedulesWithDate, List<Long> allCourseScheduleIds,
+                                                           List<Long> courseScheduleIds) {
         // 直播课设置直播间信息
         Map<String, ImLiveBroadcastRoomDto> liveRoomMap = getLiveRoomMap(teacherCourseSchedulesWithDate);
 
@@ -1406,6 +1419,32 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 courseScheduleDto.setOs(courseScheduleDto.getLiveBroadcastRoom().getOs());
             }
         }
+
+        // roomId
+        List<String> roomIdList = teacherCourseSchedulesWithDate.stream().map(CourseScheduleDto::getLiveRoomId).collect(Collectors.toList());
+
+        // 查询直播间视频数
+        Map<String, Integer> uidCountMap = imLiveRoomVideoService.queryRoomUidCountMap(roomIdList);
+        for (CourseScheduleDto record : teacherCourseSchedulesWithDate) {
+            if (Objects.isNull(record.getLiveRoomId())) {
+                continue;
+            }
+            Integer count = uidCountMap.get(record.getLiveRoomId());
+            if (count == null) {
+                record.setVideoNum(0);
+            }
+            record.setVideoNum(count);
+        }
+        // 直播课判断时间,提前30分钟将课程改为进行中
+        Integer studentRemindTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.LIVE_CLASS_START_REMIND_TIME).getParanValue());
+        for (CourseScheduleDto record : teacherCourseSchedulesWithDate) {
+            if (CourseScheduleType.LIVE.equals(record.getType()) && CourseStatusEnum.NOT_START.equals(record.getStatus())) {
+                Date date = DateUtil.addMinutes(new Date(), studentRemindTime);
+                if (date.after(record.getStartClassTime())) {
+                    record.setStatus(CourseStatusEnum.UNDERWAY);
+                }
+            }
+        }
         return teacherCourseSchedulesWithDate;
     }
 
@@ -5908,7 +5947,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         // id 集合
         List<Long> courseIds = courseScheduleDtos.stream().map(CourseScheduleDto::getId).collect(Collectors.toList());
         List<CourseScheduleDto> teacherCourseFormat = getTeacherCourseFormat(queryInfo.getTeacherId(), new Date(),
-                queryInfo.getTenantId(), new Date(), courseScheduleDtos, courseIds, courseIds);
+                queryInfo.getTenantId(), courseScheduleDtos, courseIds, courseIds);
 
         return page.setRecords(teacherCourseFormat);
     }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -554,6 +554,14 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         if (Objects.isNull(classGroup)) {
             return;
         }
+        // 购买人员生成考勤cssp表
+        CourseScheduleStudentPayment payment = courseScheduleStudentPaymentDao.getByUserIdAndCourseId(userId, currentScheduleId);
+        if (Objects.isNull(payment)) {
+            return;
+        }
+        if (JoinCourseType.SHARE.equals(payment.getJoinCourseType())) {
+            return;
+        }
         StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, currentScheduleId.intValue());
         if (studentAttendance == null) {
             studentAttendance = new StudentAttendance();

+ 10 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -4951,8 +4951,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
      */
     @Override
     public void liveCourseRemind() {
+
+        Integer studentRemindTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.LIVE_CLASS_STUDENT_REMIND_TIME).getParanValue());
         // 查询30分钟内要开始的并且没有直播通知的直播课
-        List<CourseSchedule> courseSchedules = courseScheduleDao.liveCourseRemind(30);
+        List<CourseSchedule> courseSchedules = courseScheduleDao.liveCourseRemind(studentRemindTime);
 
         if (CollectionUtils.isEmpty(courseSchedules)) {
             return;
@@ -5116,9 +5118,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
         List<TenantInfo> list = tenantInfoService.list();
 
-        Integer studentRemindTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.liveClassStudentRemindTime).getParanValue());
+        Integer studentRemindTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.LIVE_CLASS_STUDENT_REMIND_TIME).getParanValue());
 
-        Integer closeTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.closeClassStudentRemindTime).getParanValue());
+        Integer closeTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.CLOSE_CLASS_STUDENT_REMIND_TIME).getParanValue());
 
         for (TenantInfo tenantInfo : list) {
             // 是否是连堂课
@@ -5204,8 +5206,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         }
 
 
+        Integer studentRemindTime = Integer.parseInt(sysConfigService.findByParamName(SysConfigService.LIVE_CLASS_START_REMIND_TIME).getParanValue());
+
+        Date date = DateUtil.startDateAndEndTime(courseSchedule.getClassDate(), courseSchedule.getStartClassTime());
+        date = DateUtil.addMinutes(date, -studentRemindTime);
         // 课程是否开始
-        if(CourseStatusEnum.NOT_START.equals(courseSchedule.getStatus())) {
+        if(CourseStatusEnum.NOT_START.equals(courseSchedule.getStatus()) && date.after(new Date())) {
             throw new BizException("课程未开始");
         }
 

+ 4 - 3
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -4374,6 +4374,7 @@
         from course_schedule cs
         where cs.status_ = 'NOT_START'
           and cs.type_ = 'LIVE'
+        and cs.live_remind_ = 0
           and cs.class_date_ = date_format(now(),'%Y-%m-%d')
           and CONCAT(class_date_,' ',start_class_time_)  &lt;= date_format(date_add(now(),interval #{minutes} minute),'%Y-%m-%d %H:%i:%s')
           and CONCAT(class_date_,' ',start_class_time_)  &gt;= date_format(now(),'%Y-%m-%d %H:%i:%s')
@@ -4381,7 +4382,7 @@
 
     <update id="updateRemindStatus">
         update course_schedule
-        set status_ = 'UNDERWAY'
+        set live_remind_ = 1
         where id_  in
         <foreach collection="ids" item="id" open="(" separator="," close=")">
             #{id}
@@ -4393,11 +4394,11 @@
         where status_ = 'OVER' and type_ = 'LIVE'  and  continuous_course_ = 0
         <if test="studentRemindTime != null" >
             and CONCAT(class_date_,' ',end_class_time_) &lt;= date_format(date_add(now(),interval -#{studentRemindTime} minute),'%Y-%m-%d %H:%i:%s')
-            and live_remind_ = 0
+            and live_remind_ = 1
         </if>
         <if test="closeTime != null" >
             and CONCAT(class_date_,' ',end_class_time_) &lt;= date_format(date_add(now(),interval -#{closeTime} minute),'%Y-%m-%d %H:%i:%s')
-            and live_remind_ = 1
+            and live_remind_ = 2
         </if>
         <if test="tenantId != null">
             and tenant_id_ = #{tenantId}

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -25,6 +25,7 @@
 		<result column="be_merged_" property="beMerged"/>
 		<result column="tenant_id_" property="tenantId" />
 		<result column="activity_user_mapper_id_" property="activityUserMapperId" />
+		<result column="join_course_type_" property="joinCourseType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 	</resultMap>
 
 	<resultMap type="com.ym.mec.biz.dal.dto.StudentCourseTimesDto" id="studentCourseTimesDto">
@@ -1118,4 +1119,8 @@
 		AND cs.del_flag_ = 0 AND cs.is_lock_ = 0 and cs.pre_course_flag_ = 0 AND t.is_settlement_salary_ = 1 AND csts.settlement_time_ IS NOT NULL AND cs.tenant_id_ = 1
 		group by cs.organ_id_
 	</select>
+
+	<select id="getByUserIdAndCourseId" resultMap="CourseScheduleStudentPayment">
+        SELECT * FROM `course_schedule_student_payment` WHERE `user_id_` = #{userId} AND `course_schedule_id_` = #{courseScheduleId}
+    </select>
 </mapper>