前端和json优化

This commit is contained in:
2025-11-28 17:16:17 +08:00
parent 34e69c7f62
commit dfb11c85f1
135 changed files with 930 additions and 633 deletions

View File

@@ -189,7 +189,7 @@ public class AiChatController {
*/
@PutMapping("/conversation")
public ResultDomain<TbAiConversation> updateConversation(@RequestBody TbAiConversation conversation) {
log.info("更新会话: id={}", conversation.getID());
log.info("更新会话: id={}", conversation.getId());
return chatService.updateConversation(conversation);
}

View File

@@ -65,9 +65,9 @@ public class AiAgentConfigServiceImpl implements AiAgentConfigService {
}
// 4. 设置默认值
agentConfig.setID(UUID.randomUUID().toString());
agentConfig.setCreator(currentUser.getID());
agentConfig.setUpdater(currentUser.getID());
agentConfig.setId(UUID.randomUUID().toString());
agentConfig.setCreator(currentUser.getId());
agentConfig.setUpdater(currentUser.getId());
agentConfig.setCreateTime(new Date());
agentConfig.setUpdateTime(new Date());
agentConfig.setDeleted(false);
@@ -79,7 +79,7 @@ public class AiAgentConfigServiceImpl implements AiAgentConfigService {
// 5. 插入数据库
int rows = agentConfigMapper.insertAgentConfig(agentConfig);
if (rows > 0) {
log.info("创建智能体成功: {} - {}", agentConfig.getID(), agentConfig.getName());
log.info("创建智能体成功: {} - {}", agentConfig.getId(), agentConfig.getName());
resultDomain.success("创建智能体成功", agentConfig);
return resultDomain;
} else {
@@ -101,13 +101,13 @@ public class AiAgentConfigServiceImpl implements AiAgentConfigService {
try {
// 1. 参数验证
if (!StringUtils.hasText(agentConfig.getID())) {
if (!StringUtils.hasText(agentConfig.getId())) {
resultDomain.fail("智能体ID不能为空");
return resultDomain;
}
// 2. 检查是否存在
TbAiAgentConfig existing = agentConfigMapper.selectAgentConfigById(agentConfig.getID());
TbAiAgentConfig existing = agentConfigMapper.selectAgentConfigById(agentConfig.getId());
if (existing == null || existing.getDeleted()) {
resultDomain.fail("智能体不存在");
return resultDomain;
@@ -116,7 +116,7 @@ public class AiAgentConfigServiceImpl implements AiAgentConfigService {
// 3. 检查名称是否重复
if (StringUtils.hasText(agentConfig.getName()) &&
!agentConfig.getName().equals(existing.getName())) {
ResultDomain<Boolean> checkResult = checkNameExists(agentConfig.getName(), agentConfig.getID());
ResultDomain<Boolean> checkResult = checkNameExists(agentConfig.getName(), agentConfig.getId());
if (checkResult.getData()) {
resultDomain.fail("智能体名称已存在");
return resultDomain;
@@ -131,15 +131,15 @@ public class AiAgentConfigServiceImpl implements AiAgentConfigService {
}
// 5. 更新字段
agentConfig.setUpdater(currentUser.getID());
agentConfig.setUpdater(currentUser.getId());
agentConfig.setUpdateTime(new Date());
// 6. 执行更新
int rows = agentConfigMapper.updateAgentConfig(agentConfig);
if (rows > 0) {
// 重新查询最新数据
TbAiAgentConfig updated = agentConfigMapper.selectAgentConfigById(agentConfig.getID());
log.info("更新智能体成功: {} - {}", agentConfig.getID(), agentConfig.getName());
TbAiAgentConfig updated = agentConfigMapper.selectAgentConfigById(agentConfig.getId());
log.info("更新智能体成功: {} - {}", agentConfig.getId(), agentConfig.getName());
resultDomain.success("更新智能体成功", updated);
return resultDomain;
} else {
@@ -182,8 +182,8 @@ public class AiAgentConfigServiceImpl implements AiAgentConfigService {
// 4. 逻辑删除
TbAiAgentConfig deleteEntity = new TbAiAgentConfig();
deleteEntity.setID(agentId);
deleteEntity.setUpdater(currentUser.getID());
deleteEntity.setId(agentId);
deleteEntity.setUpdater(currentUser.getId());
int rows = agentConfigMapper.deleteAgentConfig(deleteEntity);
if (rows > 0) {
@@ -310,13 +310,13 @@ public class AiAgentConfigServiceImpl implements AiAgentConfigService {
// 3. 更新状态
TbAiAgentConfig update = new TbAiAgentConfig();
update.setID(agentId);
update.setId(agentId);
update.setStatus(status);
update.setUpdateTime(new Date());
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null) {
update.setUpdater(currentUser.getID());
update.setUpdater(currentUser.getId());
}
int rows = agentConfigMapper.updateAgentConfig(update);
@@ -370,14 +370,14 @@ public class AiAgentConfigServiceImpl implements AiAgentConfigService {
// 4. 更新Dify配置
TbAiAgentConfig update = new TbAiAgentConfig();
update.setID(agentId);
update.setId(agentId);
update.setDifyAppId(difyAppId);
update.setDifyApiKey(difyApiKey);
update.setUpdateTime(new Date());
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null) {
update.setUpdater(currentUser.getID());
update.setUpdater(currentUser.getId());
}
int rows = agentConfigMapper.updateAgentConfig(update);

View File

@@ -55,7 +55,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
// 查询数据
List<TbAiConversation> conversations = conversationMapper.selectUserConversationsPage(
currentUser.getID(),
currentUser.getId(),
agentId,
keyword,
isFavorite,
@@ -66,7 +66,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
// 查询总数
long total = conversationMapper.countUserConversationsWithFilter(
currentUser.getID(),
currentUser.getId(),
agentId,
keyword,
isFavorite,
@@ -105,14 +105,14 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
// 搜索会话
List<TbAiConversation> conversations = conversationMapper.searchConversationsByKeyword(
currentUser.getID(),
currentUser.getId(),
keyword,
pageParam
);
// 查询总数
long total = conversationMapper.countSearchConversations(
currentUser.getID(),
currentUser.getId(),
keyword
);
@@ -147,7 +147,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
// 搜索消息
List<TbAiMessage> messages = messageMapper.searchMessagesByContent(
currentUser.getID(),
currentUser.getId(),
keyword,
conversationId,
pageParam
@@ -155,7 +155,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
// 查询总数
long total = messageMapper.countSearchMessages(
currentUser.getID(),
currentUser.getId(),
keyword,
conversationId
);
@@ -197,14 +197,14 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
return resultDomain;
}
if (currentUser != null && !conversation.getUserID().equals(currentUser.getID())) {
if (currentUser != null && !conversation.getUserID().equals(currentUser.getId())) {
resultDomain.fail("无权操作此会话");
return resultDomain;
}
// 更新收藏状态
TbAiConversation update = new TbAiConversation();
update.setID(conversationId);
update.setId(conversationId);
update.setIsFavorite(isFavorite);
update.setUpdateTime(new Date());
conversationMapper.updateConversation(update);
@@ -240,14 +240,14 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
return resultDomain;
}
if (currentUser != null && !conversation.getUserID().equals(currentUser.getID())) {
if (currentUser != null && !conversation.getUserID().equals(currentUser.getId())) {
resultDomain.fail("无权操作此会话");
return resultDomain;
}
// 更新置顶状态
TbAiConversation update = new TbAiConversation();
update.setID(conversationId);
update.setId(conversationId);
update.setIsPinned(isPinned);
update.setUpdateTime(new Date());
conversationMapper.updateConversation(update);
@@ -284,17 +284,17 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
int deleteCount = 0;
for (String conversationId : conversationIds) {
TbAiConversation conversation = conversationMapper.selectConversationById(conversationId);
if (conversation != null && conversation.getUserID().equals(currentUser.getID())) {
if (conversation != null && conversation.getUserID().equals(currentUser.getId())) {
// 逻辑删除会话
TbAiConversation deleteEntity = new TbAiConversation();
deleteEntity.setID(conversationId);
deleteEntity.setId(conversationId);
conversationMapper.deleteConversation(deleteEntity);
// 同时删除消息
List<TbAiMessage> messages = messageMapper.selectMessagesByConversationId(conversationId);
for (TbAiMessage message : messages) {
TbAiMessage deleteMsg = new TbAiMessage();
deleteMsg.setID(message.getID());
deleteMsg.setId(message.getId());
messageMapper.deleteMessage(deleteMsg);
}
@@ -324,7 +324,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
return resultDomain;
}
String targetUserId = StringUtils.hasText(userId) ? userId : currentUser.getID();
String targetUserId = StringUtils.hasText(userId) ? userId : currentUser.getId();
// 统计数据
Map<String, Object> statistics = new HashMap<>();
@@ -388,7 +388,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
}
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null && !conversation.getUserID().equals(currentUser.getID())) {
if (currentUser != null && !conversation.getUserID().equals(currentUser.getId())) {
resultDomain.fail("无权访问此会话");
return resultDomain;
}
@@ -455,7 +455,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
}
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null && !conversation.getUserID().equals(currentUser.getID())) {
if (currentUser != null && !conversation.getUserID().equals(currentUser.getId())) {
resultDomain.fail("无权访问此会话");
return resultDomain;
}
@@ -523,7 +523,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
}
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null && !conversation.getUserID().equals(currentUser.getID())) {
if (currentUser != null && !conversation.getUserID().equals(currentUser.getId())) {
resultDomain.fail("无权访问此会话");
return resultDomain;
}
@@ -631,7 +631,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
// 查询过期会话ID
List<String> expiredIds = conversationMapper.selectExpiredConversationIds(
currentUser.getID(),
currentUser.getId(),
beforeDate
);
@@ -648,7 +648,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
List<TbAiMessage> messages = messageMapper.selectMessagesByConversationId(conversationId);
for (TbAiMessage message : messages) {
TbAiMessage deleteMsg = new TbAiMessage();
deleteMsg.setID(message.getID());
deleteMsg.setId(message.getId());
messageMapper.deleteMessage(deleteMsg);
}
}
@@ -677,7 +677,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
int queryLimit = (limit != null && limit > 0) ? limit : 10;
List<TbAiConversation> conversations = conversationMapper.selectRecentConversations(
currentUser.getID(),
currentUser.getId(),
queryLimit
);
@@ -704,7 +704,7 @@ public class AiChatHistoryServiceImpl implements AiChatHistoryService {
int queryLimit = (limit != null && limit > 0) ? limit : 10;
List<TbAiConversation> conversations = conversationMapper.selectPopularConversations(
currentUser.getID(),
currentUser.getId(),
queryLimit
);

View File

@@ -206,7 +206,7 @@ public class AiChatServiceImpl implements AiChatService {
emitter.complete();
return emitter;
}
if (!conversation.getUserID().equals(currentUser.getID())) {
if (!conversation.getUserID().equals(currentUser.getId())) {
emitter.send(SseEmitter.event().name("error").data("无权访问此会话"));
emitter.complete();
return emitter;
@@ -222,12 +222,12 @@ public class AiChatServiceImpl implements AiChatService {
conversation = createResult.getData();
}
final String finalConversationId = conversation.getID();
final String finalConversationId = conversation.getId();
// 5. 创建用户消息记录
TbAiMessage userMessage = new TbAiMessage();
String userMessageId = UUID.randomUUID().toString();
userMessage.setID(userMessageId);
userMessage.setId(userMessageId);
userMessage.setConversationID(finalConversationId);
userMessage.setAgentID(agentId);
userMessage.setRole("user");
@@ -235,7 +235,7 @@ public class AiChatServiceImpl implements AiChatService {
userMessage.setCreateTime(new Date());
userMessage.setUpdateTime(new Date());
userMessage.setDeleted(false);
userMessage.setUserID(currentUser.getID());
userMessage.setUserID(currentUser.getId());
// 处理文件关联将文件ID列表转换为JSON数组保存
if (filesData != null && !filesData.isEmpty()) {
@@ -261,7 +261,7 @@ public class AiChatServiceImpl implements AiChatService {
// 6. 保存文件关联记录到tb_ai_upload_file
if (filesData != null && !filesData.isEmpty()) {
saveMessageFileRecords(userMessageId, finalConversationId, currentUser.getID(), filesData);
saveMessageFileRecords(userMessageId, finalConversationId, currentUser.getId(), filesData);
}
// 注意AI消息记录将在获取到Dify的task_id后创建
@@ -272,7 +272,7 @@ public class AiChatServiceImpl implements AiChatService {
// 7. 构建Dify请求
ChatRequest chatRequest = new ChatRequest();
chatRequest.setQuery(query);
chatRequest.setUser(currentUser.getID());
chatRequest.setUser(currentUser.getId());
if (StringUtils.hasText(conversation.getDifyConversationId())) {
chatRequest.setConversationId(conversation.getDifyConversationId());
@@ -331,7 +331,7 @@ public class AiChatServiceImpl implements AiChatService {
// 更新AI消息内容使用task_id作为消息ID
if (taskId.get() != null) {
TbAiMessage updateMessage = new TbAiMessage();
updateMessage.setID(taskId.get());
updateMessage.setId(taskId.get());
updateMessage.setContent(fullAnswer.toString());
updateMessage.setDifyMessageId(difyMessageId.get());
updateMessage.setUpdateTime(new Date());
@@ -341,7 +341,7 @@ public class AiChatServiceImpl implements AiChatService {
// 更新会话的Dify会话ID
if (StringUtils.hasText(difyConversationId.get())) {
TbAiConversation updateConv = new TbAiConversation();
updateConv.setID(finalConversationId);
updateConv.setId(finalConversationId);
updateConv.setDifyConversationId(difyConversationId.get());
updateConv.setMessageCount((finalConversation.getMessageCount() != null ?
finalConversation.getMessageCount() : 0) + 2);
@@ -382,7 +382,7 @@ public class AiChatServiceImpl implements AiChatService {
// 使用task_id作为消息ID创建AI消息记录
TbAiMessage aiMessage = new TbAiMessage();
aiMessage.setID(difyTaskId); // 使用Dify的task_id作为消息ID
aiMessage.setId(difyTaskId); // 使用Dify的task_id作为消息ID
aiMessage.setConversationID(finalConversationId);
aiMessage.setAgentID(agentId);
aiMessage.setRole("assistant");
@@ -515,7 +515,7 @@ public class AiChatServiceImpl implements AiChatService {
TbAiConversation conversation;
if (StringUtils.hasText(conversationId)) {
conversation = conversationMapper.selectConversationById(conversationId);
if (conversation == null || !conversation.getUserID().equals(currentUser.getID())) {
if (conversation == null || !conversation.getUserID().equals(currentUser.getId())) {
resultDomain.fail("会话不存在或无权访问");
return resultDomain;
}
@@ -526,12 +526,12 @@ public class AiChatServiceImpl implements AiChatService {
return resultDomain;
}
conversation = createResult.getData();
conversationId = conversation.getID();
conversationId = conversation.getId();
}
// 创建用户消息
TbAiMessage userMessage = new TbAiMessage();
userMessage.setID(UUID.randomUUID().toString());
userMessage.setId(UUID.randomUUID().toString());
userMessage.setConversationID(conversationId);
userMessage.setAgentID(agentId);
userMessage.setRole("user");
@@ -544,7 +544,7 @@ public class AiChatServiceImpl implements AiChatService {
// 构建Dify请求
ChatRequest chatRequest = new ChatRequest();
chatRequest.setQuery(query);
chatRequest.setUser(currentUser.getID());
chatRequest.setUser(currentUser.getId());
if (StringUtils.hasText(conversation.getDifyConversationId())) {
chatRequest.setConversationId(conversation.getDifyConversationId());
@@ -561,7 +561,7 @@ public class AiChatServiceImpl implements AiChatService {
// 创建AI回复消息
TbAiMessage aiMessage = new TbAiMessage();
aiMessage.setID(UUID.randomUUID().toString());
aiMessage.setId(UUID.randomUUID().toString());
aiMessage.setConversationID(conversationId);
aiMessage.setAgentID(agentId);
aiMessage.setRole("assistant");
@@ -574,14 +574,14 @@ public class AiChatServiceImpl implements AiChatService {
// 更新会话
TbAiConversation updateConv = new TbAiConversation();
updateConv.setID(conversationId);
updateConv.setId(conversationId);
updateConv.setDifyConversationId(chatResponse.getConversationId());
updateConv.setMessageCount((conversation.getMessageCount() != null ?
conversation.getMessageCount() : 0) + 2);
updateConv.setUpdateTime(new Date());
conversationMapper.updateConversation(updateConv);
log.info("阻塞式对话成功: {} - {}", conversationId, aiMessage.getID());
log.info("阻塞式对话成功: {} - {}", conversationId, aiMessage.getId());
resultDomain.success("对话成功", aiMessage);
return resultDomain;
@@ -624,7 +624,7 @@ public class AiChatServiceImpl implements AiChatService {
try {
difyApiClient.stopChatMessage(
taskId,
currentUser.getID(),
currentUser.getId(),
agent.getDifyApiKey()
);
log.info("对话停止成功task_id: {}", taskId);
@@ -673,8 +673,8 @@ public class AiChatServiceImpl implements AiChatService {
// 创建会话
TbAiConversation conversation = new TbAiConversation();
conversation.setID(UUID.randomUUID().toString());
conversation.setUserID(currentUser.getID());
conversation.setId(UUID.randomUUID().toString());
conversation.setUserID(currentUser.getId());
conversation.setAgentID(agentId);
conversation.setTitle(StringUtils.hasText(title) ? title : "新对话");
conversation.setMessageCount(0);
@@ -684,7 +684,7 @@ public class AiChatServiceImpl implements AiChatService {
conversationMapper.insertConversation(conversation);
log.info("创建会话成功: {} - {}", conversation.getID(), currentUser.getID());
log.info("创建会话成功: {} - {}", conversation.getId(), currentUser.getId());
resultDomain.success("创建会话成功", conversation);
return resultDomain;
@@ -713,7 +713,7 @@ public class AiChatServiceImpl implements AiChatService {
// 验证所属权
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null && !conversation.getUserID().equals(currentUser.getID())) {
if (currentUser != null && !conversation.getUserID().equals(currentUser.getId())) {
resultDomain.fail("无权访问此会话");
return resultDomain;
}
@@ -734,20 +734,20 @@ public class AiChatServiceImpl implements AiChatService {
ResultDomain<TbAiConversation> resultDomain = new ResultDomain<>();
try {
if (!StringUtils.hasText(conversation.getID())) {
if (!StringUtils.hasText(conversation.getId())) {
resultDomain.fail("会话ID不能为空");
return resultDomain;
}
// 验证所属权
TbAiConversation existing = conversationMapper.selectConversationById(conversation.getID());
TbAiConversation existing = conversationMapper.selectConversationById(conversation.getId());
if (existing == null || existing.getDeleted()) {
resultDomain.fail("会话不存在");
return resultDomain;
}
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null && !existing.getUserID().equals(currentUser.getID())) {
if (currentUser != null && !existing.getUserID().equals(currentUser.getId())) {
resultDomain.fail("无权修改此会话");
return resultDomain;
}
@@ -757,7 +757,7 @@ public class AiChatServiceImpl implements AiChatService {
conversationMapper.updateConversation(conversation);
// 重新查询
TbAiConversation updated = conversationMapper.selectConversationById(conversation.getID());
TbAiConversation updated = conversationMapper.selectConversationById(conversation.getId());
resultDomain.success("更新成功", updated);
return resultDomain;
@@ -787,21 +787,21 @@ public class AiChatServiceImpl implements AiChatService {
}
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null && !existing.getUserID().equals(currentUser.getID())) {
if (currentUser != null && !existing.getUserID().equals(currentUser.getId())) {
resultDomain.fail("无权删除此会话");
return resultDomain;
}
// 逻辑删除会话
TbAiConversation deleteEntity = new TbAiConversation();
deleteEntity.setID(conversationId);
deleteEntity.setId(conversationId);
conversationMapper.deleteConversation(deleteEntity);
// 同时逻辑删除该会话的所有消息
List<TbAiMessage> messages = messageMapper.selectMessagesByConversationId(conversationId);
for (TbAiMessage message : messages) {
TbAiMessage deleteMsg = new TbAiMessage();
deleteMsg.setID(message.getID());
deleteMsg.setId(message.getId());
messageMapper.deleteMessage(deleteMsg);
}
@@ -828,7 +828,7 @@ public class AiChatServiceImpl implements AiChatService {
}
List<TbAiConversation> conversations = conversationMapper.selectConversationsByUserId(
currentUser.getID(), agentId
currentUser.getId(), agentId
);
resultDomain.success("查询成功", conversations);
@@ -859,7 +859,7 @@ public class AiChatServiceImpl implements AiChatService {
}
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null && !conversation.getUserID().equals(currentUser.getID())) {
if (currentUser != null && !conversation.getUserID().equals(currentUser.getId())) {
resultDomain.fail("无权访问此会话");
return resultDomain;
}
@@ -996,7 +996,7 @@ public class AiChatServiceImpl implements AiChatService {
// 更新会话摘要
TbAiConversation update = new TbAiConversation();
update.setID(conversationId);
update.setId(conversationId);
update.setSummary(summary);
update.setUpdateTime(new Date());
conversationMapper.updateConversation(update);
@@ -1066,7 +1066,7 @@ public class AiChatServiceImpl implements AiChatService {
difyApiClient.submitMessageFeedback(
message.getDifyMessageId(),
difyRating,
currentUser.getID(),
currentUser.getId(),
feedback,
agent.getDifyApiKey()
);
@@ -1079,7 +1079,7 @@ public class AiChatServiceImpl implements AiChatService {
// 更新本地评价
TbAiMessage update = new TbAiMessage();
update.setID(messageId);
update.setId(messageId);
update.setRating(rating);
update.setFeedback(feedback);
update.setUpdateTime(new Date());
@@ -1110,7 +1110,7 @@ public class AiChatServiceImpl implements AiChatService {
for (DifyFileInfo fileInfo : filesData) {
TbAiUploadFile uploadFile = new TbAiUploadFile();
uploadFile.setID(UUID.randomUUID().toString());
uploadFile.setId(UUID.randomUUID().toString());
uploadFile.setUserID(userId);
uploadFile.setConversationID(conversationId);
uploadFile.setMessageID(messageId); // 绑定到消息
@@ -1152,7 +1152,7 @@ public class AiChatServiceImpl implements AiChatService {
// 获取当前登录用户的完整信息(包含部门角色列表)
LoginDomain loginDomain = LoginUtil.getCurrentLoginDomain();
if (loginDomain == null || loginDomain.getRoles() == null || loginDomain.getRoles().isEmpty()) {
log.warn("用户 {} 没有部门角色信息,返回空知识库列表", user.getID());
log.warn("用户 {} 没有部门角色信息,返回空知识库列表", user.getId());
return null;
}
@@ -1161,7 +1161,7 @@ public class AiChatServiceImpl implements AiChatService {
String deptPath = userRole.getDeptPath();
if (deptPath == null || deptPath.isEmpty()) {
log.warn("用户 {} 的部门路径为空,返回空知识库列表", user.getID());
log.warn("用户 {} 的部门路径为空,返回空知识库列表", user.getId());
return null;
}
@@ -1169,15 +1169,15 @@ public class AiChatServiceImpl implements AiChatService {
List<String> knowledgeIds = ((AiKnowledgeRedisServiceImpl) knowledgeRedisService).getKnowledgeIdsByDeptPath(deptPath);
if (knowledgeIds == null || knowledgeIds.isEmpty()) {
log.warn("用户 {} 所在部门路径 {} 没有关联的知识库", user.getID(), deptPath);
log.warn("用户 {} 所在部门路径 {} 没有关联的知识库", user.getId(), deptPath);
return null;
}
log.info("用户 {} 从部门路径 {} 获取到 {} 个知识库", user.getID(), deptPath, knowledgeIds.size());
log.info("用户 {} 从部门路径 {} 获取到 {} 个知识库", user.getId(), deptPath, knowledgeIds.size());
return knowledgeIds;
} catch (Exception e) {
log.error("根据用户获取知识库ID失败: userId={}", user.getID(), e);
log.error("根据用户获取知识库ID失败: userId={}", user.getId(), e);
return null;
}
}

View File

@@ -61,7 +61,7 @@ public class AiKnowledgeRedisServiceImpl implements AiKnowledgeRedisService, Com
String deptId = knowledge.getCreatorDept();
if (deptId == null || deptId.isEmpty()) {
log.warn("知识库 {} 没有部门信息,跳过", knowledge.getID());
log.warn("知识库 {} 没有部门信息,跳过", knowledge.getId());
continue;
}

View File

@@ -188,7 +188,7 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
}
// 4. 保存到本地数据库
knowledge.setID(UUID.randomUUID().toString());
knowledge.setId(UUID.randomUUID().toString());
knowledge.setDifyDatasetId(difyDatasetId);
knowledge.setDifyIndexingTechnique(indexingTechnique);
knowledge.setEmbeddingModel(embeddingModel);
@@ -198,9 +198,9 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
}
// 保存检索配置(从前端传入,已经在 knowledge 对象中)
// retrievalTopK, retrievalScoreThreshold, rerankModel, rerankModelProvider 已设置
knowledge.setCreator(currentUser.getID());
knowledge.setCreator(currentUser.getId());
knowledge.setCreatorDept(deptId);
knowledge.setUpdater(currentUser.getID());
knowledge.setUpdater(currentUser.getId());
knowledge.setCreateTime(new Date());
knowledge.setUpdateTime(new Date());
knowledge.setDeleted(false);
@@ -230,7 +230,7 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
// 5. 创建权限记录
try {
createKnowledgePermission(
knowledge.getID(),
knowledge.getId(),
permissionType,
deptIds,
roleIds,
@@ -250,7 +250,7 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
// 缓存更新失败不影响知识库创建,记录日志即可
}
log.info("知识库创建成功: {} - {}", knowledge.getID(), knowledge.getTitle());
log.info("知识库创建成功: {} - {}", knowledge.getId(), knowledge.getTitle());
resultDomain.success("知识库创建成功", knowledge);
return resultDomain;
@@ -268,20 +268,20 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
try {
// 1. 参数验证
if (!StringUtils.hasText(knowledge.getID())) {
if (!StringUtils.hasText(knowledge.getId())) {
resultDomain.fail("知识库ID不能为空");
return resultDomain;
}
// 2. 检查是否存在
TbAiKnowledge existing = knowledgeMapper.selectKnowledgeById(knowledge.getID());
TbAiKnowledge existing = knowledgeMapper.selectKnowledgeById(knowledge.getId());
if (existing == null || existing.getDeleted()) {
resultDomain.fail("知识库不存在");
return resultDomain;
}
// 3. 权限检查只有创建者或有write权限的用户可以修改
ResultDomain<Boolean> permissionCheck = checkKnowledgePermission(knowledge.getID(), "write");
ResultDomain<Boolean> permissionCheck = checkKnowledgePermission(knowledge.getId(), "write");
if (!permissionCheck.getData()) {
resultDomain.fail("无权限修改此知识库");
return resultDomain;
@@ -319,7 +319,7 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
updateRequest.setIndexingTechnique(knowledge.getDifyIndexingTechnique());
needUpdateDify = true;
} else {
log.warn("不允许从high_quality降级为economy: knowledgeId={}", knowledge.getID());
log.warn("不允许从high_quality降级为economy: knowledgeId={}", knowledge.getId());
}
}
@@ -425,14 +425,14 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
}
// 6. 更新本地数据
knowledge.setUpdater(currentUser.getID());
knowledge.setUpdater(currentUser.getId());
knowledge.setUpdateTime(new Date());
int rows = knowledgeMapper.updateKnowledge(knowledge);
if (rows > 0) {
// 重新查询最新数据
TbAiKnowledge updated = knowledgeMapper.selectKnowledgeById(knowledge.getID());
log.info("知识库更新成功: {} - {}", knowledge.getID(), knowledge.getTitle());
TbAiKnowledge updated = knowledgeMapper.selectKnowledgeById(knowledge.getId());
log.info("知识库更新成功: {} - {}", knowledge.getId(), knowledge.getTitle());
resultDomain.success("知识库更新成功", updated);
return resultDomain;
} else {
@@ -473,7 +473,7 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
return resultDomain;
}
if (!existing.getCreator().equals(currentUser.getID())) {
if (!existing.getCreator().equals(currentUser.getId())) {
resultDomain.fail("只有创建者可以删除知识库");
return resultDomain;
}
@@ -491,8 +491,8 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
// 5. 逻辑删除本地记录
TbAiKnowledge deleteEntity = new TbAiKnowledge();
deleteEntity.setID(knowledgeId);
deleteEntity.setUpdater(currentUser.getID());
deleteEntity.setId(knowledgeId);
deleteEntity.setUpdater(currentUser.getId());
int rows = knowledgeMapper.deleteKnowledge(deleteEntity);
if (rows > 0) {
@@ -623,14 +623,14 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
// 3. 更新本地信息
TbAiKnowledge update = new TbAiKnowledge();
update.setID(knowledgeId);
update.setId(knowledgeId);
update.setDocumentCount(difyDetail.getDocumentCount());
update.setTotalChunks(difyDetail.getWordCount()); // Dify的word_count对应我们的chunks
update.setUpdateTime(new Date());
TbSysUser currentUser = LoginUtil.getCurrentUser();
if (currentUser != null) {
update.setUpdater(currentUser.getID());
update.setUpdater(currentUser.getId());
}
knowledgeMapper.updateKnowledge(update);
@@ -679,7 +679,7 @@ public class AiKnowledgeServiceImpl implements AiKnowledgeService {
return resultDomain;
}
if (!knowledge.getCreator().equals(currentUser.getID())) {
if (!knowledge.getCreator().equals(currentUser.getId())) {
resultDomain.fail("只有创建者可以修改权限");
return resultDomain;
}

View File

@@ -114,7 +114,7 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
file,
"ai-agent", // 模块名
agentId, // 业务ID智能体ID
currentUser.getID() // 上传者
currentUser.getId() // 上传者
);
if (!uploadResult.isSuccess() || uploadResult.getData() == null) {
@@ -123,7 +123,7 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
}
TbSysFile sysFile = (TbSysFile) uploadResult.getData();
log.info("文件已保存到系统文件表: sysFileId={}, fileName={}", sysFile.getID(), sysFile.getOriginalName());
log.info("文件已保存到系统文件表: sysFileId={}, fileName={}", sysFile.getId(), sysFile.getOriginalName());
// 6. 获取已保存文件的File对象直接用于上传到Dify不需要再保存临时文件
File fileToUpload = fileService.getFileByRelativePath(sysFile.getFilePath());
@@ -133,13 +133,13 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
DifyFileInfo difyResponse = difyApiClient.uploadFileForChat(
fileToUpload,
originalFilename,
currentUser.getID(),
currentUser.getId(),
agent.getDifyApiKey());
// 9. 转换为前端需要的格式包含系统文件ID和文件路径
Map<String, Object> fileInfo = new HashMap<>();
fileInfo.put("id", difyResponse.getId()); // Dify文件ID
fileInfo.put("sys_file_id", sysFile.getID()); // 系统文件ID重要用于关联消息
fileInfo.put("sys_file_id", sysFile.getId()); // 系统文件ID重要用于关联消息
fileInfo.put("file_path", sysFile.getFilePath()); // 文件路径(重要:用于保存记录)
fileInfo.put("name", difyResponse.getName());
fileInfo.put("size", difyResponse.getSize());
@@ -150,7 +150,7 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
fileInfo.put("upload_file_id", difyResponse.getId()); // Dify上传文件ID
fileInfo.put("file_url", sysFile.getFileUrl()); // 文件访问URL
log.info("对话文件上传成功: sysFileId={}, difyFileId={}", sysFile.getID(), difyResponse.getId());
log.info("对话文件上传成功: sysFileId={}, difyFileId={}", sysFile.getId(), difyResponse.getId());
resultDomain.success("文件上传成功", fileInfo);
return resultDomain;
@@ -228,7 +228,7 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
file,
"ai-knowledge", // 模块名
knowledgeId, // 业务ID知识库ID
currentUser.getID() // 上传者
currentUser.getId() // 上传者
);
if (!uploadResult.isSuccess() || uploadResult.getData() == null) {
@@ -237,7 +237,7 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
}
TbSysFile sysFile = (TbSysFile) uploadResult.getData();
log.info("文件已保存到系统文件表: sysFileId={}, fileName={}", sysFile.getID(), sysFile.getOriginalName());
log.info("文件已保存到系统文件表: sysFileId={}, fileName={}", sysFile.getId(), sysFile.getOriginalName());
// 6. 获取已保存文件的File对象直接用于上传到Dify
File fileToUpload = fileService.getFileByRelativePath(sysFile.getFilePath());
@@ -259,10 +259,10 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
// 8. 保存到本地数据库
TbAiUploadFile uploadFile = new TbAiUploadFile();
uploadFile.setID(UUID.randomUUID().toString());
uploadFile.setUserID(currentUser.getID());
uploadFile.setId(UUID.randomUUID().toString());
uploadFile.setUserID(currentUser.getId());
uploadFile.setKnowledgeId(knowledgeId);
uploadFile.setSysFileId(sysFile.getID()); // 关联系统文件ID
uploadFile.setSysFileId(sysFile.getId()); // 关联系统文件ID
uploadFile.setFileName(originalFilename);
uploadFile.setFilePath(sysFile.getFilePath()); // 保存系统文件的相对路径
uploadFile.setFileSize(file.getSize());
@@ -282,10 +282,10 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
int knowledgeRows = knowledgeMapper.updateKnowledge(knowledge);
if (rows > 0) {
log.info("知识库文件上传成功: uploadFileId={}, sysFileId={}, fileName={}",
uploadFile.getID(), sysFile.getID(), originalFilename);
uploadFile.getId(), sysFile.getId(), originalFilename);
// 9. 异步更新向量化状态
asyncUpdateVectorStatus(uploadFile.getID());
asyncUpdateVectorStatus(uploadFile.getId());
resultDomain.success("文件上传成功", uploadFile);
if (knowledgeRows <=0) {
@@ -392,7 +392,7 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
// 4. 逻辑删除本地记录
TbAiUploadFile deleteEntity = new TbAiUploadFile();
deleteEntity.setID(fileId);
deleteEntity.setId(fileId);
int rows = uploadFileMapper.deleteUploadFile(deleteEntity);
knowledge.setDocumentCount(knowledge.getDocumentCount() - 1);
@@ -522,7 +522,7 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
// 4. 更新本地状态
TbAiUploadFile update = new TbAiUploadFile();
update.setID(fileId);
update.setId(fileId);
// 映射Dify状态到本地状态completed=2, processing=1, error=3
// DocumentStatusResponse返回的是文档列表取第一个
@@ -583,9 +583,9 @@ public class AiUploadFileServiceImpl implements AiUploadFileService {
List<CompletableFuture<Void>> futures = files.stream()
.map(file -> CompletableFuture.runAsync(() -> {
try {
syncFileStatus(file.getID());
syncFileStatus(file.getId());
} catch (Exception e) {
log.error("同步文件状态失败: {}", file.getID(), e);
log.error("同步文件状态失败: {}", file.getId(), e);
}
}, executorService))
.collect(Collectors.toList());

View File

@@ -216,7 +216,7 @@
) VALUES
<foreach collection="files" item="file" separator=",">
(
#{file.ID}, #{file.userID}, #{file.knowledgeId}, #{file.conversationID}, #{file.messageID},
#{file.id}, #{file.userID}, #{file.knowledgeId}, #{file.conversationID}, #{file.messageID},
#{file.sysFileId}, #{file.fileName}, #{file.filePath}, #{file.fileSize},
#{file.fileType}, #{file.mimeType}, #{file.difyDocumentId}, #{file.difyBatchId}, #{file.difyUploadFileId},
#{file.chunkCount}, #{file.status}, #{file.enabled}, #{file.displayStatus}, #{file.createTime}, #{file.updateTime}, #{file.deleted}

View File

@@ -255,7 +255,7 @@ const agentResult = await aiAgentConfigApi.createAgent({
status: 1
});
const agentId = agentResult.data?.ID;
const agentId = agentResult.data?.id;
// 2. 流式对话
await chatApi.streamChat(
@@ -294,7 +294,7 @@ const knowledgeResult = await knowledgeApi.createKnowledge({
embeddingModel: 'text-embedding-ada-002'
});
const knowledgeId = knowledgeResult.data?.ID;
const knowledgeId = knowledgeResult.data?.id;
// 2. 上传文件
const files = document.querySelector('input[type="file"]').files;

View File

@@ -50,7 +50,7 @@ public class AiKnowledgeServiceImpl {
String deptId = userDeptRoles.isEmpty() ? null : userDeptRoles.get(0).getDeptID();
// 2. 保存知识库
knowledge.setCreator(currentUser.getID());
knowledge.setCreator(currentUser.getId());
knowledge.setCreatorDept(deptId);
knowledgeMapper.insert(knowledge);
@@ -58,27 +58,27 @@ public class AiKnowledgeServiceImpl {
switch (permissionType) {
case PUBLIC:
// 公开知识库:所有人可读
createPublicPermission(knowledge.getID());
createPublicPermission(knowledge.getId());
break;
case DEPARTMENT:
// 部门知识库:本部门所有人可读写
createDepartmentPermission(knowledge.getID(), deptId);
createDepartmentPermission(knowledge.getId(), deptId);
break;
case DEPARTMENT_INHERIT:
// 部门继承:本部门及子部门可读
createDepartmentInheritPermission(knowledge.getID(), deptId);
createDepartmentInheritPermission(knowledge.getId(), deptId);
break;
case ROLE:
// 角色知识库:特定角色可读(跨部门)
createRolePermission(knowledge.getID(), roleIds);
createRolePermission(knowledge.getId(), roleIds);
break;
case PRIVATE:
// 私有知识库:仅创建者所在部门的特定角色
createPrivatePermission(knowledge.getID(), deptId, roleIds);
createPrivatePermission(knowledge.getId(), deptId, roleIds);
break;
}
@@ -88,7 +88,7 @@ public class AiKnowledgeServiceImpl {
// 创建公开权限
private void createPublicPermission(String knowledgeId) {
TbResourcePermission permission = new TbResourcePermission();
permission.setID(UUID.randomUUID().toString());
permission.setId(UUID.randomUUID().toString());
permission.setResourceType(10); // AI_KNOWLEDGE
permission.setResourceId(knowledgeId);
permission.setDeptId(null); // NULL表示不限部门
@@ -102,7 +102,7 @@ public class AiKnowledgeServiceImpl {
// 创建部门权限
private void createDepartmentPermission(String knowledgeId, String deptId) {
TbResourcePermission permission = new TbResourcePermission();
permission.setID(UUID.randomUUID().toString());
permission.setId(UUID.randomUUID().toString());
permission.setResourceType(10);
permission.setResourceId(knowledgeId);
permission.setDeptId(deptId); // 指定部门
@@ -120,7 +120,7 @@ public class AiKnowledgeServiceImpl {
// 为本部门创建权限已通过dept_path自动继承给子部门
TbResourcePermission permission = new TbResourcePermission();
permission.setID(UUID.randomUUID().toString());
permission.setId(UUID.randomUUID().toString());
permission.setResourceType(10);
permission.setResourceId(knowledgeId);
permission.setDeptId(deptId);
@@ -392,7 +392,7 @@ private String getCurrentUserCacheKey() {
String roleIds = roles.stream()
.map(r -> r.getDeptID() + ":" + r.getRoleID())
.collect(Collectors.joining(","));
return user.getID() + ":" + roleIds;
return user.getId() + ":" + roleIds;
}
```