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 = "分页查询案件证据信息列表") @Operation(summary = "分页查询案件证据信息列表")
@GetMapping("/pageListEvidence") @GetMapping("/pageListEvidence")
public R<IPage<CaseEvidenceDetailDTO>> pageListEvidence(@RequestParam @Parameter(name = "caseId",description = "案件id") String caseId, public R<IPage<CaseEvidenceDetailDTO>> pageListEvidence(@RequestParam @Parameter(name = "caseId",description = "案件id") String caseId,

@ -1,9 +1,11 @@
package com.supervision.police.controller; package com.supervision.police.controller;
import com.supervision.common.domain.R; import com.supervision.common.domain.R;
import com.supervision.police.dto.CaseEvidenceDetailDTO;
import com.supervision.police.dto.EvidenceFileOCRDTO; import com.supervision.police.dto.EvidenceFileOCRDTO;
import com.supervision.police.service.OCREvidenceService; import com.supervision.police.service.OCREvidenceService;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.Parameter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -50,4 +52,10 @@ public class OCREvidenceController {
List<String> evidenceIds = ocrEvidenceService.batchSaveEvidence(evidenceFileOCRDTOS);; List<String> evidenceIds = ocrEvidenceService.batchSaveEvidence(evidenceFileOCRDTOS);;
return R.ok(evidenceIds); 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 io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* *
@ -36,6 +38,9 @@ public class CaseEvidenceDTO {
@Schema(description = "文件id集合") @Schema(description = "文件id集合")
private List<String> fileIdList; private List<String> fileIdList;
@Schema(description = "案件证据属性")
private Map<String,String> property= new HashMap<>();
public CaseEvidence toCaseEvidence(){ public CaseEvidence toCaseEvidence(){
CaseEvidence caseEvidence = new CaseEvidence(); CaseEvidence caseEvidence = new CaseEvidence();

@ -1,12 +1,16 @@
package com.supervision.police.dto; package com.supervision.police.dto;
import cn.hutool.core.collection.CollUtil;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.supervision.police.domain.CaseEvidence; import com.supervision.police.domain.CaseEvidence;
import com.supervision.police.domain.FileEvidenceProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
@Data @Data
@ -21,6 +25,9 @@ public class CaseEvidenceDetailDTO {
@Schema(description = "案件证据类型") @Schema(description = "案件证据类型")
private String evidenceType; private String evidenceType;
@Schema(description = "案件证据文件类型 1:文档 2:图片")
private String contentType;
@Schema(description = "案件证据类型描述") @Schema(description = "案件证据类型描述")
private String evidenceTypeDesc; private String evidenceTypeDesc;
@ -40,6 +47,9 @@ public class CaseEvidenceDetailDTO {
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime updateTime; private LocalDateTime updateTime;
@Schema(description = "案件证据属性")
private Map<String,String> property= new HashMap<>();
public CaseEvidenceDetailDTO() { public CaseEvidenceDetailDTO() {
} }
@ -55,4 +65,26 @@ public class CaseEvidenceDetailDTO {
} }
this.fileList = fileList; 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 = "文件类型") @Schema(description = "文件类型")
private String fileType; private String fileType;
@Schema(description = "文件预览图id")
private String drawImgId;
@Schema(description = "文件识别内容")
private String ocrText;
} }

@ -1,6 +1,8 @@
package com.supervision.police.dto; package com.supervision.police.dto;
import cn.hutool.core.collection.CollUtil; 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 io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.util.HashMap; import java.util.HashMap;
@ -49,7 +51,8 @@ public class EvidenceFileOCRDTO {
this.fileId = first.getFileId(); this.fileId = first.getFileId();
this.drawImgId = first.getDrawImgId(); this.drawImgId = first.getDrawImgId();
this.ocrStatus = null == first.getOcrStatus() ? -1 : first.getOcrStatus(); 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())); this.property.put(propertyDTO.getPropertyName(),propertyDTO.getPropertyValue()));
} }
@ -62,4 +65,10 @@ public class EvidenceFileOCRDTO {
caseEvidenceDTO.setFileIdList(CollUtil.newArrayList(this.fileId)); caseEvidenceDTO.setFileIdList(CollUtil.newArrayList(this.fileId));
return caseEvidenceDTO; 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") @Schema(description = "文件id")
private String fileId; private String fileId;
private String ocrText;
@Schema(description = "属性名称") @Schema(description = "属性名称")
private String propertyName; private String propertyName;

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

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

@ -1,6 +1,7 @@
package com.supervision.police.service; package com.supervision.police.service;
import com.supervision.police.domain.FileEvidenceProperty; import com.supervision.police.domain.FileEvidenceProperty;
import com.supervision.police.dto.CaseEvidenceDetailDTO;
import com.supervision.police.dto.EvidenceFileOCRDTO; import com.supervision.police.dto.EvidenceFileOCRDTO;
import java.util.List; import java.util.List;
@ -38,4 +39,11 @@ public interface OCREvidenceService {
void doRetrieveTitle(List<String> fileIdList); void doRetrieveTitle(List<String> fileIdList);
/**
*
* @param evidenceId id
* @return
*/
CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId);
} }

