| 
					
				 | 
			
			
				@@ -5,15 +5,16 @@ import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.ai.ErrorCodeConstants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.ai.convert.AiChatConversationConvert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatConversationDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatRoleDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.iocoder.yudao.module.ai.dal.dataobject.AiChatModalDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.ai.enums.AiChatConversationTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.iocoder.yudao.module.ai.enums.AiChatModalDisableEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.ai.mapper.AiChatConversationMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.iocoder.yudao.module.ai.mapper.AiChatModalMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.ai.mapper.AiChatRoleMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.iocoder.yudao.module.ai.service.AiChatConversationService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.iocoder.yudao.module.ai.vo.AiChatConversationCreateRoleReq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.iocoder.yudao.module.ai.vo.AiChatConversationCreateUserReq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.iocoder.yudao.module.ai.vo.AiChatConversationListReq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.iocoder.yudao.module.ai.vo.AiChatConversationRes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.iocoder.yudao.module.ai.service.AiChatModalService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.iocoder.yudao.module.ai.service.AiChatRoleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.iocoder.yudao.module.ai.vo.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.AllArgsConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.jetbrains.annotations.NotNull; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -33,7 +34,10 @@ import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class AiChatConversationServiceImpl implements AiChatConversationService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final AiChatRoleMapper aiChatRoleMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final AiChatModalMapper aiChatModalMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final AiChatConversationMapper aiChatConversationMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final AiChatModalService aiChatModalService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final AiChatRoleService aiChatRoleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public AiChatConversationRes createConversation(AiChatConversationCreateUserReq req) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -45,9 +49,12 @@ public class AiChatConversationServiceImpl implements AiChatConversationService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (latestConversation != null && latestConversation.getChatCount() <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return AiChatConversationConvert.INSTANCE.covnertChatConversationRes(latestConversation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 获取第一个模型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AiChatModalDO aiChatModalDO = aiChatModalMapper.selectFirstModal(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 创建新的 Conversation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         AiChatConversationDO insertConversation = saveConversation(req.getTitle(), loginUserId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                null, null, AiChatConversationTypeEnum.USER_CHAT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                null, null, AiChatConversationTypeEnum.USER_CHAT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                aiChatModalDO.getId(), aiChatModalDO.getModal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 转换 res 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return AiChatConversationConvert.INSTANCE.covnertChatConversationRes(insertConversation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -57,43 +64,56 @@ public class AiChatConversationServiceImpl implements AiChatConversationService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 获取用户id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 查询最新的对话 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AiChatConversationDO latestConversation = aiChatConversationMapper.selectLatestConversation(loginUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 如果有对话没有被使用过,那就返回这个 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (latestConversation != null && latestConversation.getChatCount() <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return AiChatConversationConvert.INSTANCE.covnertChatConversationRes(latestConversation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AiChatRoleDO aiChatRoleDO = aiChatRoleMapper.selectById(req.getChatRoleId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        AiChatConversationDO latestConversation = aiChatConversationMapper.selectLatestConversation(loginUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        // 如果有对话没有被使用过,那就返回这个 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        if (latestConversation != null && latestConversation.getChatCount() <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            return AiChatConversationConvert.INSTANCE.covnertChatConversationRes(latestConversation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 查询角色 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AiChatRoleRes chatRoleRes = aiChatRoleService.getChatRole(req.getRoleId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 获取第一个模型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AiChatModalDO aiChatModalDO = aiChatModalMapper.selectFirstModal(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 创建新的 Conversation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         AiChatConversationDO insertConversation = saveConversation(req.getTitle(), loginUserId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                req.getChatRoleId(), aiChatRoleDO.getName(), AiChatConversationTypeEnum.ROLE_CHAT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                req.getRoleId(), chatRoleRes.getName(), AiChatConversationTypeEnum.ROLE_CHAT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                aiChatModalDO.getId(), aiChatModalDO.getModal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 转换 res 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return AiChatConversationConvert.INSTANCE.covnertChatConversationRes(insertConversation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private @NotNull AiChatConversationDO saveConversation(String title, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                                            Long userId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                           Long chatRoleId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                           String chatRoleName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                           AiChatConversationTypeEnum typeEnum) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                           Long roleId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                           String roleName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                           AiChatConversationTypeEnum typeEnum, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                           Long modalId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                           String modal) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         AiChatConversationDO insertConversation = new AiChatConversationDO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         insertConversation.setId(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         insertConversation.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        insertConversation.setChatRoleId(chatRoleId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        insertConversation.setChatRoleName(chatRoleName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        insertConversation.setRoleId(roleId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        insertConversation.setRoleName(roleName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         insertConversation.setTitle(title); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         insertConversation.setChatCount(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         insertConversation.setType(typeEnum.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        insertConversation.setModalId(modalId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        insertConversation.setModal(modal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         aiChatConversationMapper.insert(insertConversation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return insertConversation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public AiChatConversationRes getConversation(Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AiChatConversationDO aiChatConversationDO = validateExists(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return AiChatConversationConvert.INSTANCE.covnertChatConversationRes(aiChatConversationDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private @NotNull AiChatConversationDO validateExists(Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         AiChatConversationDO aiChatConversationDO = aiChatConversationMapper.selectById(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (aiChatConversationDO == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw ServiceExceptionUtil.exception(ErrorCodeConstants.AI_CHAT_CONTINUE_NOT_EXIST); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return AiChatConversationConvert.INSTANCE.covnertChatConversationRes(aiChatConversationDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return aiChatConversationDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -106,6 +126,24 @@ public class AiChatConversationServiceImpl implements AiChatConversationService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return AiChatConversationConvert.INSTANCE.covnertChatConversationResList(top100Conversation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void updateModal(Long id, Long modalId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 校验对话是否存在 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        validateExists(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 获取模型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AiChatModalRes chatModal = aiChatModalService.getChatModal(modalId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 判断模型是否禁用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (AiChatModalDisableEnum.YES.getValue().equals(chatModal.getDisable())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw ServiceExceptionUtil.exception(ErrorCodeConstants.AI_MODAL_DISABLE_NOT_USED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 更新对话 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        aiChatConversationMapper.updateById(new AiChatConversationDO() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setId(id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setModalId(chatModal.getId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .setModal(chatModal.getModal()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void delete(Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         aiChatConversationMapper.deleteById(id); 
			 |