This commit is contained in:
ran.shang
2026-01-12 14:10:55 +08:00
parent 7ab02fe5a1
commit c16db9a1c4
3 changed files with 69 additions and 15 deletions

View File

@@ -71,6 +71,14 @@ public class FileRiskController {
return AlitaResult.success(fileRiskDTO);
}
@GetMapping("/file_risk/dify_risk_rule")
@ApiOperation("获取Dify风险规则")
public AlitaResult<String> 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<FileRiskDTO>> list(FileRiskQueryDTO queryDTO) {

View File

@@ -65,6 +65,15 @@ public interface FileRiskService {
*/
FileRiskDTO scanFileRisk(String fileCode);
/**
* 获取 Dify 风险规则
* 上传文件到 Dify 并调用规则生成 API,返回生成的风险规则
*
* @param fileCode 文件编码
* @return Dify 返回的 answer
*/
String getDifyRiskRule(String fileCode);
/**
* 列表查询文件风险
*

View File

@@ -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<String, Object> 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<String, Object> 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<DifyChatResponse> 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<FileRiskDTO> 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);