Browse Source

Merge remote-tracking branch 'origin/feature/0529-live' into feature/0529-live

shangke 2 years ago
parent
commit
33d6276b76

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -2013,4 +2013,5 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      */
      */
     List<CourseSchedule> liveCourseRemind();
     List<CourseSchedule> liveCourseRemind();
 
 
+    void updateRemindStatus(@Param("ids") List<Long> ids);
 }
 }

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java

@@ -19,7 +19,6 @@ public enum GroupType implements BaseEnum<String, GroupType> {
 	ACTIVITY("活动购买"),
 	ACTIVITY("活动购买"),
 	MEMBER("购买会员"),
 	MEMBER("购买会员"),
 	LIVE_BUY("直播购物"),
 	LIVE_BUY("直播购物"),
-
 	MALL_SELL("商城购物"),
 	MALL_SELL("商城购物"),
 	LIVE("直播课"),
 	LIVE("直播课"),
 	;
 	;

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -253,6 +253,15 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     //小小训练营-训练营开始训练推送
     //小小训练营-训练营开始训练推送
     JIGUANG_TEMP_LITTLE_ARTIST_START_TRAIN("JIGUANG_TEMP_LITTLE_ARTIST_START_TRAIN","训练营开始训练推送-极光推送"),
     JIGUANG_TEMP_LITTLE_ARTIST_START_TRAIN("JIGUANG_TEMP_LITTLE_ARTIST_START_TRAIN","训练营开始训练推送-极光推送"),
 
 
+    // 老师直播课上课通知
+    JIGUANG_LIVE_COURSE_START("JIGUANG_LIVE_COURSE_START","老师直播课上课通知-极光推送"),
+
+    // 学生直播课上课通知
+    JIGUANG_LIVE_COURSE_START_STUDENT("JIGUANG_LIVE_COURSE_START_STUDENT","学生直播课上课通知-极光推送"),
+
+    // 群聊直播课上课通知
+    IM_LIVE_COURSE_START_GROUP("IM_LIVE_COURSE_START_GROUP","群聊直播课上课通知-极光推送"),
+
     ;
     ;
 
 
     MessageTypeEnum(String code, String msg) {
     MessageTypeEnum(String code, String msg) {

+ 56 - 43
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -18,6 +18,7 @@ import com.google.common.collect.Maps;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.dto.VipGroupClassGroupMapper;
 import com.ym.mec.biz.dal.dto.VipGroupClassGroupMapper;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.mapper.LiveGroupPlusMapper;
 import com.ym.mec.biz.dal.mapper.LiveGroupPlusMapper;
 import com.ym.mec.biz.dal.wrapper.LiveGroupWrapper;
 import com.ym.mec.biz.dal.wrapper.LiveGroupWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.*;
@@ -67,25 +68,6 @@ import com.ym.mec.biz.dal.dao.VipGroupDefaultClassesCycleDao;
 import com.ym.mec.biz.dal.dao.VipGroupDefaultClassesUnitPriceDao;
 import com.ym.mec.biz.dal.dao.VipGroupDefaultClassesUnitPriceDao;
 import com.ym.mec.biz.dal.dao.VipGroupStudentCoursePriceDao;
 import com.ym.mec.biz.dal.dao.VipGroupStudentCoursePriceDao;
 import com.ym.mec.biz.dal.entity.StudentApplyRefunds.StudentApplyRefundsStatus;
 import com.ym.mec.biz.dal.entity.StudentApplyRefunds.StudentApplyRefundsStatus;
-import com.ym.mec.biz.dal.enums.ActivityCourseType;
-import com.ym.mec.biz.dal.enums.AuditStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CouponDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.ReturnFeeEnum;
-import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
-import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
-import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.ActivityUserQueryInfo;
 import com.ym.mec.biz.dal.page.ActivityUserQueryInfo;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
@@ -2205,6 +2187,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId());
             VipGroupCategory vipGroupCategory = vipGroupCategoryService.get(vipGroup.getVipGroupCategoryId());
             vipGroupDetail.setCategoryName(vipGroupCategory.getName());
             vipGroupDetail.setCategoryName(vipGroupCategory.getName());
             vipGroupDetail.setNumberOfClasses(vipGroupDao.countTeacherVipGroups(vipGroupDetail.getTeacherId().longValue()));
             vipGroupDetail.setNumberOfClasses(vipGroupDao.countTeacherVipGroups(vipGroupDetail.getTeacherId().longValue()));
+            vipGroupDetail.setLiveConfigJson(vipGroup.getLiveConfigJson());
             return vipGroupDetail;
             return vipGroupDetail;
         }
         }
     }
     }
