Explorar el Código

增加直播间预约推送消息
加入定时任务检查训练营状态

hgw hace 3 años
padre
commit
2c0c0f1957

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -221,7 +221,10 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
 
     STUDENT_SMS_CLOUD_PAYMENT("STUDENT_SMS_CLOUD_PAYMENT",  "待缴费订单"),
     STUDENT_SMS_CLOUD_PAYMENT("STUDENT_SMS_CLOUD_PAYMENT",  "待缴费订单"),
     STUDENT_PUSH_CLOUD_PAYMENT("STUDENT_PUSH_CLOUD_PAYMENT",  "待缴费订单"),
     STUDENT_PUSH_CLOUD_PAYMENT("STUDENT_PUSH_CLOUD_PAYMENT",  "待缴费订单"),
-    IM_SHARE_LIVE_URL("IM_SHARE_LIVE_URL",  "直播链接分享")
+    IM_SHARE_LIVE_URL("IM_SHARE_LIVE_URL",  "直播链接分享"),
+
+    //直播推送
+    JIGUANG_LIVE_RESERVATION("IM_LIVE_RESERVATION","直播开播预约提醒-极光推送"),
     ;
     ;
 
 
     MessageTypeEnum(String code, String msg) {
     MessageTypeEnum(String code, String msg) {

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveRoomReservationService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 package com.ym.mec.biz.service;
 
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
 import com.ym.mec.biz.dal.entity.ImLiveRoomReservation;
 import com.ym.mec.biz.dal.entity.ImLiveRoomReservation;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -32,5 +33,10 @@ public interface ImLiveRoomReservationService extends IService<ImLiveRoomReserva
      * <p> liveState 直播状态 0未开始 1开始 2结束
      * <p> liveState 直播状态 0未开始 1开始 2结束
      */
      */
     PageInfo<ImLiveBroadcastRoomVo> queryPageStudent(Map<String, Object> param);
     PageInfo<ImLiveBroadcastRoomVo> queryPageStudent(Map<String, Object> param);
+
+    /**
+     * 预约直播间推送极光
+     */
+    void push(ImLiveBroadcastRoom room);
 }
 }
 
 

+ 5 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -895,6 +895,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         list.forEach(this::createLiveRoom);
         list.forEach(this::createLiveRoom);
     }
     }
 
 
+    @Autowired
+    private ImLiveRoomReservationService imLiveRoomReservationService;
+
     /**
     /**
      * 去融云创建房间
      * 去融云创建房间
      */
      */
@@ -906,6 +909,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             createSpeakerInfo(room, sysUser);
             createSpeakerInfo(room, sysUser);
             //去融云创建房间
             //去融云创建房间
             imFeignService.createLiveRoom(room.getRoomUid(), room.getRoomTitle());
             imFeignService.createLiveRoom(room.getRoomUid(), room.getRoomTitle());
+            //推送预约直播间消息
+            imLiveRoomReservationService.push(room);
         } catch (Exception e) {
         } catch (Exception e) {
             log.error(">>>>>>>>>> createLiveRoom error roomUid:{} msg:{}", room.getRoomUid(), e.getMessage());
             log.error(">>>>>>>>>> createLiveRoom error roomUid:{} msg:{}", room.getRoomUid(), e.getMessage());
         }
         }
