1. 添加证据ocr识别功能

topo_dev
xueqingkun 8 months ago
parent cc9c24a92f
commit 2879916e97

@ -0,0 +1,51 @@
package com.supervision.constant;
import cn.hutool.core.collection.CollUtil;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Getter
public enum EvidencePropertyName {
TITLE("title", "标题", "String");
private final String name;
private final String description;
private final String type;
EvidencePropertyName(String name, String description, String type) {
this.name = name;
this.description = description;
this.type = type;
}
public static List<EvidencePropertyName> getByNames(Map<String,String> propertyMap){
ArrayList<EvidencePropertyName> evidencePropertyNames = new ArrayList<>();
if (CollUtil.isEmpty(propertyMap)){
return evidencePropertyNames;
}
for (String key : propertyMap.keySet()) {
EvidencePropertyName evidencePropertyName = getByName(key);
if (evidencePropertyName != null){
evidencePropertyNames.add(evidencePropertyName);
}
}
return evidencePropertyNames;
}
public static EvidencePropertyName getByName(String name){
for (EvidencePropertyName value : values()) {
if (value.getName().equals(name)){
return value;
}
}
return null;
}
}

@ -0,0 +1,36 @@
package com.supervision.police.controller;
import com.supervision.common.domain.R;
import com.supervision.police.dto.EvidenceFileOCRDTO;
import com.supervision.police.service.OCREvidenceService;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* ocr
*/
@RestController
@Slf4j
@RequestMapping("/ocr/evidence")
@ApiOperation(value = "OCR笔录接口")
@RequiredArgsConstructor
public class OCREvidenceController {
private final OCREvidenceService ocrEvidenceService;
@GetMapping("/submitOrcTask")
public R<Boolean> submitOrcTask(@RequestParam("fileId") String fileId) {
Boolean success = ocrEvidenceService.submitOrcTask(fileId);
return R.ok(success);
}
@PostMapping("/preview")
public R<List<EvidenceFileOCRDTO>> preview(@RequestBody List<String> fileIdList) {
List<EvidenceFileOCRDTO> evidenceFileOCRDTOList = ocrEvidenceService.previewEvidence(fileIdList);
return R.ok(evidenceFileOCRDTOList);
}
}

@ -61,4 +61,11 @@ public class EvidenceFile implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
public EvidenceFile() {
}
public EvidenceFile(String evidenceId, String fileId) {
this.evidenceId = evidenceId;
this.fileId = fileId;
}
}

