mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-24 08:03:53 +08:00
fix:知识库【编辑】【删除】操作逻辑修改
This commit is contained in:
+70
-22
@@ -51,6 +51,7 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl<KnowledgeBaseDao,
|
|||||||
private final ModelConfigDao modelConfigDao;
|
private final ModelConfigDao modelConfigDao;
|
||||||
private final RedisUtils redisUtils;
|
private final RedisUtils redisUtils;
|
||||||
private RestTemplate restTemplate = new RestTemplate();
|
private RestTemplate restTemplate = new RestTemplate();
|
||||||
|
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public KnowledgeBaseEntity selectById(Serializable datasetId) {
|
public KnowledgeBaseEntity selectById(Serializable datasetId) {
|
||||||
@@ -201,6 +202,25 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl<KnowledgeBaseDao,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean needRagValidation = StringUtils.isNotBlank(knowledgeBaseDTO.getDatasetId())
|
||||||
|
&& StringUtils.isNotBlank(knowledgeBaseDTO.getRagModelId());
|
||||||
|
|
||||||
|
if (needRagValidation) {
|
||||||
|
// 先校验RAG配置
|
||||||
|
Map<String, Object> ragConfig = getValidatedRAGConfig(knowledgeBaseDTO.getRagModelId());
|
||||||
|
|
||||||
|
// 调用RAGFlow API更新数据集
|
||||||
|
updateDatasetInRAGFlow(
|
||||||
|
knowledgeBaseDTO.getDatasetId(),
|
||||||
|
knowledgeBaseDTO.getName(),
|
||||||
|
knowledgeBaseDTO.getDescription(),
|
||||||
|
ragConfig);
|
||||||
|
|
||||||
|
log.info("RAGFlow API更新成功,datasetId: {}", knowledgeBaseDTO.getDatasetId());
|
||||||
|
} else {
|
||||||
|
log.warn("datasetId或ragModelId为空,跳过RAGFlow更新");
|
||||||
|
}
|
||||||
|
|
||||||
KnowledgeBaseEntity entity = ConvertUtils.sourceToTarget(knowledgeBaseDTO, KnowledgeBaseEntity.class);
|
KnowledgeBaseEntity entity = ConvertUtils.sourceToTarget(knowledgeBaseDTO, KnowledgeBaseEntity.class);
|
||||||
knowledgeBaseDao.updateById(entity);
|
knowledgeBaseDao.updateById(entity);
|
||||||
|
|
||||||
@@ -209,22 +229,6 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl<KnowledgeBaseDao,
|
|||||||
redisUtils.delete(RedisKeys.getKnowledgeBaseCacheKey(entity.getId()));
|
redisUtils.delete(RedisKeys.getKnowledgeBaseCacheKey(entity.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 调用RAGFlow API更新数据集
|
|
||||||
if (StringUtils.isNotBlank(knowledgeBaseDTO.getDatasetId())) {
|
|
||||||
try {
|
|
||||||
Map<String, Object> ragConfig = getValidatedRAGConfig(knowledgeBaseDTO.getRagModelId());
|
|
||||||
updateDatasetInRAGFlow(
|
|
||||||
knowledgeBaseDTO.getDatasetId(),
|
|
||||||
knowledgeBaseDTO.getName(),
|
|
||||||
knowledgeBaseDTO.getDescription(),
|
|
||||||
ragConfig);
|
|
||||||
} catch (Exception e) {
|
|
||||||
// 如果RAG API调用失败,回滚本地数据库操作
|
|
||||||
knowledgeBaseDao.updateById(existingEntity);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ConvertUtils.sourceToTarget(entity, KnowledgeBaseDTO.class);
|
return ConvertUtils.sourceToTarget(entity, KnowledgeBaseDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,22 +269,29 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl<KnowledgeBaseDao,
|
|||||||
log.info("找到记录: ID={}, datasetId={}, ragModelId={}",
|
log.info("找到记录: ID={}, datasetId={}, ragModelId={}",
|
||||||
entity.getId(), entity.getDatasetId(), entity.getRagModelId());
|
entity.getId(), entity.getDatasetId(), entity.getRagModelId());
|
||||||
|
|
||||||
// 先删除本地数据库记录
|
// 先调用RAGFlow API删除数据集
|
||||||
int deleteCount = knowledgeBaseDao.deleteById(entity.getId());
|
boolean apiDeleteSuccess = false;
|
||||||
log.info("本地数据库删除结果: {}", deleteCount > 0 ? "成功" : "失败");
|
|
||||||
|
|
||||||
// 调用RAGFlow API删除数据集
|
|
||||||
if (StringUtils.isNotBlank(entity.getDatasetId()) && StringUtils.isNotBlank(entity.getRagModelId())) {
|
if (StringUtils.isNotBlank(entity.getDatasetId()) && StringUtils.isNotBlank(entity.getRagModelId())) {
|
||||||
try {
|
try {
|
||||||
log.info("开始调用RAGFlow API删除数据集");
|
log.info("开始调用RAGFlow API删除数据集");
|
||||||
|
// 在删除前进行RAG配置校验
|
||||||
Map<String, Object> ragConfig = getValidatedRAGConfig(entity.getRagModelId());
|
Map<String, Object> ragConfig = getValidatedRAGConfig(entity.getRagModelId());
|
||||||
deleteDatasetInRAGFlow(entity.getDatasetId(), ragConfig);
|
deleteDatasetInRAGFlow(entity.getDatasetId(), ragConfig);
|
||||||
log.info("RAGFlow API删除调用完成");
|
log.info("RAGFlow API删除调用完成");
|
||||||
|
apiDeleteSuccess = true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.warn("删除RAGFlow数据集失败: {}", e.getMessage());
|
log.error("删除RAGFlow数据集失败: {}", e.getMessage());
|
||||||
|
throw new RenException(ErrorCode.RAG_API_ERROR, "删除RAGFlow数据集失败: " + e.getMessage());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.warn("datasetId或ragModelId为空,跳过RAGFlow删除");
|
log.warn("datasetId或ragModelId为空,跳过RAGFlow删除");
|
||||||
|
apiDeleteSuccess = true; // 没有RAG数据集,视为成功
|
||||||
|
}
|
||||||
|
|
||||||
|
// API删除成功后再删除本地记录
|
||||||
|
if (apiDeleteSuccess) {
|
||||||
|
int deleteCount = knowledgeBaseDao.deleteById(entity.getId());
|
||||||
|
log.info("本地数据库删除结果: {}", deleteCount > 0 ? "成功" : "失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("=== 通过datasetId删除操作结束 ===");
|
log.info("=== 通过datasetId删除操作结束 ===");
|
||||||
@@ -513,6 +524,24 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl<KnowledgeBaseDao,
|
|||||||
throw new RenException(ErrorCode.RAG_API_ERROR);
|
throw new RenException(ErrorCode.RAG_API_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 解析响应体,验证操作是否真正成功
|
||||||
|
String responseBody = response.getBody();
|
||||||
|
if (responseBody != null) {
|
||||||
|
try {
|
||||||
|
Map<String, Object> responseMap = objectMapper.readValue(responseBody, Map.class);
|
||||||
|
Integer code = (Integer) responseMap.get("code");
|
||||||
|
String message = (String) responseMap.get("message");
|
||||||
|
|
||||||
|
if (code != null && code != 0) {
|
||||||
|
log.error("RAGFlow API调用失败,响应码: {}, 消息: {}", code, message);
|
||||||
|
throw new RenException(ErrorCode.RAG_API_ERROR, "RAGFlow API调用失败: " + message);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("解析RAGFlow API响应失败: {}", e.getMessage(), e);
|
||||||
|
throw new RenException(ErrorCode.RAG_API_ERROR, "解析响应失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log.info("RAGFlow数据集更新成功,datasetId: {}", datasetId);
|
log.info("RAGFlow数据集更新成功,datasetId: {}", datasetId);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -555,6 +584,25 @@ public class KnowledgeBaseServiceImpl extends BaseServiceImpl<KnowledgeBaseDao,
|
|||||||
log.error("RAGFlow API调用失败,状态码: {}, 响应内容: {}", response.getStatusCode(), response.getBody());
|
log.error("RAGFlow API调用失败,状态码: {}, 响应内容: {}", response.getStatusCode(), response.getBody());
|
||||||
throw new RenException(ErrorCode.RAG_API_ERROR);
|
throw new RenException(ErrorCode.RAG_API_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 解析响应体,验证操作是否真正成功
|
||||||
|
String responseBody = response.getBody();
|
||||||
|
if (responseBody != null) {
|
||||||
|
try {
|
||||||
|
Map<String, Object> responseMap = objectMapper.readValue(responseBody, Map.class);
|
||||||
|
Integer code = (Integer) responseMap.get("code");
|
||||||
|
String message = (String) responseMap.get("message");
|
||||||
|
|
||||||
|
if (code != null && code != 0) {
|
||||||
|
log.error("RAGFlow API调用失败,响应码: {}, 消息: {}", code, message);
|
||||||
|
throw new RenException(ErrorCode.RAG_API_ERROR, "RAGFlow API调用失败: " + message);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("解析RAGFlow API响应失败: {}", e.getMessage(), e);
|
||||||
|
throw new RenException(ErrorCode.RAG_API_ERROR, "解析响应失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log.info("RAGFlow数据集删除成功,datasetId: {}", datasetId);
|
log.info("RAGFlow数据集删除成功,datasetId: {}", datasetId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1259,4 +1259,5 @@ export default {
|
|||||||
'knowledgeFileUpload.comprehensiveSimilarity': '综合相似度',
|
'knowledgeFileUpload.comprehensiveSimilarity': '综合相似度',
|
||||||
'knowledgeFileUpload.content': '内容:',
|
'knowledgeFileUpload.content': '内容:',
|
||||||
'knowledgeFileUpload.testQuestionRequired': '请输入测试问题',
|
'knowledgeFileUpload.testQuestionRequired': '请输入测试问题',
|
||||||
|
'knowledgeBaseDialog.descriptionRequired': '请输入知识库描述',
|
||||||
}
|
}
|
||||||
@@ -1258,4 +1258,5 @@ export default {
|
|||||||
'knowledgeFileUpload.comprehensiveSimilarity': '綜合相似度',
|
'knowledgeFileUpload.comprehensiveSimilarity': '綜合相似度',
|
||||||
'knowledgeFileUpload.content': '內容:',
|
'knowledgeFileUpload.content': '內容:',
|
||||||
'knowledgeFileUpload.testQuestionRequired': '請輸入測試問題',
|
'knowledgeFileUpload.testQuestionRequired': '請輸入測試問題',
|
||||||
|
'knowledgeBaseDialog.descriptionRequired': '請輸入知识库描述',
|
||||||
}
|
}
|
||||||
@@ -273,11 +273,9 @@ export default {
|
|||||||
handleSubmit: function(form) {
|
handleSubmit: function(form) {
|
||||||
console.log('handleSubmit called with form:', form);
|
console.log('handleSubmit called with form:', form);
|
||||||
if (form.id) {
|
if (form.id) {
|
||||||
// 编辑 - 使用dataset_id作为路径参数,form作为请求体
|
|
||||||
console.log('Editing knowledge base:', form.datasetId);
|
console.log('Editing knowledge base:', form.datasetId);
|
||||||
Api.knowledgeBase.updateKnowledgeBase(form.datasetId, form, (res) => {
|
Api.knowledgeBase.updateKnowledgeBase(form.datasetId, form, (res) => {
|
||||||
console.log('Update response:', res);
|
console.log('Update response:', res);
|
||||||
// 修复:检查 res.data.code 而不是 res.code
|
|
||||||
if (res.data && res.data.code === 0) {
|
if (res.data && res.data.code === 0) {
|
||||||
this.dialogVisible = false;
|
this.dialogVisible = false;
|
||||||
this.fetchKnowledgeBaseList();
|
this.fetchKnowledgeBaseList();
|
||||||
@@ -285,8 +283,15 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.updateFailed'));
|
this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.updateFailed'));
|
||||||
}
|
}
|
||||||
}, () => {
|
}, (err) => {
|
||||||
this.$message.error(this.$t('knowledgeBaseManagement.updateFailed'));
|
console.log('Error callback received:', err);
|
||||||
|
// 错误回调处理后端返回的错误信息
|
||||||
|
if (err && err.data) {
|
||||||
|
console.log('后端返回错误消息:', err.data.msg || err.msg);
|
||||||
|
this.$message.error(err.data.msg || err.msg || this.$t('knowledgeBaseManagement.updateFailed'));
|
||||||
|
} else {
|
||||||
|
this.$message.error(this.$t('knowledgeBaseManagement.updateFailed'));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// 新增 - 只传递必要的字段,不传递id
|
// 新增 - 只传递必要的字段,不传递id
|
||||||
@@ -303,6 +308,8 @@ export default {
|
|||||||
this.dialogVisible = false;
|
this.dialogVisible = false;
|
||||||
this.fetchKnowledgeBaseList();
|
this.fetchKnowledgeBaseList();
|
||||||
this.$message.success(this.$t('knowledgeBaseManagement.addSuccess'));
|
this.$message.success(this.$t('knowledgeBaseManagement.addSuccess'));
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.addFailed'));
|
||||||
}
|
}
|
||||||
}, (err) => {
|
}, (err) => {
|
||||||
console.log('Error callback received:', err);
|
console.log('Error callback received:', err);
|
||||||
@@ -338,8 +345,15 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.deleteFailed'));
|
this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.deleteFailed'));
|
||||||
}
|
}
|
||||||
}, () => {
|
}, (err) => {
|
||||||
this.$message.error(this.$t('knowledgeBaseManagement.deleteFailed'));
|
console.log('Error callback received:', err);
|
||||||
|
// 错误回调处理后端返回的错误信息
|
||||||
|
if (err && err.data) {
|
||||||
|
console.log('后端返回错误消息:', err.data.msg || err.msg);
|
||||||
|
this.$message.error(err.data.msg || err.msg || this.$t('knowledgeBaseManagement.deleteFailed'));
|
||||||
|
} else {
|
||||||
|
this.$message.error(this.$t('knowledgeBaseManagement.deleteFailed'));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.$message({
|
this.$message({
|
||||||
@@ -365,8 +379,15 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.deleteFailed'));
|
this.$message.error(res.data?.msg || this.$t('knowledgeBaseManagement.deleteFailed'));
|
||||||
}
|
}
|
||||||
}, () => {
|
}, (err) => {
|
||||||
this.$message.error(this.$t('knowledgeBaseManagement.deleteFailed'));
|
console.log('Error callback received:', err);
|
||||||
|
// 错误回调处理后端返回的错误信息
|
||||||
|
if (err && err.data) {
|
||||||
|
console.log('后端返回错误消息:', err.data.msg || err.msg);
|
||||||
|
this.$message.error(err.data.msg || err.msg || this.$t('knowledgeBaseManagement.deleteFailed'));
|
||||||
|
} else {
|
||||||
|
this.$message.error(this.$t('knowledgeBaseManagement.deleteFailed'));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.$message({
|
this.$message({
|
||||||
|
|||||||
Reference in New Issue
Block a user