3 Commits f1b2be0619 ... d2581c5d88

Author SHA1 Message Date
  caoliqin d2581c5d88 Merge branch 'openIm' of http://1.14.104.71:10880/root/ylrz_his_scrm_java into openIm 3 days ago
  caoliqin 2e41db983e feat:调整催课发送消息的展示类型 3 days ago
  caoliqin e6d6d0dbca feat:修复companyapp redis的hash序列化问题(不确定其他服务是否存在此问题) 3 days ago

+ 3 - 3
fs-admin/src/main/java/com/fs/web/controller/common/CommonController.java

@@ -244,7 +244,7 @@ public class CommonController
      */
     @PostMapping("/common/im/testTask/course")
     public void testIMCourseTask(){
-        String redisKey = "openIm:batchSendMsg";
+        String redisKey = "openIm:batchSendMsg:sendCourse";
         Map<String, BatchSendCourseAllDTO> cacheMap = redisCache.getCacheMap(redisKey);
         if(cacheMap == null || cacheMap.isEmpty()){
             logger.info("=====================会员IM定时发课,不存在对应的redisKey==================");
@@ -252,7 +252,7 @@ public class CommonController
         }
         List<Map.Entry<String, BatchSendCourseAllDTO>> toSendMap = cacheMap.entrySet().parallelStream().filter((v) -> {
             String[] split = v.getKey().split(":");
-            long timestamp = Long.parseLong(split[3]);
+            long timestamp = Long.parseLong(split[2]);
             return timestamp < System.currentTimeMillis();
         }).collect(Collectors.toList());
 
@@ -285,7 +285,7 @@ public class CommonController
         }
         List<Map.Entry<String, BatchSendCourseAllDTO>> toSendMap = cacheMap.entrySet().parallelStream().filter((v) -> {
             String[] split = v.getKey().split(":");
-            long timestamp = Long.parseLong(split[3]);
+            long timestamp = Long.parseLong(split[2]);
             return timestamp < System.currentTimeMillis();
         }).collect(Collectors.toList());
 

+ 4 - 0
fs-company-app/src/main/java/com/fs/core/config/RedisConfig.java

@@ -38,6 +38,10 @@ public class RedisConfig extends CachingConfigurerSupport
         template.setValueSerializer(serializer);
         // 使用StringRedisSerializer来序列化和反序列化redis的key值
         template.setKeySerializer(new StringRedisSerializer());
+
+        // Hash的key也采用StringRedisSerializer的序列化方式 这个才是redis的hash值的序列化方式 一直都没有序列化进去
+        template.setHashKeySerializer(new StringRedisSerializer());
+        template.setHashValueSerializer(serializer);
         template.afterPropertiesSet();
         return template;
     }

+ 23 - 16
fs-service/src/main/java/com/fs/im/service/impl/OpenIMServiceImpl.java

@@ -1164,7 +1164,7 @@ public class OpenIMServiceImpl implements OpenIMService {
     }
 
     private OpenImBatchMsgDTO makeOpenImBatchMsgDTO(BatchSendCourseDTO batchSendCourseDTO, String courseUrl, ObjectMapper objectMapper, List<String> userIds, long planSendTimeStamp, String logType) throws JsonProcessingException {
-        PayloadDTO.Extension extension = new PayloadDTO.Extension();
+         PayloadDTO.Extension extension = new PayloadDTO.Extension();
         OpenImBatchMsgDTO openImBatchMsgDTO = new OpenImBatchMsgDTO();
         if("发课".equals(logType)){
             extension.setTitle(batchSendCourseDTO.getTitle());
@@ -1172,22 +1172,29 @@ public class OpenIMServiceImpl implements OpenIMService {
             extension.setCourseUrl(courseUrl);
             extension.setSendTime(new Date(planSendTimeStamp));
             openImBatchMsgDTO.setSendTime(planSendTimeStamp);
+
+            PayloadDTO payload = new PayloadDTO();
+            payload.setData("course");
+            payload.setExtension(extension);
+
+            OpenImBatchMsgDTO.ImData imData = new OpenImBatchMsgDTO.ImData();
+            OpenImBatchMsgDTO.Content content = new OpenImBatchMsgDTO.Content();
+            imData.setPayload(payload);
+            String imJson = objectMapper.writeValueAsString(imData);
+            content.setData(imJson);
+            openImBatchMsgDTO.setContent(content);
+            openImBatchMsgDTO.setContentType(110);
         } else {
-            extension.setTitle(batchSendCourseDTO.getUrgeContent());
-            extension.setSendTime(batchSendCourseDTO.getUrgeTime() != null ? batchSendCourseDTO.getUrgeTime() : new Date());
+            // 催课
+//            extension.setTitle(batchSendCourseDTO.getUrgeContent());
+//            extension.setSendTime(batchSendCourseDTO.getUrgeTime() != null ? batchSendCourseDTO.getUrgeTime() : new Date());
+            OpenImBatchMsgDTO.Content content = new OpenImBatchMsgDTO.Content();
+            content.setContent(batchSendCourseDTO.getUrgeContent());
+            openImBatchMsgDTO.setContent(content);
+            openImBatchMsgDTO.setContentType(101);
             openImBatchMsgDTO.setSendTime(batchSendCourseDTO.getUrgeTime() != null ? batchSendCourseDTO.getUrgeTime().getTime() : System.currentTimeMillis());
         }
 
-        PayloadDTO payload = new PayloadDTO();
-        payload.setData("course");
-        payload.setExtension(extension);
-
-        OpenImBatchMsgDTO.ImData imData = new OpenImBatchMsgDTO.ImData();
-        OpenImBatchMsgDTO.Content content = new OpenImBatchMsgDTO.Content();
-        imData.setPayload(payload);
-        String imJson = objectMapper.writeValueAsString(imData);
-        content.setData(imJson);
-
         OpenImBatchMsgDTO.OfflinePushInfo offlinePushInfo = new OpenImBatchMsgDTO.OfflinePushInfo();
         offlinePushInfo.setDesc(batchSendCourseDTO.getTitle());
         CompanyUser companyUser = companyUserMapper.selectCompanyUserById(batchSendCourseDTO.getCompanyUserId());
@@ -1199,8 +1206,6 @@ public class OpenIMServiceImpl implements OpenIMService {
 
         openImBatchMsgDTO.setSendID("C" + batchSendCourseDTO.getCompanyUserId());
         openImBatchMsgDTO.setRecvIDs(userIds);
-        openImBatchMsgDTO.setContent(content);
-        openImBatchMsgDTO.setContentType(110);
         openImBatchMsgDTO.setSessionType(1);
         openImBatchMsgDTO.setIsOnlineOnly(false);
         openImBatchMsgDTO.setNotOfflinePush(false);
@@ -1260,7 +1265,7 @@ public class OpenIMServiceImpl implements OpenIMService {
         // 过滤掉已完课的用户,已完课的用户不发送;
         // 如果全部完课,则提示
         List<FsCourseWatchLog> watchCourseByVideoList = fsCourseWatchLogMapper.getWatchCourseByVideoId(fsImMsgSendLog.getVideoId(), userIdList);
-        List<String> userIds = watchCourseByVideoList.stream().filter(v -> v.getLogType() != 2).map(v -> "U" + v.getUserId()).collect(Collectors.toList());
+        List<String> userIds = watchCourseByVideoList.stream().filter(v -> v.getLogType() != 2).map(v -> "U" + v.getUserId()).distinct().collect(Collectors.toList());
         OpenImResponseDTO openImResponseDTO = new OpenImResponseDTO();
         if(userIds.isEmpty()){
             openImResponseDTO.setErrCode(400);
@@ -1288,6 +1293,8 @@ public class OpenIMServiceImpl implements OpenIMService {
         BeanUtils.copyProperties(fsImMsgSendLog, batchSendCourseDTO);
         batchSendCourseDTO.setUrgeContent(batchUrgeCourseDTO.getUrgeContent());
         batchSendCourseDTO.setId(fsImMsgSendLog.getPeriodDaysId());
+        batchSendCourseDTO.setIsUrgeCourse(true);
+        batchSendCourseDTO.setSendType(2);
         OpenImBatchMsgDTO openImBatchMsgDTO = makeOpenImBatchMsgDTO(batchSendCourseDTO, courseUrl, objectMapper, userIds, System.currentTimeMillis(), "催课");
         log.info("一键催课-催课-批量催课消息: \n{}", JSON.toJSONString(openImBatchMsgDTO));
         openImResponseDTO = this.openIMBatchSendMsg(openImBatchMsgDTO);