@@ -995,13 +1000,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      * 测试
      * 测试
      */
      */
     public Map<String, Object> test(String roomUid) {
     public Map<String, Object> test(String roomUid) {
-        List<ImUserState> userStateList = new ArrayList<>();
-        ImUserState userState1 = new ImUserState();
-        userState1.setStatus("3");
-        userState1.setUserid("100071");
-        userStateList.add(userState1);
-        opsRoom(userStateList);
-
         //test
         //test
         Map<String, Object> result = new HashMap<>();
         Map<String, Object> result = new HashMap<>();
         //点赞数
         //点赞数

+ 47 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveRoomReservationServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -8,6 +9,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ImLiveRoomReservationDao;
 import com.ym.mec.biz.dal.dao.ImLiveRoomReservationDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
 import com.ym.mec.biz.dal.entity.ImLiveRoomReservation;
 import com.ym.mec.biz.dal.entity.ImLiveRoomReservation;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
@@ -19,6 +21,7 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
 import com.ym.mec.common.page.PageUtil;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -27,6 +30,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 
 /**
 /**
  * 直播预约记录(ImLiveRoomReservation)表服务实现类
  * 直播预约记录(ImLiveRoomReservation)表服务实现类
@@ -37,7 +41,7 @@ import java.util.*;
 @Service("imLiveRoomReservationService")
 @Service("imLiveRoomReservationService")
 public class ImLiveRoomReservationServiceImpl extends ServiceImpl<ImLiveRoomReservationDao, ImLiveRoomReservation> implements ImLiveRoomReservationService {
 public class ImLiveRoomReservationServiceImpl extends ServiceImpl<ImLiveRoomReservationDao, ImLiveRoomReservation> implements ImLiveRoomReservationService {
 
 
-    private final static Logger logger = LoggerFactory.getLogger(ImLiveRoomReservationServiceImpl.class);
+    private final static Logger log = LoggerFactory.getLogger(ImLiveRoomReservationServiceImpl.class);
 
 
     @Autowired
     @Autowired
     private SysUserFeignService sysUserFeignService;
     private SysUserFeignService sysUserFeignService;
@@ -57,7 +61,7 @@ public class ImLiveRoomReservationServiceImpl extends ServiceImpl<ImLiveRoomRese
         optional.filter(a -> Objects.nonNull(a.getUserId())).orElseThrow(() -> new BizException("学员id不能为空"));
         optional.filter(a -> Objects.nonNull(a.getUserId())).orElseThrow(() -> new BizException("学员id不能为空"));
         entity.setPushState(-1);
         entity.setPushState(-1);
         entity.setCreateTime(new Date());
         entity.setCreateTime(new Date());
-        this.baseMapper.insert(entity);
+        this.saveOrUpdate(entity);
     }
     }
 
 
     /**
     /**
@@ -87,10 +91,51 @@ public class ImLiveRoomReservationServiceImpl extends ServiceImpl<ImLiveRoomRese
         return PageUtil.pageInfo(page);
         return PageUtil.pageInfo(page);
     }
     }
 
 
+    /**
+     * 预约直播间推送极光
+     */
+    @Override
+    public void push(ImLiveBroadcastRoom room) {
+        List<ImLiveRoomReservation> list = this.list(Wrappers.<ImLiveRoomReservation>lambdaQuery()
+                .eq(ImLiveRoomReservation::getRoomUid, room.getRoomUid())
+                .eq(ImLiveRoomReservation::getPushState, -1));
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+        SysUser user = getUser(room.getSpeakerId());
+        String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
+        String memo = "10?" + baseUrl + "/#/live?roomUid=" + room.getRoomUid();
+        Map<Integer, String> pushStudentList = new HashMap<>();
+        for (ImLiveRoomReservation obj : list) {
+            pushStudentList.put(obj.getUserId(), obj.getUserId().toString());
+        }
+        //推送状态
+        AtomicInteger pushState = new AtomicInteger(0);
+        try {
+            // 约直播间通知发送
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.JIGUANG_LIVE_RESERVATION, pushStudentList,
+                    null, 0, memo, "STUDENT", user.getUsername(), room.getRoomTitle());
+        } catch (Exception e) {
+            log.error("推送消息失败", e);
+            pushState.set(1);
+        }
+        log.info("ImLiveRoomReservation push >>> state:{}  |>>>> memo:{} |>>>> studentList :{} |>>>> username:{}  |>>>>room:{}", pushState.get(), memo, pushStudentList, user.getUsername(), JSONObject.toJSONString(room));
+        //修改推送状态
+        this.update(Wrappers.<ImLiveRoomReservation>lambdaUpdate()
+                .set(ImLiveRoomReservation::getPushState, pushState.get())
+                .eq(ImLiveRoomReservation::getRoomUid, room.getRoomUid()));
+    }
+
     private SysUser getUser() {
     private SysUser getUser() {
         return Optional.ofNullable(sysUserFeignService.queryUserInfo())
         return Optional.ofNullable(sysUserFeignService.queryUserInfo())
                 .orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
                 .orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
     }
     }
 
 
+    private SysUser getUser(Integer userId) {
+        return Optional.ofNullable(userId)
+                .map(sysUserFeignService::queryUserById)
+                .orElseThrow(() -> new BizException("用户不存在"));
+    }
+
 }
 }
 
 

+ 18 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampServiceImpl.java

