diff --git a/src/main/java/com/supervision/police/service/CaseEvidenceService.java b/src/main/java/com/supervision/police/service/CaseEvidenceService.java index 55bf025..2b0eae6 100644 --- a/src/main/java/com/supervision/police/service/CaseEvidenceService.java +++ b/src/main/java/com/supervision/police/service/CaseEvidenceService.java @@ -145,8 +145,9 @@ public interface CaseEvidenceService extends IService<CaseEvidence> { /** * 预处理ocr任务 note:这个方法用来提前处理 word 、 pfd 类型的数据。是一个新的事务不会与前面的事务保持原子性 + * 异步调用 * @param evidenceFileList 文件信息列表 */ - void preSyncSubmitOCR(List<EvidenceFileDTO> evidenceFileList); + void preAsyncSubmitOCR(List<EvidenceFileDTO> evidenceFileList); } diff --git a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java index 82c2e89..676c80a 100644 --- a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java @@ -18,10 +18,13 @@ import com.supervision.police.mapper.CaseEvidenceMapper; import com.supervision.police.service.*; import com.supervision.police.vo.EvidenceDirectoryReqVO; import com.supervision.police.vo.VerifyEvidenceReqVO; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.framework.AopContext; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -48,6 +51,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas private final ModelCaseService modelCaseService; + @Lazy @Autowired private OCREvidenceService ocrEvidenceService; @Autowired @@ -242,7 +246,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas } List<EvidenceFile> evidenceFiles = evidenceFileService.lambdaQuery().eq(EvidenceFile::getEvidenceId, evidenceId).list(); if (evidenceFiles.isEmpty()) { - log.error("证据文件不存在"); + log.error("证据id:【{}】不存在证据文件", evidenceId); return; } try { @@ -294,7 +298,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas caseEvidence.setProcessStatus(EvidenceConstants.PROCESS_STATUS_SUCCESS); updateById(caseEvidence); } catch (Exception e) { - log.error("证据解析失败。更新证据处理状态为【处理失败】。", e); + log.error("证据:【{}】解析失败。更新证据处理状态为【处理失败】。",evidenceId, e); caseEvidence.setProcessStatus(EvidenceConstants.PROCESS_STATUS_FAILED); updateById(caseEvidence); } finally { @@ -437,9 +441,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas String batchId = ((CaseEvidenceService) AopContext.currentProxy()).updateCaseEvidence4NewTransaction(operationalEvidenceList); - List<EvidenceFileDTO> evidenceFileDTOList = operationalEvidenceList.stream() + List<EvidenceFileDTO> evidenceFileDTOList = operationalEvidenceList.stream().filter( + evidenceDetail-> !evidenceDetail.getFileList().stream().allMatch(file -> StrUtil.equals(file.getUpdateStatus(), "1")) + ) .flatMap(evidenceDetailDTO -> evidenceDetailDTO.getFileList().stream().filter(file -> StrUtil.equals(file.getUpdateStatus(), "1"))).toList(); - ((CaseEvidenceService) AopContext.currentProxy()).preSyncSubmitOCR(evidenceFileDTOList); + ((CaseEvidenceService) AopContext.currentProxy()).preAsyncSubmitOCR(evidenceFileDTOList); for (CaseEvidenceDetailDTO caseEvidenceDetailDTO : operationalEvidenceList) { if (StrUtil.equalsAny(caseEvidenceDetailDTO.getUpdateStatus(), "-1", "1")) { @@ -745,8 +751,9 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas } @Override + @Async @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW, transactionManager = "dataSourceTransactionManager") - public void preSyncSubmitOCR(List<EvidenceFileDTO> evidenceFileList) { + public void preAsyncSubmitOCR(List<EvidenceFileDTO> evidenceFileList) { for (EvidenceFileDTO evidenceFileDTO : evidenceFileList) { if (StrUtil.equalsAny(evidenceFileDTO.getFileType(), "doc", "docx")) { diff --git a/src/main/java/com/supervision/police/service/impl/OCREvidenceServiceImpl.java b/src/main/java/com/supervision/police/service/impl/OCREvidenceServiceImpl.java index 4d3dc6d..7074fe8 100644 --- a/src/main/java/com/supervision/police/service/impl/OCREvidenceServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/OCREvidenceServiceImpl.java @@ -19,6 +19,7 @@ import com.supervision.police.service.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.framework.AopContext; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;