@@ -2758,19 +2741,19 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 //退还优惠券
                 //退还优惠券
                 sysCouponCodeService.quit(order.getCouponCodeId());
                 sysCouponCodeService.quit(order.getCouponCodeId());
             } else {
             } else {
+                //生成班级学员关联
+                ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
+                classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
+                classGroupStudentMapper.setClassGroupId(classGroup.getId());
+                classGroupStudentMapper.setUserId(userId);
+                classGroupStudentMapper.setCreateTime(date);
+                classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+                classGroupStudentMapper.setGroupType(groupType);
+                classGroupStudentMapperDao.insert(classGroupStudentMapper);
                 if(groupType == VIP){
                 if(groupType == VIP){
                     //活动赠送
                     //活动赠送
                     studentPaymentOrderService.activityGive(vipGroup.getVipGroupActivityId(), order,
                     studentPaymentOrderService.activityGive(vipGroup.getVipGroupActivityId(), order,
                             vipGroup.getId().toString(), null);
                             vipGroup.getId().toString(), null);
-                    //生成班级学员关联
-                    ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
-                    classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
-                    classGroupStudentMapper.setClassGroupId(classGroup.getId());
-                    classGroupStudentMapper.setUserId(userId);
-                    classGroupStudentMapper.setCreateTime(date);
-                    classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
-                    classGroupStudentMapper.setGroupType(groupType);
-                    classGroupStudentMapperDao.insert(classGroupStudentMapper);
                     //获取班级实际人数
                     //获取班级实际人数
                     Integer studentNum = classGroupStudentMapperDao.countGroupNormalStudentNum(groupType, classGroup.getMusicGroupId());
                     Integer studentNum = classGroupStudentMapperDao.countGroupNormalStudentNum(groupType, classGroup.getMusicGroupId());
                     //课程组人数已满,变更状态
                     //课程组人数已满,变更状态
@@ -2779,7 +2762,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                         classGroup.setDelFlag(0);
                         classGroup.setDelFlag(0);
                         VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupCategoryId(),
                         VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupCategoryId(),
                                 vipGroup.getOrganId(), vipGroup.getGroupType());
                                 vipGroup.getOrganId(), vipGroup.getGroupType());
-
                         //生成课表
                         //生成课表
                         List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(), CourseSchedule.class);
                         List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(), CourseSchedule.class);
                         classGroup.setTotalClassTimes(courseSchedules.size());
                         classGroup.setTotalClassTimes(courseSchedules.size());
@@ -4525,16 +4507,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                     Integer tenantId = vipGroup.getTenantId();
                     Integer tenantId = vipGroup.getTenantId();
                     for (String s : vipGroup.getStudentIdList().split(",")) {
                     for (String s : vipGroup.getStudentIdList().split(",")) {
                         Integer userId = Integer.parseInt(s);
                         Integer userId = Integer.parseInt(s);
-                        //生成班级学员关联
-                        ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
-                        classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
-                        classGroupStudentMapper.setClassGroupId(classGroup.getId());
-                        classGroupStudentMapper.setUserId(userId);
-                        classGroupStudentMapper.setCreateTime(now);
-                        classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
-                        classGroupStudentMapper.setGroupType(GroupType.LIVE);
-                        classGroupStudentMapperDao.insert(classGroupStudentMapper);
-
                         classGroup.setDelFlag(0);
                         classGroup.setDelFlag(0);
                         VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupCategoryId(),
                         VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupCategoryId(),
                                 vipGroup.getOrganId(), vipGroup.getGroupType());
                                 vipGroup.getOrganId(), vipGroup.getGroupType());
@@ -4865,14 +4837,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         // 手机号
         // 手机号
         List<SimpleUserDto> usersSimpleInfo = teacherDao.getUsersSimpleInfo(studentIds.stream().map(Long::intValue).collect(Collectors.toList()));
         List<SimpleUserDto> usersSimpleInfo = teacherDao.getUsersSimpleInfo(studentIds.stream().map(Long::intValue).collect(Collectors.toList()));
 
 
-        Set<Integer> subjectIds = new HashSet<>();
         Set<Integer> coopIds = new HashSet<>();
         Set<Integer> coopIds = new HashSet<>();
-        Set<Integer> organIds = new HashSet<>();
+        Set<Integer> organIds;
         studentMap.values().forEach(student -> {
         studentMap.values().forEach(student -> {
-            subjectIds.add(Integer.parseInt(student.getSubjectIdList()));
             coopIds.add(student.getCooperationOrganId());
             coopIds.add(student.getCooperationOrganId());
-            organIds.add(student.getOrganId());
         });
         });
