1. 优化功能

topo_dev
xueqingkun 6 months ago
parent fc549d9fa0
commit 1370d9c18b

@ -17,6 +17,7 @@ services:
- ${WEB_HTTP_PORT}:8097 - ${WEB_HTTP_PORT}:8097
volumes: volumes:
- ./fu-hsi-web/:/data/fu-hsi/web/ - ./fu-hsi-web/:/data/fu-hsi/web/
- ./logs/fu-hsi-web/:/logs
command: command:
--spring.profiles.active=${SPRING_PROFILES_ACTIVE} --spring.profiles.active=${SPRING_PROFILES_ACTIVE}
--ollama.url=${OLLAMA_URL} --ollama.url=${OLLAMA_URL}

@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.domain.CaseEvidence; import com.supervision.police.domain.CaseEvidence;
import com.supervision.police.domain.EvidenceDirectory; import com.supervision.police.domain.EvidenceDirectory;
import com.supervision.police.domain.EvidenceFile;
import com.supervision.police.domain.ModelCase;
import com.supervision.police.dto.*; import com.supervision.police.dto.*;
import com.supervision.police.vo.EvidenceDirectoryReqVO; import com.supervision.police.vo.EvidenceDirectoryReqVO;
import com.supervision.police.vo.VerifyEvidenceReqVO; import com.supervision.police.vo.VerifyEvidenceReqVO;
import java.util.List; import java.util.List;
import java.util.Map;
public interface CaseEvidenceService extends IService<CaseEvidence> { public interface CaseEvidenceService extends IService<CaseEvidence> {
@ -96,6 +99,9 @@ public interface CaseEvidenceService extends IService<CaseEvidence> {
*/ */
void refreshCaseEvidence(); void refreshCaseEvidence();
void doReplaceEvidence(ModelCase modelCase, List<CaseEvidence> allEvidence,
Map<String, String> catagroyMap, List<EvidenceFile> allFile);
/** /**
* *
* @param evidenceDirectory * @param evidenceDirectory

@ -2,6 +2,8 @@ package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
@ -413,7 +415,6 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
} }
@Override @Override
@Transactional(rollbackFor = Exception.class, transactionManager = "dataSourceTransactionManager")
public void refreshCaseEvidence() { public void refreshCaseEvidence() {
log.info("开始初始化案件的证据目录。=========>>>>"); log.info("开始初始化案件的证据目录。=========>>>>");
@ -430,60 +431,82 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
"7", "5",/*视听资料*/ "7", "5",/*视听资料*/
"8", "6"/*勘验笔录*/); "8", "6"/*勘验笔录*/);
TimeInterval interval = DateUtil.timer();
interval.start();
int successCount = 0;
int errorCount = 0;
int index = 0;
for (ModelCase modelCase : list) { for (ModelCase modelCase : list) {
String caseType = modelCase.getCaseType(); interval.start(modelCase.getId());
String id = modelCase.getId(); log.info("开始初始化案件【{}】的目录。", modelCase.getCaseName());
// 开始初始化
initCaseEvidenceDirectory(id, caseType); try {
EvidenceDirectoryDTO rootDirectory = new EvidenceDirectoryDTO(listDirectoryTree(id)); ((CaseEvidenceService) AopContext.currentProxy()).doReplaceEvidence(modelCase, allEvidence, catagroyMap, allFile);
successCount++;
List<CaseEvidence> evidenceList = allEvidence.stream().filter(ce -> StrUtil.equals(ce.getCaseId(), id)).toList(); } catch (Exception e) {
for (CaseEvidence caseEvidence : evidenceList) { log.error("案件{}的目录初始化失败。案件id:{}", modelCase.getCaseName(), modelCase.getId(),e);
String directoryId = caseEvidence.getDirectoryId(); errorCount++;
if (StrUtil.isNotEmpty(directoryId)){ }
log.warn("证据id{},证据名:{}已经存在目录id:{},不进行目录绑定操作",caseEvidence.getId(),caseEvidence.getEvidenceName(),directoryId); index += 1;
continue; log.info("案件【{}】的目录初始化完成。耗时:{}秒,占总体进度:{}%", modelCase.getCaseName(),interval.intervalSecond(modelCase.getId()),index/(list.size()*1.0)*100);
} }
log.info("<<<<=======初始化案件的证据目录完成。案件总条数:{},总耗时:{}秒,成功个数:{},失败个数:{}", list.size(),interval.intervalSecond(),successCount,errorCount);
if (StrUtil.equalsAny(caseEvidence.getEvidenceType(), "3","6")){ }
log.warn("证据id{},证据名:{},证据类型为【{}】,清除无用数据",caseEvidence.getId(),caseEvidence.getEvidenceName(),caseEvidence.getEvidenceType());
super.removeById(caseEvidence.getId());
continue;
}
if (!catagroyMap.containsKey(caseEvidence.getEvidenceType())){
log.warn("证据id{},证据名:{},证据类型为【{}】,没有对应的目录,请检查目录配置",caseEvidence.getId(),caseEvidence.getEvidenceName(),caseEvidence.getEvidenceType());
continue;
}
if (StrUtil.isEmpty(caseEvidence.getEvidenceType())){ @Transactional(rollbackFor = Exception.class, transactionManager = "dataSourceTransactionManager",propagation = Propagation.REQUIRES_NEW)
log.warn("证据id{},证据名:{},证据类型不能为空,默认为书证",caseEvidence.getId(),caseEvidence.getEvidenceName()); public void doReplaceEvidence(ModelCase modelCase, List<CaseEvidence> allEvidence, Map<String, String> catagroyMap, List<EvidenceFile> allFile) {
caseEvidence.setEvidenceType("1"); String caseType = modelCase.getCaseType();
} String id = modelCase.getId();
EvidenceDirectoryDTO topDirectory = findTopDirectory(rootDirectory, catagroyMap.get(caseEvidence.getEvidenceType())); // 开始初始化
if (null == topDirectory){ initCaseEvidenceDirectory(id, caseType);
log.warn("证据id{},证据名:{},证据类型为【{}】,在根目录下没有对应的目录,请检查目录配置",caseEvidence.getId(),caseEvidence.getEvidenceName(),caseEvidence.getEvidenceType()); EvidenceDirectoryDTO rootDirectory = new EvidenceDirectoryDTO(listDirectoryTree(id));
List<CaseEvidence> evidenceList = allEvidence.stream().filter(ce -> StrUtil.equals(ce.getCaseId(), id)).toList();
log.info("案件{}证据总数:{}", modelCase.getCaseName(), evidenceList.size());
for (CaseEvidence caseEvidence : evidenceList) {
String directoryId = caseEvidence.getDirectoryId();
if (StrUtil.isNotEmpty(directoryId)){
log.warn("证据id{},证据名:{}已经存在目录id:{},不进行目录绑定操作",caseEvidence.getId(),caseEvidence.getEvidenceName(),directoryId);
continue;
}
if (StrUtil.equalsAny(caseEvidence.getEvidenceType(), "3","6")){
log.warn("证据id{},证据名:{},证据类型为【{}】,清除无用数据",caseEvidence.getId(),caseEvidence.getEvidenceName(),caseEvidence.getEvidenceType());
super.removeById(caseEvidence.getId());
continue;
}
if (!catagroyMap.containsKey(caseEvidence.getEvidenceType())){
log.warn("证据id{},证据名:{},证据类型为【{}】,没有对应的目录,请检查目录配置",caseEvidence.getId(),caseEvidence.getEvidenceName(),caseEvidence.getEvidenceType());
continue;
}
if (StrUtil.isEmpty(caseEvidence.getEvidenceType())){
log.warn("证据id{},证据名:{},证据类型不能为空,默认为书证",caseEvidence.getId(),caseEvidence.getEvidenceName());
caseEvidence.setEvidenceType("1");
}
EvidenceDirectoryDTO topDirectory = findTopDirectory(rootDirectory, catagroyMap.get(caseEvidence.getEvidenceType()));
if (null == topDirectory){
log.warn("证据id{},证据名:{},证据类型为【{}】,在根目录下没有对应的目录,请检查目录配置",caseEvidence.getId(),caseEvidence.getEvidenceName(),caseEvidence.getEvidenceType());
continue;
}
caseEvidence.setDirectoryId(topDirectory.getId());
caseEvidence.setProcessStatus(EvidenceConstants.PROCESS_STATUS_SUCCESS);
super.updateById(caseEvidence);
List<EvidenceFile> files = allFile.stream().filter(ef -> StrUtil.equals(ef.getEvidenceId(), caseEvidence.getId())).peek(ef -> ef.setDirectoryId(caseEvidence.getDirectoryId())).toList();
Map<String, MinioFile> minioFileMap = minioService.listMinioFile(files.stream().map(EvidenceFile::getFileId).toList()).stream().collect(Collectors.toMap(MinioFile::getId, Function.identity()));
for (EvidenceFile file : files) {
evidenceFileService.updateById(file);
MinioFile minioFile = minioFileMap.get(file.getFileId());
if (null == minioFile){
log.warn("证据id{},证据名:{}文件id{}不存在minio上传信息", caseEvidence.getId(),caseEvidence.getEvidenceName(),file.getFileId());
continue; continue;
} }
caseEvidence.setDirectoryId(topDirectory.getId()); fileOcrProcessService.multipleTypeOcrProcess(List.of(file.getFileId()),minioFile.getFileType());
caseEvidence.setProcessStatus(EvidenceConstants.PROCESS_STATUS_SUCCESS);
super.updateById(caseEvidence);
List<EvidenceFile> files = allFile.stream().filter(ef -> StrUtil.equals(ef.getEvidenceId(), caseEvidence.getId())).peek(ef -> ef.setDirectoryId(caseEvidence.getDirectoryId())).toList();
Map<String, MinioFile> minioFileMap = minioService.listMinioFile(files.stream().map(EvidenceFile::getFileId).toList()).stream().collect(Collectors.toMap(MinioFile::getId, Function.identity()));
for (EvidenceFile file : files) {
evidenceFileService.updateById(file);
MinioFile minioFile = minioFileMap.get(file.getFileId());
if (null == minioFile){
log.warn("证据id{},证据名:{}文件id{}不存在minio上传信息", caseEvidence.getId(),caseEvidence.getEvidenceName(),file.getFileId());
continue;
}
fileOcrProcessService.multipleTypeOcrProcess(List.of(file.getFileId()),minioFile.getFileType());
}
} }
}
log.info("<<<<=======初始化案件的证据目录完成。案件总条数:{}", list.size());
}
} }
private EvidenceDirectoryDTO findTopDirectory(EvidenceDirectoryDTO rootDirectory, String categoryId) { private EvidenceDirectoryDTO findTopDirectory(EvidenceDirectoryDTO rootDirectory, String categoryId) {

Loading…
Cancel
Save