1. 证据改造代码提交

topo_dev
xueqingkun 6 months ago
parent 06f3c4f42d
commit 6de2dea9c4

@ -64,6 +64,12 @@ public class CaseEvidenceController {
return R.ok(pageListEvidence);
}
@Operation(summary = "分析证据")
@GetMapping("/analysis")
public R<String> analysis(@RequestParam("evidenceId") @Parameter(name = "evidenceId",description = "案件类型") String evidenceId) {
caseEvidenceService.callEvidenceAnalysis(evidenceId);
return R.ok();
}
@Operation(summary = "查询案件证据分类树")
@GetMapping("/category/tree")
public R<List<EvidenceCategoryDTO>> listCategoryTree(@RequestParam(name = "caseType",defaultValue = "1")

@ -90,6 +90,7 @@ public class CaseEvidenceDetailDTO {
this.provider = caseEvidence.getProvider();
this.partyA = caseEvidence.getPartyA();
this.partyB = caseEvidence.getPartyB();
this.processStatus = caseEvidence.getProcessStatus();
}
this.fileList = fileList;
}
@ -129,14 +130,23 @@ public class CaseEvidenceDetailDTO {
}
public void setEvidenceFormatValue(EvidenceDirectoryDTO directory){
/**
* 12 3
* @param directory
*/
public void setEvidenceFormatValue(EvidenceDirectoryDTO directory,boolean ifFile){
if (ifFile){
this.evidenceFormat = CollUtil.getFirst(this.fileList).getFileType();
}
if (null == directory){
return;
}
if (2 == directory.getLevel() && CollUtil.isNotEmpty(this.fileList)){
if (1 == directory.getLevel() || 2 == directory.getLevel()){
this.evidenceFormat = CollUtil.getFirst(this.fileList).getFileType();
}
if (3 == directory.getLevel()){
if (3 == directory.getLevel() && CollUtil.isNotEmpty(this.fileList)){
this.evidenceFormat = "文件夹";
}
}

@ -118,6 +118,20 @@ public class EvidenceDirectoryDTO {
return fileIdList;
}
public List<EvidenceFileDTO> listAllFile(){
List<EvidenceFileDTO> fileList = new ArrayList<>();
if (CollUtil.isNotEmpty(this.fileInfoList)){
fileList.addAll(this.fileInfoList);
}
if (CollUtil.isNotEmpty(this.child)){
for (EvidenceDirectoryDTO child : this.getChild()) {
fileList.addAll(child.listAllFile());
}
}
return fileList;
}
public List<EvidenceDirectoryDTO> listAllDirectory(){
List<EvidenceDirectoryDTO> directoryList = new ArrayList<>();
directoryList.add(this);

@ -17,5 +17,7 @@ public class EvidenceVerifyDTO {
private String ocrText;
private String title;
private List<NotePromptExtractAttributesDto> properties;
}

@ -64,6 +64,8 @@ public interface CaseEvidenceService extends IService<CaseEvidence> {
*/
void evidenceAnalysis(String evidenceId);
void callEvidenceAnalysis(String evidenceId);
/**
*
* @param caseId id

@ -5,6 +5,7 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
@ -183,56 +184,79 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
// 三级目录查询证据文件
List<CaseEvidence> list = this.lambdaQuery().eq(CaseEvidence::getDirectoryId, directoryId).list();
if (CollUtil.isNotEmpty(list)) {
Page<EvidenceFileDTO> page = evidenceFileService.pageListFileInfo(
list.stream().map(CaseEvidence::getId).toList(), Page.of(pageNum, pageSize));
caseEvidencePage = page.convert(file -> {
CaseEvidence caseEvidence = new CaseEvidence();
caseEvidence.setId(file.getEvidenceId());
caseEvidence.setCaseId(caseId);
caseEvidence.setEvidenceName(file.getFileName());
caseEvidence.setEvidenceType(CollUtil.getFirst(list).getEvidenceType());
caseEvidence.setProvider(CollUtil.getFirst(list).getProvider());
caseEvidence.setDirectoryId(directoryId);
return caseEvidence;
});
caseEvidencePage.setTotal(page.getTotal());
caseEvidencePage.setSize(page.getSize());
caseEvidencePage.setCurrent(page.getCurrent());
}
Map<String, CaseEvidence> caseEvidenceMap = list.stream().collect(Collectors.toMap(CaseEvidence::getId, Function.identity()));
if (CollUtil.isNotEmpty(list)) {
Page<EvidenceFileDTO> page = evidenceFileService.pageListFileInfo(
list.stream().map(CaseEvidence::getId).toList(), Page.of(pageNum, pageSize));
caseEvidencePage = page.convert(file -> {
CaseEvidence caseEvidence = new CaseEvidence();
caseEvidence.setId(file.getEvidenceId());
caseEvidence.setCaseId(caseId);
caseEvidence.setEvidenceName(file.getFileName());
caseEvidence.setEvidenceType(CollUtil.getFirst(list).getEvidenceType());
caseEvidence.setProvider(CollUtil.getFirst(list).getProvider());
caseEvidence.setDirectoryId(directoryId);
CaseEvidence evidence = caseEvidenceMap.get(file.getEvidenceId());
if (null != evidence) {
if (StrUtil.isNotEmpty(evidence.getProcessStatus())) {
caseEvidence.setProcessStatus(EvidenceConstants.PROCESS_STATUS_MAPPING.get(evidence.getProcessStatus()));
}
caseEvidence.setProvider(evidence.getProvider());
}
return caseEvidence;
});
caseEvidencePage.setTotal(page.getTotal());
caseEvidencePage.setSize(page.getSize());
caseEvidencePage.setCurrent(page.getCurrent());
}
}
}
if (caseEvidencePage.getTotal() == 0) {
return PageDTO.of(pageNum, pageSize, 0);
}
if (caseEvidencePage.getTotal() == 0) {
return PageDTO.of(pageNum, pageSize, 0);
}
// 查询文件信息
List<String> evidenceIds = caseEvidencePage.getRecords().stream().map(CaseEvidence::getId).distinct().toList();
List<EvidenceFileDTO> fileInfoList = evidenceFileService.listFileInfo(evidenceIds);
Map<String, List<EvidenceFileDTO>> evidenceFileMap = fileInfoList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getEvidenceId));
// 查询文件信息
List<String> evidenceIds = caseEvidencePage.getRecords().stream().map(CaseEvidence::getId).distinct().toList();
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<EvidenceDirectoryDTO> evidenceDirectoryDTOS = listDirectoryTree(caseId);
List<RecordFileDTO> recordFileDTOS = fileOcrProcessService.queryFileList(fileInfoList.stream().map(EvidenceFileDTO::getFileId).toList());
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = listDirectoryTree(caseId);
// 转换分页结果
//查询字典
EvidenceDirectoryDTO queryDirectory = evidenceDirectoryService.findDirectoryById(directoryId, evidenceDirectoryDTOS);
List<ComDictionary> evidenceTypeDic = comDictionaryService.lambdaQuery().eq(ComDictionary::getType, "evidence_type").list();
return caseEvidencePage.convert(caseEvidence -> {
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO(caseEvidence, evidenceFileMap.get(caseEvidence.getId()));
caseEvidenceDetailDTO.setEvidenceTypeDesc(
comDictionaryService.getName(evidenceTypeDic, "evidence_type", caseEvidence.getEvidenceType()));
caseEvidenceDetailDTO.setContentTypeValue(recordFileDTOS);
EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(caseEvidence.getDirectoryId(), evidenceDirectoryDTOS);
caseEvidenceDetailDTO.setEvidenceFormatValue(directory, null != queryDirectory && directory.getLevel() == 3);
return caseEvidenceDetailDTO;
});
}
// 转换分页结果
//查询字典
List<ComDictionary> evidenceTypeDic = comDictionaryService.lambdaQuery().eq(ComDictionary::getType, "evidence_type").list();
return caseEvidencePage.convert(caseEvidence -> {
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO(caseEvidence, evidenceFileMap.get(caseEvidence.getId()));
caseEvidenceDetailDTO.setEvidenceTypeDesc(
comDictionaryService.getName(evidenceTypeDic, "evidence_type", caseEvidence.getEvidenceType()));
caseEvidenceDetailDTO.setContentTypeValue(recordFileDTOS);
EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(caseEvidence.getDirectoryId(), evidenceDirectoryDTOS);
caseEvidenceDetailDTO.setEvidenceFormatValue(directory);
return caseEvidenceDetailDTO;
});
}
private List<String> findAllDirectoryId(String directoryId,List<EvidenceDirectoryDTO> evidenceDirectoryDTOS){
if (StrUtil.isNotEmpty(directoryId)){
Optional<EvidenceDirectoryDTO> first = evidenceDirectoryDTOS.stream().filter(dto -> null != dto.findDirectory(directoryId)).findFirst();
if (first.isPresent()){
evidenceDirectoryDTOS = first.get().listAllDirectory();
}
}
return evidenceDirectoryDTOS.stream()
.flatMap(evidenceDirectoryDTO -> evidenceDirectoryDTO.listAllDirectory()
.stream().map(EvidenceDirectoryDTO::getId)).toList();
}
@Override
public CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId) {
return super.getBaseMapper().queryEvidenceDetail(evidenceId);
@ -310,6 +334,12 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
}
}
@Override
public void callEvidenceAnalysis(String evidenceId) {
Assert.notEmpty(evidenceId, "证据ID不能为空");
xxlJobService.executeTaskByJobHandler("evidenceAnalysis", evidenceId);
}
@Override
public List<EvidenceCategoryDTO> listCategoryTree(String caseType) {
@ -444,9 +474,13 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
((CaseEvidenceService) AopContext.currentProxy()).preSyncSubmitOCR(evidenceFileDTOList);
for (CaseEvidenceDetailDTO caseEvidenceDetailDTO : operationalEvidenceList) {
if (StrUtil.equals(caseEvidenceDetailDTO.getUpdateStatus(), "1")) {
// 需要分析ocr识别+标题提取)
xxlJobService.executeTaskByJobHandler("evidenceAnalysis", caseEvidenceDetailDTO.getId());
if (StrUtil.equals(caseEvidenceDetailDTO.getUpdateStatus(),"-1")){
boolean match = caseEvidenceDetailDTO.getFileList().stream().allMatch(file -> StrUtil.equals(file.getUpdateStatus(), "1"));
if(match){
// 需要分析ocr识别+标题提取)
xxlJobService.executeTaskByJobHandler("evidenceAnalysis", caseEvidenceDetailDTO.getId());
}
}
}
@ -550,7 +584,10 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
List<EvidenceVerifyDTO> value = entry.getValue();
// 更新证据属性
this.lambdaUpdate().eq(CaseEvidence::getId, evidenceId).set(CaseEvidence::getProperty, CollUtil.getFirst(value).getProperties());
this.lambdaUpdate().eq(CaseEvidence::getId, evidenceId)
.set(CaseEvidence::getProperty, JSONUtil.toJsonStr(CollUtil.getFirst(value).getProperties()))
.set(CaseEvidence::getTitle, CollUtil.getFirst(value).getTitle())
.update();
// 修改ocr内容
for (EvidenceVerifyDTO verifyDTO : value) {
@ -582,20 +619,22 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
return;
}
List<EvidenceVerifyDTO> collect = evidenceDirectoryList.stream()
.filter(evidenceDirectoryDTO -> CollUtil.isEmpty(evidenceDirectoryDTO.getFileIdList()))
.flatMap(evidenceDirectoryDTO -> evidenceDirectoryDTO.getFileInfoList().stream().map(i -> {
List<EvidenceVerifyDTO> evidenceVerifyDTOS = evidenceDirectoryList.stream()
.flatMap(evidenceDirectoryDTO -> evidenceDirectoryDTO.listAllFile().stream())
.map(fileDTO -> {
EvidenceVerifyDTO evidenceVerifyDTO = new EvidenceVerifyDTO();
evidenceVerifyDTO.setEvidenceId(i.getEvidenceId());
evidenceVerifyDTO.setFileId(i.getFileId());
evidenceVerifyDTO.setOcrText(i.getOcrText());
if (null != i.getEvidenceInfo()) {
evidenceVerifyDTO.setProperties(i.getEvidenceInfo().getProperty());
evidenceVerifyDTO.setEvidenceId(fileDTO.getEvidenceId());
evidenceVerifyDTO.setFileId(fileDTO.getFileId());
evidenceVerifyDTO.setOcrText(fileDTO.getOcrText());
CaseEvidence evidenceInfo = fileDTO.getEvidenceInfo();
if (null != evidenceInfo) {
evidenceVerifyDTO.setProperties(evidenceInfo.getProperty());
evidenceVerifyDTO.setTitle(evidenceInfo.getTitle());
}
return evidenceVerifyDTO;
})).toList();
}).toList();
this.verifyEvidence(collect, verifyEvidenceReqVO.getCaseId(), verifyEvidenceReqVO.getBatchNo());
this.verifyEvidence(evidenceVerifyDTOS, verifyEvidenceReqVO.getCaseId(), verifyEvidenceReqVO.getBatchNo());
}
@ -670,29 +709,40 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
}
}
Assert.notEmpty(directoryIdList, "目录分类不存在");
EvidenceDirectoryDTO directory = null;
EvidenceDirectoryDTO parentDirectory = null;
for (EvidenceDirectoryDTO evidenceDirectoryDTO : evidenceDirectoryDTOS) {
directory = evidenceDirectoryDTO.findDirectory(CollUtil.getFirst(directoryIdList));
if (null != directory) {
parentDirectory = evidenceDirectoryDTO.findDirectory(CollUtil.getFirst(directoryIdList));
if (null != parentDirectory){
break;
}
}
Assert.notNull(directory, "目录不存在");
Assert.notNull(parentDirectory, "目录不存在");
long count = evidenceDirectoryService.lambdaQuery().eq(EvidenceDirectory::getParentId, directory.getId())
long count = evidenceDirectoryService.lambdaQuery().eq(EvidenceDirectory::getParentId, parentDirectory.getId())
.list().stream()
.filter(d -> StrUtil.contains(d.getDirectoryName(), evidenceDirectory.getDirectoryName())).count();
if (count > 0) {
evidenceDirectory.setDirectoryName(evidenceDirectory.getDirectoryName() + count + 1);
if (count > 0){
evidenceDirectory.setDirectoryName(evidenceDirectory.getDirectoryName() + (count + 1));
}
EvidenceDirectory directory1 = new EvidenceDirectory();
directory1.setCaseId(evidenceDirectory.getCaseId());
directory1.setCategoryId(evidenceDirectory.getCategoryId());
directory1.setDirectoryName(evidenceDirectory.getDirectoryName());
directory1.setParentId(directory.getId());
evidenceDirectoryService.save(directory1);
return directory1;
// 创建目录
EvidenceDirectory directory = new EvidenceDirectory();
directory.setCaseId(evidenceDirectory.getCaseId());
directory.setCategoryId(evidenceDirectory.getCategoryId());
directory.setDirectoryName(evidenceDirectory.getDirectoryName());
directory.setParentId(parentDirectory.getId());
evidenceDirectoryService.save(directory);
// 目录创建完成,创建证据
CaseEvidence caseEvidence = new CaseEvidence();
caseEvidence.setEvidenceName(evidenceDirectory.getDirectoryName());
caseEvidence.setEvidenceType(directory.getCategoryId());
caseEvidence.setCaseId(evidenceDirectory.getCaseId());
caseEvidence.setDirectoryId(directory.getId());
caseEvidence.setProvider(evidenceDirectory.getProvider());
this.save(caseEvidence);
return directory;
}
@Override
@ -759,12 +809,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
caseEvidenceDetailDTOS.add(caseEvidenceDetailDTO);
}
}
if (directory.getLevel() == 3) {
if (directory.getLevel() == 3){
// 不会存在需要创建目录的场景
CaseEvidence caseEvidence = super.lambdaQuery().eq(CaseEvidence::getDirectoryId, directory.getId()).one();
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO();
if (CollUtil.isNotEmpty(directory.getFileInfoList())) {
String evidenceId = CollUtil.getFirst(directory.getFileInfoList()).getEvidenceId();
caseEvidenceDetailDTO.setId(evidenceId);
}
caseEvidenceDetailDTO.setId(caseEvidence.getId());
// 证据名为目录名
caseEvidenceDetailDTO.setEvidenceName(evidenceFile.getDirectoryName());
caseEvidenceDetailDTO.setEvidenceType(directory.getCategoryId());

@ -13,7 +13,7 @@ public class EvidenceDirectoryReqVO {
private String caseId;
/**
*
*
*/
private String directoryName;
@ -21,4 +21,10 @@ public class EvidenceDirectoryReqVO {
* id
*/
private String categoryId;
/**
*
*/
private String provider;
}

@ -19,10 +19,5 @@ public class VerifyEvidenceReqVO {
*/
private String batchNo;
/**
*
*/
private List<EvidenceVerifyDTO> evidenceVerifyList;
private List<EvidenceDirectoryDTO> evidenceDirectoryList;
}

@ -27,14 +27,14 @@
<select id="listCategoryDTO" resultType="com.supervision.police.dto.EvidenceCategoryDTO">
select
c.id as id,
c.prompt_id as promptId,
np.id as promptId,
c.case_type as caseType,
c.category_name as categoryName,
c.icon_url as iconURL,
c.parent_id as parent_id,
np.name as promptName
from evidence_category c
left join note_prompt np on c.prompt_id = np.id
left join note_prompt np on c.id = np.evidence_category_id
<where>
<if test="case_type != null and case_type != ''">
AND c.case_type = #{id}

Loading…
Cancel
Save