package com.iailab.module.ai.service.model;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.iailab.framework.common.enums.CommonStatusEnum;
|
import com.iailab.framework.common.pojo.PageResult;
|
import com.iailab.framework.common.util.object.BeanUtils;
|
import com.iailab.module.ai.controller.admin.model.vo.chatRole.AiChatRolePageReqVO;
|
import com.iailab.module.ai.controller.admin.model.vo.chatRole.AiChatRoleSaveMyReqVO;
|
import com.iailab.module.ai.controller.admin.model.vo.chatRole.AiChatRoleSaveReqVO;
|
import com.iailab.module.ai.dal.dataobject.model.AiChatRoleDO;
|
import com.iailab.module.ai.dal.mysql.model.AiChatRoleMapper;
|
import com.iailab.module.ai.service.knowledge.AiKnowledgeService;
|
import jakarta.annotation.Resource;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Collection;
|
import java.util.Collections;
|
import java.util.List;
|
|
import static com.iailab.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static com.iailab.framework.common.util.collection.CollectionUtils.convertList;
|
import static com.iailab.module.ai.enums.ErrorCodeConstants.CHAT_ROLE_DISABLE;
|
import static com.iailab.module.ai.enums.ErrorCodeConstants.CHAT_ROLE_NOT_EXISTS;
|
|
/**
|
* AI 聊天角色 Service 实现类
|
*
|
* @author fansili
|
*/
|
@Service
|
@Slf4j
|
public class AiChatRoleServiceImpl implements AiChatRoleService {
|
|
@Resource
|
private AiChatRoleMapper chatRoleMapper;
|
|
@Resource
|
private AiKnowledgeService knowledgeService;
|
@Resource
|
private AiToolService toolService;
|
|
@Override
|
public Long createChatRole(AiChatRoleSaveReqVO createReqVO) {
|
// 校验文档
|
validateDocuments(createReqVO.getKnowledgeIds());
|
// 校验工具
|
validateTools(createReqVO.getToolIds());
|
|
// 保存角色
|
AiChatRoleDO chatRole = BeanUtils.toBean(createReqVO, AiChatRoleDO.class);
|
chatRoleMapper.insert(chatRole);
|
return chatRole.getId();
|
}
|
|
@Override
|
public Long createChatRoleMy(AiChatRoleSaveMyReqVO createReqVO, Long userId) {
|
// 校验文档
|
validateDocuments(createReqVO.getKnowledgeIds());
|
// 校验工具
|
validateTools(createReqVO.getToolIds());
|
|
// 保存角色
|
AiChatRoleDO chatRole = BeanUtils.toBean(createReqVO, AiChatRoleDO.class).setUserId(userId)
|
.setStatus(CommonStatusEnum.ENABLE.getStatus()).setPublicStatus(false);
|
chatRoleMapper.insert(chatRole);
|
return chatRole.getId();
|
}
|
|
@Override
|
public void updateChatRole(AiChatRoleSaveReqVO updateReqVO) {
|
// 校验存在
|
validateChatRoleExists(updateReqVO.getId());
|
// 校验文档
|
validateDocuments(updateReqVO.getKnowledgeIds());
|
// 校验工具
|
validateTools(updateReqVO.getToolIds());
|
|
// 更新角色
|
AiChatRoleDO updateObj = BeanUtils.toBean(updateReqVO, AiChatRoleDO.class);
|
chatRoleMapper.updateById(updateObj);
|
}
|
|
@Override
|
public void updateChatRoleMy(AiChatRoleSaveMyReqVO updateReqVO, Long userId) {
|
// 校验存在
|
AiChatRoleDO chatRole = validateChatRoleExists(updateReqVO.getId());
|
if (ObjectUtil.notEqual(chatRole.getUserId(), userId)) {
|
throw exception(CHAT_ROLE_NOT_EXISTS);
|
}
|
// 校验文档
|
validateDocuments(updateReqVO.getKnowledgeIds());
|
// 校验工具
|
validateTools(updateReqVO.getToolIds());
|
|
// 更新
|
AiChatRoleDO updateObj = BeanUtils.toBean(updateReqVO, AiChatRoleDO.class);
|
chatRoleMapper.updateById(updateObj);
|
}
|
|
/**
|
* 校验知识库是否存在
|
*
|
* @param knowledgeIds 知识库编号列表
|
*/
|
private void validateDocuments(List<Long> knowledgeIds) {
|
if (CollUtil.isEmpty(knowledgeIds)) {
|
return;
|
}
|
// 校验文档是否存在
|
knowledgeIds.forEach(knowledgeService::validateKnowledgeExists);
|
}
|
|
/**
|
* 校验工具是否存在
|
*
|
* @param toolIds 工具编号列表
|
*/
|
private void validateTools(List<Long> toolIds) {
|
if (CollUtil.isEmpty(toolIds)) {
|
return;
|
}
|
// 遍历校验每个工具是否存在
|
toolIds.forEach(toolService::validateToolExists);
|
}
|
|
@Override
|
public void deleteChatRole(Long id) {
|
// 校验存在
|
validateChatRoleExists(id);
|
// 删除
|
chatRoleMapper.deleteById(id);
|
}
|
|
@Override
|
public void deleteChatRoleMy(Long id, Long userId) {
|
// 校验存在
|
AiChatRoleDO chatRole = validateChatRoleExists(id);
|
if (ObjectUtil.notEqual(chatRole.getUserId(), userId)) {
|
throw exception(CHAT_ROLE_NOT_EXISTS);
|
}
|
// 删除
|
chatRoleMapper.deleteById(id);
|
}
|
|
private AiChatRoleDO validateChatRoleExists(Long id) {
|
AiChatRoleDO chatRole = chatRoleMapper.selectById(id);
|
if (chatRole == null) {
|
throw exception(CHAT_ROLE_NOT_EXISTS);
|
}
|
return chatRole;
|
}
|
|
@Override
|
public AiChatRoleDO getChatRole(Long id) {
|
return chatRoleMapper.selectById(id);
|
}
|
|
@Override
|
public List<AiChatRoleDO> getChatRoleList(Collection<Long> ids) {
|
if (CollUtil.isEmpty(ids)) {
|
return Collections.emptyList();
|
}
|
return chatRoleMapper.selectBatchIds(ids);
|
}
|
|
@Override
|
public AiChatRoleDO validateChatRole(Long id) {
|
AiChatRoleDO chatRole = validateChatRoleExists(id);
|
if (CommonStatusEnum.isDisable(chatRole.getStatus())) {
|
throw exception(CHAT_ROLE_DISABLE, chatRole.getName());
|
}
|
return chatRole;
|
}
|
|
@Override
|
public PageResult<AiChatRoleDO> getChatRolePage(AiChatRolePageReqVO pageReqVO) {
|
return chatRoleMapper.selectPage(pageReqVO);
|
}
|
|
@Override
|
public PageResult<AiChatRoleDO> getChatRoleMyPage(AiChatRolePageReqVO pageReqVO, Long userId) {
|
return chatRoleMapper.selectPageByMy(pageReqVO, userId);
|
}
|
|
@Override
|
public List<String> getChatRoleCategoryList() {
|
List<AiChatRoleDO> list = chatRoleMapper.selectListGroupByCategory(CommonStatusEnum.ENABLE.getStatus());
|
return convertList(list, AiChatRoleDO::getCategory,
|
role -> role != null && StrUtil.isNotBlank(role.getCategory()));
|
}
|
|
@Override
|
public List<AiChatRoleDO> getChatRoleListByName(String name) {
|
return chatRoleMapper.selectListByName(name);
|
}
|
|
}
|