Commit 366b81d9 authored by R10's avatar R10

AI data audit 修改上传

parent 540e566d
package cn.com.poc.ai_data_audit.entity;
/**
* @Author:Roger Wu
* @name:AIDataAuditMatchFileNameResponse
* @Date:2025-10-30 12:08
*/
public class AIDataAuditMatchFileNameResponse {
String templateCode;
String templateName;
String uploadFileName;
public String getTemplateCode() {
return templateCode;
}
public void setTemplateCode(String templateCode) {
this.templateCode = templateCode;
}
public String getTemplateName() {
return templateName;
}
public void setTemplateName(String templateName) {
this.templateName = templateName;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
}
......@@ -7,14 +7,12 @@ import cn.com.yict.framemax.core.service.BaseService;
import cn.com.yict.framemax.data.model.PagingInfo;
import java.util.List;
import java.util.concurrent.ExecutionException;
public interface DataAuditService extends BaseService {
public List fileUploadAndProcessing(List<FileUploadDto> fileUploadDtoList);
public List matchOriginalTemplateAndUploadFile();
public List fileUploadAndProcessing(List<FileUploadDto> fileUploadDtoList) throws ExecutionException, InterruptedException;
}
\ No newline at end of file
package cn.com.poc.ai_data_audit.service.impl;
import cn.com.poc.agent_application.entity.BizAgentApplicationDialoguesRecordEntity;
import cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity;
import cn.com.poc.agent_application.service.BizAgentApplicationGcConfigService;
import cn.com.poc.ai_data_audit.constants.DataAuditConstants;
import cn.com.poc.ai_data_audit.convert.BizAiDataAuditTaskConvert;
import cn.com.poc.ai_data_audit.dto.FileUploadConfirmDto;
import cn.com.poc.ai_data_audit.dto.FileUploadDto;
import cn.com.poc.ai_data_audit.dto.FileUploadReturnDto;
import cn.com.poc.ai_data_audit.entity.BizAiDataAuditFileEntity;
import cn.com.poc.ai_data_audit.entity.BizAiDataAuditTaskEntity;
import cn.com.poc.ai_data_audit.model.BizAiDataAuditTaskModel;
import cn.com.poc.ai_data_audit.repository.BizAiDataAuditTaskRepository;
import cn.com.poc.ai_data_audit.service.BizAiDataAuditFileService;
import cn.com.poc.ai_data_audit.service.BizAiDataAuditTaskService;
import cn.com.poc.ai_data_audit.entity.AIDataAuditMatchFileNameResponse;
import cn.com.poc.ai_data_audit.service.DataAuditService;
import cn.com.poc.common.constant.CommonConstant;
import cn.com.poc.common.service.BosConfigService;
import cn.com.poc.common.utils.BlContext;
import cn.com.poc.common.utils.DocumentLoad;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.UUIDTool;
import cn.com.poc.law.entity.legislativeDocument.LegislativeDocumentResult;
import cn.com.poc.law.entity.motorVehicleDrivingComplaint.Plaintiff;
import cn.com.poc.thirdparty.resource.demand.ai.aggregate.MinerUOcrService;
import cn.com.poc.thirdparty.resource.demand.ai.constants.LLMRoleEnum;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.orc.minerU.MinerUOcrResponse;
import cn.com.poc.thirdparty.resource.demand.ai.entity.orc.minerU.MinerUOcrResult;
import cn.com.poc.thirdparty.service.LLMService;
import cn.com.yict.framemax.core.exception.BusinessException;
import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.core.service.impl.BaseServiceImpl;
import cn.com.yict.framemax.data.model.PagingInfo;
import cn.hutool.core.util.ObjectUtil;
import org.apache.commons.collections4.CollectionUtils;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@Service
public class DataAuditTaskServiceImpl extends BaseServiceImpl
public class DataAuditServiceImpl extends BaseServiceImpl
implements DataAuditService {
@Resource
private MinerUOcrService minerUOcrService;
@Resource
private LLMService llmService;
@Resource
private BizAgentApplicationGcConfigService bizAgentApplicationGcConfigService;
......@@ -69,7 +45,7 @@ public class DataAuditTaskServiceImpl extends BaseServiceImpl
final private ThreadPoolExecutor executor = new ThreadPoolExecutor(16, 64, 10, TimeUnit.SECONDS, new LinkedBlockingDeque<>(100));
@Override
public List fileUploadAndProcessing(List<FileUploadDto> fileUploadDtoList) {
public List fileUploadAndProcessing(List<FileUploadDto> fileUploadDtoList) throws ExecutionException, InterruptedException {
fileUploadDtoList.stream().collect(Collectors.groupingBy(item->item.getFileName()));
// 获取单个文件的文件名
......@@ -77,28 +53,30 @@ public class DataAuditTaskServiceImpl extends BaseServiceImpl
.map(item -> item.getFileName())
.collect(Collectors.toList());
// CompletableFuture<Plaintiff> extractFileFuture = CompletableFuture.supplyAsync(() -> {
// try {
// return extractFile(input);
// } catch (Exception e) {
// throw new RuntimeException(e);
// }
// }, executor).exceptionally(ex -> {
// return new Plaintiff();
// });
//
//
// String url = fileUploadDtoList.get(0).getFileUrl();
//
// CompletableFuture<MinerUOcrResult> ocrFuture = CompletableFuture.supplyAsync(() -> {
// try {
// return ocrPrase(url);
// } catch (Exception e) {
// throw new RuntimeException(e);
// }
// }, executor).exceptionally(ex -> {
// return new MinerUOcrResult();
// });
CompletableFuture<List<AIDataAuditMatchFileNameResponse>> extractFileFuture = CompletableFuture.supplyAsync(() -> {
try {
return matchOriginalTemplateAndUploadFile(fileNames);
} catch (Exception e) {
throw new RuntimeException(e);
}
}, executor).exceptionally(ex -> {
return new ArrayList<AIDataAuditMatchFileNameResponse>();
});
CompletableFuture<MinerUOcrResult> ocrFuture = CompletableFuture.supplyAsync(() -> {
try {
return ocrPrase(new File("1"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}, executor).exceptionally(ex -> {
return new MinerUOcrResult();
});
// 等待所有任务完成并获取结果
CompletableFuture.allOf(extractFileFuture, ocrFuture).join();
List<AIDataAuditMatchFileNameResponse> aiDataAuditMatchFileNameResponses = extractFileFuture.get();
MinerUOcrResult minerUOcrResult = ocrFuture.get();
Map<String, String> fileNameMap = new HashMap<>();
......@@ -122,57 +100,62 @@ public class DataAuditTaskServiceImpl extends BaseServiceImpl
fileNameMap.put("DOC-18", "Permit to Dig");
fileNameMap.put("DOC-19", "Temporary Traffic Management Plan");
//执行文件名匹配
//执行类型匹配
List<AIDataAuditMatchFileNameResponse> otherList = new ArrayList<>();
List<FileUploadReturnDto> fileUploadReturnDtoList = new ArrayList<>();
//执行类型匹配
for (AIDataAuditMatchFileNameResponse aiDataAuditMatchFileNameResponse : aiDataAuditMatchFileNameResponses) {
if(StringUtils.isBlank(aiDataAuditMatchFileNameResponse.getTemplateName())){
otherList.add(aiDataAuditMatchFileNameResponse);
continue;
}
FileUploadReturnDto fileUploadReturnDto = new FileUploadReturnDto();
fileUploadReturnDto.setOrginalTemplateName("Work Permit Application Details");
fileUploadReturnDto.setOrginalTemplateCode("doc1");
fileUploadReturnDto.setUploadFileName(fileUploadDtoList.get(0).getFileName());
fileUploadReturnDto.setOrginalTemplateName(aiDataAuditMatchFileNameResponse.getTemplateName());
fileUploadReturnDto.setOrginalTemplateCode(aiDataAuditMatchFileNameResponse.getTemplateCode());
fileUploadReturnDto.setUploadFileName(aiDataAuditMatchFileNameResponse.getUploadFileName());
fileUploadReturnDtoList.add(fileUploadReturnDto);
}
FileUploadReturnDto fileUploadReturnDto1 = new FileUploadReturnDto();
fileUploadReturnDto1.setOrginalTemplateName("Work Method Statement");
fileUploadReturnDto1.setOrginalTemplateCode("doc3");
fileUploadReturnDto1.setUploadFileName(fileUploadDtoList.get(1).getFileName());
fileUploadReturnDtoList.add(fileUploadReturnDto1);
for (AIDataAuditMatchFileNameResponse other: otherList) {
FileUploadReturnDto fileUploadReturnDto = new FileUploadReturnDto();
fileUploadReturnDto.setOrginalTemplateName("ohter");
fileUploadReturnDto.setOrginalTemplateCode("ohter");
fileUploadReturnDto.setUploadFileName(other.getUploadFileName());
fileUploadReturnDtoList.add(fileUploadReturnDto);
}
return fileUploadReturnDtoList;
}
@Override
public List matchOriginalTemplateAndUploadFile() {
return new ArrayList();
// // 获取对话提示词
// String promptCode = "AIDataAuditMatchFileName";
// BizAgentApplicationGcConfigEntity documentDialoguePrompt = bizAgentApplicationGcConfigService.getByConfigCode(promptCode);
// if (documentDialoguePrompt == null || StringUtils.isBlank(documentDialoguePrompt.getConfigSystem())) {
// throw new BusinessException("获取对话提示词失败");
// }
//
// String prompt = documentDialoguePrompt.getConfigSystem().replace("${input}", "input");
//
//
// //组装请求参数
// List<Message> messages = buildMessages(input, null, prompt);
// LargeModelResponse largeModelResponse = new LargeModelResponse();
// largeModelResponse.setModel("deepseek-v3");//获取模型);
// largeModelResponse.setMessages(messages.toArray(new Message[0]));
// largeModelResponse.setStream(false);
// LargeModelDemandResult chat = llmService.chat(largeModelResponse);
// Plaintiff plaintiff = new Plaintiff();
// if (ObjectUtil.isEmpty(chat) || !chat.getCode().equals("0")) {
// throw new BusinessException("获取失败");
// }
// String message = chat.getMessage().replaceAll("```json", StringUtils.EMPTY).replaceAll("```", StringUtils.EMPTY);
// plaintiff = JsonUtils.deSerialize(message, Plaintiff.class);
// if (ObjectUtil.isEmpty(plaintiff)) {
// throw new BusinessException("提取失败");
// }
// return plaintiff;
public List<AIDataAuditMatchFileNameResponse> matchOriginalTemplateAndUploadFile(List<String> fileNames) throws Exception {
// 获取对话提示词
String promptCode = "AIDataAuditMatchFileName";
BizAgentApplicationGcConfigEntity documentDialoguePrompt = bizAgentApplicationGcConfigService.getByConfigCode(promptCode);
if (documentDialoguePrompt == null || StringUtils.isBlank(documentDialoguePrompt.getConfigSystem())) {
throw new BusinessException("获取对话提示词失败");
}
String fileNamesString = String.join(",", fileNames);
String prompt = documentDialoguePrompt.getConfigSystem().replace("${uploadFileName}", fileNamesString);
//组装请求参数
List<Message> messages = buildMessages("", null, prompt);
LargeModelResponse largeModelResponse = new LargeModelResponse();
largeModelResponse.setModel("deepseek-v3");//获取模型);
largeModelResponse.setTopP(0.1f);//获取模型);
largeModelResponse.setTemperature(0.1f);//获取模型);
largeModelResponse.setMessages(messages.toArray(new Message[0]));
largeModelResponse.setStream(false);
LargeModelDemandResult chat = llmService.chat(largeModelResponse);
Plaintiff plaintiff = new Plaintiff();
if (ObjectUtil.isEmpty(chat) || !chat.getCode().equals("0")) {
throw new BusinessException("获取失败");
}
String message = chat.getMessage().replaceAll("```json", StringUtils.EMPTY).replaceAll("```", StringUtils.EMPTY);
List<AIDataAuditMatchFileNameResponse> aIDataAuditMatchFileNameResponses= JSON.parseArray(message, AIDataAuditMatchFileNameResponse.class);
if (ObjectUtil.isEmpty(plaintiff)) {
throw new BusinessException("提取失败");
}
return aIDataAuditMatchFileNameResponses;
}
private List<Message> buildMessages(String input, String fileUrl, String prompt) throws Exception {
......@@ -209,7 +192,7 @@ public class DataAuditTaskServiceImpl extends BaseServiceImpl
// 用户输入
Message message = new Message();
message.setContent("请根据要求提取");
message.setContent("");
message.setRole(LLMRoleEnum.USER.getRole());
messages.add(message);
// logger.info("--------- Build Messages dialogsId:{},messages:{}--------------", dialogsId, messages);
......@@ -217,7 +200,8 @@ public class DataAuditTaskServiceImpl extends BaseServiceImpl
}
public MinerUOcrResult ocrPrase(File file) {
return minerUOcrService.fileParse(file);
// return minerUOcrService.fileParse(file);
return new MinerUOcrResult();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment