Pārlūkot izejas kodu

fix:app独立发课的一些优化

caoliqin 1 nedēļu atpakaļ
vecāks
revīzija
0275401288

+ 12 - 22
fs-app-task/src/main/java/com/fs/app/task/consumer/sop/AppSopLogsConsumer.java

@@ -244,7 +244,7 @@ public class AppSopLogsConsumer {
 
             // 课程消息(contentType=9)
             List<AppSopCourseFinishTempSetting.Setting> courseList = allContent.stream()
-                    .filter(e -> "9".equals(e.getContentType()))
+                    .filter(e -> String.valueOf(SenderType.COURSE.getSysContentTypeCode()).equals(e.getContentType()))
                     .collect(Collectors.toList());
 
             MessageUserPayload mu = new MessageUserPayload(sopLogs.getAppCustomerId(), sopLogs.getFsUserId());
@@ -256,7 +256,7 @@ public class AppSopLogsConsumer {
 
             // 文本消息(contentType=11)
             List<AppSopCourseFinishTempSetting.Setting> txtList = allContent.stream()
-                    .filter(e -> "11".equals(e.getContentType()))
+                    .filter(e -> String.valueOf(SenderType.TXT.getSysContentTypeCode()).equals(e.getContentType()))
                     .collect(Collectors.toList());
 
             if (ObjectUtil.isNotEmpty(txtList)) {
@@ -267,7 +267,7 @@ public class AppSopLogsConsumer {
 
             // 语音消息(contentType=12)
             List<AppSopCourseFinishTempSetting.Setting> voiceList = allContent.stream()
-                    .filter(e -> "12".equals(e.getContentType()))
+                    .filter(e -> String.valueOf(SenderType.VOICE.getSysContentTypeCode()).equals(e.getContentType()))
                     .collect(Collectors.toList());
             if (ObjectUtil.isNotEmpty(voiceList)) {
                 log.info("节点[{}]开始发送消息ID:{}的APP语音消息,用户:{}", nodeId, sopLogs.getId(), sopLogs.getFsUserId());
@@ -287,7 +287,7 @@ public class AppSopLogsConsumer {
 //
 //            // 图片消息(contentType=2)
             List<AppSopCourseFinishTempSetting.Setting> imgList = allContent.stream()
-                    .filter(e -> "2".equals(e.getContentType()))
+                    .filter(e -> String.valueOf(SenderType.IMG.getSysContentTypeCode()).equals(e.getContentType()))
                     .collect(Collectors.toList());
             if (ObjectUtil.isNotEmpty(imgList)) {
                 log.info("节点[{}]开始发送消息ID:{}的APP图片消息,用户:{}", nodeId, sopLogs.getId(), sopLogs.getFsUserId());
@@ -336,24 +336,14 @@ public class AppSopLogsConsumer {
 //            }
 //
 //            // 文章消息(contentType=25)
-//            List<AppSopCourseFinishTempSetting.Setting> articleList = allContent.stream()
-//                    .filter(e -> "25".equals(e.getContentType()))
-//                    .collect(Collectors.toList());
-//            if (ObjectUtil.isNotEmpty(articleList)) {
-//                log.info("节点[{}]开始发送消息ID:{}的APP文章消息,用户:{}", nodeId, sopLogs.getId(), sopLogs.getFsUserId());
-//                AbstractAppMessageSender articleSender = senderFactory.getSender(SenderType.ARTICLE.getType());
-//                result.getInfo().addAll(articleSender.sendForSop(articleList, mu));
-//            }
-//
-//            // 文章消息(contentType=26)
-//            List<AppSopCourseFinishTempSetting.Setting> openClassVideoList = allContent.stream()
-//                    .filter(e -> "26".equals(e.getContentType()))
-//                    .collect(Collectors.toList());
-//            if (ObjectUtil.isNotEmpty(openClassVideoList)) {
-//                log.info("节点[{}]开始发送消息ID:{}的APP公开课消息,用户:{}", nodeId, sopLogs.getId(), sopLogs.getFsUserId());
-//                AbstractAppMessageSender openClassVideoSender = senderFactory.getSender(SenderType.OPEN_CLASS.getType());
-//                result.getInfo().addAll(openClassVideoSender.sendForSop(openClassVideoList, mu));
-//            }
+            List<AppSopCourseFinishTempSetting.Setting> articleList = allContent.stream()
+                    .filter(e -> String.valueOf(SenderType.ARTICLE.getSysContentTypeCode()).equals(e.getContentType()))
+                    .collect(Collectors.toList());
+            if (ObjectUtil.isNotEmpty(articleList)) {
+                log.info("节点[{}]开始发送消息ID:{}的APP文章消息,用户:{}", nodeId, sopLogs.getId(), sopLogs.getFsUserId());
+                AbstractAppMessageSender articleSender = senderFactory.getSender(SenderType.ARTICLE.getType());
+                result.getInfo().addAll(articleSender.sendForSop(articleList, mu));
+            }
 
             log.info("节点[{}]消息ID:{}发送完成,子项数量:{}", nodeId, sopLogs.getId(), result.getInfo().size());
             return result;

+ 1 - 1
fs-service/src/main/java/com/fs/app/chat/service/impl/AppUserChatLogsServiceImpl.java

@@ -119,7 +119,7 @@ public class AppUserChatLogsServiceImpl extends ServiceImpl<AppUserChatLogsMappe
         MessageUserPayload userPayload = new MessageUserPayload();
         //获取客服的信息
         AppCustomerRoleMember roleMember = this.appCustomerRoleMemberService.lambdaQuery()
-                .eq(AppCustomerRoleMember::getId, byId.getAppCustomerId())
+                .eq(AppCustomerRoleMember::getAppCustomerId, byId.getAppCustomerId())
                 .one();
         //获取客服组,因为调用发送入口传入的是客服组id
         userPayload.setSender(roleMember.getAppCustomerId());

+ 32 - 9
fs-service/src/main/java/com/fs/app/sender/voice/AppMessageVoiceSender.java

@@ -10,7 +10,6 @@ import com.fs.app.sender.MessageUserPayload;
 import com.fs.app.sender.enums.SenderType;
 import com.fs.app.sender.properties.ConfigProperties;
 import com.fs.app.sop.result.AppSopCourseFinishTempSetting;
-import com.fs.common.BeanCopyUtils;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.im.config.IMConfig;
 import com.fs.im.dto.OpenImMsgDTO;
@@ -29,20 +28,33 @@ public class AppMessageVoiceSender extends AbstractAppMessageSender {
 
     @Override
     protected MessageSenderResultInfo doSend(MessagePayload messagePayload, MessageUserPayload mu) {
-        MessageVoicePayload payload = BeanCopyUtils.copy(messagePayload, MessageVoicePayload.class);
+        // MessageVoicePayload 使用 BeanCopyUtils 无法拷贝到链式对象
+        MessageVoicePayload payload;
+        if (messagePayload instanceof MessageVoicePayload) {
+            payload = (MessageVoicePayload) messagePayload;
+        } else {
+            payload = new MessageVoicePayload();
+        }
         return sendVoiceMessage(payload, mu);
     }
 
     @Override
     protected MessageSenderResultInfo doSendForSop(AppSopCourseFinishTempSetting.Setting message, MessageUserPayload mu) {
-        MessageVoicePayload payload = BeanCopyUtils.copy(message, MessageVoicePayload.class);
-        return sendVoiceMessage(
-                payload,
-                mu);
+        // 不使用 BeanCopyUtils:目标类为链式 setter,拷贝后字段会全部为 null
+        MessageVoicePayload payload = new MessageVoicePayload();
+        if (message != null) {
+            payload.setVoiceUrl(message.getVoiceUrl());
+            payload.setValue(message.getValue());
+            payload.setVoiceDuration(message.getVoiceDuration());
+            if (StrUtil.isNotEmpty(message.getContentType())) {
+                payload.setContentType(message.getContentType());
+            }
+        }
+        return sendVoiceMessage(payload, mu);
     }
 
     /**
-     * 发送语音消息
+     * 发送语音消息;无语音 URL 时降级为文本发送
      *
      * @param voicePayload 消息元数据
      * @param mu           参与人
@@ -63,14 +75,25 @@ public class AppMessageVoiceSender extends AbstractAppMessageSender {
             OpenImMsgDTO.Content imContent = new OpenImMsgDTO.Content();
             //没有语音 URL,当文本发
             if (StrUtil.isEmpty(voicePayload.getVoiceUrl())) {
+                String text = voicePayload.getValue();
+                if (StrUtil.isBlank(text)) {
+                    resultInfo.setSuccess(false);
+                    resultInfo.setMessage("语音URL和文本内容均为空,无法发送");
+                    return resultInfo;
+                }
                 openImMsgDTO.setContentType(SenderType.TXT.getImContentTypeCode());
-                imContent.setContent(voicePayload.getValue());
+                imContent.setContent(text);
             }
             //有语音 URL,按语音发
             else {
                 openImMsgDTO.setContentType(SenderType.VOICE.getImContentTypeCode());
                 imContent.setSourceUrl(voicePayload.getVoiceUrl());
-                imContent.setDuration(Integer.parseInt(voicePayload.getVoiceDuration()));
+                String duration = voicePayload.getVoiceDuration();
+                if (StrUtil.isNotBlank(duration)) {
+                    imContent.setDuration(Integer.parseInt(duration));
+                } else {
+                    imContent.setDuration(0);
+                }
             }
             openImMsgDTO.setContent(imContent);
             log.info("构建IM语音发送载体:{}", openImMsgDTO);

+ 1 - 1
fs-service/src/main/java/com/fs/app/sop/service/impl/AppSopTaskServiceImpl.java

@@ -745,7 +745,7 @@ public class AppSopTaskServiceImpl implements IAppSopTaskService {
         sopLink.setQwUserId(sopLogs.getAppCustomerId());
         AppCustomerRoleMember roleMember = this.appCustomerRoleMemberService.lambdaQuery()
                 .eq(AppCustomerRoleMember::getIsDelete, 0)
-                .eq(AppCustomerRoleMember::getId, sopLogs.getAppCustomerId())
+                .eq(AppCustomerRoleMember::getAppCustomerId, sopLogs.getAppCustomerId())
                 .one();
         sopLink.setQwUserName(roleMember.getMemberName());
         sopLink.setVideoTitle(setting.getLinkDescribe());