1. 证据改造代码初次提交

topo_dev
xueqingkun
parent a1df6ef82e
commit 2d4332bfcf

@ -3,11 +3,9 @@ package com.supervision.police.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.supervision.common.domain.R;
import com.supervision.police.dto.EvidenceCategoryDTO;
import com.supervision.police.dto.CaseEvidenceDetailDTO;
import com.supervision.police.dto.EvidenceIdWrapper;
import com.supervision.police.domain.EvidenceDirectory;
import com.supervision.police.dto.*;
import com.supervision.police.service.CaseEvidenceService;
import com.supervision.police.dto.CaseEvidenceDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -64,9 +62,85 @@ public class CaseEvidenceController {
@Operation(summary = "查询案件证据分类树")
@GetMapping("/category/tree")
public R<List<EvidenceCategoryDTO>> listCategoryTree(@RequestParam(defaultValue = "1")
public R<List<EvidenceCategoryDTO>> listCategoryTree(@RequestParam(name = "caseType",defaultValue = "1")
@Parameter(name = "caseType",description = "案件类型") String caseType) {
List<EvidenceCategoryDTO> list = caseEvidenceService.listCategoryTree(caseType);
return R.ok(list);
}
@Operation(summary = "查询案件证据目录树")
@GetMapping("/directory/tree")
public R<List<EvidenceDirectoryDTO>> listDirectoryTree(@RequestParam("caseId")
@Parameter(name = "caseId",description = "案件id") String caseId) {
List<EvidenceDirectoryDTO> list = caseEvidenceService.listDirectoryTree(caseId);
return R.ok(list);
}
@Operation(summary = "更新证据目录信息")
@PostMapping("/directory/update")
public R<Boolean> updateDirectory(@RequestBody EvidenceDirectory evidenceDirectory) {
Boolean success = caseEvidenceService.updateDirectory(evidenceDirectory);
return R.ok(success);
}
@Operation(summary = "移动文件到指定目录")
@PostMapping("/directory/file/mv")
public R<Boolean> moveFile(@RequestBody DirectoryFileDTO evidenceFileDTO) {
Boolean success = caseEvidenceService.moveFile(evidenceFileDTO);
return R.ok(success);
}
@Operation(summary = "删除证据文件")
@PostMapping("/directory/file/rm")
public R<Boolean> removeFile(@RequestBody DirectoryFileDTO evidenceFileDTO) {
Boolean success = caseEvidenceService.removeFile(evidenceFileDTO);
return R.ok(success);
}
@Operation(summary = "删除文件目录")
@PostMapping("/directory/directory/rm")
public R<Boolean> removeDirectory(@RequestBody List<String> directoryIdList) {
Boolean success = caseEvidenceService.removeDirectory(directoryIdList);
return R.ok(success);
}
@Operation(summary = "证据识别并提取")
@PostMapping("/ocrAndExtract")
public R<String> ocrAndExtract(@RequestBody List<EvidenceDirectoryDTO> evidenceFileDTOS, @RequestParam(name = "caseId") String caseId) {
String batchNo = caseEvidenceService.ocrAndExtract(caseId, evidenceFileDTOS);
return R.ok(batchNo);
}
@Operation(summary = "识别并提取列表")
@GetMapping("/ocrAndExtract/list")
public R<List<EvidenceProcessDTO>> listOcrAndExtract(@RequestParam("caseId") String caseId,
@RequestParam(value = "batchNo",required = false) String batchNo) {
List<EvidenceProcessDTO> list = caseEvidenceService.listOcrAndExtract(caseId,batchNo);
return R.ok(list);
}
@Operation(summary = "核实证据")
@GetMapping("/caseEvidence/verify")
public R<List<EvidenceProcessDTO>> verifyEvidence(@RequestBody List<EvidenceVerifyDTO> evidenceVerifyDTOS,
@RequestParam("caseId") String caseId,
@RequestParam(value = "batchNo",required = false) String batchNo) {
caseEvidenceService.verifyEvidence(evidenceVerifyDTOS,caseId,batchNo);
return R.ok();
}
@Operation(summary = "查询证据详情-结果以树的方式展示")
@GetMapping("/caseEvidence/details")
public R<List<EvidenceDirectoryDTO>> evidenceDetails(@RequestParam("caseId") String caseId,
@RequestParam(value = "batchNo",required = false) String batchNo) {
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = caseEvidenceService.evidenceDetails(caseId,batchNo);
return R.ok(evidenceDirectoryDTOS);
}
}

@ -39,6 +39,7 @@ public class EvidenceCategory implements Serializable {
/**
* url
*/
@TableField("icon_url")
private String iconURl;
/**

@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@ -44,6 +43,12 @@ public class EvidenceFile implements Serializable {
*/
private String directoryId;
/**
*
*/
private String batchNo;
/**
* ID
*/

@ -48,6 +48,9 @@ public class CaseEvidenceDTO {
@Schema(description = "案件证据文件列表")
private List<EvidenceFile> evidenceFileList = new ArrayList<>();
@Schema(description = "目录id")
private String directoryId;
public CaseEvidence toCaseEvidence(){
CaseEvidence caseEvidence = new CaseEvidence();

@ -41,6 +41,11 @@ public class CaseEvidenceDetailDTO {
@Schema(description = "乙方")
private String partyB;
@Schema(description = "案件证据目录id")
private String directoryId;
private String caseId;
@Schema(description = "案件证据文件信息列表")
private List<EvidenceFileDTO> fileList;
@ -51,6 +56,13 @@ public class CaseEvidenceDetailDTO {
@Schema(description = "案件证据属性")
private Map<String,String> property= new HashMap<>();
/**
* -1 0 1
*/
private String updateStatus = "-1";
private String processStatus;
public CaseEvidenceDetailDTO() {
}
@ -88,4 +100,20 @@ public class CaseEvidenceDetailDTO {
property.put(fileEvidenceProperty.getPropertyName(),fileEvidenceProperty.getPropertyValue());
}
}
public CaseEvidence toCaseEvidence(){
CaseEvidence caseEvidence = new CaseEvidence();
caseEvidence.setId(this.id);
caseEvidence.setCaseId(this.caseId);
caseEvidence.setEvidenceName(this.evidenceName);
caseEvidence.setEvidenceType(this.evidenceType);
caseEvidence.setDirectoryId(this.directoryId);
caseEvidence.setProvider(this.provider);
caseEvidence.setPartyA(this.partyA);
caseEvidence.setPartyB(this.partyB);
caseEvidence.setProperty(this.property);
return caseEvidence;
}
}

@ -0,0 +1,46 @@
package com.supervision.police.dto;
import lombok.Data;
@Data
public class CategoryPromptDTO {
/**
* id
*/
private String directoryId;
/**
*
*/
private String directoryName;
/**
* id
*/
private String categoryId;
/**
*
*/
private String categoryName;
/**
* id
*/
private String promptId;
/**
*
*/
private String promptName;
/**
*
*/
private String promptType;
/**
*
*/
private String prompt;
}

@ -0,0 +1,30 @@
package com.supervision.police.dto;
import lombok.Data;
import java.util.List;
/**
* DTO
*/
@Data
public class DirectoryFileDTO {
/**
* id
*/
private String caseId;
/**
* id
*/
private List<String> fileIdList;
/**
* id
*/
private String directoryId;
}

@ -1,5 +1,7 @@
package com.supervision.police.dto;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.supervision.police.domain.EvidenceCategory;
import lombok.Data;
@ -32,11 +34,32 @@ public class EvidenceCategoryDTO {
*/
private String parentId;
/**
*
*/
private String promptName;
/**
*
*/
private List<EvidenceCategoryDTO> child;
/**
*
*/
private int level = -1;
/**
*
*/
private String categoryLevel;
/**
* id
*/
private String categoryId;
public EvidenceCategoryDTO() {
}
@ -47,4 +70,28 @@ public class EvidenceCategoryDTO {
this.parentId = category.getParentId();
this.child = new ArrayList<>();
}
/**
*
* @param categoryId id
* @param currentLevel
* @return
*/
public int evalLevel(String categoryId, int currentLevel) {
if (StrUtil.isEmpty(categoryId)){
return -1;
}
if (StrUtil.equals(this.id, categoryId)){
return currentLevel;
}
if (CollUtil.isNotEmpty(this.child)){
for (EvidenceCategoryDTO evidenceCategoryDTO : child) {
int level = evidenceCategoryDTO.evalLevel(categoryId, currentLevel + 1);
if (level != -1){
return level;
}
}
}
return -1;
}
}

@ -0,0 +1,166 @@
package com.supervision.police.dto;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.supervision.police.domain.EvidenceDirectory;
import lombok.Data;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
*
*/
@Data
public class EvidenceDirectoryDTO {
/**
* id
*/
private String id;
/**
*
*/
private String directoryName;
/**
* id
*/
private String parentId;
/**
*
*/
private String categoryId;
/**
*
*/
private List<EvidenceDirectoryDTO> child;
/**
* id
*/
private List<String> fileIdList = new ArrayList<>();
/**
*
*/
private List<EvidenceFileDTO> fileInfoList = new ArrayList<>();
private int level = -1;
public EvidenceDirectoryDTO() {
}
public EvidenceDirectoryDTO(EvidenceDirectory directory){
if (directory == null){
return;
}
this.id = directory.getId();
this.directoryName = directory.getDirectoryName();
this.categoryId = directory.getCategoryId();
this.parentId = directory.getParentId();
this.child = new ArrayList<>();
}
public EvidenceDirectoryDTO findDirectory(String directoryId){
if (StrUtil.isEmpty(directoryId)){
return null;
}
if (StrUtil.equals(this.id, directoryId)){
return this;
}
if (CollUtil.isNotEmpty(this.getChild())){
for (EvidenceDirectoryDTO evidenceDirectoryDTO : this.getChild()) {
EvidenceDirectoryDTO directoryDTO = evidenceDirectoryDTO.findDirectory(directoryId);
if (directoryDTO != null){
return directoryDTO;
}
}
}
return null;
}
public List<String> listAllFileId(){
List<String> fileIdList = new ArrayList<>();
if (CollUtil.isNotEmpty(this.fileIdList)){
fileIdList.addAll(this.fileIdList);
}
if (CollUtil.isNotEmpty(this.child)){
for (EvidenceDirectoryDTO child : this.getChild()) {
fileIdList.addAll(child.listAllFileId());
}
}
return fileIdList;
}
public List<EvidenceDirectoryDTO> listAllDirectory(){
List<EvidenceDirectoryDTO> directoryList = new ArrayList<>();
directoryList.add(this);
if (CollUtil.isNotEmpty(this.child)){
for (EvidenceDirectoryDTO child : this.getChild()) {
directoryList.addAll(child.listAllDirectory());
}
}
return directoryList;
}
public int evalLevel(String id, int currentLevel) {
if (StrUtil.isEmpty(id)){
return -1;
}
if (StrUtil.equals(this.id, id)){
return currentLevel;
}
if (CollUtil.isNotEmpty(this.child)){
for (EvidenceDirectoryDTO evidenceCategoryDTO : child) {
int level = evidenceCategoryDTO.evalLevel(id, currentLevel + 1);
if (level != -1){
return level;
}
}
}
return -1;
}
public void appendChildDirectory(){
if (CollUtil.isNotEmpty(this.child)){
for (EvidenceDirectoryDTO directoryDTO : child) {
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
evidenceFileDTO.setFileId(directoryDTO.getId());
evidenceFileDTO.setDirectoryId(this.id);
evidenceFileDTO.setDirectoryFlag("1");
evidenceFileDTO.setFileName(directoryDTO.getDirectoryName());
this.fileInfoList.add(evidenceFileDTO);
// 递归子级目录
directoryDTO.appendChildDirectory();
}
}
}
public void appendChildFile(Map<String,List<EvidenceFileDTO>> fileMap){
List<EvidenceFileDTO> evidenceFileDTOS = fileMap.get(this.id);
if (CollUtil.isNotEmpty(evidenceFileDTOS)){
this.fileInfoList.addAll(evidenceFileDTOS);
}else {
if (CollUtil.isNotEmpty(this.getChild())){
for (EvidenceDirectoryDTO directoryDTO : this.child) {
directoryDTO.appendChildFile(fileMap);
}
}
}
}
}

@ -1,5 +1,6 @@
package com.supervision.police.dto;
import com.supervision.police.domain.CaseEvidence;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -9,7 +10,7 @@ public class EvidenceFileDTO {
@Schema(description = "案件证据id")
private String evidenceId;
@Schema(description = "文件id集合")
@Schema(description = "文件id")
private String fileId;
@Schema(description = "文件名称")
@ -18,10 +19,42 @@ public class EvidenceFileDTO {
@Schema(description = "文件类型")
private String fileType;
@Schema(description = "文件大小")
private int fileSize;
@Schema(description = "文件预览图id")
private String drawImgId;
@Schema(description = "文件识别内容")
private String ocrText;
@Schema(description = "目录id")
private String directoryId;
@Schema(description = "数据更新状态 -1无需更新 0删除 1新增 2: 更新")
private String updateStatus = "-1";
@Schema(description = "排序 升序")
private int rank;
@Schema(description = "是否是目录文件 0否 1是")
private String directoryFlag;
@Schema(description = "批次号")
private String batchNo;
/**
*
*
*/
private CaseEvidence evidenceInfo;
/**
*
*/
private CategoryPromptDTO prompt;
}

@ -0,0 +1,127 @@
package com.supervision.police.dto;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.unit.DataSizeUtil;
import cn.hutool.core.util.StrUtil;
import com.supervision.police.domain.EvidenceCategory;
import lombok.Data;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* DTO
*/
@Data
public class EvidenceProcessDTO {
/**
* id
*/
private String evidenceId;
/**
*
*/
private String evidenceName;
/**
*
*/
private String attachmentName;
/**
* id
*/
private String templateId;
/**
*
*/
private String templateName;
/**
*
*/
private String evidenceType;
/**
*
*/
private String evidenceTypeName;
/**
*
*/
private String attachmentSize;
/**
*
*/
private String status;
/**
* id
*/
private String directoryId;
public EvidenceProcessDTO() {
}
public EvidenceProcessDTO(CaseEvidenceDetailDTO caseEvidence) {
this.evidenceId = caseEvidence.getId();
this.evidenceName = caseEvidence.getEvidenceName();
if (CollUtil.isNotEmpty(caseEvidence.getFileList())){
this.attachmentName = caseEvidence.getFileList()
.stream().map(EvidenceFileDTO::getFileName).collect(Collectors.joining(","));
Integer sum = caseEvidence.getFileList().stream().map(EvidenceFileDTO::getFileSize).reduce(0, Integer::sum);
this.attachmentSize = DataSizeUtil.format(sum);
}
this.evidenceType = caseEvidence.getEvidenceType();
this.status = caseEvidence.getProcessStatus();
}
public void setTemplateInfo(List<EvidenceDirectoryDTO> directoryList,List<EvidenceCategory> categoryList){
if (CollUtil.isEmpty(directoryList)){
return;
}
EvidenceDirectoryDTO directory = null;
for (EvidenceDirectoryDTO directoryDTO : directoryList) {
directory = directoryDTO.findDirectory(this.directoryId);
if (null != directory){
break;
}
}
if (null == directory){
return;
}
Map<String, EvidenceCategory> categoryMap = categoryList.stream().collect(Collectors.toMap(EvidenceCategory::getId, v -> v));
this.templateId = directory.getCategoryId();
EvidenceCategory category = categoryMap.get(directory.getCategoryId());
if (null != category){
this.templateName = category.getCategoryName();
if (directory.getLevel()== 2){
this.evidenceTypeName = category.getCategoryName();
}
if (directory.getLevel() == 3){
String parentId = category.getParentId();
if (StrUtil.isNotEmpty(parentId)){
EvidenceCategory parentCategory = categoryMap.get(parentId);
if (null != parentCategory){
this.evidenceTypeName = StrUtil.join(" / ", parentCategory.getCategoryName(), category.getCategoryName());
}
}
this.templateId = directory.getParentId();
}
}
}
}

@ -0,0 +1,20 @@
package com.supervision.police.dto;
import lombok.Data;
import java.util.Map;
/**
* DTO
*/
@Data
public class EvidenceVerifyDTO {
private String evidenceId;
private String fileId;
private String ocrText;
private Map<String,Object> properties;
}

@ -2,6 +2,9 @@ package com.supervision.police.mapper;
import com.supervision.police.domain.EvidenceCategory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.supervision.police.dto.EvidenceCategoryDTO;
import java.util.List;
/**
* @author Administrator
@ -11,6 +14,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface EvidenceCategoryMapper extends BaseMapper<EvidenceCategory> {
List<EvidenceCategoryDTO> listCategoryDTO(String caseType);
}

@ -2,6 +2,9 @@ package com.supervision.police.mapper;
import com.supervision.police.domain.EvidenceDirectory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.supervision.police.dto.CategoryPromptDTO;
import java.util.List;
/**
* @author Administrator
@ -11,6 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface EvidenceDirectoryMapper extends BaseMapper<EvidenceDirectory> {
List<CategoryPromptDTO> listCategoryPrompt(String caseId);
}

@ -15,6 +15,8 @@ import java.util.List;
public interface EvidenceFileMapper extends BaseMapper<EvidenceFile> {
List<EvidenceFileDTO> listFileInfo(List<String> evidenceIds);
List<EvidenceFileDTO> listFileInfoByCaseId(String caseId);
}

@ -3,9 +3,8 @@ package com.supervision.police.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.domain.CaseEvidence;
import com.supervision.police.dto.EvidenceCategoryDTO;
import com.supervision.police.dto.CaseEvidenceDTO;
import com.supervision.police.dto.CaseEvidenceDetailDTO;
import com.supervision.police.domain.EvidenceDirectory;
import com.supervision.police.dto.*;
import java.util.List;
@ -40,6 +39,9 @@ public interface CaseEvidenceService extends IService<CaseEvidence> {
*/
List<CaseEvidenceDetailDTO> queryEvidenceList(String caseId);
List<CaseEvidenceDetailDTO> queryEvidenceList(String caseId,String batchNo);
/**
*
* @param caseId id
@ -58,4 +60,67 @@ public interface CaseEvidenceService extends IService<CaseEvidence> {
* @param evidenceId id
*/
void evidenceAnalysis(String evidenceId);
/**
*
* @param caseId id
* @return
*/
List<EvidenceDirectoryDTO> listDirectoryTree(String caseId);
/**
*
* @param caseId id
* @param caseType
*/
void initCaseEvidenceDirectory(String caseId,String caseType);
/**
*
* @param evidenceDirectory
* @return true / false
*/
Boolean updateDirectory(EvidenceDirectory evidenceDirectory);
/**
*
* @param evidenceFileDTO
* @return true / false
*/
Boolean moveFile(DirectoryFileDTO evidenceFileDTO);
/**
*
* @param evidenceFileDTO
* @return true / false
*/
Boolean removeFile(DirectoryFileDTO evidenceFileDTO);
/**
*
* @param directoryIdList id
* @return
*/
Boolean removeDirectory(List<String> directoryIdList);
/**
*
* @param evidenceFileDTOS
*/
String ocrAndExtract(String caseId, List<EvidenceDirectoryDTO> evidenceFileDTOS);
String updateCaseEvidence(List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOList);
/**
*
* @param caseId id
* @param batchNo
* @return
*/
List<EvidenceProcessDTO> listOcrAndExtract(String caseId,String batchNo);
void verifyEvidence(List<EvidenceVerifyDTO> evidenceVerifyDTOS,String caseId,String batchNo);
List<EvidenceDirectoryDTO> evidenceDetails(String caseId, String batchNo);
}

@ -2,6 +2,11 @@ package com.supervision.police.service;
import com.supervision.police.domain.EvidenceDirectory;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.dto.CategoryPromptDTO;
import com.supervision.police.dto.EvidenceDirectoryDTO;
import com.supervision.police.dto.EvidenceFileDTO;
import java.util.List;
/**
* @author Administrator
@ -10,4 +15,34 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface EvidenceDirectoryService extends IService<EvidenceDirectory> {
/**
*
* @param caseId id
* @return
*/
List<EvidenceDirectoryDTO> listDirectoryTree(String caseId);
/**
*
* @param directoryId id
* @param evidenceDirectoryDTOS
* @return
*/
EvidenceDirectoryDTO findDirectoryById(String directoryId, List<EvidenceDirectoryDTO> evidenceDirectoryDTOS);
/**
*
* @param directoryDTOS
* @param fileInfoList
*/
void appendFile(List<EvidenceDirectoryDTO> directoryDTOS, List<EvidenceFileDTO> fileInfoList);
/**
*
* @param caseId id
* @return
*/
List<CategoryPromptDTO> listCategoryPrompt(String caseId);
}

@ -16,4 +16,6 @@ public interface EvidenceFileService extends IService<EvidenceFile> {
List<EvidenceFileDTO> listFileInfo(List<String> evidenceIds);
List<EvidenceFile> listByFileIds(List<String> fileIds);
List<EvidenceFileDTO> listFileInfoByCaseId(String caseId);
}

@ -1,11 +1,15 @@
package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
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.minio.domain.MinioFile;
import com.supervision.minio.service.MinioService;
import com.supervision.police.dto.*;
import com.supervision.police.service.*;
import com.supervision.police.domain.CaseEvidence;
@ -18,11 +22,13 @@ 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.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@ -38,6 +44,10 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
private final FileOcrProcessService fileOcrProcessService;
private final MinioService minioService;
private final ModelCaseService modelCaseService;
@Autowired
private OCREvidenceService ocrEvidenceService;
@Autowired
@ -49,6 +59,8 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
@Autowired
private NotePromptService notePromptService;
private final XxlJobService xxlJobService;
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public String saveEvidence(CaseEvidenceDTO caseEvidenceDTO) {
@ -130,6 +142,19 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
return super.getBaseMapper().queryEvidenceList(caseId);
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public List<CaseEvidenceDetailDTO> queryEvidenceList(String caseId, String batchNo) {
List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOS = queryEvidenceList(caseId);
if (StrUtil.isNotEmpty(batchNo)){
for (CaseEvidenceDetailDTO evidenceDetail : caseEvidenceDetailDTOS) {
List<EvidenceFileDTO> filter = evidenceDetail.getFileList().stream().filter(file -> StrUtil.equals(file.getBatchNo(), batchNo)).toList();
evidenceDetail.setFileList(filter);
}
}
return caseEvidenceDetailDTOS;
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public IPage<CaseEvidenceDetailDTO> pageListEvidence(String caseId, String evidenceName, Integer pageNum, Integer pageSize) {
@ -196,7 +221,13 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
updateById(caseEvidence);
// 遍历OCR结果拼接ocrText并赋值给lLMExtractDto的text
StringBuilder ocrText = new StringBuilder();
fileOcrProcesses.forEach(fileOcrProcess -> ocrText.append(fileOcrProcess.getOcrText()));
fileOcrProcesses.forEach(fileOcrProcess -> {
if (StrUtil.isNotEmpty(fileOcrProcess.getReviseText())){
ocrText.append(fileOcrProcess.getReviseText());
}else {
ocrText.append(fileOcrProcess.getOcrText());
}
});
llmExtractDto.setText(ocrText.toString());
log.info("标题提取开始。");
long titleStart = System.currentTimeMillis();
@ -242,4 +273,469 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
return evidenceCategoryService.listCategoryTree(caseType);
}
@Override
public List<EvidenceDirectoryDTO> listDirectoryTree(String caseId) {
Assert.notEmpty(caseId,"案件ID不能为空!");
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = evidenceDirectoryService.listDirectoryTree(caseId);
evidenceDirectoryService.appendFile(evidenceDirectoryDTOS, evidenceFileService.listFileInfoByCaseId(caseId));
return evidenceDirectoryDTOS;
}
@Override
public void initCaseEvidenceDirectory(String caseId, String caseType) {
List<EvidenceCategoryDTO> evidenceCategoryDTOS = evidenceCategoryService.listCategoryTree(caseType);
initCaseEvidenceDirectory(evidenceCategoryDTOS, caseId, null);
}
@Override
public Boolean updateDirectory(EvidenceDirectory evidenceDirectory) {
Assert.notEmpty(evidenceDirectory.getId(),"目录ID不能为空!");
Assert.notEmpty(evidenceDirectory.getParentId(),"父级目录id不能为空");
return evidenceDirectoryService.lambdaUpdate()
.set(EvidenceDirectory::getParentId, evidenceDirectory.getParentId())
.eq(EvidenceDirectory::getId, evidenceDirectory.getId()).update();
}
@Override
public Boolean moveFile(DirectoryFileDTO evidenceFileDTO) {
Assert.notEmpty(evidenceFileDTO.getFileIdList(), "文件id不能为空");
Assert.notEmpty(evidenceFileDTO.getCaseId(), "案件id不能为空");
Assert.notEmpty(evidenceFileDTO.getDirectoryId(), "目录id不能为空");
return evidenceFileService.lambdaUpdate()
.set(EvidenceFile::getDirectoryId, evidenceFileDTO.getDirectoryId())
.in(EvidenceFile::getFileId, evidenceFileDTO.getFileIdList())
.update();
}
@Override
public Boolean removeFile(DirectoryFileDTO evidenceFileDTO) {
Assert.notEmpty(evidenceFileDTO.getFileIdList(), "文件id不能为空");
Assert.notEmpty(evidenceFileDTO.getCaseId(), "案件id不能为空");
return evidenceFileService.lambdaUpdate()
.in(EvidenceFile::getFileId, evidenceFileDTO.getFileIdList())
.remove();
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public Boolean removeDirectory(List<String> directoryIdList) {
if (CollUtil.isEmpty(directoryIdList)){
return false;
}
boolean success = evidenceDirectoryService.removeBatchByIds(directoryIdList);
if (success){
// 删除目录,意味着证据也要被删除
super.lambdaUpdate().eq(CaseEvidence::getDirectoryId, directoryIdList).remove();
evidenceFileService.lambdaUpdate().in(EvidenceFile::getDirectoryId, directoryIdList).remove();
}
return success;
}
/**
*
* 1.
* 2. ocr
* @param caseId
* @param evidenceFileDTOS
*/
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public String ocrAndExtract(String caseId, List<EvidenceDirectoryDTO> evidenceFileDTOS) {
List<CaseEvidenceDetailDTO> oldEvidences = this.queryEvidenceList(caseId);
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = listDirectoryTree(caseId);
List<CaseEvidenceDetailDTO> newEvidences = toCaseCaseEvidenceDetailDTO(evidenceFileDTOS, evidenceDirectoryDTOS);
newEvidences.forEach(caseEvidenceDetailDTO -> caseEvidenceDetailDTO.setCaseId(caseId));
List<CaseEvidenceDetailDTO> operationalEvidence = findChangedEvidence(oldEvidences, newEvidences);
String batchId = updateCaseEvidence(operationalEvidence);
for (CaseEvidenceDetailDTO caseEvidenceDetailDTO : operationalEvidence) {
if (StrUtil.equalsAny(caseEvidenceDetailDTO.getUpdateStatus(),"-1","0")){
// 只需要识别即可
fileOcrProcessService.syncSubmitOCR(List.of(caseEvidenceDetailDTO.getId()));
// todo:是否需要提取标题
}
if (StrUtil.equals(caseEvidenceDetailDTO.getUpdateStatus(),"1")){
// 需要分析ocr识别+标题提取)
xxlJobService.executeTaskByJobHandler("evidenceAnalysis", caseEvidenceDetailDTO.getId());
}
}
return batchId;
}
@Override
@Transactional(transactionManager = "dataSourceTransactionManager",propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public String updateCaseEvidence(List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOList) {
String batchNo = DateTime.now().toString("yyyyMMddHHmmss");
for (CaseEvidenceDetailDTO evidence : caseEvidenceDetailDTOList) {
if (evidence.getUpdateStatus().equals("1")){
// 新增
CaseEvidence caseEvidence = evidence.toCaseEvidence();
this.save(caseEvidence);
for (EvidenceFileDTO evidenceFileDTO : evidence.getFileList()) {
if (evidenceFileDTO.getUpdateStatus().equals("1")){
// 新增
EvidenceFile evidenceFile = new EvidenceFile(caseEvidence.getId(), evidenceFileDTO.getFileId());
evidenceFile.setDirectoryId(evidence.getDirectoryId());
evidenceFile.setRank(evidenceFileDTO.getRank());
evidenceFile.setBatchNo(batchNo);
evidenceFileService.save(evidenceFile);
}/*else if (evidenceFileDTO.getUpdateStatus().equals("0")){
// 删除
evidenceFileService.lambdaUpdate()
.eq(EvidenceFile::getEvidenceId, evidenceFileDTO.getEvidenceId())
.eq(EvidenceFile::getFileId, evidenceFileDTO.getFileId()).remove();
}else if (evidenceFileDTO.getUpdateStatus().equals("2")){
evidenceFileService.lambdaUpdate()
.set(EvidenceFile::getRank, evidenceFileDTO.getRank())
.update();
}*/
}
}/*else if (evidence.getUpdateStatus().equals("0")){
// 删除
this.removeById(evidence.getId());
evidenceFileService.lambdaUpdate().eq(EvidenceFile::getEvidenceId, evidence.getId()).remove();
}*/
}
return batchNo;
}
@Override
public List<EvidenceProcessDTO> listOcrAndExtract(String caseId,String batchNo) {
Assert.notEmpty(caseId, "案件id不能为空");
ModelCase modelCase = modelCaseService.getById(caseId);
Assert.notNull(modelCase, "案件不存在");
List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOS = this.queryEvidenceList(caseId,batchNo);
if (CollUtil.isNotEmpty(caseEvidenceDetailDTOS)){
return new ArrayList<>();
}
List<EvidenceProcessDTO> processDTOList = caseEvidenceDetailDTOS.stream().map(EvidenceProcessDTO::new).collect(Collectors.toList());
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = evidenceDirectoryService.listDirectoryTree(caseId);
List<EvidenceCategory> categoryList = evidenceCategoryService.lambdaQuery().eq(EvidenceCategory::getCaseType, modelCase.getCaseType()).list();
for (EvidenceProcessDTO evidenceProcessDTO : processDTOList) {
evidenceProcessDTO.setTemplateInfo(evidenceDirectoryDTOS, categoryList);
}
return processDTOList;
}
@Override
public void verifyEvidence(List<EvidenceVerifyDTO> evidenceVerifyDTOS,String caseId,String batchNo) {
Assert.notEmpty(caseId, "案件id不能为空");
if (CollUtil.isEmpty(evidenceVerifyDTOS)){
return;
}
List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOS = queryEvidenceList(caseId,batchNo);
Map<String, List<EvidenceVerifyDTO>> evidenceMap = evidenceVerifyDTOS.stream().collect(Collectors.groupingBy(EvidenceVerifyDTO::getEvidenceId));
for (Map.Entry<String, List<EvidenceVerifyDTO>> entry : evidenceMap.entrySet()) {
String evidenceId = entry.getKey();
List<EvidenceVerifyDTO> value = entry.getValue();
// 更新证据属性
this.lambdaUpdate().eq(CaseEvidence::getId, evidenceId).set(CaseEvidence::getProperty, CollUtil.getFirst(value).getProperties());
// 修改ocr内容
for (EvidenceVerifyDTO verifyDTO : value) {
if (StrUtil.isNotEmpty(verifyDTO.getOcrText())){
fileOcrProcessService.lambdaUpdate()
.eq(FileOcrProcess::getFileId, verifyDTO.getFileId())
.set(FileOcrProcess::getReviseText, verifyDTO.getOcrText()).update();
}
}
// 调整顺序
CaseEvidenceDetailDTO evidenceDetail = findEvidenceDetail(evidenceId, caseEvidenceDetailDTOS);
if (evidenceDetail != null){
List<String> list = value.stream().map(EvidenceVerifyDTO::getFileId).toList();
for (EvidenceFileDTO evidenceFileDTO : evidenceDetail.getFileList()) {
evidenceFileDTO.setRank(findRank(list, evidenceFileDTO.getFileId()));
evidenceFileService.lambdaUpdate().eq(EvidenceFile::getFileId, evidenceFileDTO.getFileId())
.eq(EvidenceFile::getEvidenceId, evidenceFileDTO.getEvidenceId())
.set(EvidenceFile::getRank, evidenceFileDTO.getRank()).update();
}
}
}
}
@Override
public List<EvidenceDirectoryDTO> evidenceDetails(String caseId, String batchNo) {
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = listDirectoryTree(caseId);
List<CaseEvidence> caseEvidenceList = this.lambdaQuery().eq(CaseEvidence::getCaseId, caseId).list();
List<CategoryPromptDTO> categoryPromptDTOS = evidenceDirectoryService.listCategoryPrompt(caseId);
Map<String, CaseEvidence> caseEvidenceMap = caseEvidenceList.stream().collect(Collectors.toMap(CaseEvidence::getId, Function.identity()));
Map<String, CategoryPromptDTO> categoryPromptMap = categoryPromptDTOS.stream().collect(Collectors.toMap(CategoryPromptDTO::getDirectoryId, Function.identity()));
for (EvidenceDirectoryDTO evidenceDirectoryDTO : evidenceDirectoryDTOS) {
if (CollUtil.isEmpty(evidenceDirectoryDTO.getFileInfoList())){
continue;
}
for (EvidenceFileDTO evidenceFileDTO : evidenceDirectoryDTO.getFileInfoList()) {
evidenceFileDTO.setPrompt(categoryPromptMap.get(evidenceFileDTO.getDirectoryId()));
evidenceFileDTO.setEvidenceInfo(caseEvidenceMap.get(evidenceFileDTO.getEvidenceId()));
}
}
return evidenceDirectoryDTOS;
}
private CaseEvidenceDetailDTO findEvidenceDetail(String evidenceId, List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOS) {
for (CaseEvidenceDetailDTO caseEvidenceDetailDTO : caseEvidenceDetailDTOS) {
if (StrUtil.equals(caseEvidenceDetailDTO.getId(), evidenceId)){
return caseEvidenceDetailDTO;
}
}
return null;
}
private List<CaseEvidenceDetailDTO> toCaseCaseEvidenceDetailDTO(List<EvidenceDirectoryDTO> newDirectoryDTOS,
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS) {
if (CollUtil.isEmpty(newDirectoryDTOS)){
return new ArrayList<>();
}
List<String> fileIdList = newDirectoryDTOS.stream().flatMap(directoryDTO -> directoryDTO.listAllFileId().stream()).toList();
Map<String, MinioFile> fileMap = minioService.listMinioFile(fileIdList).stream()
.collect(Collectors.toMap(MinioFile::getId, Function.identity()));
List<EvidenceDirectoryDTO> floatNewDirectoryDTOS = newDirectoryDTOS.stream().flatMap(directoryDTO -> directoryDTO.listAllDirectory().stream()).toList();
List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOS = new ArrayList<>();
for (EvidenceDirectoryDTO evidenceFile : floatNewDirectoryDTOS) {
String directoryId = evidenceFile.getId();
EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(directoryId, evidenceDirectoryDTOS);
if (null == directory){
log.warn("toCaseCaseEvidenceDetailDTO:目录id{}不存在对应的目录分类信息",directoryId);
continue;
}
if (directory.getLevel() == 2){
for (String fileId : evidenceFile.getFileIdList()) {
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO();
if (null != fileMap.get(fileId)){
// 证据名为文件名
caseEvidenceDetailDTO.setEvidenceName(fileMap.get(fileId).getFilename());
}
caseEvidenceDetailDTO.setEvidenceType(directory.getCategoryId());
caseEvidenceDetailDTO.setDirectoryId(directoryId);
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
evidenceFileDTO.setFileId(fileId);
caseEvidenceDetailDTO.setFileList(List.of(evidenceFileDTO));
caseEvidenceDetailDTOS.add(caseEvidenceDetailDTO);
}
}
if (directory.getLevel() == 3){
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO();
// 证据名为目录名
caseEvidenceDetailDTO.setEvidenceName(evidenceFile.getDirectoryName());
caseEvidenceDetailDTO.setEvidenceType(directory.getCategoryId());
caseEvidenceDetailDTO.setDirectoryId(directoryId);
List<EvidenceFileDTO> evidenceFileDTOS = new ArrayList<>();
for (String fileId : evidenceFile.getFileIdList()) {
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
evidenceFileDTO.setFileId(fileId);
evidenceFileDTOS.add(evidenceFileDTO);
}
caseEvidenceDetailDTO.setFileList(evidenceFileDTOS);
caseEvidenceDetailDTOS.add(caseEvidenceDetailDTO);
}
}
return caseEvidenceDetailDTOS;
}
/**
*
* @param oldEvidenceList
* @param newEvidenceFileList
* @return
*/
private List<CaseEvidenceDetailDTO> findChangedEvidence(List<CaseEvidenceDetailDTO> oldEvidenceList,
List<CaseEvidenceDetailDTO> newEvidenceFileList) {
List<CaseEvidenceDetailDTO> caseEvidence2DTOList = new ArrayList<>();
if (CollUtil.isEmpty(oldEvidenceList) && CollUtil.isNotEmpty(newEvidenceFileList)){
// 数据库中不存在数据,则全部新增
for (CaseEvidenceDetailDTO evidenceDetailDTO : newEvidenceFileList) {
List<String> fileIds = evidenceDetailDTO.getFileList().stream().map(EvidenceFileDTO::getFileId).toList();
evidenceDetailDTO.setUpdateStatus("1");
for (EvidenceFileDTO evidenceFileDTO : evidenceDetailDTO.getFileList()) {
evidenceFileDTO.setUpdateStatus("1");
evidenceFileDTO.setRank(findRank(fileIds,evidenceFileDTO.getFileId()));
}
}
caseEvidence2DTOList.addAll(newEvidenceFileList);
}
if (CollUtil.isNotEmpty(oldEvidenceList) && CollUtil.isEmpty(newEvidenceFileList)){
// 数据库中存在数据,没有新增数据
for (CaseEvidenceDetailDTO evidenceDetailDTO : oldEvidenceList) {
evidenceDetailDTO.setUpdateStatus("0");
for (EvidenceFileDTO evidenceFileDTO : evidenceDetailDTO.getFileList()) {
evidenceFileDTO.setUpdateStatus("0");
}
}
caseEvidence2DTOList.addAll(oldEvidenceList);
}
if (CollUtil.isNotEmpty(oldEvidenceList) && CollUtil.isNotEmpty(newEvidenceFileList)){
// 数据库中和新数据都存在
for (CaseEvidenceDetailDTO oldEvidence : oldEvidenceList) {
boolean isFind = false;
for (CaseEvidenceDetailDTO newEvidence : newEvidenceFileList) {
if (StrUtil.equals(oldEvidence.getId(),newEvidence.getId())){
isFind = true;
oldEvidence.setUpdateStatus("-1");
List<String> oldFileIds = oldEvidence.getFileList().stream().map(EvidenceFileDTO::getFileId).toList();
List<String> newFileIds = newEvidence.getFileList().stream().map(EvidenceFileDTO::getFileId).toList();
TupleIdRecord tupleIdRecord = compareFileList(oldFileIds, newFileIds);
List<EvidenceFileDTO> updateFileList = new ArrayList<>();
// 新增的文件顺序排在原有文件的后面
int initOrder = oldFileIds.size() -1;
for (String addFileId : tupleIdRecord.addFileList) {
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
evidenceFileDTO.setFileId(addFileId);
evidenceFileDTO.setUpdateStatus("1");
evidenceFileDTO.setRank(initOrder + findRank(newFileIds, addFileId));
updateFileList.add(evidenceFileDTO);
}
for (String deleteFileId : tupleIdRecord.deleteFileList) {
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
evidenceFileDTO.setFileId(deleteFileId);
evidenceFileDTO.setUpdateStatus("0");
evidenceFileDTO.setRank(findRank(oldFileIds, deleteFileId));
updateFileList.add(evidenceFileDTO);
}
for (String updateFileId : tupleIdRecord.updateFileList) {
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
evidenceFileDTO.setFileId(updateFileId);
evidenceFileDTO.setUpdateStatus("2");
evidenceFileDTO.setRank(findRank(oldFileIds, updateFileId));
updateFileList.add(evidenceFileDTO);
}
newEvidence.setFileList(updateFileList);
caseEvidence2DTOList.add(newEvidence);
}
}
if (!isFind){
oldEvidence.setUpdateStatus("0");
caseEvidence2DTOList.add(oldEvidence);
}
}
for (CaseEvidenceDetailDTO newEvidence : newEvidenceFileList) {
if (StrUtil.isEmpty(newEvidence.getId())){
newEvidence.setUpdateStatus("1");
List<String> newFileIds = newEvidence.getFileList().stream().map(EvidenceFileDTO::getFileId).toList();
for (EvidenceFileDTO evidenceFileDTO : newEvidence.getFileList()) {
evidenceFileDTO.setUpdateStatus("1");
evidenceFileDTO.setRank(findRank(newFileIds, evidenceFileDTO.getFileId()));
}
caseEvidence2DTOList.add(newEvidence);
}
}
}
return caseEvidence2DTOList;
}
private int findRank(List<String> newFileIds,String fileId){
for (int i = 0; i < newFileIds.size(); i++) {
if (newFileIds.get(i).equals(fileId)){
return i;
}
}
return -1;
}
/**
*
* @param evidenceCategoryDTOS
* @param caseId id
* @param parentId id
*/
private void initCaseEvidenceDirectory(List<EvidenceCategoryDTO> evidenceCategoryDTOS, String caseId, String parentId) {
for (EvidenceCategoryDTO evidenceCategoryDTO : evidenceCategoryDTOS) {
EvidenceDirectory evidenceDirectory = new EvidenceDirectory();
evidenceDirectory.setCaseId(caseId);
evidenceDirectory.setDirectoryName(evidenceCategoryDTO.getCategoryName());
evidenceDirectory.setCategoryId(evidenceCategoryDTO.getId());
evidenceDirectory.setParentId(parentId);
evidenceDirectoryService.save(evidenceDirectory);
if (CollUtil.isNotEmpty(evidenceCategoryDTO.getChild())) {
initCaseEvidenceDirectory(evidenceCategoryDTO.getChild(), caseId, evidenceDirectory.getId());
}
}
}
/**
* left right
* @param newFileIdList
* @param oldFileIdList
* @return
*/
private TupleIdRecord compareFileList(List<String> newFileIdList, List<String> oldFileIdList) {
List<String> addFileList = new ArrayList<>();
List<String> deleteFileList = new ArrayList<>();
List<String> updateFileList = new ArrayList<>();
if (CollUtil.isEmpty(oldFileIdList) && CollUtil.isNotEmpty(newFileIdList)){
addFileList = newFileIdList;
}
if (CollUtil.isNotEmpty(oldFileIdList) && CollUtil.isEmpty(newFileIdList)){
deleteFileList = oldFileIdList;
}
if (CollUtil.isNotEmpty(oldFileIdList) && CollUtil.isNotEmpty(newFileIdList)){
deleteFileList = oldFileIdList.stream().filter(fileId -> !newFileIdList.contains(fileId)).collect(Collectors.toList());
addFileList = newFileIdList.stream().filter(fileId -> !oldFileIdList.contains(fileId)).collect(Collectors.toList());
updateFileList = oldFileIdList.stream().filter(newFileIdList::contains).collect(Collectors.toList());
}
return new TupleIdRecord(addFileList,updateFileList, deleteFileList);
}
record TupleIdRecord(List<String> addFileList ,List<String> updateFileList, List<String> deleteFileList){}
}

@ -24,33 +24,13 @@ public class EvidenceCategoryServiceImpl extends ServiceImpl<EvidenceCategoryMap
@Override
public List<EvidenceCategoryDTO> listCategoryTree(String caseType) {
List<EvidenceCategory> categoryList = super.lambdaQuery().eq(EvidenceCategory::getCaseType, caseType).list();
if (CollUtil.isEmpty(categoryList)){
return new ArrayList<>(1);
}
List<EvidenceCategoryDTO> list = super.getBaseMapper().listCategoryDTO(caseType);
List<EvidenceCategoryDTO> evidenceCategoryDTOS = new ArrayList<>();
for (EvidenceCategory category : categoryList) {
if (StrUtil.isEmpty(category.getParentId())){
EvidenceCategoryDTO categoryDTO = new EvidenceCategoryDTO(category);
for (EvidenceCategory evidenceCategory : categoryList) {
if (StrUtil.equals(categoryDTO.getId(),evidenceCategory.getParentId())){
categoryDTO.getChild().add(new EvidenceCategoryDTO(evidenceCategory));
}
}
}
if (StrUtil.isNotEmpty(category.getParentId())){
for (EvidenceCategory child : categoryList) {
if (StrUtil.equals(child.getId(),category.getParentId())){
}
if (child.getId().equals(category.getParentId()));
}
}
for (EvidenceCategoryDTO categoryDTO : list) {
categoryDTO.setChild(list.stream()
.filter(evidenceCategoryDTO -> StrUtil.equals(categoryDTO.getId(),evidenceCategoryDTO.getParentId())).toList());
}
return null;
return list.stream().filter(categoryDTO -> StrUtil.isEmpty(categoryDTO.getParentId())).toList();
}
}

@ -1,11 +1,21 @@
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.EvidenceDirectory;
import com.supervision.police.dto.CategoryPromptDTO;
import com.supervision.police.dto.EvidenceDirectoryDTO;
import com.supervision.police.dto.EvidenceFileDTO;
import com.supervision.police.service.EvidenceDirectoryService;
import com.supervision.police.mapper.EvidenceDirectoryMapper;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Administrator
* @description evidence_directory()Service
@ -15,6 +25,73 @@ import org.springframework.stereotype.Service;
public class EvidenceDirectoryServiceImpl extends ServiceImpl<EvidenceDirectoryMapper, EvidenceDirectory>
implements EvidenceDirectoryService{
@Override
public List<EvidenceDirectoryDTO> listDirectoryTree(String caseId) {
List<EvidenceDirectory> list = super.lambdaQuery().eq(EvidenceDirectory::getCaseId, caseId).list();
List<EvidenceDirectoryDTO> directoryDTOS = list.stream().map(EvidenceDirectoryDTO::new).toList();
for (EvidenceDirectoryDTO directoryDTO : directoryDTOS) {
directoryDTO.setChild(directoryDTOS.stream()
.filter(item -> StrUtil.equals(directoryDTO.getId(),item.getParentId())).toList());
}
List<EvidenceDirectoryDTO> directoryDTOList = directoryDTOS.stream().filter(item -> StrUtil.isEmpty(item.getParentId())).toList();
List<String> directoryIds = list.stream().map(EvidenceDirectory::getId).toList();
for (String directoryId : directoryIds) {
// 设置目录层级
setDirectoryLevel(directoryId, directoryDTOList);
}
// 把文件也拼接到目录树中
return directoryDTOS;
}
@Override
public EvidenceDirectoryDTO findDirectoryById(String directoryId,
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS) {
for (EvidenceDirectoryDTO directoryDTO : evidenceDirectoryDTOS) {
EvidenceDirectoryDTO directory = directoryDTO.findDirectory(directoryId);
if (null != directory){
return directory;
}
}
return null;
}
@Override
public void appendFile(List<EvidenceDirectoryDTO> directoryDTOS, List<EvidenceFileDTO> fileInfoList) {
if (CollUtil.isEmpty(directoryDTOS)){
return;
}
Map<String, List<EvidenceFileDTO>> fileMap = fileInfoList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getDirectoryId));
for (EvidenceDirectoryDTO directoryDTO : directoryDTOS) {
directoryDTO.appendChildDirectory();
directoryDTO.appendChildFile(fileMap);
}
}
@Override
public List<CategoryPromptDTO> listCategoryPrompt(String caseId) {
Assert.notEmpty(caseId,"案件id不能为空!");
return super.getBaseMapper().listCategoryPrompt(caseId);
}
private void setDirectoryLevel(String directoryId, List<EvidenceDirectoryDTO> directoryDTOList) {
for (EvidenceDirectoryDTO evidenceDirectoryDTO : directoryDTOList) {
int level = evidenceDirectoryDTO.evalLevel(directoryId, 1);
if (level > 0) {
evidenceDirectoryDTO.setLevel(level);
}
return;
}
}
}

@ -32,6 +32,11 @@ public class EvidenceFileServiceImpl extends ServiceImpl<EvidenceFileMapper, Evi
}
return super.lambdaQuery().in(EvidenceFile::getFileId, fileIds).list();
}
@Override
public List<EvidenceFileDTO> listFileInfoByCaseId(String caseId) {
return super.getBaseMapper().listFileInfoByCaseId(caseId);
}
}

@ -70,6 +70,9 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase
@Autowired
private CasePersonService casePersonService;
@Autowired
private CaseEvidenceService caseEvidenceService;
/**
*
*
@ -162,15 +165,16 @@ public class ModelCaseServiceImpl extends ServiceImpl<ModelCaseMapper, ModelCase
// 保存案件行为人
casePersonService.saveCaseActor(modelCase.getId(), modelCaseBase.getCaseActorName(), modelCaseBase.getCaseActorIdCard());
// 这里需要调用知识库的接口,去保存知识库
CreateBaseDTO createBaseDTO = new CreateBaseDTO();
createBaseDTO.setKnowledge_base_name(modelCase.getCaseNo());
LangChainChatRes chat = langChainChatService.createBase(createBaseDTO);
log.info("创建知识库:{}", chat);
if (200 != chat.getCode()) {
throw new BusinessException("保存知识库失败");
}
caseEvidenceService.initCaseEvidenceDirectory(modelCase.getId(), modelCase.getCaseType());
// // 这里需要调用知识库的接口,去保存知识库
// CreateBaseDTO createBaseDTO = new CreateBaseDTO();
// createBaseDTO.setKnowledge_base_name(modelCase.getCaseNo());
// LangChainChatRes chat = langChainChatService.createBase(createBaseDTO);
// log.info("创建知识库:{}", chat);
// if (200 != chat.getCode()) {
// throw new BusinessException("保存知识库失败");
// }
}
if (i > 0) {
return R.okMsg("保存成功");

@ -34,6 +34,7 @@
<id column="file_id" property="fileId"/>
<result column="filename" property="fileName"/>
<result column="file_type" property="fileType"/>
<result column="size" property="fileSize"/>
<result column="draw_img_id" property="drawImgId"/>
<result column="ocr_text" property="ocrText"/>
</resultMap>
@ -42,17 +43,23 @@
<id column="id" property="id"/>
<result column="evidence_name" property="evidenceName"/>
<result column="evidence_type" property="evidenceType"/>
<result column="case_id" property="caseId"/>
<result column="process_status" property="processStatus"/>
<result column="directory_id" property="directoryId"/>
<result column="update_time" property="updateTime"/>
<collection property="fileList" ofType="com.supervision.police.dto.EvidenceFileDTO" resultMap="evidenceFileDTOMapId"/>
</resultMap>
<select id="queryEvidenceList" resultMap="CaseEvidenceDetailDTOMapId">
select ce.id,
ce.case_id,
ce.evidence_name,
ce.evidence_type,
ce.directory_id,
ef.file_id,
mf.filename,
mf.file_type,
mf.size,
ce.update_time
from case_evidence ce
left join evidence_file ef on ce.id = ef.evidence_id
@ -64,9 +71,13 @@
</where>
</select>
<select id="queryEvidenceDetail" resultMap="CaseEvidenceDetailDTOMapId">
select ce.id,
select
ce.id,
ce.case_id,
ce.evidence_name,
ce.evidence_type,
ce.process_status,
ce.directory_id,
ef.file_id,
fop.draw_img_id,
fop.ocr_text,

@ -24,4 +24,21 @@
create_user_id,create_time,update_user_id,
update_time
</sql>
<select id="listCategoryDTO" resultType="com.supervision.police.dto.EvidenceCategoryDTO">
select
c.id as id,
c.prompt_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 name
from evidence_category c
left join note_prompt np on c.prompt_id = np.id
<where>
<if test="case_type != null and case_type != ''">
AND c.case_type = #{id}
</if>
</where>
</select>
</mapper>

@ -21,4 +21,18 @@
category_id,parent_id,create_user_id,
create_time,update_user_id,update_time
</sql>
<select id="listCategoryPrompt" resultType="com.supervision.police.dto.CategoryPromptDTO">
select ed.id as directoryId,
ed.directory_name as directoryName,
ed.category_id as categoryId,
ec.category_name as categoryName,
ec.prompt_id as promptId,
np.name as promptName,
np.type as promptType,
np.prompt
from evidence_directory ed
left join evidence_category ec on ed.category_id = ec.id
left join note_prompt np on ec.prompt_id = np.id
where case_id = #{caseId}
</select>
</mapper>

@ -9,6 +9,7 @@
<result property="evidenceId" column="evidence_id" jdbcType="VARCHAR"/>
<result property="fileId" column="file_id" jdbcType="VARCHAR"/>
<result property="rank" column="rank" jdbcType="INTEGER"/>
<result property="batchNo" column="batch_no" jdbcType="VARCHAR"/>
<result property="directoryId" column="directory_id" jdbcType="VARCHAR"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
@ -40,4 +41,21 @@
</if>
</where>
</select>
<select id="listFileInfoByCaseId" resultType="com.supervision.police.dto.EvidenceFileDTO">
select
ef.file_id as fileId,
ef.evidence_id as evidenceId,
ef.directory_id as directoryId,
mf.filename as filename,
mf.file_type as fileType
from evidence_file ef
left join minio_file mf on ef.file_id = mf.id
<where>
<if test="caseId != null and test=caseId != ''">
ef.evidence_id in
(select id from case_evidence where case_id = #{caseId})
</if>
</where>
</select>
</mapper>

@ -15,14 +15,13 @@ import com.supervision.demo.controller.ExampleChatController;
import com.supervision.police.domain.ModelRecordType;
import com.supervision.police.domain.NotePrompt;
import com.supervision.police.domain.NoteRecordSplit;
import com.supervision.police.dto.EvidenceDirectoryDTO;
import com.supervision.police.dto.RetrieveReqDTO;
import com.supervision.police.dto.RetrieveResDTO;
import com.supervision.police.service.*;
import com.supervision.thread.RecordSplitClassifyTask;
import com.supervision.thread.TripleExtractTask;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.ai.chat.ChatResponse;
@ -283,6 +282,38 @@ public class FuHsiApplicationTests {
content, stopWatch.getTotalTimeMillis());
}
@Autowired
private CaseEvidenceService caseEvidenceService;
@Test
public void ocrAndExtractTest() {
EvidenceDirectoryDTO directoryDTO = new EvidenceDirectoryDTO();
directoryDTO.setId("1845745238182703105");
directoryDTO.setDirectoryName("书证");
EvidenceDirectoryDTO directoryDTO1 = new EvidenceDirectoryDTO();
directoryDTO1.setId("1845745256180461570");
directoryDTO1.setDirectoryName("合同协议");
directoryDTO1.setParentId("1845745238182703105");
directoryDTO1.setFileIdList(List.of("1823958525387853825","1831232334119645185"));
directoryDTO.setChild(List.of(directoryDTO1));
EvidenceDirectoryDTO directoryDTO2 = new EvidenceDirectoryDTO();
directoryDTO2.setId("2222");
directoryDTO2.setDirectoryName("车辆合同协议");
directoryDTO2.setParentId("1845745256180461570");
directoryDTO2.setFileIdList(List.of("1833015941205143554","1833016215680397313","1833016621840019457"));
directoryDTO1.setChild(List.of(directoryDTO2));
caseEvidenceService.ocrAndExtract("1823955210189000706", List.of(directoryDTO));
}
@Test
public void initCaseDirectory() {
caseEvidenceService.initCaseEvidenceDirectory("1823955210189000706", "1");
System.out.println("222");
}
@Data
@AllArgsConstructor
class TripleRecord{

Loading…
Cancel
Save