+        organIds = usersSimpleInfo.stream().map( o -> Integer.parseInt(o.getOrganIds())).collect(Collectors.toSet());
         // 分部
         // 分部
         Map<Integer, Organization> organizationMap = organizationService.getMapById(new ArrayList<>(organIds));
         Map<Integer, Organization> organizationMap = organizationService.getMapById(new ArrayList<>(organIds));
 
 
@@ -4975,8 +4945,51 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         // 查询30分钟内要开始的并且没有直播通知的直播课
         // 查询30分钟内要开始的并且没有直播通知的直播课
         List<CourseSchedule> courseSchedules = courseScheduleDao.liveCourseRemind();
         List<CourseSchedule> courseSchedules = courseScheduleDao.liveCourseRemind();
 
 
+        if (CollectionUtils.isEmpty(courseSchedules)) {
+            return;
+        }
+
+        for (CourseSchedule courseSchedule : courseSchedules) {
+
+            // 获取班级名
+            ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
+            if (Objects.isNull(classGroup)) {
+                continue;
+            }
+
+            // 通知老师
+            Integer actualTeacherId = courseSchedule.getActualTeacherId();
+            if (actualTeacherId != null) {
+                Map<Integer, String> userMap = new HashMap<>();
+                userMap.put(actualTeacherId, actualTeacherId.toString());
+
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_LIVE_COURSE_START,
+                        userMap, null, 0, null, "TEACHER", classGroup.getName());
+            }
+
+            // 通知学生
+            List<SimpleUserDto> courseStudents = courseScheduleStudentPaymentService.getCourseStudents(Lists.newArrayList(courseSchedule.getId()));
+            if (!CollectionUtils.isEmpty(courseStudents)) {
+                Map<Integer, String> userMap = new HashMap<>();
+                courseStudents.forEach(data -> {
+                    userMap.put(data.getUserId(), data.getUserId().toString());
+                });
+
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_LIVE_COURSE_START_STUDENT,
+                        userMap, null, 0, null, "STUDENT", classGroup.getName());
+            }
+
+            // im消息 TODO
+            sysMessageService.batchSendImGroupMessage(MessageTypeEnum.IM_LIVE_COURSE_START_GROUP, courseSchedule.getActualTeacherId().toString(), "extra",
+                    new String[]{classGroup.getId().toString()},null);
+
+        }
 
 
+        // id 集合
+        List<Long> ids = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
 
 
+        // 更新通知状态
+        courseScheduleDao.updateRemindStatus(ids);
 
 
     }
     }
 }
 }

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -46,6 +46,7 @@
         <result column="settlement_report_flag_" property="settlementReportFlag"/>
         <result column="settlement_report_flag_" property="settlementReportFlag"/>
         <result column="service_provider_" property="serviceProvider"/>
         <result column="service_provider_" property="serviceProvider"/>
         <result column="mute_all_" property="muteAll"/>
         <result column="mute_all_" property="muteAll"/>
+        <result column="live_remind_" property="liveRemind"/>
     </resultMap>
     </resultMap>
 
 
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
@@ -4253,4 +4254,13 @@
           and cs.class_date_ = date_format(now(),'%Y-%m-%d')
           and cs.class_date_ = date_format(now(),'%Y-%m-%d')
           and cs.start_class_time_ &lt;= date_format(now(),'%H:%i:%s')
           and cs.start_class_time_ &lt;= date_format(now(),'%H:%i:%s')
     </select>
     </select>
+
+    <update id="updateRemindStatus">
+        update course_schedule
+        set live_remind_ = 1
+        where id_  in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
 </mapper>
 </mapper>

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -303,4 +303,8 @@ public interface TaskRemoteService {
 
 
     @GetMapping("task/degreeStatusChange")
     @GetMapping("task/degreeStatusChange")
     void degreeStatusChange() ;
     void degreeStatusChange() ;
+
+    // 直播课程提醒
+    @GetMapping("task/liveCourseRemind")
+    void liveCourseRemind() ;
 }
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -354,4 +354,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
     public void degreeStatusChange() {
     public void degreeStatusChange() {
         logger.error("考级状态变更失败");
         logger.error("考级状态变更失败");
     }
     }
+
+    @Override
+    public void liveCourseRemind() {
+        logger.error("直播课提醒失败");
+    }
 }
 }

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/LiveCourseRemindTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class LiveCourseRemindTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.liveCourseRemind();
+	}
+}