@@ -68,16 +68,25 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
     @Override
     @Override
     public void add(TempLittleArtistTrainingCampDto dto) {
     public void add(TempLittleArtistTrainingCampDto dto) {
         SysUser user = getUser();
         SysUser user = getUser();
+        Date now = DateUtil.toDate(LocalDate.now().toString());
+        if (dto.getApplyEndDate().getTime() < now.getTime()) {
+            throw new BizException("报名结束时间不能小于今天");
+        }
+        if (dto.getApplyStartDate().getTime() > dto.getApplyEndDate().getTime()) {
+            throw new BizException("报名开始时间不能大于结束时间");
+        }
+        if (dto.getTrainStartDate().getTime() > dto.getTrainEndDate().getTime()) {
+            throw new BizException("训练开始时间不能大于训练结束时间");
+        }
+        //报名结束时间必需小于训练开始时间
+        if (dto.getApplyEndDate().getTime() < dto.getTrainStartDate().getTime()) {
+            throw new BizException("报名结束时间必需小于训练开始时间");
+        }
         TempLittleArtistTrainingCamp entity = new TempLittleArtistTrainingCamp();
         TempLittleArtistTrainingCamp entity = new TempLittleArtistTrainingCamp();
         BeanUtils.copyProperties(dto, entity);
         BeanUtils.copyProperties(dto, entity);
-        Date now = new Date();
-        //训练时间必需大于报名时间
-        if (dto.getApplyStartDate().getTime() > dto.getTrainStartDate().getTime()) {
-            throw new BizException("训练时间必需大于报名时间");
-        }
         entity.setState(TempLittleArtistTrainingCamp.NOT_START);
         entity.setState(TempLittleArtistTrainingCamp.NOT_START);
-        //当前时间大于等于报名开始时间  当前时间小于等于报名结束时间
-        if (now.getTime() >= dto.getApplyStartDate().getTime() && now.getTime() <= dto.getApplyEndDate().getTime()) {
+        //报名开始时间 小于等于 今天时间 则报名状态为报名中
+        if (dto.getApplyStartDate().getTime() <= now.getTime()) {
             entity.setState(TempLittleArtistTrainingCamp.APPLY);
             entity.setState(TempLittleArtistTrainingCamp.APPLY);
         }
         }
         entity.setCreateBy(user.getId());
         entity.setCreateBy(user.getId());
@@ -282,7 +291,7 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
         if (CollectionUtils.isNotEmpty(campList)) {
         if (CollectionUtils.isNotEmpty(campList)) {
             campList.sort(Comparator.comparing(TempLittleArtistTrainingCamp::getApplyStartDate));
             campList.sort(Comparator.comparing(TempLittleArtistTrainingCamp::getApplyStartDate));
         }
         }
-        if(CollectionUtils.isNotEmpty(campList)){
+        if (CollectionUtils.isNotEmpty(campList)) {
             campList.forEach(a -> {
             campList.forEach(a -> {
                 int count = tempLittleArtistTrainingCampUserRelationService.count(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
                 int count = tempLittleArtistTrainingCampUserRelationService.count(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
                         .eq(TempLittleArtistTrainingCampUserRelation::getActivityId, a.getId())
                         .eq(TempLittleArtistTrainingCampUserRelation::getActivityId, a.getId())
@@ -295,7 +304,7 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
     }
     }
 
 
     /**
     /**
-     * 定时任务-修改训练营状态
+     * 定时任务-修改训练营状态-每天0点执行一次
      */
      */
     @Override
     @Override
     public void checkCampState() {
     public void checkCampState() {

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

@@ -260,4 +260,8 @@ public interface TaskRemoteService {
      */
      */
     @GetMapping("task/studentSmallClassStatistics")
     @GetMapping("task/studentSmallClassStatistics")
     void studentSmallClassStatistics();
     void studentSmallClassStatistics();
+
+    @GetMapping("task/checkCampState")
+    void checkCampState();
+
 }
 }

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

@@ -309,4 +309,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
     public void studentSmallClassStatistics() {
     public void studentSmallClassStatistics() {
         logger.error("学员小课统计失败");
         logger.error("学员小课统计失败");
     }
     }
+
+    @Override
+    public void checkCampState(){
+        logger.error("校验营地状态失败");
+    }
 }
 }

+ 32 - 0
mec-student/src/main/java/com/ym/mec/student/controller/ImLiveRoomVideoController.java

@@ -0,0 +1,32 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.entity.ImLiveRoomVideo;
+import com.ym.mec.biz.service.ImLiveRoomVideoService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Api(tags = "直播回放录像记录表")
+@RestController
+@RequestMapping("/imLiveRoomVideo")
+public class ImLiveRoomVideoController extends BaseController {
+
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImLiveRoomVideoService imLiveRoomVideoService;
+
+    @ApiOperation("查询该机构目前推广的直播间")
+    @GetMapping(value = "/queryList")
+    public HttpResponseResult<List<ImLiveRoomVideo>> queryList(String roomUid) {
+        return succeed(imLiveRoomVideoService.queryList(roomUid));
+    }
+}

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/CheckCampStateTask.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 CheckCampStateTask extends BaseTask {
+
+    @Autowired
+    private TaskRemoteService taskRemoteService;
+
+    @Override
+    public void execute() throws TaskException {
+        taskRemoteService.checkCampState();
+    }
+}

+ 10 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -118,8 +118,10 @@ public class TaskController extends BaseController {
 	private StudentStatisticsService studentStatisticsService;
 	private StudentStatisticsService studentStatisticsService;
 	@Autowired
 	@Autowired
 	private ImSendGroupMessageService imSendGroupMessageService;
 	private ImSendGroupMessageService imSendGroupMessageService;
+    @Autowired
+    private TempLittleArtistTrainingCampService tempLittleArtistTrainingCampService;
 
 
-	@GetMapping(value = "/syncImHistoryMessageTask")
+    @GetMapping(value = "/syncImHistoryMessageTask")
 	// 同步即时通讯聊天记录
 	// 同步即时通讯聊天记录
 	public void syncImHistoryMessageTask(String date) throws Exception {
 	public void syncImHistoryMessageTask(String date) throws Exception {
 		if(date == null){
 		if(date == null){
@@ -588,4 +590,11 @@ public class TaskController extends BaseController {
     public void studentSmallClassStatistics(){
     public void studentSmallClassStatistics(){
 		studentStatisticsService.updateStudentStatistics();
 		studentStatisticsService.updateStudentStatistics();
     }
     }
+
+    @ApiOperation("定时任务-修改训练营状态-每天0点执行")
+    @GetMapping(value = "/checkCampState")
+    public void  checkCampState(){
+        tempLittleArtistTrainingCampService.checkCampState();
+    }
+
 }
 }