@ -1,6 +1,5 @@
package com.supervision.police.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -10,11 +9,11 @@ import lombok.Data;
/**
*
* @TableName evidence_property
* @TableName file_evidence_property
*/
@TableName(value ="evidence_property")
@TableName(value ="file_evidence_property")
@Data
public class EvidenceProperty implements Serializable {
public class FileEvidenceProperty implements Serializable {
/**
*
*/
@ -26,6 +25,11 @@ public class EvidenceProperty implements Serializable {
*/
private String evidenceId;
/**
* id
*/
private String fileId;
/**
*
*/
@ -58,4 +62,14 @@ public class EvidenceProperty implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
public FileEvidenceProperty() {
}
public FileEvidenceProperty(String evidenceId, String fileId, String propertyName, String propertyValue) {
this.evidenceId = evidenceId;
this.fileId = fileId;
this.propertyName = propertyName;
this.propertyValue = propertyValue;
}
}

@ -0,0 +1,60 @@
package com.supervision.police.dto;
import cn.hutool.core.collection.CollUtil;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Data
public class EvidenceFileOCRDTO {
@Schema(description = "案件证据id")
private String evidenceId;
@Schema(description = "案件id")
private String caseId;
@Schema(description = "案件证据名称")
private String evidenceName;
@Schema(description = "案件证据类型")
private String evidenceType;
@Schema(description = "文件id")
private String fileId;
@Schema(description = "文件预览图id")
private String drawImgId;
@Schema(description = "文件识别内容")
private String ocrText;
@Schema(description = "文件属性")
private Map<String,String> property= new HashMap<>();
public EvidenceFileOCRDTO() {
}
public EvidenceFileOCRDTO(List<OCREvidencePropertyDTO> properties) {
if (CollUtil.isEmpty(properties)){
return;
}
OCREvidencePropertyDTO first = CollUtil.getFirst(properties);
this.evidenceId = first.getEvidenceId();
this.fileId = first.getFileId();
this.drawImgId = first.getDrawImgId();
properties.forEach(propertyDTO ->
this.property.put(propertyDTO.getPropertyName(),propertyDTO.getPropertyValue()));
}
public CaseEvidenceDTO toCaseEvidenceDTO(){
CaseEvidenceDTO caseEvidenceDTO = new CaseEvidenceDTO();
caseEvidenceDTO.setCaseId(this.caseId);
caseEvidenceDTO.setEvidenceName(this.evidenceName);
caseEvidenceDTO.setEvidenceType(this.evidenceType);
caseEvidenceDTO.setId(this.evidenceId);
return caseEvidenceDTO;
}
}

@ -0,0 +1,24 @@
package com.supervision.police.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class OCREvidencePropertyDTO {
@Schema(description = "案件证据id")
private String evidenceId;
@Schema(description = "文件id")
private String fileId;
@Schema(description = "属性名称")
private String propertyName;
@Schema(description = "属性值")
private String propertyValue;
@Schema(description = "预览图id")
private String drawImgId;
}

@ -0,0 +1,20 @@
package com.supervision.police.dto;
import lombok.Data;
@Data
public class RetrieveReqDTO {
/**
*
*/
private String text;
public RetrieveReqDTO() {
}
public RetrieveReqDTO(String text) {
this.text = text;
}
}

@ -0,0 +1,17 @@
package com.supervision.police.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class RetrieveResDTO {
@Schema(description = "标题")
private String title;
@Schema(description = "状态码 0:成功 2:失败")
private int status;
@Schema(description = "错误信息")
private String error_msg;
}

@ -1,18 +0,0 @@
package com.supervision.police.mapper;
import com.supervision.police.domain.EvidenceProperty;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Administrator
* @description evidence_propertyMapper
* @createDate 2024-09-04 11:20:37
* @Entity com.supervision.police.domain.EvidenceProperty
*/
public interface EvidencePropertyMapper extends BaseMapper<EvidenceProperty> {
}

@ -0,0 +1,22 @@
package com.supervision.police.mapper;
import com.supervision.police.domain.FileEvidenceProperty;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.supervision.police.dto.OCREvidencePropertyDTO;
import java.util.List;
/**
* @author Administrator
* @description file_evidence_propertyMapper
* @createDate 2024-09-04 15:10:13
* @Entity com.supervision.police.domain.EvidenceProperty
*/
public interface FileEvidencePropertyMapper extends BaseMapper<FileEvidenceProperty> {
List<OCREvidencePropertyDTO> listPrewByFileIdList(List<String> fileIdList);
}

@ -1,13 +0,0 @@
package com.supervision.police.service;
import com.supervision.police.domain.EvidenceProperty;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Administrator
* @description evidence_propertyService
* @createDate 2024-09-04 11:20:37
*/
public interface EvidencePropertyService extends IService<EvidenceProperty> {
}

@ -0,0 +1,19 @@
package com.supervision.police.service;
import com.supervision.police.domain.FileEvidenceProperty;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.dto.OCREvidencePropertyDTO;
import java.util.List;
/**
* @author Administrator
* @description file_evidence_propertyService
* @createDate 2024-09-04 15:10:13
*/
public interface FileEvidencePropertyService extends IService<FileEvidenceProperty> {
List<OCREvidencePropertyDTO> listPrewByFileIdList(List<String> fileIdList);
void removeByEvidenceAndFileId(String evidenceId, String fileId);
}

@ -1,8 +1,8 @@
package com.supervision.police.service;
import com.supervision.listener.OCRTaskListener;
import com.supervision.police.domain.FileOcrProcess;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.dto.OCRReqDTO;
import com.supervision.police.dto.OCRResDTO;
import com.supervision.police.dto.RecordFileDTO;
@ -15,11 +15,16 @@ import java.util.List;
*/
public interface FileOcrProcessService extends IService<FileOcrProcess> {
List<FileOcrProcess> submitOCR(List<String> fileIdList);
List<FileOcrProcess> asyncSubmitOCR(List<String> fileIdList);
List<FileOcrProcess> syncSubmitOCR(List<String> fileIdList);
void doOCRTask(List<FileOcrProcess> fileOcrProcesses);
//异步调用
void asyncDoOCRTask(List<FileOcrProcess> fileOcrProcesses);
void doAllOCRTask();

@ -0,0 +1,29 @@
package com.supervision.police.service;
import com.supervision.police.domain.FileEvidenceProperty;
import com.supervision.police.dto.EvidenceFileOCRDTO;
import java.util.List;
import java.util.Map;
public interface OCREvidenceService {
Boolean submitOrcTask(String fileId);
List<FileEvidenceProperty> doOrcTask(String evidenceId,String fileId);
void asyncDoOrcTask(String evidenceId,String fileId);
/**
*
* @param evidenceId id
* @param fileId id
* @param propertyMap map
* @return
*/
List<FileEvidenceProperty> saveEvidenceProperty(String evidenceId, String fileId, Map<String,String> propertyMap);
List<EvidenceFileOCRDTO> previewEvidence(List<String> fileIdList);
String saveEvidence(EvidenceFileOCRDTO evidenceFileOCRDTO);
}

@ -2,6 +2,8 @@ package com.supervision.police.service;
import com.supervision.police.dto.OCRReqDTO;
import com.supervision.police.dto.OCRResDTO;
import com.supervision.police.dto.RetrieveReqDTO;
import com.supervision.police.dto.RetrieveResDTO;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.service.annotation.HttpExchange;
@ -12,6 +14,19 @@ import java.util.List;
@HttpExchange
public interface OCRService {
/**
* ocr
* @param ocrReqDTO
* @return
*/
@PostExchange(url = "/ocr", contentType = MediaType.APPLICATION_JSON_VALUE)
List<OCRResDTO> ocr(@RequestBody OCRReqDTO ocrReqDTO);
/**
*
* @param retrieveReqDTO
* @return
*/
@PostExchange(url = "/retrieve", contentType = MediaType.APPLICATION_JSON_VALUE)
RetrieveResDTO retrieve(@RequestBody RetrieveReqDTO retrieveReqDTO);
}

@ -1,22 +0,0 @@
package com.supervision.police.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.EvidenceProperty;
import com.supervision.police.service.EvidencePropertyService;
import com.supervision.police.mapper.EvidencePropertyMapper;
import org.springframework.stereotype.Service;
/**
* @author Administrator
* @description evidence_propertyService
* @createDate 2024-09-04 11:20:37
*/
@Service
public class EvidencePropertyServiceImpl extends ServiceImpl<EvidencePropertyMapper, EvidenceProperty>
implements EvidencePropertyService{
}

@ -0,0 +1,40 @@
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.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.FileEvidenceProperty;
import com.supervision.police.dto.OCREvidencePropertyDTO;
import com.supervision.police.service.FileEvidencePropertyService;
import com.supervision.police.mapper.FileEvidencePropertyMapper;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author Administrator
* @description file_evidence_propertyService
* @createDate 2024-09-04 15:10:13
*/
@Service
public class FileEvidencePropertyServiceImpl extends ServiceImpl<FileEvidencePropertyMapper, FileEvidenceProperty>
implements FileEvidencePropertyService {
@Override
public List<OCREvidencePropertyDTO> listPrewByFileIdList(List<String> fileIdList) {
return super.getBaseMapper().listPrewByFileIdList(fileIdList);
}
@Override
public void removeByEvidenceAndFileId(String evidenceId, String fileId) {
Assert.isFalse(StrUtil.isAllEmpty(evidenceId,fileId), "案件id和文件id不能全为空");
super.lambdaUpdate().eq(StrUtil.isNotEmpty(evidenceId),FileEvidenceProperty::getEvidenceId, evidenceId)
.eq(StrUtil.isNotEmpty(fileId),FileEvidenceProperty::getFileId, fileId).remove();
}
}

@ -23,10 +23,8 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
@ -38,7 +36,7 @@ import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper, FileOcrProcess>
implements FileOcrProcessService{
implements FileOcrProcessService {
@Value("${ocr.pool.max-size:20}")
private Integer poolMaxSize;
@ -51,8 +49,18 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
@Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public List<FileOcrProcess> submitOCR(List<String> fileIdList) {
public List<FileOcrProcess> asyncSubmitOCR(List<String> fileIdList) {
return submitOCR(fileIdList, this::asyncDoOCRTask);
}
@Override
public List<FileOcrProcess> syncSubmitOCR(List<String> fileIdList) {
return submitOCR(fileIdList, this::doOCRTask);
}
private List<FileOcrProcess> submitOCR(List<String> fileIdList, Consumer<List<FileOcrProcess>> consumer){
if (CollUtil.isEmpty(fileIdList)){
log.info("submitOCR:fileIds为空。提交ocr任务...");
return new ArrayList<>(1);
@ -64,15 +72,13 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
processList.add(fileOcrProcess);
}
doOCRTask(processList);
consumer.accept(processList);
return processList;
}
@Async
@Override
public synchronized void doOCRTask(List<FileOcrProcess> fileOcrProcesses) {
if (CollUtil.isEmpty(fileOcrProcesses)){
log.info("asyncOcr:当前暂无识别的任务,结束...");
return;
@ -85,7 +91,6 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
for (OCRReqDTO ocrReqDTO : ocrReqDTOS) {
log.info("ocr:开始识别文件:{}", JSONUtil.toJsonStr(ocrReqDTO));
this.updateOCrStatus(ocrReqDTO.getFile_ids(),0);
try {
List<OCRResDTO> ocrRes = ocrService.ocr(ocrReqDTO);
log.info("ocr:识别结果:{}", JSONUtil.toJsonStr(ocrRes));
@ -106,6 +111,13 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
}
}
@Async
@Override
public void asyncDoOCRTask(List<FileOcrProcess> fileOcrProcesses) {
doOCRTask(fileOcrProcesses);
}
@Override
public void doAllOCRTask() {
List<FileOcrProcess> allFileOcrProcesses = pageListByStatus(-1, 99999);
@ -166,7 +178,6 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
.collect(Collectors.toList());
}
}

@ -0,0 +1,170 @@
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 cn.hutool.json.JSONUtil;
import com.supervision.constant.EvidencePropertyName;
import com.supervision.police.domain.EvidenceFile;
import com.supervision.police.domain.FileEvidenceProperty;
import com.supervision.police.domain.FileOcrProcess;
import com.supervision.police.dto.*;
import com.supervision.police.service.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@Slf4j
@Service
@RequiredArgsConstructor
public class OCREvidenceServiceImpl implements OCREvidenceService {
private final FileOcrProcessService ocrProcessService;
private final OCRService ocrService;
private final FileEvidencePropertyService fileEvidencePropertyService;
private final EvidenceFileService evidenceFileService;
private final CaseEvidenceService caseEvidenceService;
@Override
public Boolean submitOrcTask(String fileId) {
Assert.notEmpty(fileId, "文件id不能为空");
asyncDoOrcTask(null, fileId);
return true;
}
@Override
@Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager")
public List<FileEvidenceProperty> doOrcTask(String evidenceId,String fileId) {
List<FileEvidenceProperty> evidencePropertyList = new ArrayList<>();
// 识别文件信息
List<FileOcrProcess> fileOcrProcesses = ocrProcessService.syncSubmitOCR(CollUtil.newArrayList(fileId));
if (CollUtil.isEmpty(fileOcrProcesses)){
log.warn("subOrcTask:文件id:{} 识别失败", fileId);
return evidencePropertyList;
}
for (FileOcrProcess fileOcrProcess : fileOcrProcesses) {
// 调用提取属性接口
log.info("subOrcTask:文件id:{} 识别结果:{}", fileId, JSONUtil.toJsonStr(fileOcrProcess));
RetrieveResDTO retrieve = ocrService.retrieve(new RetrieveReqDTO(fileOcrProcess.getOcrText()));
log.info("subOrcTask:文件id:{} 识别结果:{}", fileId, JSONUtil.toJsonStr(retrieve));
if (Integer.valueOf(0).equals(retrieve.getStatus())){
// 保存属性信息
String title = retrieve.getTitle();
if (StrUtil.isNotEmpty(title)){
evidencePropertyList.addAll(this.saveEvidenceProperty(evidenceId, fileId,
Map.of(EvidencePropertyName.TITLE.getName(), retrieve.getTitle())));
if (StrUtil.isNotEmpty(evidenceId)){
evidenceFileService.save(new EvidenceFile(evidenceId,fileId));
}
}
}
}
return evidencePropertyList;
}
@Async
@Override
public void asyncDoOrcTask(String evidenceId, String fileId) {
doOrcTask(evidenceId, fileId);
}
@Override
@Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager")
public List<FileEvidenceProperty> saveEvidenceProperty(String evidenceId,String fileId ,Map<String, String> propertyMap) {
// 先清空数据
fileEvidencePropertyService.removeByEvidenceAndFileId(evidenceId,fileId);
List<FileEvidenceProperty> fileEvidence = toFileEvidence(evidenceId, fileId, propertyMap);
fileEvidencePropertyService.saveBatch(fileEvidence);
return fileEvidence;
}
@Override
public List<EvidenceFileOCRDTO> previewEvidence(List<String> fileIdList) {
if (CollUtil.isEmpty(fileIdList)){
return new ArrayList<>(1);
}
List<OCREvidencePropertyDTO> ocrEvidencePropertyDTOS = fileEvidencePropertyService.listPrewByFileIdList(fileIdList);
List<EvidenceFileOCRDTO> collect = ocrEvidencePropertyDTOS.stream()
.collect(Collectors.groupingBy(OCREvidencePropertyDTO::getFileId))
.values().stream()
.map(EvidenceFileOCRDTO::new)
.collect(Collectors.toList());
return sortByIdOrder(fileIdList, collect);
}
@Override
@Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager")
public String saveEvidence(EvidenceFileOCRDTO evidenceFileOCRDTO) {
Assert.notEmpty(evidenceFileOCRDTO.getFileId(), "文件id不能为空");
Assert.notEmpty(evidenceFileOCRDTO.getCaseId(), "案件id不能为空");
Assert.notEmpty(evidenceFileOCRDTO.getEvidenceName(), "案件证据名称不能为空");
Assert.notEmpty(evidenceFileOCRDTO.getEvidenceType(), "案件证据类型不能为空");
//保存证据信息
String evidenceId = caseEvidenceService.saveEvidence(evidenceFileOCRDTO.toCaseEvidenceDTO());
//保存证据文件关联信息
evidenceFileService.save(new EvidenceFile(evidenceId, evidenceFileOCRDTO.getFileId()));
// 保存证据属性
List<FileEvidenceProperty> evidencePropertyList = saveEvidenceProperty(evidenceFileOCRDTO.getEvidenceId(),
evidenceFileOCRDTO.getFileId(), evidenceFileOCRDTO.getProperty());
if (CollUtil.isEmpty(evidencePropertyList)){
return null;
}
return CollUtil.getFirst(evidencePropertyList).getEvidenceId();
}
private List<EvidenceFileOCRDTO> sortByIdOrder(List<String> fileIdList, List<EvidenceFileOCRDTO> evidenceFileOCRDTOS){
if (CollUtil.size(fileIdList) < 2 || CollUtil.size(evidenceFileOCRDTOS) < 2) {
return evidenceFileOCRDTOS;
}
Map<String, EvidenceFileOCRDTO> fileOCRDTOMap = evidenceFileOCRDTOS.stream()
.collect(Collectors.toMap(EvidenceFileOCRDTO::getFileId, recordFileDTO -> recordFileDTO, (k1, k2) -> k1));
return fileIdList.stream().map(fileOCRDTOMap::get).filter(Objects::nonNull).collect(Collectors.toList());
}
private List<FileEvidenceProperty> toFileEvidence(String evidenceId,String fileId ,Map<String, String> propertyMap){
if (StrUtil.isAllEmpty(evidenceId,fileId) || CollUtil.isEmpty(propertyMap)){
log.warn("saveEvidenceProperty:参数为空");
return new ArrayList<>(1);
}
return EvidencePropertyName.getByNames(propertyMap)
.stream().map(evidence ->
new FileEvidenceProperty(evidenceId, fileId, evidence.getName(), propertyMap.get(evidence.getName())))
.toList();
}
}

@ -4,20 +4,16 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.supervision.demo.dto.QARecordNodeDTO;
import com.supervision.minio.domain.MinioFile;
import com.supervision.minio.service.MinioService;
import com.supervision.police.domain.FileOcrProcess;
import com.supervision.police.domain.ModelRecordType;
import com.supervision.police.domain.NoteRecord;
import com.supervision.police.domain.NoteRecordSplit;
import com.supervision.police.dto.NoteRecordDTO;
import com.supervision.police.dto.OCRReqDTO;
import com.supervision.police.dto.OCRTextDTO;
import com.supervision.police.dto.RecordFileDTO;
import com.supervision.police.service.*;
import com.supervision.police.vo.NoteRecordReqVO;
import com.supervision.utils.RecordRegexUtil;
import com.supervision.utils.WordReadUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -52,7 +48,7 @@ public class OCRRecordServiceImpl implements OCRRecordService {
return recordId;
}
// 识别文件信息
fileOcrProcessService.submitOCR(noteRecordReqVO.getFileIdList());
fileOcrProcessService.asyncSubmitOCR(noteRecordReqVO.getFileIdList());
return recordId;
}
@ -113,7 +109,7 @@ public class OCRRecordServiceImpl implements OCRRecordService {
FileOcrProcess fileOcrProcess = fileOcrProcessService.getById(ocrId);
Assert.notNull(fileOcrProcess, "ocrId:{}对应的ocr信息不存在", ocrId);
fileOcrProcessService.doOCRTask(CollUtil.newArrayList(fileOcrProcess));
fileOcrProcessService.asyncDoOCRTask(CollUtil.newArrayList(fileOcrProcess));
return null;
}

@ -2,11 +2,12 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supervision.police.mapper.EvidencePropertyMapper">
<mapper namespace="com.supervision.police.mapper.FileEvidencePropertyMapper">
<resultMap id="BaseResultMap" type="com.supervision.police.domain.EvidenceProperty">
<resultMap id="BaseResultMap" type="com.supervision.police.domain.FileEvidenceProperty">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="evidenceId" column="evidence_id" jdbcType="VARCHAR"/>
<result property="fileId" column="file_id" jdbcType="VARCHAR"/>
<result property="propertyName" column="property_name" jdbcType="VARCHAR"/>
<result property="propertyValue" column="property_value" jdbcType="VARCHAR"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
@ -16,8 +17,22 @@
</resultMap>
<sql id="Base_Column_List">
id,evidence_id,property_name,
property_value,create_user_id,create_time,
update_user_id,update_time
id,evidence_id,file_id,
property_name,property_value,create_user_id,
create_time,update_user_id,update_time
</sql>
<select id="listPrewByFileIdList" resultType="com.supervision.police.dto.OCREvidencePropertyDTO">
select
ep.evidence_id as evidenceId,
op.file_id as fileId,
op.draw_img_id as drawImgId,
ep.property_name as propertyName,
ep.property_value as propertyValue
from file_evidence_property ep
left join file_ocr_process op on ep.file_id = op.file_id
where ep.file_id in
<foreach collection="fileIdList" item="fileId" open="(" separator="," close=")">
#{fileId}
</foreach>
</select>
</mapper>

@ -9,8 +9,11 @@ import com.supervision.neo4j.domain.CaseNode;
import com.supervision.demo.controller.ExampleChatController;
import com.supervision.police.domain.ModelRecordType;
import com.supervision.police.domain.NoteRecordSplit;
import com.supervision.police.dto.RetrieveReqDTO;
import com.supervision.police.dto.RetrieveResDTO;
import com.supervision.police.service.ModelRecordTypeService;
import com.supervision.police.service.NoteRecordSplitService;
import com.supervision.police.service.OCRService;
import com.supervision.police.service.RecordSplitClassifyService;
import com.supervision.thread.RecordSplitClassifyTask;
import lombok.extern.slf4j.Slf4j;
@ -165,4 +168,14 @@ public class FuHsiApplicationTests {
recordSplitClassifyService.classify(typeList,noteRecordSplits);
log.info("分类结果:{}",noteRecordSplits);
}
@Autowired
private OCRService ocrService;
@Test
public void test1() {
String question = "银川市公安局金凤区分局\\r\\n拘留通知书\\r\\n副本\\r\\n银金公经侦拘通字[2024]10017号\\r\\n梁玉峰家属\\r\\n根据《中华人民共和国刑事诉讼法》第八十二条第一)项之规定\\r\\n罪\\r\\n将涉嫌合同诈骗\\r\\n我局已于2024年01月16日10时\\r\\n银川市看守所\\r\\n的\\r\\n梁玉峰\\r\\n刑事拘留现羁押在\\r\\n市\\r\\n二0二\\r\\n年名\\r\\n本通知书已收到。\\r\\n年月\\r\\n日时\\r\\n被拘留人家属\\r\\n如未在拘留后24小时内通知被拘留人家属注明原因办集民警\\r\\n当天拔打梁天峰亲属果无辉毛话对方电生无法接通\\r\\n办案人\\r\\n2024年1月16日1时\\r\\n此联附卷";
RetrieveResDTO retrieve = ocrService.retrieve(new RetrieveReqDTO(question));
System.out.println(retrieve);
}
}

Loading…
Cancel
Save