From c16db9a1c4e4667812ef649b2a16fadea076cf51 Mon Sep 17 00:00:00 2001 From: "ran.shang" <> Date: Mon, 12 Jan 2026 14:10:55 +0800 Subject: [PATCH] fix --- .../sfile/controller/FileRiskController.java | 8 +++ .../sfile/service/FileRiskService.java | 9 +++ .../service/impl/FileRiskServiceImpl.java | 67 ++++++++++++++----- 3 files changed, 69 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/senmesh/sfile/controller/FileRiskController.java b/src/main/java/com/senmesh/sfile/controller/FileRiskController.java index cb7c296..ca8aa5a 100644 --- a/src/main/java/com/senmesh/sfile/controller/FileRiskController.java +++ b/src/main/java/com/senmesh/sfile/controller/FileRiskController.java @@ -71,6 +71,14 @@ public class FileRiskController { return AlitaResult.success(fileRiskDTO); } + @GetMapping("/file_risk/dify_risk_rule") + @ApiOperation("获取Dify风险规则") + public AlitaResult getDifyRiskRule( + @ApiParam(value = "文件编码", required = true) @RequestParam String fileCode) { + String answer = fileRiskService.getDifyRiskRule(fileCode); + return AlitaResult.success(answer); + } + @GetMapping("/file_risk/list") @ApiOperation("列表查询文件风险") public AlitaResult> list(FileRiskQueryDTO queryDTO) { diff --git a/src/main/java/com/senmesh/sfile/service/FileRiskService.java b/src/main/java/com/senmesh/sfile/service/FileRiskService.java index 032835e..a2c63c9 100644 --- a/src/main/java/com/senmesh/sfile/service/FileRiskService.java +++ b/src/main/java/com/senmesh/sfile/service/FileRiskService.java @@ -65,6 +65,15 @@ public interface FileRiskService { */ FileRiskDTO scanFileRisk(String fileCode); + /** + * 获取 Dify 风险规则 + * 上传文件到 Dify 并调用规则生成 API,返回生成的风险规则 + * + * @param fileCode 文件编码 + * @return Dify 返回的 answer + */ + String getDifyRiskRule(String fileCode); + /** * 列表查询文件风险 * diff --git a/src/main/java/com/senmesh/sfile/service/impl/FileRiskServiceImpl.java b/src/main/java/com/senmesh/sfile/service/impl/FileRiskServiceImpl.java index 5421dd7..c25b46c 100644 --- a/src/main/java/com/senmesh/sfile/service/impl/FileRiskServiceImpl.java +++ b/src/main/java/com/senmesh/sfile/service/impl/FileRiskServiceImpl.java @@ -163,14 +163,22 @@ public class FileRiskServiceImpl implements FileRiskService { // 2. 如果 difyFileJson 为空,则上传文件 DifyFileUploadResponse uploadResponse = null; if (StringUtils.isBlank(fileRiskDTO.getDifyFileJson())) { - uploadResponse = uploadFileToDify(fileRiskDTO, fileCode, riskScanApiKey); + uploadResponse = uploadFileToDify(fileCode, riskScanApiKey); + String difyFileJson = JsonUtils.toJsonString(uploadResponse); + // 3. 更新 difyFileJson 字段 + FileRisk updateFileRisk = FileRisk.builder() + .id(fileRiskDTO.getId()) + .difyFileJson(difyFileJson) + .build(); + fileRiskMapper.updateEntitySelective(updateFileRisk); + // 更新 DTO + fileRiskDTO.setDifyFileJson(difyFileJson); } else { // 从 difyFileJson 中解析 uploadFileId uploadResponse = JsonUtils.toObject(fileRiskDTO.getDifyFileJson(), DifyFileUploadResponse.class); } // 3. 如果 riskJson 为空,则调用 Dify Chat 分析 - Map inputs = new HashMap<>(); inputs.put("gz", this.getRiskRule(OrgConstants.PLATFORM_ORG_ID)); inputs.put("srwj", @@ -216,6 +224,47 @@ public class FileRiskServiceImpl implements FileRiskService { return fileRiskDTO; } + + + + /** + * 获取 Dify 风险规则 + * 上传文件到 Dify 并调用规则生成 API,返回生成的风险规则 + * + * @param fileCode 文件编码 + * @return Dify 返回的 answer + */ + public String getDifyRiskRule(String fileCode) { + // 1. 上传文件到 Dify + DifyFileUploadResponse uploadResponse = uploadFileToDify(fileCode, riskRuleApiKey); + String uploadFileId = uploadResponse.getId(); + Assert.notBlank(uploadFileId, "上传文件到 Dify 失败,fileCode: " + fileCode); + + // 2. 调用 Dify Chat API(规则生成) + Map inputs = new HashMap<>(); + inputs.put("file", + Collections.singletonList( + DifyChatRequest.DifyFileInfo.builder() + .type("document") + .uploadFileId(uploadResponse.getId()) + .build() + )); + DifyChatRequest chatRequest = DifyChatRequest.builder() + .query("请分析这个文件") + .user(DIFY_USER_ID) + .inputs(inputs) + .files(Lists.emptyList()) + .build(); + + + AlitaResult chatResult = DifyClient.chatMessages(riskRuleApiKey, chatRequest); + Assert.isTrue(chatResult.getSuccess(), + "调用 Dify Chat 失败,fileCode: " + fileCode + ", error: " + chatResult.getMsg()); + + DifyChatResponse chatResponse = chatResult.getData(); + return chatResponse.getAnswer(); + } + @Override public List list(FileRiskQueryDTO queryDTO) { queryDTO.disablePage(); @@ -236,12 +285,11 @@ public class FileRiskServiceImpl implements FileRiskService { /** * 上传文件到 Dify * - * @param fileRiskDTO 文件风险DTO * @param fileCode 文件编码 * @param apiKey API密钥 * @return DifyFileUploadResponse */ - private DifyFileUploadResponse uploadFileToDify(FileRiskDTO fileRiskDTO, String fileCode, String apiKey) { + private DifyFileUploadResponse uploadFileToDify(String fileCode, String apiKey) { // 1. 获取文件流 FileRecord fileRecord = fileRecordService.find(FileRecord.builder().fileCode(fileCode).build()); try(InputStream fileStream = FileStorageUtils.get().download(fileRecord.getFilePath())){ @@ -259,17 +307,6 @@ public class FileRiskServiceImpl implements FileRiskService { "上传文件到 Dify 失败,fileCode: " + fileCode + ", error: " + uploadResult.getMsg()); DifyFileUploadResponse uploadResponse = uploadResult.getData(); - String difyFileJson = JsonUtils.toJsonString(uploadResponse); - // 3. 更新 difyFileJson 字段 - FileRisk updateFileRisk = FileRisk.builder() - .id(fileRiskDTO.getId()) - .difyFileJson(difyFileJson) - .build(); - fileRiskMapper.updateEntitySelective(updateFileRisk); - - // 更新 DTO - fileRiskDTO.setDifyFileJson(difyFileJson); - return uploadResponse; } catch (Exception e) { throw new BusinessException(e);