From 3dae2a47f3169c7a27a5fbdc8f63a1813f1320d3 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Wed, 11 Sep 2024 18:06:36 +0800 Subject: [PATCH] =?UTF-8?q?1.=20ocr=20=E5=8A=9F=E8=83=BD=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=81=94=E8=B0=83=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CaseEvidenceController.java | 5 --- .../controller/OCREvidenceController.java | 8 +++++ .../police/dto/CaseEvidenceDTO.java | 5 +++ .../police/dto/CaseEvidenceDetailDTO.java | 32 +++++++++++++++++++ .../police/dto/EvidenceFileDTO.java | 6 ++++ .../police/dto/EvidenceFileOCRDTO.java | 11 ++++++- .../police/dto/OCREvidencePropertyDTO.java | 2 ++ .../police/service/CaseEvidenceService.java | 5 --- .../service/FileEvidencePropertyService.java | 2 ++ .../police/service/OCREvidenceService.java | 8 +++++ .../service/impl/CaseEvidenceServiceImpl.java | 27 +++++++++++++--- .../service/impl/OCREvidenceServiceImpl.java | 30 +++++++++++------ .../service/impl/OCRRecordServiceImpl.java | 3 ++ .../resources/mapper/CaseEvidenceMapper.xml | 9 ++++-- .../mapper/FileEvidencePropertyMapper.xml | 4 ++- 15 files changed, 129 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java index e86c213..6c96667 100644 --- a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java +++ b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java @@ -50,11 +50,6 @@ public class CaseEvidenceController { } - @GetMapping("/queryEvidenceDetail") - public R queryEvidenceDetail(@RequestParam @Parameter(name = "evidenceId",description = "证据id") String evidenceId) { - CaseEvidenceDetailDTO caseEvidenceDetailDTO = caseEvidenceService.queryEvidenceDetail(evidenceId); - return R.ok(caseEvidenceDetailDTO); - } @Operation(summary = "分页查询案件证据信息列表") @GetMapping("/pageListEvidence") public R> pageListEvidence(@RequestParam @Parameter(name = "caseId",description = "案件id") String caseId, diff --git a/src/main/java/com/supervision/police/controller/OCREvidenceController.java b/src/main/java/com/supervision/police/controller/OCREvidenceController.java index 2a1229d..06f00a4 100644 --- a/src/main/java/com/supervision/police/controller/OCREvidenceController.java +++ b/src/main/java/com/supervision/police/controller/OCREvidenceController.java @@ -1,9 +1,11 @@ package com.supervision.police.controller; import com.supervision.common.domain.R; +import com.supervision.police.dto.CaseEvidenceDetailDTO; import com.supervision.police.dto.EvidenceFileOCRDTO; import com.supervision.police.service.OCREvidenceService; import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -50,4 +52,10 @@ public class OCREvidenceController { List evidenceIds = ocrEvidenceService.batchSaveEvidence(evidenceFileOCRDTOS);; return R.ok(evidenceIds); } + + @GetMapping("/info") + public R queryEvidenceInfo(@RequestParam @Parameter(name = "evidenceId",description = "证据id") String evidenceId) { + CaseEvidenceDetailDTO caseEvidenceDetailDTO = ocrEvidenceService.queryEvidenceDetail(evidenceId); + return R.ok(caseEvidenceDetailDTO); + } } diff --git a/src/main/java/com/supervision/police/dto/CaseEvidenceDTO.java b/src/main/java/com/supervision/police/dto/CaseEvidenceDTO.java index 954a2e8..19388aa 100644 --- a/src/main/java/com/supervision/police/dto/CaseEvidenceDTO.java +++ b/src/main/java/com/supervision/police/dto/CaseEvidenceDTO.java @@ -4,7 +4,9 @@ import com.supervision.police.domain.CaseEvidence; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 案件证据信息 @@ -36,6 +38,9 @@ public class CaseEvidenceDTO { @Schema(description = "文件id集合") private List fileIdList; + @Schema(description = "案件证据属性") + private Map property= new HashMap<>(); + public CaseEvidence toCaseEvidence(){ CaseEvidence caseEvidence = new CaseEvidence(); diff --git a/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java b/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java index 04a1a1b..3f7f344 100644 --- a/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java +++ b/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java @@ -1,12 +1,16 @@ package com.supervision.police.dto; +import cn.hutool.core.collection.CollUtil; import com.fasterxml.jackson.annotation.JsonFormat; import com.supervision.police.domain.CaseEvidence; +import com.supervision.police.domain.FileEvidenceProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; @Data @@ -21,6 +25,9 @@ public class CaseEvidenceDetailDTO { @Schema(description = "案件证据类型") private String evidenceType; + @Schema(description = "案件证据文件类型 1:文档 2:图片") + private String contentType; + @Schema(description = "案件证据类型描述") private String evidenceTypeDesc; @@ -40,6 +47,9 @@ public class CaseEvidenceDetailDTO { @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private LocalDateTime updateTime; + @Schema(description = "案件证据属性") + private Map property= new HashMap<>(); + public CaseEvidenceDetailDTO() { } @@ -55,4 +65,26 @@ public class CaseEvidenceDetailDTO { } this.fileList = fileList; } + + public void setContentTypeValue(List recordFileDTOS){ + if (CollUtil.isEmpty(this.fileList)){ + this.contentType = "1"; + return; + } + for (EvidenceFileDTO evidenceFileDTO : fileList) { + for (RecordFileDTO recordFileDTO : recordFileDTOS) { + if (recordFileDTO.getFileId().equals(evidenceFileDTO.getFileId())){ + this.contentType = "2"; + return; + } + } + } + this.contentType = "1"; + } + + public void setPropertyValue(List fileEvidenceProperties){ + for (FileEvidenceProperty fileEvidenceProperty : fileEvidenceProperties) { + property.put(fileEvidenceProperty.getPropertyName(),fileEvidenceProperty.getPropertyValue()); + } + } } diff --git a/src/main/java/com/supervision/police/dto/EvidenceFileDTO.java b/src/main/java/com/supervision/police/dto/EvidenceFileDTO.java index da10bb4..9694b65 100644 --- a/src/main/java/com/supervision/police/dto/EvidenceFileDTO.java +++ b/src/main/java/com/supervision/police/dto/EvidenceFileDTO.java @@ -18,4 +18,10 @@ public class EvidenceFileDTO { @Schema(description = "文件类型") private String fileType; + @Schema(description = "文件预览图id") + private String drawImgId; + + @Schema(description = "文件识别内容") + private String ocrText; + } diff --git a/src/main/java/com/supervision/police/dto/EvidenceFileOCRDTO.java b/src/main/java/com/supervision/police/dto/EvidenceFileOCRDTO.java index 572e64b..296fd4f 100644 --- a/src/main/java/com/supervision/police/dto/EvidenceFileOCRDTO.java +++ b/src/main/java/com/supervision/police/dto/EvidenceFileOCRDTO.java @@ -1,6 +1,8 @@ package com.supervision.police.dto; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.supervision.constant.EvidencePropertyName; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.HashMap; @@ -49,7 +51,8 @@ public class EvidenceFileOCRDTO { this.fileId = first.getFileId(); this.drawImgId = first.getDrawImgId(); this.ocrStatus = null == first.getOcrStatus() ? -1 : first.getOcrStatus(); - properties.forEach(propertyDTO -> + this.ocrText = first.getOcrText(); + properties.stream().filter(propertyDTO -> StrUtil.isNotEmpty(propertyDTO.getPropertyName())).forEach(propertyDTO -> this.property.put(propertyDTO.getPropertyName(),propertyDTO.getPropertyValue())); } @@ -62,4 +65,10 @@ public class EvidenceFileOCRDTO { caseEvidenceDTO.setFileIdList(CollUtil.newArrayList(this.fileId)); return caseEvidenceDTO; } + + public void setEvidenceNameValue(){ + if (CollUtil.isNotEmpty(this.property) && property.containsKey(EvidencePropertyName.TITLE.getName())){ + this.evidenceName = property.get(EvidencePropertyName.TITLE.getName()); + } + } } diff --git a/src/main/java/com/supervision/police/dto/OCREvidencePropertyDTO.java b/src/main/java/com/supervision/police/dto/OCREvidencePropertyDTO.java index d9c49fa..0132ab8 100644 --- a/src/main/java/com/supervision/police/dto/OCREvidencePropertyDTO.java +++ b/src/main/java/com/supervision/police/dto/OCREvidencePropertyDTO.java @@ -12,6 +12,8 @@ public class OCREvidencePropertyDTO { @Schema(description = "文件id") private String fileId; + private String ocrText; + @Schema(description = "属性名称") private String propertyName; diff --git a/src/main/java/com/supervision/police/service/CaseEvidenceService.java b/src/main/java/com/supervision/police/service/CaseEvidenceService.java index b738a49..1d23ef5 100644 --- a/src/main/java/com/supervision/police/service/CaseEvidenceService.java +++ b/src/main/java/com/supervision/police/service/CaseEvidenceService.java @@ -48,10 +48,5 @@ public interface CaseEvidenceService extends IService { */ IPage pageListEvidence(String caseId,String evidenceName, Integer pageNum, Integer pageSize); - /** - * 查询案件证据信息详情 - * @param evidenceId 证据id - * @return 证据信息 - */ CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId); } diff --git a/src/main/java/com/supervision/police/service/FileEvidencePropertyService.java b/src/main/java/com/supervision/police/service/FileEvidencePropertyService.java index 2e4cabf..67b842e 100644 --- a/src/main/java/com/supervision/police/service/FileEvidencePropertyService.java +++ b/src/main/java/com/supervision/police/service/FileEvidencePropertyService.java @@ -16,4 +16,6 @@ public interface FileEvidencePropertyService extends IService listPrewByFileIdList(List fileIdList); void removeByEvidenceAndFileId(String evidenceId, String fileId); + + } diff --git a/src/main/java/com/supervision/police/service/OCREvidenceService.java b/src/main/java/com/supervision/police/service/OCREvidenceService.java index 451bfb6..9f2cf5c 100644 --- a/src/main/java/com/supervision/police/service/OCREvidenceService.java +++ b/src/main/java/com/supervision/police/service/OCREvidenceService.java @@ -1,6 +1,7 @@ package com.supervision.police.service; import com.supervision.police.domain.FileEvidenceProperty; +import com.supervision.police.dto.CaseEvidenceDetailDTO; import com.supervision.police.dto.EvidenceFileOCRDTO; import java.util.List; @@ -38,4 +39,11 @@ public interface OCREvidenceService { void doRetrieveTitle(List fileIdList); + /** + * 查询案件证据信息详情 + * @param evidenceId 证据id + * @return 证据信息 + */ + CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId); + } 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 c3c3349..6f3865f 100644 --- a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java @@ -1,29 +1,31 @@ package com.supervision.police.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.supervision.police.service.EvidenceFileService; +import com.supervision.police.domain.FileEvidenceProperty; +import com.supervision.police.dto.RecordFileDTO; +import com.supervision.police.service.*; import com.supervision.police.domain.CaseEvidence; import com.supervision.police.domain.ComDictionary; import com.supervision.police.domain.EvidenceFile; import com.supervision.police.dto.CaseEvidenceDetailDTO; import com.supervision.police.dto.EvidenceFileDTO; import com.supervision.police.mapper.CaseEvidenceMapper; -import com.supervision.police.service.CaseEvidenceService; import com.supervision.police.dto.CaseEvidenceDTO; -import com.supervision.police.service.CaseStatusManageService; -import com.supervision.police.service.ComDictionaryService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; +import java.util.function.Function; import java.util.stream.Collectors; @Slf4j @@ -37,6 +39,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl fileInfoList = evidenceFileService.listFileInfo(evidenceIds); Map> evidenceFileMap = fileInfoList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getEvidenceId)); + + List recordFileDTOS = fileOcrProcessService.queryFileList(fileInfoList.stream().map(EvidenceFileDTO::getFileId).toList()); + // 转换分页结果 //查询字典 List evidenceTypeDic = comDictionaryService.lambdaQuery().eq(ComDictionary::getType, "evidence_type").list(); @@ -137,13 +153,14 @@ public class CaseEvidenceServiceImpl extends ServiceImpl { - if (StrUtil.isNotEmpty(evidenceFileOCRDTO.getEvidenceId())){ + if (StrUtil.isEmpty(evidenceFileOCRDTO.getEvidenceType())){ evidenceFileOCRDTO.setEvidenceType("1");// 默认为书证 } + evidenceFileOCRDTO.setEvidenceNameValue(); }) .collect(Collectors.toList()); @@ -152,9 +153,6 @@ public class OCREvidenceServiceImpl implements OCREvidenceService { //保存证据信息 String evidenceId = caseEvidenceService.saveEvidence(evidenceFileOCRDTO.toCaseEvidenceDTO()); - //保存证据文件关联信息 - evidenceFileService.save(new EvidenceFile(evidenceId, evidenceFileOCRDTO.getFileId())); - // 保存证据属性 List evidencePropertyList = saveEvidenceProperty(evidenceId, evidenceFileOCRDTO.getFileId(), evidenceFileOCRDTO.getProperty()); @@ -179,9 +177,9 @@ public class OCREvidenceServiceImpl implements OCREvidenceService { if (CollUtil.isEmpty(fileIdList)){ return true; } - List evidenceFiles = evidenceFileService.listByFileIds(fileIdList); + List properties = fileEvidencePropertyService.lambdaQuery().in(FileEvidenceProperty::getFileId, fileIdList).list(); for (String fileId : fileIdList) { - if (!evidenceFilesExist(fileId, evidenceFiles)){ + if (!evidencePropertiesExist(fileId, properties)){ return false; } } @@ -215,6 +213,7 @@ public class OCREvidenceServiceImpl implements OCREvidenceService { @Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager") public void doRetrieveTitle(List fileIdList) { + // todo:等待ocr识别完成 List recordFileDTOS = ocrProcessService.queryFileListWithIdSort(fileIdList); if (CollUtil.isEmpty(recordFileDTOS)){ log.warn("doRetrieveTitle:文件id:{} 未查询到文件信息...", StrUtil.join(",", fileIdList)); @@ -228,6 +227,7 @@ public class OCREvidenceServiceImpl implements OCREvidenceService { }).toList(); List result = ocrExtractService.extractTitle(dtoList); + log.info("doRetrieveTitle,extractTitle返回结果是:{}", JSONUtil.toJsonStr(result)); if (CollUtil.isEmpty(result)){ log.warn("retrieveTitle:文件id:{} 提取标题失败", StrUtil.join(",", fileIdList)); } @@ -237,10 +237,22 @@ public class OCREvidenceServiceImpl implements OCREvidenceService { } } + @Override + @Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class) + public CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId) { + CaseEvidenceDetailDTO caseEvidenceDetailDTO = caseEvidenceService.queryEvidenceDetail(evidenceId); + if (caseEvidenceDetailDTO == null){ + return null; + } + List list = fileEvidencePropertyService.lambdaQuery().eq(FileEvidenceProperty::getEvidenceId, evidenceId).list(); + caseEvidenceDetailDTO.setPropertyValue(list); + return caseEvidenceDetailDTO; + } + - private boolean evidenceFilesExist(String fileId,List evidenceFiles){ - for (EvidenceFile evidenceFile : evidenceFiles) { - if (StrUtil.equals(fileId, evidenceFile.getFileId())){ + private boolean evidencePropertiesExist(String fileId, List properties){ + for (FileEvidenceProperty property : properties) { + if (StrUtil.equals(fileId, property.getFileId())){ return true; } } diff --git a/src/main/java/com/supervision/police/service/impl/OCRRecordServiceImpl.java b/src/main/java/com/supervision/police/service/impl/OCRRecordServiceImpl.java index eb19e6e..c1dddae 100644 --- a/src/main/java/com/supervision/police/service/impl/OCRRecordServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/OCRRecordServiceImpl.java @@ -78,6 +78,9 @@ public class OCRRecordServiceImpl implements OCRRecordService { recordFileDTOS.forEach(record->{ record.formatFileSize(); record.setDefaultEvidenceTypeDesc(); + if (StrUtil.isEmpty(record.getReviseText())){ + record.setReviseText(record.getOcrText()); + } }); return recordFileDTOS; diff --git a/src/main/resources/mapper/CaseEvidenceMapper.xml b/src/main/resources/mapper/CaseEvidenceMapper.xml index c3bf01c..aa99a8b 100644 --- a/src/main/resources/mapper/CaseEvidenceMapper.xml +++ b/src/main/resources/mapper/CaseEvidenceMapper.xml @@ -30,6 +30,8 @@ + + @@ -62,12 +64,15 @@ ce.evidence_name, ce.evidence_type, ef.file_id, + fop.draw_img_id, + fop.ocr_text, mf.filename, mf.file_type, ce.update_time from case_evidence ce - left join evidence_file ef on ce.id = ef.evidence_id - left join minio_file mf on mf.id = ef.file_id + left join evidence_file ef on ce.id = ef.evidence_id + left join file_ocr_process fop on ef.file_id = fop.file_id + left join minio_file mf on mf.id = ef.file_id ce.id = #{evidenceId} diff --git a/src/main/resources/mapper/FileEvidencePropertyMapper.xml b/src/main/resources/mapper/FileEvidencePropertyMapper.xml index 09b9481..ca2b764 100644 --- a/src/main/resources/mapper/FileEvidencePropertyMapper.xml +++ b/src/main/resources/mapper/FileEvidencePropertyMapper.xml @@ -26,12 +26,14 @@ ep.evidence_id as evidenceId, op.file_id as fileId, op.draw_img_id as drawImgId, + op.ocr_text as ocrText, + op.revise_text as reviseText, op.status as ocrStatus, ep.property_name as propertyName, ep.property_value as propertyValue from file_ocr_process op left join file_evidence_property ep on ep.file_id = op.file_id - where ep.file_id in + where op.file_id in #{fileId}