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

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.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -193,4 +194,9 @@ public class CaseEvidenceController {
return R.ok("success"); 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.EvidenceDirectoryReqVO;
import com.supervision.police.vo.VerifyEvidenceReqVO; import com.supervision.police.vo.VerifyEvidenceReqVO;
import jakarta.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -163,4 +164,6 @@ public interface CaseEvidenceService extends IService<CaseEvidence> {
void updateEvidenceAppendProcessingNewTransaction(String evidenceId, String status,String appendProcessing); void updateEvidenceAppendProcessingNewTransaction(String evidenceId, String status,String appendProcessing);
void redoExtractAttributes(String caseId, List<CaseEvidence> caseEvidences); 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.service.*;
import com.supervision.police.vo.EvidenceDirectoryReqVO; import com.supervision.police.vo.EvidenceDirectoryReqVO;
import com.supervision.police.vo.VerifyEvidenceReqVO; import com.supervision.police.vo.VerifyEvidenceReqVO;
import com.supervision.utils.ZipFileUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.framework.AopContext; 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.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -45,17 +49,11 @@ import java.util.stream.Stream;
public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, CaseEvidence> implements CaseEvidenceService { public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, CaseEvidence> implements CaseEvidenceService {
private final EvidenceFileService evidenceFileService; private final EvidenceFileService evidenceFileService;
private final ComDictionaryService comDictionaryService; private final ComDictionaryService comDictionaryService;
private final CaseStatusManageService caseStatusManageService; private final CaseStatusManageService caseStatusManageService;
private final FileOcrProcessService fileOcrProcessService; private final FileOcrProcessService fileOcrProcessService;
private final MinioService minioService; private final MinioService minioService;
private final ModelCaseService modelCaseService; private final ModelCaseService modelCaseService;
@Autowired @Autowired
private LLMExtractService llmExtractService; private LLMExtractService llmExtractService;
@Autowired @Autowired
@ -380,6 +378,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
/** /**
* *
*
* @param extract * @param extract
* @return * @return
*/ */
@ -956,8 +955,26 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
} }
} }
@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 * @param caseEvidenceList
*/ */
@ -1321,6 +1338,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
*/ */
/** /**
* *
*
* @param evidenceCategoryTree * @param evidenceCategoryTree
* @param evidenceDirectoryTree * @param evidenceDirectoryTree
* @param caseId id * @param caseId id

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

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

@ -52,13 +52,38 @@ public class CalculationUtil {
// 初始化SpEL解析器 // 初始化SpEL解析器
ExpressionParser parser = new SpelExpressionParser(); ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext(); 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)); 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