@ -1,29 +1,31 @@
package com.supervision.police.service.impl; package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
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 com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.CaseEvidence;
import com.supervision.police.domain.ComDictionary; import com.supervision.police.domain.ComDictionary;
import com.supervision.police.domain.EvidenceFile; import com.supervision.police.domain.EvidenceFile;
import com.supervision.police.dto.CaseEvidenceDetailDTO; import com.supervision.police.dto.CaseEvidenceDetailDTO;
import com.supervision.police.dto.EvidenceFileDTO; import com.supervision.police.dto.EvidenceFileDTO;
import com.supervision.police.mapper.CaseEvidenceMapper; import com.supervision.police.mapper.CaseEvidenceMapper;
import com.supervision.police.service.CaseEvidenceService;
import com.supervision.police.dto.CaseEvidenceDTO; import com.supervision.police.dto.CaseEvidenceDTO;
import com.supervision.police.service.CaseStatusManageService;
import com.supervision.police.service.ComDictionaryService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@ -37,6 +39,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
private final CaseStatusManageService caseStatusManageService; private final CaseStatusManageService caseStatusManageService;
private final FileOcrProcessService fileOcrProcessService;
@Autowired
private OCREvidenceService ocrEvidenceService;
@Override @Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class) @Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public String saveEvidence(CaseEvidenceDTO caseEvidenceDTO) { public String saveEvidence(CaseEvidenceDTO caseEvidenceDTO) {
@ -87,6 +94,12 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
evidenceFileService.save(evidenceFile); evidenceFileService.save(evidenceFile);
}); });
caseStatusManageService.whenUpdateEvidence(caseEvidenceDTO.getCaseId()); caseStatusManageService.whenUpdateEvidence(caseEvidenceDTO.getCaseId());
// 更新证据属性信息
for (String fileId : caseEvidenceDTO.getFileIdList()) {
ocrEvidenceService.saveEvidenceProperty(caseEvidence.getId(),fileId,caseEvidenceDTO.getProperty());
}
return caseEvidenceDTO.getId(); return caseEvidenceDTO.getId();
} }
@ -130,6 +143,9 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
List<EvidenceFileDTO> fileInfoList = evidenceFileService.listFileInfo(evidenceIds); List<EvidenceFileDTO> fileInfoList = evidenceFileService.listFileInfo(evidenceIds);
Map<String, List<EvidenceFileDTO>> evidenceFileMap = fileInfoList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getEvidenceId)); 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(); 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 caseEvidenceDetailDTO = new CaseEvidenceDetailDTO(caseEvidence, evidenceFileMap.get(caseEvidence.getId()));
caseEvidenceDetailDTO.setEvidenceTypeDesc( caseEvidenceDetailDTO.setEvidenceTypeDesc(
comDictionaryService.getName(evidenceTypeDic, "evidence_type", caseEvidence.getEvidenceType())); comDictionaryService.getName(evidenceTypeDic, "evidence_type", caseEvidence.getEvidenceType()));
caseEvidenceDetailDTO.setContentTypeValue(recordFileDTOS);
return caseEvidenceDetailDTO; return caseEvidenceDetailDTO;
}); });
} }
@Override @Override
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
public CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId) { public CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId) {
return super.getBaseMapper().queryEvidenceDetail(evidenceId); return super.getBaseMapper().queryEvidenceDetail(evidenceId);
} }
} }

