| 
					
				 | 
			
			
				@@ -315,7 +315,7 @@ public class QwMsgController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // 接收处理群消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         processRoomMessage(wxWorkMsgResp, wxWorkMessageDTO, id, serverId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        log.error("接收处理群消息失败 err: {}", e.getMessage(), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        log.error("接收处理群消息失败 info: {} err: {}", json, e.getMessage(), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -455,25 +455,29 @@ public class QwMsgController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     qwUserVoiceLogService.addQuUserVoiceByIpadCallback(id,extId,recordType,totalSeconds,wxWorkMsgResp.getUuid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 处理文本消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (wxWorkMessageDTO.getMsgtype() == 2 || wxWorkMessageDTO.getMsgtype() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    processTextMessage(id, userId, wxWorkMessageDTO.getContent(), wxWorkMsgResp, sendType, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 语音消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (wxWorkMessageDTO.getMsgtype() == 16) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    processVoiceMessage(serverId, wxWorkMessageDTO.getContent(), wxWorkMessageDTO, wxWorkMsgResp, id, userId, sendType, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 图片消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (wxWorkMessageDTO.getMsgtype() == 101){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    processImageMessage(serverId, wxWorkMessageDTO, wxWorkMsgResp, id, userId, sendType, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // gif 表情消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (wxWorkMessageDTO.getMsgtype() == 104){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    processEmotionDynamicMessage(wxWorkMessageDTO, wxWorkMsgResp, id, userId, sendType, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 小程序消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (wxWorkMessageDTO.getMsgtype() == 78) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    processMiniAppMessage(serverId, wxWorkMessageDTO, wxWorkMsgResp, id, userId, sendType, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 处理文本消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (wxWorkMessageDTO.getMsgtype() == 2 || wxWorkMessageDTO.getMsgtype() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        processTextMessage(id, sender, receiver, serverId, wxWorkMessageDTO.getContent(), wxWorkMsgResp, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 语音消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (wxWorkMessageDTO.getMsgtype() == 16) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        processVoiceMessage(id, sender, receiver, serverId, wxWorkMessageDTO.getContent(), wxWorkMessageDTO, wxWorkMsgResp, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 图片消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (wxWorkMessageDTO.getMsgtype() == 101){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        processImageMessage(id, sender, receiver, serverId, wxWorkMessageDTO, wxWorkMsgResp, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // gif 表情消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (wxWorkMessageDTO.getMsgtype() == 104){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        processEmotionDynamicMessage(id, sender, receiver, serverId, wxWorkMessageDTO, wxWorkMsgResp, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 小程序消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (wxWorkMessageDTO.getMsgtype() == 78) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        processMiniAppMessage(id, sender, receiver, serverId, wxWorkMessageDTO, wxWorkMsgResp, false, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    log.error("接收处理个微消息失败 info: {} err: {}", json, e.getMessage(), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -602,35 +606,36 @@ public class QwMsgController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 处理文本消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param id                企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param userId            消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param qwUserId          企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param senderVid         消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param receiverVid       消息接收者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param serverId          服务器ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param content           消息内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param wxWorkMsgResp     回调信息对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param sendType          发送者类型 1客户 2销售 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param isRoom            是否群聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatId            会话ID(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatAvatar        群头像(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void processTextMessage(Long id, Long userId, String content, WxWorkMsgResp wxWorkMsgResp, Integer sendType, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void processTextMessage(Long qwUserId, Long senderVid, Long receiverVid, Long serverId, String content, WxWorkMsgResp wxWorkMsgResp, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 保存聊天消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QwMessageListVO message = aiHookService.saveQwMsg(id, userId, content, wxWorkMsgResp.getUuid(), sendType, wxWorkMsgResp.getJson(), 1, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QwMessageListVO message = aiHookService.saveQwMsg(qwUserId, senderVid, receiverVid, serverId, content, wxWorkMsgResp.getUuid(), wxWorkMsgResp.getJson(), 1, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         QwImSocket.broadcast(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 处理语音消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param qwUserId          企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param senderVid         消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param receiverVid       消息接收者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param serverId          服务器ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param wxWorkMessageDTO  消息DTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param content           翻译后的内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param wxWorkMsgResp     回调信息对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param id                企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param userId            消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param sendType          发送者类型 1客户 2销售 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param isRoom            是否群聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatId            会话ID(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatAvatar        群头像(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void processVoiceMessage(Long serverId, String content, WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, Long id, Long userId, Integer sendType, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void processVoiceMessage(Long qwUserId, Long senderVid, Long receiverVid, Long serverId, String content, WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String voiceFileName = IdUtils.fastSimpleUUID() + ".silk"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         WxWorkResponseDTO<String> fileUrlResp = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 aiHookService.getFileUrl(wxWorkMsgResp.getUuid(), wxWorkMessageDTO.getVoice_id(), wxWorkMessageDTO.getAes_key(), 5, voiceFileName, wxWorkMessageDTO.getVoice_size(), serverId); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -652,31 +657,33 @@ public class QwMsgController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ste.setMsgid(wxWorkMessageDTO.getMsg_id()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ste.setUuid(wxWorkMsgResp.getUuid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             WxWorkResponseDTO<WxwSpeechToTextEntityRespDTO> dto = wxWorkService.SpeechToTextEntity(ste, serverId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            content = dto.getData().getText(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (dto.getErrcode() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                content = dto.getData().getText(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JSONObject json = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         json.put("url", url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         json.put("content", content); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 保存聊天消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QwMessageListVO message = aiHookService.saveQwMsg(id, userId, json.toString(), wxWorkMsgResp.getUuid(), sendType, wxWorkMsgResp.getJson(), 4, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QwMessageListVO message = aiHookService.saveQwMsg(qwUserId, senderVid, receiverVid, serverId, json.toString(), wxWorkMsgResp.getUuid(), wxWorkMsgResp.getJson(), 4, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         QwImSocket.broadcast(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 处理图片消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param qwUserId          企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param senderVid         消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param receiverVid       消息接收者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param serverId          服务器ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param wxWorkMessageDTO  消息DTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param wxWorkMsgResp     回调信息对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param id                企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param userId            消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param sendType          发送者类型 1客户 2销售 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param isRoom            是否群聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatId            会话ID(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatAvatar        群头像(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void processImageMessage(Long serverId, WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, Long id, Long userId, Integer sendType, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void processImageMessage(Long qwUserId, Long senderVid, Long receiverVid, Long serverId, WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         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); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -687,41 +694,42 @@ public class QwMsgController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String content = fileUrlResp.getData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 保存聊天消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QwMessageListVO message = aiHookService.saveQwMsg(id, userId, content, wxWorkMsgResp.getUuid(), sendType, wxWorkMsgResp.getJson(), 2, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QwMessageListVO message = aiHookService.saveQwMsg(qwUserId, senderVid, receiverVid, serverId, content, wxWorkMsgResp.getUuid(), wxWorkMsgResp.getJson(), 2, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         QwImSocket.broadcast(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 处理动态表情消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param qwUserId          企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param senderVid         消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param receiverVid       消息接收者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param serverId          服务器ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param wxWorkMessageDTO  消息DTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param wxWorkMsgResp     回调信息对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param id                企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param userId            消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param sendType          发送者类型 1客户 2销售 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param isRoom            是否群聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatId            会话ID(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatAvatar        群头像(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void processEmotionDynamicMessage(WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, Long id, Long userId, int sendType, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void processEmotionDynamicMessage(Long qwUserId, Long senderVid, Long receiverVid, Long serverId, WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String content = wxWorkMessageDTO.getUrl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 保存聊天消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QwMessageListVO message = aiHookService.saveQwMsg(id, userId, content, wxWorkMsgResp.getUuid(), sendType, wxWorkMsgResp.getJson(), 3, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QwMessageListVO message = aiHookService.saveQwMsg(qwUserId, senderVid, receiverVid, serverId, content, wxWorkMsgResp.getUuid(), wxWorkMsgResp.getJson(), 3, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         QwImSocket.broadcast(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 小程序消息处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param qwUserId          企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param senderVid         消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param receiverVid       消息接收者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param serverId          服务器ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param wxWorkMessageDTO  消息DTO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param wxWorkMsgResp     回调信息对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param id                企微用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param userId            消息发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param sendType          发送者类型 1客户 2销售 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param isRoom            是否群聊 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatId            会话ID(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param chatAvatar        群头像(群聊才有) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void processMiniAppMessage(Long serverId, WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, Long id, Long userId, int sendType, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void processMiniAppMessage(Long qwUserId, Long senderVid, Long receiverVid, Long serverId, WxWorkMessageDTO wxWorkMessageDTO, WxWorkMsgResp wxWorkMsgResp, boolean isRoom, String chatId, String chatAvatar) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String thumbName = IdUtils.fastSimpleUUID() + ".jpg"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         WxWorkResponseDTO<String> fileUrlResp = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 aiHookService.getFileUrl(wxWorkMsgResp.getUuid(), wxWorkMessageDTO.getThumbFileId(), wxWorkMessageDTO.getThumbAESKey(), 1, thumbName, wxWorkMessageDTO.getSize(), serverId); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -740,7 +748,7 @@ public class QwMsgController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         json.put("thumbnail", fileUrlResp.getData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 保存聊天消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QwMessageListVO message = aiHookService.saveQwMsg(id, userId, json.toString(), wxWorkMsgResp.getUuid(), sendType, wxWorkMsgResp.getJson(), 5, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QwMessageListVO message = aiHookService.saveQwMsg(qwUserId, senderVid, receiverVid, serverId, json.toString(), wxWorkMsgResp.getUuid(), wxWorkMsgResp.getJson(), 5, isRoom, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         QwImSocket.broadcast(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -752,16 +760,6 @@ public class QwMsgController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Long receiver = wxWorkMessageDTO.getReceiver(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Long sender = wxWorkMessageDTO.getSender(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 1客户 2销售 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int sendType = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 消息发送者用户ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Long userId = receiver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (receiver != 0 && 2000000000000000L - receiver > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sendType = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userId = sender; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         WxWorkRoomId2ChatIdDTO roomId2ChatIdDTO = new WxWorkRoomId2ChatIdDTO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         roomId2ChatIdDTO.setUuid(wxWorkMsgResp.getUuid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         roomId2ChatIdDTO.setRoom_id(wxWorkMessageDTO.getRoom_conversation_id()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -783,23 +781,23 @@ public class QwMsgController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 处理文本消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (wxWorkMessageDTO.getMsgtype() == 2 || wxWorkMessageDTO.getMsgtype() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            processTextMessage(qwUserId, userId, wxWorkMessageDTO.getContent(), wxWorkMsgResp, sendType, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            processTextMessage(qwUserId, sender, receiver, serverId, wxWorkMessageDTO.getContent(), wxWorkMsgResp, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 语音消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (wxWorkMessageDTO.getMsgtype() == 16) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            processVoiceMessage(serverId, wxWorkMessageDTO.getContent(), wxWorkMessageDTO, wxWorkMsgResp, qwUserId, userId, sendType, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            processVoiceMessage(qwUserId, sender, receiver, serverId, wxWorkMessageDTO.getContent(), wxWorkMessageDTO, wxWorkMsgResp, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 图片消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (wxWorkMessageDTO.getMsgtype() == 101){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            processImageMessage(serverId, wxWorkMessageDTO, wxWorkMsgResp, qwUserId, userId, sendType, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            processImageMessage(qwUserId, sender, receiver, serverId, wxWorkMessageDTO, wxWorkMsgResp, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // gif 表情消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (wxWorkMessageDTO.getMsgtype() == 104){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            processEmotionDynamicMessage(wxWorkMessageDTO, wxWorkMsgResp, qwUserId, userId, sendType, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            processEmotionDynamicMessage(qwUserId, sender, receiver, serverId, wxWorkMessageDTO, wxWorkMsgResp, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 小程序消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (wxWorkMessageDTO.getMsgtype() == 78) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            processMiniAppMessage(serverId, wxWorkMessageDTO, wxWorkMsgResp, qwUserId, userId, sendType, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            processMiniAppMessage(qwUserId, sender, receiver, serverId, wxWorkMessageDTO, wxWorkMsgResp, true, chatId, chatAvatar); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |