@ -13,7 +13,6 @@ 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.itextpdf.text.DocumentException ;
import com.supervision.common.constant.EvidenceConstants ;
import com.supervision.common.constant.IndexRuleConstants ;
import com.supervision.minio.domain.MinioFile ;
@ -24,31 +23,21 @@ import com.supervision.police.mapper.CaseEvidenceMapper;
import com.supervision.police.service.* ;
import com.supervision.police.vo.EvidenceDirectoryReqVO ;
import com.supervision.police.vo.VerifyEvidenceReqVO ;
import com.supervision.utils.UserUtil ;
import com.supervision.utils.WatermarkUtil ;
import com.supervision.utils.ZipFileUtil ;
import jakarta.servlet.http.HttpServletResponse ;
import lombok.RequiredArgsConstructor ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework.aop.framework.AopContext ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.beans.factory.annotation.Value ;
import org.springframework.scheduling.annotation.Async ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Propagation ;
import org.springframework.transaction.annotation.Transactional ;
import java.io.ByteArrayInputStream ;
import java.io.ByteArrayOutputStream ;
import java.io.IOException ;
import java.io.InputStream ;
import java.text.SimpleDateFormat ;
import java.time.LocalDateTime ;
import java.util.* ;
import java.util.function.Function ;
import java.util.stream.Collectors ;
import java.util.stream.Stream ;
import static com.supervision.common.constant.XxlJobConstants.TASK_NAME_EVIDENCE_ANALYSIS ;
@Slf4j
@Service
@ -56,11 +45,17 @@ import static com.supervision.common.constant.XxlJobConstants.TASK_NAME_EVIDENCE
public class CaseEvidenceServiceImpl extends ServiceImpl < CaseEvidenceMapper , CaseEvidence > implements CaseEvidenceService {
private final EvidenceFileService evidenceFileService ;
private final ComDictionaryService comDictionaryService ;
private final CaseStatusManageService caseStatusManageService ;
private final FileOcrProcessService fileOcrProcessService ;
private final MinioService minioService ;
private final ModelCaseService modelCaseService ;
@Autowired
private LLMExtractService llmExtractService ;
@Autowired
@ -74,9 +69,6 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
private final CaseEvidencePropertyService caseEvidencePropertyService ;
@Value ( "${fu-hsi-config.watermark.template}" )
private String watermarkTemplate ;
@Override
@Transactional ( transactionManager = "dataSourceTransactionManager" , rollbackFor = Exception . class )
public String saveEvidence ( CaseEvidenceDTO caseEvidenceDTO ) {
@ -87,11 +79,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
CaseEvidence caseEvidence = caseEvidenceDTO . toCaseEvidence ( ) ;
super . save ( caseEvidence ) ;
if ( CollUtil . isNotEmpty ( caseEvidence . getProperty ( ) ) ) {
if ( CollUtil . isNotEmpty ( caseEvidence . getProperty ( ) ) ) {
// 同时保存证据属性值
EvidenceDirectoryDTO rootDirectory = new EvidenceDirectoryDTO ( evidenceDirectoryService . listDirectoryTree ( caseEvidence . getCaseId ( ) ) ) ;
EvidenceDirectoryDTO directory = rootDirectory . findDirectory ( caseEvidence . getDirectoryId ( ) ) ;
caseEvidencePropertyService . saveEvidenceProperty ( caseEvidence . getId ( ) , directory . getCategoryId ( ) , caseEvidence . getProperty ( ) ) ;
caseEvidencePropertyService . saveEvidenceProperty ( caseEvidence . getId ( ) , directory . getCategoryId ( ) , caseEvidence . getProperty ( ) ) ;
}
@ -129,11 +121,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
// 更新证据属性
EvidenceDirectoryDTO rootDirectory = new EvidenceDirectoryDTO ( evidenceDirectoryService . listDirectoryTree ( caseEvidence . getCaseId ( ) ) ) ;
EvidenceDirectoryDTO directory = rootDirectory . findDirectory ( caseEvidence . getDirectoryId ( ) ) ;
if ( null ! = directory & & StrUtil . isNotEmpty ( directory . getCategoryId ( ) ) ) {
if ( CollUtil . isNotEmpty ( caseEvidence . getProperty ( ) ) ) {
caseEvidencePropertyService . updateEvidenceProperty ( caseEvidence . getId ( ) , directory . getCategoryId ( ) , caseEvidence . getProperty ( ) ) ;
} else {
caseEvidencePropertyService . deleteEvidenceProperty ( caseEvidence . getId ( ) , directory . getCategoryId ( ) ) ;
if ( null ! = directory & & StrUtil . isNotEmpty ( directory . getCategoryId ( ) ) ) {
if ( CollUtil . isNotEmpty ( caseEvidence . getProperty ( ) ) ) {
caseEvidencePropertyService . updateEvidenceProperty ( caseEvidence . getId ( ) , directory . getCategoryId ( ) , caseEvidence . getProperty ( ) ) ;
} else {
caseEvidencePropertyService . deleteEvidenceProperty ( caseEvidence . getId ( ) , directory . getCategoryId ( ) ) ;
}
}
@ -186,7 +178,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
@Transactional ( transactionManager = "dataSourceTransactionManager" , rollbackFor = Exception . class )
public boolean batchDeleteEvidence ( List < EvidenceIdWrapper > wrappers ) {
if ( CollUtil . isEmpty ( wrappers ) ) {
if ( CollUtil . isEmpty ( wrappers ) ) {
return true ;
}
List < String > evidenceIds = wrappers . stream ( ) . map ( EvidenceIdWrapper : : getEvidenceId ) . toList ( ) ;
@ -258,7 +250,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
caseEvidenceDetailDTO . setContentTypeValue ( recordFileDTOS ) ;
EvidenceDirectoryDTO directory = rootDirectory . findDirectory ( caseEvidence . getDirectoryId ( ) ) ;
caseEvidenceDetailDTO . setEvidenceFormatValue ( directory ) ;
if ( null ! = queryDirectory & & queryDirectory . getLevel ( ) = = 3 & & StrUtil . isNotEmpty ( caseEvidence . getFileName ( ) ) ) {
if ( null ! = queryDirectory & & queryDirectory . getLevel ( ) = = 3 & & StrUtil . isNotEmpty ( caseEvidence . getFileName ( ) ) ) {
caseEvidenceDetailDTO . setEvidenceName ( caseEvidence . getFileName ( ) . split ( "\\." ) [ 0 ] ) ;
}
caseEvidenceDetailDTO . setDirectoryNamePath ( StrUtil . join ( "/" , rootDirectory . getDirectoryPath ( caseEvidence . getDirectoryId ( ) ) ) ) ;
@ -307,12 +299,12 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
CaseEvidence caseEvidence = getById ( evidenceId ) ;
if ( caseEvidence = = null ) {
log . error ( "证据不存在" ) ;
throw new IllegalArgumentException ( "证据不存在" ) ;
return ;
}
List < EvidenceFileDTO > evidenceFiles = evidenceFileService . listFileInfo ( List . of ( evidenceId ) ) ;
if ( evidenceFiles . isEmpty ( ) ) {
log . error ( "证据id:【{}】不存在证据文件" , evidenceId ) ;
throw new IllegalArgumentException ( "证据不存在证据文件" ) ;
return ;
}
try {
// 根据rank升序排序
@ -378,7 +370,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
caseEvidence . setProcessStatus ( EvidenceConstants . PROCESS_STATUS_SUCCESS ) ;
updateById ( caseEvidence ) ;
} catch ( Exception e ) {
log . error ( "证据:【{}】解析失败。更新证据处理状态为【处理失败】。" , evidenceId , e ) ;
log . error ( "证据:【{}】解析失败。更新证据处理状态为【处理失败】。" , evidenceId , e ) ;
caseEvidence . setProcessStatus ( EvidenceConstants . PROCESS_STATUS_FAILED ) ;
updateById ( caseEvidence ) ;
} finally {
@ -388,21 +380,20 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
/ * *
* 校 验 属 性 值 格 式 是 否 正 确
*
* @param extract 属 性 信 息
* @return 校 验 结 果
* /
private boolean checkExtractAttributes ( NotePromptExtractAttributesDto extract ) {
if ( null = = extract ) {
private boolean checkExtractAttributes ( NotePromptExtractAttributesDto extract ) {
if ( null = = extract ) {
return false ;
}
String attrValueType = extract . getAttrValueType ( ) ;
if ( StrUtil . equals ( attrValueType , IndexRuleConstants . VALUE_TYPE_DATE ) ) { // 日期
if ( StrUtil . equals ( attrValueType , IndexRuleConstants . VALUE_TYPE_DATE ) ) { // 日期
try {
new SimpleDateFormat ( "yyyy-MM-dd" ) . parse ( extract . getAttrValue ( ) ) ;
return true ;
} catch ( Exception e ) {
log . error ( "属性:{},日期:{}格式错误" , extract . getAttrName ( ) , extract . getAttrValue ( ) , e ) ;
log . error ( "属性:{},日期:{}格式错误" , extract . getAttrName ( ) , extract . getAttrValue ( ) , e ) ;
return false ;
}
}
@ -415,7 +406,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
@Override
public void callEvidenceAnalysis ( String evidenceId ) {
Assert . notEmpty ( evidenceId , "证据ID不能为空" ) ;
xxlJobService . executeTaskByJobHandler ( TASK_NAME_EVIDENCE_ANALYSIS , evidenceId ) ;
xxlJobService . executeTaskByJobHandler ( "evidenceAnalysis" , evidenceId ) ;
}
@Override
@ -471,7 +462,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
List < EvidenceCategoryDTO > evidenceCategoryTree = evidenceCategoryService . listCategoryTree ( caseType ) ;
List < EvidenceDirectoryDTO > evidenceDirectoryTree = evidenceDirectoryService . listDirectoryTree ( caseId ) ;
initCaseEvidenceDirectory ( evidenceCategoryTree , evidenceDirectoryTree , caseId , null ) ;
initCaseEvidenceDirectory ( evidenceCategoryTree , evidenceDirectoryTree , caseId , null ) ;
}
@Override
@ -504,17 +495,17 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
( ( CaseEvidenceService ) AopContext . currentProxy ( ) ) . doReplaceEvidence ( modelCase , allEvidence , catagroyMap , allFile ) ;
successCount + + ;
} catch ( Exception e ) {
log . error ( "案件{}的目录初始化失败。案件id:{}" , modelCase . getCaseName ( ) , modelCase . getId ( ) , e ) ;
log . error ( "案件{}的目录初始化失败。案件id:{}" , modelCase . getCaseName ( ) , modelCase . getId ( ) , e ) ;
errorCount + + ;
}
index + = 1 ;
log . info ( "案件【{}】的目录初始化完成。耗时:{}秒,占总体进度:{}%" , modelCase . getCaseName ( ) , interval . intervalSecond ( modelCase . getId ( ) ) , index / ( list . size ( ) * 1.0 ) * 100 ) ;
log . info ( "案件【{}】的目录初始化完成。耗时:{}秒,占总体进度:{}%" , modelCase . getCaseName ( ) , interval . intervalSecond ( modelCase . getId ( ) ) , index / ( list . size ( ) * 1.0 ) * 100 ) ;
}
log . info ( "<<<<=======初始化案件的证据目录完成。案件总条数:{},总耗时:{}秒,成功个数:{},失败个数:{}" , list . size ( ) , interval . intervalSecond ( ) , successCount , errorCount ) ;
log . info ( "<<<<=======初始化案件的证据目录完成。案件总条数:{},总耗时:{}秒,成功个数:{},失败个数:{}" , list . size ( ) , interval . intervalSecond ( ) , successCount , errorCount ) ;
}
@Transactional ( rollbackFor = Exception . class , transactionManager = "dataSourceTransactionManager" , propagation = Propagation . REQUIRES_NEW )
@Transactional ( rollbackFor = Exception . class , transactionManager = "dataSourceTransactionManager" , propagation = Propagation . REQUIRES_NEW )
public void doReplaceEvidence ( ModelCase modelCase , List < CaseEvidence > allEvidence , Map < String , String > catagroyMap , List < EvidenceFile > allFile ) {
String caseType = modelCase . getCaseType ( ) ;
String id = modelCase . getId ( ) ;
@ -526,28 +517,28 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
log . info ( "案件{}证据总数:{}" , modelCase . getCaseName ( ) , evidenceList . size ( ) ) ;
for ( CaseEvidence caseEvidence : evidenceList ) {
String directoryId = caseEvidence . getDirectoryId ( ) ;
if ( StrUtil . isNotEmpty ( directoryId ) ) {
log . warn ( "证据id: {},证据名:{}, 已经存在目录id:{},不进行目录绑定操作" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , directoryId ) ;
if ( StrUtil . isNotEmpty ( directoryId ) ) {
log . warn ( "证据id: {},证据名:{}, 已经存在目录id:{},不进行目录绑定操作" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , directoryId ) ;
continue ;
}
if ( StrUtil . equalsAny ( caseEvidence . getEvidenceType ( ) , "3" , "6" ) ) {
log . warn ( "证据id: {},证据名:{},证据类型为【{}】,清除无用数据" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , caseEvidence . getEvidenceType ( ) ) ;
if ( StrUtil . equalsAny ( caseEvidence . getEvidenceType ( ) , "3" , "6" ) ) {
log . warn ( "证据id: {},证据名:{},证据类型为【{}】,清除无用数据" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , caseEvidence . getEvidenceType ( ) ) ;
super . removeById ( caseEvidence . getId ( ) ) ;
continue ;
}
if ( ! catagroyMap . containsKey ( caseEvidence . getEvidenceType ( ) ) ) {
log . warn ( "证据id: {},证据名:{},证据类型为【{}】,没有对应的目录,请检查目录配置" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , caseEvidence . getEvidenceType ( ) ) ;
if ( ! catagroyMap . containsKey ( caseEvidence . getEvidenceType ( ) ) ) {
log . warn ( "证据id: {},证据名:{},证据类型为【{}】,没有对应的目录,请检查目录配置" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , caseEvidence . getEvidenceType ( ) ) ;
continue ;
}
if ( StrUtil . isEmpty ( caseEvidence . getEvidenceType ( ) ) ) {
log . warn ( "证据id: {},证据名:{},证据类型不能为空,默认为书证" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) ) ;
if ( StrUtil . isEmpty ( caseEvidence . getEvidenceType ( ) ) ) {
log . warn ( "证据id: {},证据名:{},证据类型不能为空,默认为书证" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) ) ;
caseEvidence . setEvidenceType ( "1" ) ;
}
EvidenceDirectoryDTO topDirectory = findTopDirectory ( rootDirectory , catagroyMap . get ( caseEvidence . getEvidenceType ( ) ) ) ;
if ( null = = topDirectory ) {
log . warn ( "证据id: {},证据名:{},证据类型为【{}】,在根目录下没有对应的目录,请检查目录配置" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , caseEvidence . getEvidenceType ( ) ) ;
if ( null = = topDirectory ) {
log . warn ( "证据id: {},证据名:{},证据类型为【{}】,在根目录下没有对应的目录,请检查目录配置" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , caseEvidence . getEvidenceType ( ) ) ;
continue ;
}
caseEvidence . setDirectoryId ( topDirectory . getId ( ) ) ;
@ -559,24 +550,24 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
for ( EvidenceFile file : files ) {
evidenceFileService . updateById ( file ) ;
MinioFile minioFile = minioFileMap . get ( file . getFileId ( ) ) ;
if ( null = = minioFile ) {
log . warn ( "证据id: {},证据名:{}, 文件id: {}不存在minio上传信息" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , file . getFileId ( ) ) ;
if ( null = = minioFile ) {
log . warn ( "证据id: {},证据名:{}, 文件id: {}不存在minio上传信息" , caseEvidence . getId ( ) , caseEvidence . getEvidenceName ( ) , file . getFileId ( ) ) ;
continue ;
}
fileOcrProcessService . multipleTypeOcrProcess ( List . of ( file . getFileId ( ) ) , minioFile . getFileType ( ) ) ;
fileOcrProcessService . multipleTypeOcrProcess ( List . of ( file . getFileId ( ) ) , minioFile . getFileType ( ) ) ;
}
}
}
private EvidenceDirectoryDTO findTopDirectory ( EvidenceDirectoryDTO rootDirectory , String categoryId ) {
if ( StrUtil . equals ( rootDirectory . getCategoryId ( ) , categoryId ) ) {
if ( StrUtil . equals ( rootDirectory . getCategoryId ( ) , categoryId ) ) {
return rootDirectory ;
}
if ( CollUtil . isNotEmpty ( rootDirectory . getChild ( ) ) ) {
if ( CollUtil . isNotEmpty ( rootDirectory . getChild ( ) ) ) {
for ( EvidenceDirectoryDTO child : rootDirectory . getChild ( ) ) {
EvidenceDirectoryDTO directory = findTopDirectory ( child , categoryId ) ;
if ( directory ! = null ) {
if ( directory ! = null ) {
return directory ;
}
}
@ -673,11 +664,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
public void syncEvidenceAnalysis ( List < CaseEvidenceDetailDTO > evidenceList ) {
List < EvidenceFileDTO > ocrFileDTOList = evidenceList . stream ( ) . filter (
// 当前证据下不是所有文件都是新增
evidenceDetail - > ! evidenceDetail . getFileList ( ) . stream ( ) . allMatch ( file - > StrUtil . equalsAny ( file . getUpdateStatus ( ) , "1" , "-1" ) )
// 当前证据下不是所有文件都是新增
evidenceDetail - > ! evidenceDetail . getFileList ( ) . stream ( ) . allMatch ( file - > StrUtil . equalsAny ( file . getUpdateStatus ( ) , "1" , "-1" ) )
)
. flatMap ( evidenceDetailDTO - > evidenceDetailDTO . getFileList ( ) . stream ( ) . filter ( file - > StrUtil . equals ( file . getUpdateStatus ( ) , "1" ) ) ) . toList ( ) ;
if ( CollUtil . isNotEmpty ( ocrFileDTOList ) ) {
if ( CollUtil . isNotEmpty ( ocrFileDTOList ) ) {
// 在已经存在的目录下追加文件, 只需要重新及进行ocr识别
log . info ( "ocrAndExtract:开始只进行文件内容识别..." ) ;
Map < String , List < EvidenceFileDTO > > evidenceMap = ocrFileDTOList . stream ( ) . collect ( Collectors . groupingBy ( EvidenceFileDTO : : getEvidenceId ) ) ;
@ -687,17 +678,17 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
// 首先统一更新为正在处理
CaseEvidence one = this . lambdaQuery ( ) . eq ( CaseEvidence : : getId , evidenceId ) . one ( ) ;
updateEvidenceAppendProcessingNewTransaction ( evidenceId , one . getProcessStatus ( ) , "1" ) ;
updateEvidenceAppendProcessingNewTransaction ( evidenceId , one . getProcessStatus ( ) , "1" ) ;
}
for ( Map . Entry < String , List < EvidenceFileDTO > > entry : evidenceMap . entrySet ( ) ) {
String evidenceId = entry . getKey ( ) ;
List < EvidenceFileDTO > value = entry . getValue ( ) ;
for ( EvidenceFileDTO evidenceFileDTO : value ) {
fileOcrProcessService . multipleTypeOcrProcess ( List . of ( evidenceFileDTO . getFileId ( ) ) , evidenceFileDTO . getFileType ( ) ) ;
fileOcrProcessService . multipleTypeOcrProcess ( List . of ( evidenceFileDTO . getFileId ( ) ) , evidenceFileDTO . getFileType ( ) ) ;
}
log . info ( "ocrAndExtract:证据:{} 文件内容识别完成" , evidenceId ) ;
updateEvidenceAppendProcessingNewTransaction ( evidenceId , EvidenceConstants . PROCESS_STATUS_SUCCESS , "0" ) ;
updateEvidenceAppendProcessingNewTransaction ( evidenceId , EvidenceConstants . PROCESS_STATUS_SUCCESS , "0" ) ;
}
}
@ -716,10 +707,10 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
}
@Override
@Transactional ( transactionManager = "dataSourceTransactionManager" , rollbackFor = Exception . class , propagation = Propagation . REQUIRES_NEW )
public void updateEvidenceAppendProcessingNewTransaction ( String evidenceId , String status , String appendProcessing ) {
@Transactional ( transactionManager = "dataSourceTransactionManager" , rollbackFor = Exception . class , propagation = Propagation . REQUIRES_NEW )
public void updateEvidenceAppendProcessingNewTransaction ( String evidenceId , String status , String appendProcessing ) {
this . lambdaUpdate ( ) . eq ( CaseEvidence : : getId , evidenceId )
. set ( StrUtil . isNotEmpty ( status ) , CaseEvidence : : getProcessStatus , status )
. set ( StrUtil . isNotEmpty ( status ) , CaseEvidence : : getProcessStatus , status )
. set ( CaseEvidence : : getAppendProcessing , appendProcessing )
. set ( CaseEvidence : : getUpdateTime , LocalDateTime . now ( ) ) . update ( ) ;
}
@ -802,7 +793,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
. filter ( evidenceDetail - > CollUtil . isNotEmpty ( evidenceDetail . getFileList ( ) ) )
. map ( EvidenceProcessDTO : : new ) . collect ( Collectors . toList ( ) ) ;
List < EvidenceDirectoryDTO > evidenceDirectoryDTOS = evidenceDirectoryService . listDirectoryTree ( caseId ) ;
List < EvidenceCategory > categoryList = evidenceCategoryService . l istCategoryByCaseType( modelCase . getCaseType ( ) ) ;
List < EvidenceCategory > categoryList = evidenceCategoryService . l ambdaQuery( ) . eq ( EvidenceCategory : : getCaseType , modelCase . getCaseType ( ) ) . list ( ) ;
for ( EvidenceProcessDTO evidenceProcessDTO : processDTOList ) {
evidenceProcessDTO . setTemplateInfo ( evidenceDirectoryDTOS , categoryList ) ;
evidenceProcessDTO . setEvidenceTypeName ( categoryList ) ;
@ -838,10 +829,10 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
// 同时更新证据属性值
String categoryId = rootDirectory . findDirectory ( CollUtil . getFirst ( value ) . getDirectoryId ( ) ) . getCategoryId ( ) ;
Map < String , List < NotePromptExtractAttributesDto > > map = caseEvidencePropertyService . listEvidenceProperty ( categoryId , Collections . singletonList ( evidenceId ) ) ;
if ( CollUtil . isEmpty ( map . get ( eviden ceId) ) ) {
caseEvidencePropertyService . saveEvidenceProperty ( evidenceId , categoryId , CollUtil . getFirst ( value ) . getProperties ( ) ) ;
} else {
caseEvidencePropertyService . updateEvidenceProperty ( evidenceId , categoryId , CollUtil . getFirst ( value ) . getProperties ( ) ) ;
if ( CollUtil . isEmpty ( map . get ( cat egory Id) ) ) {
caseEvidencePropertyService . saveEvidenceProperty ( evidenceId , categoryId , CollUtil . getFirst ( value ) . getProperties ( ) ) ;
} else {
caseEvidencePropertyService . updateEvidenceProperty ( evidenceId , categoryId , CollUtil . getFirst ( value ) . getProperties ( ) ) ;
}
@ -859,7 +850,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
if ( evidenceDetail ! = null ) {
List < EvidenceFileDTO > fileList = evidenceDetail . getFileList ( ) ;
int initOrder = 0 ;
if ( StrUtil . isNotEmpty ( batchNo ) & & ! CollUtil . isNotEmpty ( fileList ) ) {
if ( StrUtil . isNotEmpty ( batchNo ) & & ! CollUtil . isNotEmpty ( fileList ) ) {
// 如果批次不为空,则只对当前批次的文件进行排序
initOrder = fileList . size ( ) ;
}
@ -922,7 +913,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
rebuildEvidenceProperties ( rootDirectory , caseEvidenceList ) ;
List < CategoryPromptDTO > categoryPromptDTOS = evidenceDirectoryService . listCategoryPrompt ( caseId ) ;
Map < String , CaseEvidenceDTO > caseEvidenceMap = caseEvidenceList . stream ( ) . map ( CaseEvidenceDTO : : new ) . peek ( e - > e . setDirectoryNamePathValue ( rootDirectory ) ) . collect ( Collectors . toMap ( CaseEvidenceDTO : : getId , Function . identity ( ) ) ) ;
Map < String , CaseEvidenceDTO > caseEvidenceMap = caseEvidenceList . stream ( ) . map ( CaseEvidenceDTO : : new ) . peek ( e - > e . setDirectoryNamePathValue ( rootDirectory ) ) . collect ( Collectors . toMap ( CaseEvidenceDTO : : getId , Function . identity ( ) ) ) ;
Map < String , CategoryPromptDTO > categoryPromptMap = categoryPromptDTOS . stream ( ) . collect ( Collectors . toMap ( CategoryPromptDTO : : getDirectoryId , k - > k , ( v1 , v2 ) - > v1 ) ) ;
Iterator < EvidenceDirectoryDTO > iterator = evidenceDirectoryDTOS . iterator ( ) ;
@ -945,7 +936,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
Map < String , List < String > > categoryMapEvidence = new HashMap < > ( ) ;
for ( CaseEvidence caseEvidence : caseEvidences ) {
EvidenceDirectoryDTO directory = rootDirectory . findDirectory ( caseEvidence . getDirectoryId ( ) ) ;
if ( null ! = directory & & StrUtil . isNotEmpty ( directory . getCategoryId ( ) ) ) {
if ( null ! = directory & & StrUtil . isNotEmpty ( directory . getCategoryId ( ) ) ) {
List < String > evidenceIds = categoryMapEvidence . getOrDefault ( directory . getCategoryId ( ) , new ArrayList < > ( ) ) ;
evidenceIds . add ( caseEvidence . getId ( ) ) ;
categoryMapEvidence . put ( directory . getCategoryId ( ) , evidenceIds ) ;
@ -959,46 +950,15 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
for ( CaseEvidence caseEvidence : caseEvidences ) {
List < NotePromptExtractAttributesDto > attributesDtos = map . get ( caseEvidence . getId ( ) ) ;
// 兼容老数据
if ( CollUtil . isNotEmpty ( attributesDtos ) ) {
if ( CollUtil . isNotEmpty ( attributesDtos ) ) {
caseEvidence . setProperty ( attributesDtos ) ;
}
}
}
@Override
public void downloadEvidence ( String evidenceId , HttpServletResponse response ) throws IOException , DocumentException {
List < EvidenceFileDTO > evidenceFileDTOList = evidenceFileService . listFileInfo ( List . of ( evidenceId ) ) ;
Map < String , InputStream > fileInputStreamMap = new HashMap < > ( ) ;
for ( EvidenceFileDTO evidenceFileDTO : evidenceFileDTOList ) {
MinioFile minioFile = minioService . getMinioFile ( evidenceFileDTO . getFileId ( ) ) ;
if ( null ! = minioFile ) {
if ( StrUtil . equalsAnyIgnoreCase ( minioFile . getFileType ( ) , "pdf" ) ) {
String waterMarkName = StrUtil . format ( watermarkTemplate , Map . of ( "userName" , UserUtil . getUser ( ) . getUserName ( ) ) ) ;
ByteArrayOutputStream bos = new ByteArrayOutputStream ( ) ;
WatermarkUtil . pdfByText ( minioService . getObjectInputStream ( minioFile ) , bos , waterMarkName , Map . of ( ) ) ;
fileInputStreamMap . put ( minioFile . getFilename ( ) , new ByteArrayInputStream ( bos . toByteArray ( ) ) ) ;
} else if ( StrUtil . equalsAnyIgnoreCase ( minioFile . getFileType ( ) , "jpg" , "png" , "jpeg" , "bmp" ) ) {
String waterMarkName = StrUtil . format ( watermarkTemplate , Map . of ( "userName" , UserUtil . getUser ( ) . getUserName ( ) ) ) ;
ByteArrayOutputStream bos = new ByteArrayOutputStream ( ) ;
WatermarkUtil . imageByText ( waterMarkName , minioService . getObjectInputStream ( minioFile ) , bos , Map . of ( "formatName" , minioFile . getFileType ( ) ) ) ;
fileInputStreamMap . put ( minioFile . getFilename ( ) , new ByteArrayInputStream ( bos . toByteArray ( ) ) ) ;
} else {
fileInputStreamMap . put ( minioFile . getFilename ( ) , minioService . getObjectInputStream ( minioFile ) ) ;
}
}
}
try {
ZipFileUtil . createZipAndDownload ( response , getById ( evidenceId ) . getEvidenceName ( ) , fileInputStreamMap ) ;
} catch ( IOException e ) {
log . error ( "下载证据文件失败" , e ) ;
}
}
/ * *
* 重 新 构 建 证 据 属 性 数 据
*
* @param rootDirectory 根 目 录
* @param rootDirectory 根 目 录
* @param caseEvidenceList 案 件 证 据 列 表
* /
private void rebuildEvidenceProperties ( EvidenceDirectoryDTO rootDirectory , List < CaseEvidence > caseEvidenceList ) {
@ -1006,33 +966,33 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
Map < String , String > directoryIdMapCategoryId = caseEvidenceList . stream ( )
. filter ( e - > StrUtil . isNotEmpty ( e . getDirectoryId ( ) ) & & null ! = rootDirectory . findDirectory ( e . getDirectoryId ( ) ) )
. map ( CaseEvidence : : getDirectoryId ) . distinct ( ) . collect (
Collectors . toMap ( directoryId - > directoryId , di - > rootDirectory . findDirectory ( di ) . getCategoryId ( ) ) ) ;
Collectors . toMap ( directoryId - > directoryId , di - > rootDirectory . findDirectory ( di ) . getCategoryId ( ) ) ) ;
Map < String , List < NotePromptExtractAttributesDto > > categoryIdMapExtractAttributes = new HashMap < > ( ) ;
for ( CaseEvidence caseEvidence : caseEvidenceList ) {
EvidenceDirectoryDTO directory = rootDirectory . findDirectory ( caseEvidence . getDirectoryId ( ) ) ;
if ( null = = directory | | StrUtil . isEmpty ( directory . getCategoryId ( ) ) ) {
if ( null = = directory | | StrUtil . isEmpty ( directory . getCategoryId ( ) ) ) {
continue ;
}
String categoryId = directory . getCategoryId ( ) ;
if ( ! categoryIdMapExtractAttributes . containsKey ( categoryId ) ) {
if ( ! categoryIdMapExtractAttributes . containsKey ( categoryId ) ) {
categoryIdMapExtractAttributes . put ( categoryId , caseEvidencePropertyService . findExtractAttributes ( categoryId ) ) ;
}
}
for ( CaseEvidence caseEvidence : caseEvidenceList ) {
if ( StrUtil . isEmpty ( caseEvidence . getDirectoryId ( ) ) ) {
if ( StrUtil . isEmpty ( caseEvidence . getDirectoryId ( ) ) ) {
continue ;
}
String categoryId = directoryIdMapCategoryId . get ( caseEvidence . getDirectoryId ( ) ) ;
if ( StrUtil . isEmpty ( categoryId ) ) {
if ( StrUtil . isEmpty ( categoryId ) ) {
continue ;
}
List < NotePromptExtractAttributesDto > merged = mergeExtractAttributes ( caseEvidence . getProperty ( ) , categoryIdMapExtractAttributes . get ( categoryId ) ) ;
if ( null ! = merged ) {
if ( null ! = merged ) {
merged = merged . stream ( ) . filter ( Objects : : nonNull ) . peek ( e - > {
if ( ! checkExtractAttributes ( e ) ) {
e . setAttrValue ( null ) ;
@ -1046,13 +1006,13 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
}
private List < NotePromptExtractAttributesDto > mergeExtractAttributes ( List < NotePromptExtractAttributesDto > property , List < NotePromptExtractAttributesDto > attributesTemplates ) {
if ( CollUtil . isEmpty ( attributesTemplates ) | | CollUtil . isEmpty ( property ) ) {
if ( CollUtil . isEmpty ( attributesTemplates ) | | CollUtil . isEmpty ( property ) ) {
return attributesTemplates ;
}
for ( NotePromptExtractAttributesDto attributesTemplate : attributesTemplates ) {
String attrName = attributesTemplate . getAttrName ( ) ;
for ( NotePromptExtractAttributesDto attributesDto : property ) {
if ( StrUtil . equals ( attributesDto . getAttrName ( ) , attrName ) ) {
if ( StrUtil . equals ( attributesDto . getAttrName ( ) , attrName ) ) {
attributesTemplate . setAttrValue ( attributesDto . getAttrValue ( ) ) ;
break ;
}
@ -1224,7 +1184,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
/ * *
* 查 找 发 生 改 变 的 证 据
*
* @param oldEvidenceList 旧 证 据 列 表
* @param oldEvidenceList 旧 证 据 列 表
* @param newEvidenceList 新 证 据 列 表
* @return 发 生 改 变 的 证 据
* /
@ -1361,19 +1321,18 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
* /
/ * *
* 初 始 化 案 件 证 据 目 录
*
* @param evidenceCategoryTree 证 据 分 类 树
* @param evidenceDirectoryTree 父 级 目 录 树
* @param caseId 案 件 id
* @param parentId 父 目 录 id
* @param evidenceCategoryTree 证 据 分 类 树
* @param evidenceDirectoryTree 父 级 目 录 树
* @param caseId 案 件 id
* @param parentId 父 目 录 id
* /
private void initCaseEvidenceDirectory ( List < EvidenceCategoryDTO > evidenceCategoryTree , List < EvidenceDirectoryDTO > evidenceDirectoryTree , String caseId , String parentId ) {
if ( null = = evidenceDirectoryTree ) {
private void initCaseEvidenceDirectory ( List < EvidenceCategoryDTO > evidenceCategoryTree , List < EvidenceDirectoryDTO > evidenceDirectoryTree , String caseId , String parentId ) {
if ( null = = evidenceDirectoryTree ) {
evidenceDirectoryTree = new ArrayList < > ( 1 ) ;
}
for ( EvidenceCategoryDTO evidenceCategoryDTO : evidenceCategoryTree ) {
List < EvidenceDirectoryDTO > directoryDTOS = evidenceDirectoryTree . stream ( ) . filter ( evidenceDirectoryDTO - > evidenceDirectoryDTO . getCategoryId ( ) . equals ( evidenceCategoryDTO . getId ( ) ) ) . toList ( ) ;
if ( CollUtil . isEmpty ( directoryDTOS ) ) {
if ( CollUtil . isEmpty ( directoryDTOS ) ) {
EvidenceDirectory evidenceDirectory = new EvidenceDirectory ( ) ;
evidenceDirectory . setCaseId ( caseId ) ;
evidenceDirectory . setDirectoryName ( evidenceCategoryDTO . getCategoryName ( ) ) ;
@ -1387,7 +1346,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
EvidenceDirectoryDTO parentDTO = CollUtil . getFirst ( directoryDTOS ) ;
if ( CollUtil . isNotEmpty ( evidenceCategoryDTO . getChild ( ) ) ) {
initCaseEvidenceDirectory ( evidenceCategoryDTO . getChild ( ) , parentDTO . getChild ( ) , caseId , parentDTO . getId ( ) ) ;
initCaseEvidenceDirectory ( evidenceCategoryDTO . getChild ( ) , parentDTO . getChild ( ) , caseId , parentDTO . getId ( ) ) ;
}
}
}