分段修改完成
This commit is contained in:
@@ -6,9 +6,10 @@ import org.springframework.web.bind.annotation.*;
|
||||
import org.xyzh.ai.client.DifyApiClient;
|
||||
import org.xyzh.ai.mapper.AiUploadFileMapper;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
import org.xyzh.common.core.page.PageDomain;
|
||||
import org.xyzh.common.core.page.PageParam;
|
||||
import org.xyzh.common.dto.ai.TbAiUploadFile;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
|
||||
import java.util.Date;
|
||||
@@ -38,27 +39,60 @@ public class DifyProxyController {
|
||||
// ===================== 文档分段管理 API =====================
|
||||
|
||||
/**
|
||||
* @description 获取文档分段列表
|
||||
* @description 获取文档分段列表(支持分页)
|
||||
* @param datasetId Dify数据集ID
|
||||
* @param documentId Dify文档ID
|
||||
* @return ResultDomain<String> 分段列表JSON
|
||||
* @param page 页码(默认1)
|
||||
* @param limit 每页条数(默认10)
|
||||
* @return ResultDomain<JSONObject> 分段列表JSON(包含分页信息)
|
||||
* @author AI Assistant
|
||||
* @since 2025-11-04
|
||||
*/
|
||||
@GetMapping("/datasets/{datasetId}/documents/{documentId}/segments")
|
||||
public ResultDomain<JSONObject> getDocumentSegments(
|
||||
@PathVariable(name = "datasetId") String datasetId,
|
||||
@PathVariable(name = "documentId") String documentId) {
|
||||
@PathVariable(name = "documentId") String documentId,
|
||||
@RequestParam(name = "page", defaultValue = "1") int page,
|
||||
@RequestParam(name = "limit", defaultValue = "20") int limit) {
|
||||
ResultDomain<JSONObject> result = new ResultDomain<>();
|
||||
log.info("获取文档分段列表: datasetId={}, documentId={}", datasetId, documentId);
|
||||
log.info("获取文档分段列表: datasetId={}, documentId={}, page={}, limit={}",
|
||||
datasetId, documentId, page, limit);
|
||||
|
||||
try {
|
||||
// 调用Dify API(使用默认配置的API Key)
|
||||
String path = "/datasets/" + datasetId + "/documents/" + documentId + "/segments";
|
||||
// 调用Dify API(使用默认配置的API Key,支持分页)
|
||||
String path = "/datasets/" + datasetId + "/documents/" + documentId +
|
||||
"/segments?page=" + page + "&limit=" + limit;
|
||||
String response = difyApiClient.get(path, null);
|
||||
JSONObject jsonObject = JSONObject.parseObject(response);
|
||||
|
||||
result.success("获取文档分段列表成功", JSONArray.parseArray(jsonObject.getJSONArray("data").toJSONString(), JSONObject.class));
|
||||
// 解析数据列表
|
||||
List<JSONObject> data = jsonObject.getJSONArray("data").toList(JSONObject.class);
|
||||
|
||||
// 构建分页返回对象
|
||||
PageDomain<JSONObject> pageDomain = new PageDomain<>();
|
||||
pageDomain.setDataList(data);
|
||||
|
||||
// 设置分页参数(添加空值检查)
|
||||
PageParam pageParam = new PageParam();
|
||||
pageParam.setPageSize(limit);
|
||||
pageParam.setPageNumber(page);
|
||||
|
||||
// 安全地获取 total,如果不存在则使用 data.size()
|
||||
Long total = jsonObject.getLong("total");
|
||||
pageParam.setTotalElements(total != null ? total : (long) data.size());
|
||||
|
||||
// 安全地获取 total_pages,如果不存在则计算
|
||||
Integer totalPages = jsonObject.getInteger("total_pages");
|
||||
if (totalPages == null) {
|
||||
long totalElements = pageParam.getTotalElements();
|
||||
totalPages = (int) Math.ceil((double) totalElements / limit);
|
||||
}
|
||||
pageParam.setTotalPages(totalPages);
|
||||
|
||||
pageDomain.setPageParam(pageParam);
|
||||
|
||||
// 返回完整的分页数据
|
||||
result.success("获取文档分段列表成功", pageDomain);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("获取文档分段列表失败", e);
|
||||
@@ -67,6 +101,108 @@ public class DifyProxyController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 更新文档分段
|
||||
* @param datasetId Dify数据集ID
|
||||
* @param documentId Dify文档ID
|
||||
* @param segmentId 分段ID
|
||||
* @param requestBody 请求体(包含segment对象)
|
||||
* @return ResultDomain<String> 更新结果
|
||||
* @author AI Assistant
|
||||
* @since 2025-11-07
|
||||
*/
|
||||
@PostMapping("/datasets/{datasetId}/documents/{documentId}/segments/{segmentId}")
|
||||
public ResultDomain<String> updateSegment(
|
||||
@PathVariable(name = "datasetId") String datasetId,
|
||||
@PathVariable(name = "documentId") String documentId,
|
||||
@PathVariable(name = "segmentId") String segmentId,
|
||||
@RequestBody Map<String, Object> requestBody) {
|
||||
|
||||
log.info("更新文档分段: datasetId={}, documentId={}, segmentId={}",
|
||||
datasetId, documentId, segmentId);
|
||||
|
||||
ResultDomain<String> result = new ResultDomain<>();
|
||||
try {
|
||||
// 调用Dify API(使用默认配置的API Key)
|
||||
String path = "/datasets/" + datasetId + "/documents/" + documentId +
|
||||
"/segments/" + segmentId;
|
||||
String response = difyApiClient.post(path, requestBody, null);
|
||||
|
||||
result.success("更新分段成功", response);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("更新分段失败", e);
|
||||
result.fail("更新分段失败: " + e.getMessage());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 创建文档分段
|
||||
* @param datasetId Dify数据集ID
|
||||
* @param documentId Dify文档ID
|
||||
* @param requestBody 请求体(包含segments数组)
|
||||
* @return ResultDomain<String> 创建结果
|
||||
* @author AI Assistant
|
||||
* @since 2025-11-07
|
||||
*/
|
||||
@PostMapping("/datasets/{datasetId}/documents/{documentId}/segments")
|
||||
public ResultDomain<String> createSegment(
|
||||
@PathVariable(name = "datasetId") String datasetId,
|
||||
@PathVariable(name = "documentId") String documentId,
|
||||
@RequestBody Map<String, Object> requestBody) {
|
||||
|
||||
log.info("创建文档分段: datasetId={}, documentId={}", datasetId, documentId);
|
||||
|
||||
ResultDomain<String> result = new ResultDomain<>();
|
||||
try {
|
||||
// 调用Dify API(使用默认配置的API Key)
|
||||
String path = "/datasets/" + datasetId + "/documents/" + documentId + "/segments";
|
||||
String response = difyApiClient.post(path, requestBody, null);
|
||||
|
||||
result.success("创建分段成功", response);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("创建分段失败", e);
|
||||
result.fail("创建分段失败: " + e.getMessage());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 删除文档分段
|
||||
* @param datasetId Dify数据集ID
|
||||
* @param documentId Dify文档ID
|
||||
* @param segmentId 分段ID
|
||||
* @return ResultDomain<String> 删除结果
|
||||
* @author AI Assistant
|
||||
* @since 2025-11-07
|
||||
*/
|
||||
@DeleteMapping("/datasets/{datasetId}/documents/{documentId}/segments/{segmentId}")
|
||||
public ResultDomain<String> deleteSegment(
|
||||
@PathVariable(name = "datasetId") String datasetId,
|
||||
@PathVariable(name = "documentId") String documentId,
|
||||
@PathVariable(name = "segmentId") String segmentId) {
|
||||
|
||||
log.info("删除文档分段: datasetId={}, documentId={}, segmentId={}",
|
||||
datasetId, documentId, segmentId);
|
||||
|
||||
ResultDomain<String> result = new ResultDomain<>();
|
||||
try {
|
||||
// 调用Dify API(使用默认配置的API Key)
|
||||
String path = "/datasets/" + datasetId + "/documents/" + documentId +
|
||||
"/segments/" + segmentId;
|
||||
String response = difyApiClient.delete(path, null);
|
||||
|
||||
result.success("删除分段成功", response);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("删除分段失败", e);
|
||||
result.fail("删除分段失败: " + e.getMessage());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取分段的子块列表
|
||||
* @param datasetId Dify数据集ID
|
||||
|
||||
Reference in New Issue
Block a user