1. ocr 功能接口联调调整

topo_dev
xueqingkun 8 months ago
parent 90e9223ea6
commit 3dae2a47f3

@ -50,11 +50,6 @@ public class CaseEvidenceController {
}
@GetMapping("/queryEvidenceDetail")
public R<CaseEvidenceDetailDTO> queryEvidenceDetail(@RequestParam @Parameter(name = "evidenceId",description = "证据id") String evidenceId) {
CaseEvidenceDetailDTO caseEvidenceDetailDTO = caseEvidenceService.queryEvidenceDetail(evidenceId);
return R.ok(caseEvidenceDetailDTO);
}
@Operation(summary = "分页查询案件证据信息列表")
@GetMapping("/pageListEvidence")
public R<IPage<CaseEvidenceDetailDTO>> pageListEvidence(@RequestParam @Parameter(name = "caseId",description = "案件id") String caseId,

@ -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<String> evidenceIds = ocrEvidenceService.batchSaveEvidence(evidenceFileOCRDTOS);;
return R.ok(evidenceIds);
}
@GetMapping("/info")
public R<CaseEvidenceDetailDTO> queryEvidenceInfo(@RequestParam @Parameter(name = "evidenceId",description = "证据id") String evidenceId) {
CaseEvidenceDetailDTO caseEvidenceDetailDTO = ocrEvidenceService.queryEvidenceDetail(evidenceId);
return R.ok(caseEvidenceDetailDTO);
}
}

@ -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<String> fileIdList;
@Schema(description = "案件证据属性")
private Map<String,String> property= new HashMap<>();
public CaseEvidence toCaseEvidence(){
CaseEvidence caseEvidence = new CaseEvidence();

@ -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<String,String> property= new HashMap<>();
public CaseEvidenceDetailDTO() {
}
@ -55,4 +65,26 @@ public class CaseEvidenceDetailDTO {
}
this.fileList = fileList;
}
public void setContentTypeValue(List<RecordFileDTO> 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<FileEvidenceProperty> fileEvidenceProperties){
for (FileEvidenceProperty fileEvidenceProperty : fileEvidenceProperties) {
property.put(fileEvidenceProperty.getPropertyName(),fileEvidenceProperty.getPropertyValue());
}
}
}

@ -18,4 +18,10 @@ public class EvidenceFileDTO {
@Schema(description = "文件类型")
private String fileType;
@Schema(description = "文件预览图id")
private String drawImgId;
@Schema(description = "文件识别内容")
private String ocrText;
}

@ -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());
}
}
}

@ -12,6 +12,8 @@ public class OCREvidencePropertyDTO {
@Schema(description = "文件id")
private String fileId;
private String ocrText;
@Schema(description = "属性名称")
private String propertyName;

@ -48,10 +48,5 @@ public interface CaseEvidenceService extends IService<CaseEvidence> {
*/
IPage<CaseEvidenceDetailDTO> pageListEvidence(String caseId,String evidenceName, Integer pageNum, Integer pageSize);
/**
*
* @param evidenceId id
* @return
*/
CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId);
}

@ -16,4 +16,6 @@ public interface FileEvidencePropertyService extends IService<FileEvidenceProper
List<OCREvidencePropertyDTO> listPrewByFileIdList(List<String> fileIdList);
void removeByEvidenceAndFileId(String evidenceId, String fileId);
}

@ -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<String> fileIdList);
/**
*
* @param evidenceId id
* @return
*/
CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId);
}

@ -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<CaseEvidenceMapper, Cas
private final CaseStatusManageService caseStatusManageService;
private final FileOcrProcessService fileOcrProcessService;
@Autowired
private OCREvidenceService ocrEvidenceService;
@Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public String saveEvidence(CaseEvidenceDTO caseEvidenceDTO) {
@ -87,6 +94,12 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
evidenceFileService.save(evidenceFile);
});
caseStatusManageService.whenUpdateEvidence(caseEvidenceDTO.getCaseId());
// 更新证据属性信息
for (String fileId : caseEvidenceDTO.getFileIdList()) {
ocrEvidenceService.saveEvidenceProperty(caseEvidence.getId(),fileId,caseEvidenceDTO.getProperty());
}
return caseEvidenceDTO.getId();
}
@ -130,6 +143,9 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
List<EvidenceFileDTO> fileInfoList = evidenceFileService.listFileInfo(evidenceIds);
Map<String, List<EvidenceFileDTO>> evidenceFileMap = fileInfoList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getEvidenceId));
List<RecordFileDTO> recordFileDTOS = fileOcrProcessService.queryFileList(fileInfoList.stream().map(EvidenceFileDTO::getFileId).toList());
// 转换分页结果
//查询字典
List<ComDictionary> evidenceTypeDic = comDictionaryService.lambdaQuery().eq(ComDictionary::getType, "evidence_type").list();
@ -137,13 +153,14 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO(caseEvidence, evidenceFileMap.get(caseEvidence.getId()));
caseEvidenceDetailDTO.setEvidenceTypeDesc(
comDictionaryService.getName(evidenceTypeDic, "evidence_type", caseEvidence.getEvidenceType()));
caseEvidenceDetailDTO.setContentTypeValue(recordFileDTOS);
return caseEvidenceDetailDTO;
});
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId) {
return super.getBaseMapper().queryEvidenceDetail(evidenceId);
}
}

@ -132,9 +132,10 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
.collect(Collectors.groupingBy(OCREvidencePropertyDTO::getFileId))
.values().stream()
.map(EvidenceFileOCRDTO::new).peek(evidenceFileOCRDTO -> {
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<FileEvidenceProperty> evidencePropertyList = saveEvidenceProperty(evidenceId,
evidenceFileOCRDTO.getFileId(), evidenceFileOCRDTO.getProperty());
@ -179,9 +177,9 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
if (CollUtil.isEmpty(fileIdList)){
return true;
}
List<EvidenceFile> evidenceFiles = evidenceFileService.listByFileIds(fileIdList);
List<FileEvidenceProperty> 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<String> fileIdList) {
// todo:等待ocr识别完成
List<RecordFileDTO> 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<OcrExtractDto> 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<FileEvidenceProperty> list = fileEvidencePropertyService.lambdaQuery().eq(FileEvidenceProperty::getEvidenceId, evidenceId).list();
caseEvidenceDetailDTO.setPropertyValue(list);
return caseEvidenceDetailDTO;
}
private boolean evidenceFilesExist(String fileId,List<EvidenceFile> evidenceFiles){
for (EvidenceFile evidenceFile : evidenceFiles) {
if (StrUtil.equals(fileId, evidenceFile.getFileId())){
private boolean evidencePropertiesExist(String fileId, List<FileEvidenceProperty> properties){
for (FileEvidenceProperty property : properties) {
if (StrUtil.equals(fileId, property.getFileId())){
return true;
}
}

@ -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;

@ -30,6 +30,8 @@
<id column="file_id" property="fileId"/>
<result column="filename" property="fileName"/>
<result column="file_type" property="fileType"/>
<result column="draw_img_id" property="drawImgId"/>
<result column="ocr_text" property="ocrText"/>
</resultMap>
<resultMap id="CaseEvidenceDetailDTOMapId" type="com.supervision.police.dto.CaseEvidenceDetailDTO">
@ -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
<where>
<if test="evidenceId != null and evidenceId != ''">
ce.id = #{evidenceId}

@ -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
<foreach collection="fileIdList" item="fileId" open="(" separator="," close=")">
#{fileId}
</foreach>

Loading…
Cancel
Save