|
@@ -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);
|