证据下载接口,聊天功能优化

jinan_dev
DESKTOP-DDTUS3E\yaxin 7 months ago
parent 92e799e9ae
commit 295e2108ee

@ -12,6 +12,7 @@ import com.supervision.police.vo.VerifyEvidenceReqVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@ -193,4 +194,9 @@ public class CaseEvidenceController {
return R.ok("success");
}
@GetMapping("/downloadEvidence")
public void downloadEvidence(@RequestParam String evidenceId, HttpServletResponse response) {
caseEvidenceService.downloadEvidence(evidenceId, response);
}
}

@ -10,6 +10,7 @@ import com.supervision.police.dto.*;
import com.supervision.police.vo.EvidenceDirectoryReqVO;
import com.supervision.police.vo.VerifyEvidenceReqVO;
import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@ -163,4 +164,6 @@ public interface CaseEvidenceService extends IService<CaseEvidence> {
void updateEvidenceAppendProcessingNewTransaction(String evidenceId, String status,String appendProcessing);
void redoExtractAttributes(String caseId, List<CaseEvidence> caseEvidences);
void downloadEvidence(String evidenceId, HttpServletResponse response);
}

@ -23,6 +23,8 @@ 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.ZipFileUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.framework.AopContext;
@ -32,6 +34,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
@ -45,17 +49,11 @@ import java.util.stream.Stream;
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
@ -79,11 +77,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());
}
@ -121,11 +119,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());
}
}
@ -178,7 +176,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();
@ -250,7 +248,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())));
@ -370,7 +368,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 {
@ -380,20 +378,21 @@ 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;
}
}
@ -462,7 +461,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
@ -495,17 +494,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();
@ -517,28 +516,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());
@ -550,24 +549,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;
}
}
@ -664,11 +663,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));
@ -678,17 +677,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");
}
}
@ -707,10 +706,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();
}
@ -829,10 +828,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(categoryId))){
caseEvidencePropertyService.saveEvidenceProperty(evidenceId, categoryId,CollUtil.getFirst(value).getProperties());
}else {
caseEvidencePropertyService.updateEvidenceProperty(evidenceId, categoryId,CollUtil.getFirst(value).getProperties());
if (CollUtil.isEmpty(map.get(categoryId))) {
caseEvidencePropertyService.saveEvidenceProperty(evidenceId, categoryId, CollUtil.getFirst(value).getProperties());
} else {
caseEvidencePropertyService.updateEvidenceProperty(evidenceId, categoryId, CollUtil.getFirst(value).getProperties());
}
@ -850,7 +849,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();
}
@ -913,7 +912,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();
@ -936,7 +935,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);
@ -950,15 +949,33 @@ 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) {
List<EvidenceFileDTO> evidenceFileDTOList = evidenceFileService.listFileInfo(List.of(evidenceId));
Map<String, InputStream> fileInputStreamMap = new HashMap<>();
evidenceFileDTOList.forEach(evidenceFileDTO -> {
MinioFile minioFile = minioService.getMinioFile(evidenceFileDTO.getFileId());
if (null != minioFile) {
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) {
@ -966,33 +983,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);
@ -1006,13 +1023,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;
}
@ -1184,7 +1201,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
/**
*
*
* @param oldEvidenceList
* @param oldEvidenceList
* @param newEvidenceList
* @return
*/
@ -1321,18 +1338,19 @@ 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());
@ -1346,7 +1364,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());
}
}
}

@ -193,6 +193,7 @@ public class ChatServiceImpl implements ChatService {
chatResVO.setAnswwerMap(answerMap);
chatResVO.setType(type);
chatResVO.setIntentType(intentType);
chatResVO.setConversationId(chatReqVO.getConversationId());
return chatResVO;
}
@ -270,7 +271,7 @@ public class ChatServiceImpl implements ChatService {
atomicIndexDTO.getEvidentResultList().forEach(evidentIndexResultDTO -> {
Map<String, String> evidenceMap = new HashMap<>();
evidenceMap.put("evidenceName", evidentIndexResultDTO.getEvidenceName());
evidenceMap.put("evidenceId", evidentIndexResultDTO.getIndexId());
evidenceMap.put("evidenceId", evidentIndexResultDTO.getEvidenceId());
evidenceList.add(evidenceMap);
});
}

@ -23,7 +23,7 @@ public class ChatResVO {
private String question;
private Date questionTime;
private String conversationId;
private String answer;
private Map<String, Object> answwerMap;
private String type;

@ -52,13 +52,38 @@ public class CalculationUtil {
// 初始化SpEL解析器
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("leftOperand", leftOperand);
context.setVariable("rightOperand", rightOperand);
// 判断并转换变量类型
Object leftValue = parseOperand(leftOperand);
Object rightValue = parseOperand(rightOperand);
context.setVariable("leftOperand", leftValue);
context.setVariable("rightOperand", rightValue);
// 计算结果
return Boolean.TRUE.equals(parser.parseExpression(expression).getValue(context, Boolean.class));
}
/**
*
*
* @param operand
* @return
*/
private static Object parseOperand(String operand) {
if (operand == null) {
return null;
}
try {
// 尝试解析为数字(支持整数和小数)
if (operand.contains(".")) {
return Double.valueOf(operand);
} else {
return Integer.valueOf(operand);
}
} catch (NumberFormatException e) {
// 如果解析失败,返回原始字符串
return operand;
}
}
/**
*

@ -0,0 +1,39 @@
package com.supervision.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import jakarta.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Slf4j
@Component
public class ZipFileUtil {
public static void createZipAndDownload(HttpServletResponse response, String zipFileName, Map<String, InputStream> fileInputStreamMap) throws IOException {
response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(zipFileName, StandardCharsets.UTF_8) + ".zip");
response.setContentType("application/zip");
try (BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
ZipOutputStream zipOut = new ZipOutputStream(bos)) {
for (Map.Entry<String, InputStream> entry : fileInputStreamMap.entrySet()) {
InputStream inputStream = entry.getValue();
zipOut.putNextEntry(new ZipEntry(entry.getKey()));
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) >= 0) {
zipOut.write(buffer, 0, length);
}
zipOut.closeEntry();
inputStream.close();
}
zipOut.finish();
}
}
}
Loading…
Cancel
Save