소스 검색

企微聊天动态表情消息接收处理

Long 2 주 전
부모
커밋
4cc93f03f7

+ 63 - 40
fs-qw-api-msg/src/main/java/com/fs/app/controller/QwMsgController.java

@@ -143,14 +143,27 @@ public class QwMsgController {
                 if (wxWorkMessageDTO.getReferid()!=0){
                     break;
                 }
+
+                Long receiver = wxWorkMessageDTO.getReceiver();
+                Long sender = wxWorkMessageDTO.getSender();
+
+                // 1客户 2销售
+                int sendType = 2;
+
+                // 消息发送者用户ID
+                Long userId = receiver;
+                if (2000000000000000L - receiver > 0){
+                    sendType = 1;
+                    userId = sender;
+                }
+
                 if (wxWorkMessageDTO.getMsgtype()==2||wxWorkMessageDTO.getMsgtype()==0||wxWorkMessageDTO.getMsgtype()==16){
 
                     String content = wxWorkMessageDTO.getContent();
                     System.out.println("接收人:"+wxWorkMessageDTO.getReceiver());
                     System.out.println("发送人:"+wxWorkMessageDTO.getSender());
                     System.out.println("内容:"+content);
-                    Long receiver = wxWorkMessageDTO.getReceiver();
-                    Long sender = wxWorkMessageDTO.getSender();
+
                     if(wxWorkMessageDTO.getMsgtype()==16){
                         WxwSpeechToTextEntityDTO ste = new WxwSpeechToTextEntityDTO();
                         ste.setMsgid(wxWorkMessageDTO.getMsg_id());
@@ -164,26 +177,21 @@ public class QwMsgController {
                     if (2000000000000000L-receiver>0){
                         System.out.println("客户发送");
                         aiHookService.qwHookNotifyAiReply(id,sender,content,wxWorkMsgResp.getUuid(),wxWorkMessageDTO.getMsgtype());
-
-                        // 保存聊天消息
-                        QwMessageListVO message = aiHookService.saveQwMsg(id, sender, content, wxWorkMsgResp.getUuid(), 1, wxWorkMsgResp.getJson(), 1);
-                        QwImSocket.broadcast(message);
                     }else {
                         System.out.println("销售发送");
                         aiHookService.qwHookNotifyAddMsg(id,receiver,content,wxWorkMsgResp.getUuid());
-
-                        // 保存聊天消息
-                        QwMessageListVO message = aiHookService.saveQwMsg(id, receiver, content, wxWorkMsgResp.getUuid(), 2, wxWorkMsgResp.getJson(), 1);
-                        QwImSocket.broadcast(message);
                     }
 
+                    // 保存聊天消息
+                    QwMessageListVO message = aiHookService.saveQwMsg(id, userId, content, wxWorkMsgResp.getUuid(), sendType, wxWorkMsgResp.getJson(), 1);
+                    QwImSocket.broadcast(message);
+
                 }
                 //语音通话
                 if (wxWorkMessageDTO.getMsgtype()==40){
                     if (wxWorkMessageDTO.getRecordtype()==null){
                         break;
                     }
-                    Long receiver = wxWorkMessageDTO.getReceiver();
                     Long extId=null;
                     Integer totalSeconds=0;
                     if (2000000000000000L-receiver>0){
@@ -217,35 +225,11 @@ public class QwMsgController {
                 }
                 // 图片消息
                 else if (wxWorkMessageDTO.getMsgtype() == 101){
-                    System.out.println(json);
-                    System.out.println(wxWorkMsgResp.getJson());
-                    Long receiver = wxWorkMessageDTO.getReceiver();
-                    Long sender = wxWorkMessageDTO.getSender();
-
-                    long userId;
-                    int sendType;
-                    if (2000000000000000L - receiver > 0){
-                        System.out.println("客户发起");
-                        userId = sender;
-                        sendType= 1;
-                    }else {
-                        System.out.println("销售发起");
-                        userId = receiver;
-                        sendType= 2;
-                    }
-
-                    String fileName = IdUtils.fastSimpleUUID() + ".jpg";
-                    WxWorkResponseDTO<String> fileUrlResp =
-                            aiHookService.getFileUrl(wxWorkMsgResp.getUuid(), wxWorkMessageDTO.getFile_id(), wxWorkMessageDTO.getAes_key(), wxWorkMessageDTO.getOpenim_cdn_authkey(), fileName, wxWorkMessageDTO.getFile_size(), serverId);
-                    if (fileUrlResp.getErrcode() != 0) {
-                        log.warn("获取图片地址失败: {}", fileUrlResp.getErrmsg());
-                        break;
-                    }
-
-                    String content = fileUrlResp.getData();
-                    // 保存聊天消息
-                    QwMessageListVO message = aiHookService.saveQwMsg(id, userId, content, wxWorkMsgResp.getUuid(), sendType, wxWorkMsgResp.getJson(), 2);
-                    QwImSocket.broadcast(message);
+                    processImageMessage(serverId, wxWorkMessageDTO, wxWorkMsgResp, id, userId, sendType);
+                }
+                // gif 表情消息
+                else if (wxWorkMessageDTO.getMsgtype() == 104){
+                    processEmotionDynamicMessage(wxWorkMessageDTO, wxWorkMsgResp, id, userId, sendType);
                 }
 
                 break;
@@ -258,6 +242,45 @@ public class QwMsgController {
         return map;
     }
 
+    /**
+     * 处理图片消息
+     * @param serverId          服务器ID
+     * @param wxWorkMessageDTO  消息DTO
+     * @param wxWorkMsgResp     回调信息对象
+     * @param id                企微用户ID
+     * @param userId            消息发送者ID
+     * @param sendType          发送者类型 1客户 2销售
+     */
+    private void processImageMessage(Long serverId, WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, Long id, Long userId, Integer sendType) {
+        String fileName = IdUtils.fastSimpleUUID() + ".jpg";
+        WxWorkResponseDTO<String> fileUrlResp =
+                aiHookService.getFileUrl(wxWorkMsgResp.getUuid(), wxWorkMessageDTO.getFile_id(), wxWorkMessageDTO.getAes_key(), wxWorkMessageDTO.getOpenim_cdn_authkey(), fileName, wxWorkMessageDTO.getFile_size(), serverId);
+        if (fileUrlResp.getErrcode() != 0) {
+            log.warn("获取图片地址失败: {}", fileUrlResp.getErrmsg());
+            return;
+        }
+
+        String content = fileUrlResp.getData();
+        // 保存聊天消息
+        QwMessageListVO message = aiHookService.saveQwMsg(id, userId, content, wxWorkMsgResp.getUuid(), sendType, wxWorkMsgResp.getJson(), 2);
+        QwImSocket.broadcast(message);
+    }
+
+    /**
+     * 处理动态表情消息
+     * @param wxWorkMessageDTO  消息DTO
+     * @param wxWorkMsgResp     回调信息对象
+     * @param id                企微用户ID
+     * @param userId            消息发送者ID
+     * @param sendType          发送者类型 1客户 2销售
+     */
+    private void processEmotionDynamicMessage(WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, Long id, Long userId, int sendType) {
+        String content = wxWorkMessageDTO.getUrl();
+        // 保存聊天消息
+        QwMessageListVO message = aiHookService.saveQwMsg(id, userId, content, wxWorkMsgResp.getUuid(), sendType, wxWorkMsgResp.getJson(), 3);
+        QwImSocket.broadcast(message);
+    }
+
     void qwUserStatus(String uid,Integer status){
         Long id = redisCache.getCacheObject("qrCode:uuid:"+uid);
         QwUser qwUser = new QwUser();

+ 1 - 1
fs-service-system/src/main/java/com/fs/fastGpt/service/AiHookService.java

@@ -28,7 +28,7 @@ public interface AiHookService {
      * @param uuid     UUID
      * @param sendType 发送者类型 1用户 2客服
      * @param json     消息json
-     * @param msgType  消息类型 1文本 2图片
+     * @param msgType  消息类型 1文本 2图片 3动态表情
      */
     QwMessageListVO saveQwMsg(Long qwUserId, Long userId, String content, String uuid, int sendType, String json, int msgType);
 

+ 3 - 1
fs-service-system/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java

@@ -1269,7 +1269,7 @@ public class AiHookServiceImpl implements AiHookService {
      * @param uuid     UUID
      * @param sendType 发送者类型 1用户 2客服
      * @param json     消息json
-     * @param msgType  消息类型 1文本 2图片
+     * @param msgType  消息类型 1文本 2图片 3动态表情
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
@@ -1347,6 +1347,8 @@ public class AiHookServiceImpl implements AiHookService {
         String type = "text";
         if (msgType == 2) {
             type = "image";
+        } else if (msgType == 3) {
+            type = "emotionDynamic";
         }
         listVO.setType(type);
         listVO.setStatus("succeed");

+ 13 - 1
fs-service-system/src/main/java/com/fs/qw/service/impl/QwMsgServiceImpl.java

@@ -366,6 +366,8 @@ public class QwMsgServiceImpl extends ServiceImpl<QwMsgMapper, QwMsg> implements
         String type = "text";
         if (param.getMsgType() == 2) {
             type = "image";
+        } else if (param.getMsgType() == 3) {
+            type = "emotionDynamic";
         }
         listVO.setType(type);
         listVO.setStatus("succeed");
@@ -439,7 +441,15 @@ public class QwMsgServiceImpl extends ServiceImpl<QwMsgMapper, QwMsg> implements
                 qwContactListVOS.add(listVO);
                 break;
             }
-            listVO.setMsgId(qwMsgs.get(0).getMsgId());
+            QwMsg qwMsg = qwMsgs.get(0);
+            if (qwMsg.getMsgType() == 1) {
+                listVO.setType("text");
+            } else if (qwMsg.getMsgType() == 2) {
+                listVO.setType("image");
+            } else if (qwMsg.getMsgType() == 3) {
+                listVO.setType("emotionDynamic");
+            }
+            listVO.setMsgId(qwMsg.getMsgId());
             listVO.setLastContent(qwMsgs.get(0).getContent());
             listVO.setLastSendTime(qwMsgs.get(0).getCreateTime().getTime());
             listVO.setUnread(0);
@@ -470,6 +480,8 @@ public class QwMsgServiceImpl extends ServiceImpl<QwMsgMapper, QwMsg> implements
             String type = "text";
             if (record.getMsgType() == 2) {
                 type = "image";
+            } else if (record.getMsgType() == 3) {
+                type = "emotionDynamic";
             }
             listVO.setType(type);
             listVO.setStatus("succeed");

+ 2 - 0
fs-service-system/src/main/java/com/fs/qw/vo/QwContactListVO.java

@@ -16,4 +16,6 @@ public class QwContactListVO {
     private String lastContent;
     // 消息ID
     private Long msgId;
+    // 消息类型
+    private String type;
 }

+ 3 - 0
fs-service-system/src/main/java/com/fs/wxwork/dto/WxWorkMessageDTO.java

@@ -26,4 +26,7 @@ public class WxWorkMessageDTO {
     private Integer file_size;
     private String aes_key;
     private String openim_cdn_authkey;
+
+    // 动态表情
+    private String url;
 }