@ -132,9 +132,10 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
.collect(Collectors.groupingBy(OCREvidencePropertyDTO::getFileId)) .collect(Collectors.groupingBy(OCREvidencePropertyDTO::getFileId))
.values().stream() .values().stream()
.map(EvidenceFileOCRDTO::new).peek(evidenceFileOCRDTO -> { .map(EvidenceFileOCRDTO::new).peek(evidenceFileOCRDTO -> {
if (StrUtil.isNotEmpty(evidenceFileOCRDTO.getEvidenceId())){ if (StrUtil.isEmpty(evidenceFileOCRDTO.getEvidenceType())){
evidenceFileOCRDTO.setEvidenceType("1");// 默认为书证 evidenceFileOCRDTO.setEvidenceType("1");// 默认为书证
} }
evidenceFileOCRDTO.setEvidenceNameValue();
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -152,9 +153,6 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
//保存证据信息 //保存证据信息
String evidenceId = caseEvidenceService.saveEvidence(evidenceFileOCRDTO.toCaseEvidenceDTO()); String evidenceId = caseEvidenceService.saveEvidence(evidenceFileOCRDTO.toCaseEvidenceDTO());
//保存证据文件关联信息
evidenceFileService.save(new EvidenceFile(evidenceId, evidenceFileOCRDTO.getFileId()));
// 保存证据属性 // 保存证据属性
List<FileEvidenceProperty> evidencePropertyList = saveEvidenceProperty(evidenceId, List<FileEvidenceProperty> evidencePropertyList = saveEvidenceProperty(evidenceId,
evidenceFileOCRDTO.getFileId(), evidenceFileOCRDTO.getProperty()); evidenceFileOCRDTO.getFileId(), evidenceFileOCRDTO.getProperty());
@ -179,9 +177,9 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
if (CollUtil.isEmpty(fileIdList)){ if (CollUtil.isEmpty(fileIdList)){
return true; return true;
} }
List<EvidenceFile> evidenceFiles = evidenceFileService.listByFileIds(fileIdList); List<FileEvidenceProperty> properties = fileEvidencePropertyService.lambdaQuery().in(FileEvidenceProperty::getFileId, fileIdList).list();
for (String fileId : fileIdList) { for (String fileId : fileIdList) {
if (!evidenceFilesExist(fileId, evidenceFiles)){ if (!evidencePropertiesExist(fileId, properties)){
return false; return false;
} }
} }
@ -215,6 +213,7 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
@Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager") @Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager")
public void doRetrieveTitle(List<String> fileIdList) { public void doRetrieveTitle(List<String> fileIdList) {
// todo:等待ocr识别完成
List<RecordFileDTO> recordFileDTOS = ocrProcessService.queryFileListWithIdSort(fileIdList); List<RecordFileDTO> recordFileDTOS = ocrProcessService.queryFileListWithIdSort(fileIdList);
if (CollUtil.isEmpty(recordFileDTOS)){ if (CollUtil.isEmpty(recordFileDTOS)){
log.warn("doRetrieveTitle:文件id:{} 未查询到文件信息...", StrUtil.join(",", fileIdList)); log.warn("doRetrieveTitle:文件id:{} 未查询到文件信息...", StrUtil.join(",", fileIdList));
@ -228,6 +227,7 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
}).toList(); }).toList();
List<OcrExtractDto> result = ocrExtractService.extractTitle(dtoList); List<OcrExtractDto> result = ocrExtractService.extractTitle(dtoList);
log.info("doRetrieveTitle,extractTitle返回结果是{}", JSONUtil.toJsonStr(result));
if (CollUtil.isEmpty(result)){ if (CollUtil.isEmpty(result)){
log.warn("retrieveTitle:文件id:{} 提取标题失败", StrUtil.join(",", fileIdList)); 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){ private boolean evidencePropertiesExist(String fileId, List<FileEvidenceProperty> properties){
for (EvidenceFile evidenceFile : evidenceFiles) { for (FileEvidenceProperty property : properties) {
if (StrUtil.equals(fileId, evidenceFile.getFileId())){ if (StrUtil.equals(fileId, property.getFileId())){
return true; return true;
} }
} }

@ -78,6 +78,9 @@ public class OCRRecordServiceImpl implements OCRRecordService {
recordFileDTOS.forEach(record->{ recordFileDTOS.forEach(record->{
record.formatFileSize(); record.formatFileSize();
record.setDefaultEvidenceTypeDesc(); record.setDefaultEvidenceTypeDesc();
if (StrUtil.isEmpty(record.getReviseText())){
record.setReviseText(record.getOcrText());
}
}); });
return recordFileDTOS; return recordFileDTOS;

@ -30,6 +30,8 @@
<id column="file_id" property="fileId"/> <id column="file_id" property="fileId"/>
<result column="filename" property="fileName"/> <result column="filename" property="fileName"/>
<result column="file_type" property="fileType"/> <result column="file_type" property="fileType"/>
<result column="draw_img_id" property="drawImgId"/>
<result column="ocr_text" property="ocrText"/>
</resultMap> </resultMap>
<resultMap id="CaseEvidenceDetailDTOMapId" type="com.supervision.police.dto.CaseEvidenceDetailDTO"> <resultMap id="CaseEvidenceDetailDTOMapId" type="com.supervision.police.dto.CaseEvidenceDetailDTO">
@ -62,12 +64,15 @@
ce.evidence_name, ce.evidence_name,
ce.evidence_type, ce.evidence_type,
ef.file_id, ef.file_id,
fop.draw_img_id,
fop.ocr_text,
mf.filename, mf.filename,
mf.file_type, mf.file_type,
ce.update_time ce.update_time
from case_evidence ce from case_evidence ce
left join evidence_file ef on ce.id = ef.evidence_id left join evidence_file ef on ce.id = ef.evidence_id
left join minio_file mf on mf.id = ef.file_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> <where>
<if test="evidenceId != null and evidenceId != ''"> <if test="evidenceId != null and evidenceId != ''">
ce.id = #{evidenceId} ce.id = #{evidenceId}

@ -26,12 +26,14 @@
ep.evidence_id as evidenceId, ep.evidence_id as evidenceId,
op.file_id as fileId, op.file_id as fileId,
op.draw_img_id as drawImgId, op.draw_img_id as drawImgId,
op.ocr_text as ocrText,
op.revise_text as reviseText,
op.status as ocrStatus, op.status as ocrStatus,
ep.property_name as propertyName, ep.property_name as propertyName,
ep.property_value as propertyValue ep.property_value as propertyValue
from file_ocr_process op from file_ocr_process op
left join file_evidence_property ep on ep.file_id = op.file_id 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=")"> <foreach collection="fileIdList" item="fileId" open="(" separator="," close=")">
#{fileId} #{fileId}
</foreach> </foreach>

Loading…
Cancel
Save