1. 修复bug

topo_dev
xueqingkun 9 months ago
parent 77800c8f54
commit 485744c598

@ -3,12 +3,9 @@ package com.supervision.minio.client;
import cn.hutool.core.io.IoUtil;
import com.supervision.minio.exception.SysObsException;
import io.minio.*;
import io.minio.errors.MinioException;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.errors.*;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -19,7 +16,6 @@ import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* minio Template
@ -97,6 +93,15 @@ public class MinioTemplate {
}
}
public InputStream getObjectInputStream(String bucketName, String objectName) {
try {
return minioClient.getObject(
GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
*
*

@ -1,10 +1,13 @@
package com.supervision.minio.service;
import com.supervision.common.domain.R;
import com.supervision.minio.domain.MinioFile;
import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public interface MinioService {
@ -14,4 +17,14 @@ public interface MinioService {
R<?> delFile(String fileId);
InputStream getObjectInputStream(String fileId);
InputStream getObjectInputStream(MinioFile minioFile);
MinioFile getMinioFile(String fileId);
List<MinioFile> listMinioFile(List<String> fileIdList);
}

@ -1,5 +1,7 @@
package com.supervision.minio.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.supervision.common.domain.R;
import com.supervision.common.utils.StringUtils;
import com.supervision.minio.client.MinioTemplate;
@ -14,9 +16,7 @@ import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Objects;
import java.util.UUID;
import java.util.*;
@Service
public class MinioServiceImpl implements MinioService {
@ -64,4 +64,31 @@ public class MinioServiceImpl implements MinioService {
return R.ok();
}
@Override
public InputStream getObjectInputStream(String fileId) {
MinioFile minioFile = minioFileMapper.selectById(fileId);
Assert.notNull(minioFile, "文件不存在");
return minioTemplate.getInputStreamObject(bucketName, minioFile.getId());
}
@Override
public InputStream getObjectInputStream(MinioFile minioFile) {
Assert.notNull(minioFile, "文件信息不能为空");
return this.getObjectInputStream(minioFile.getId());
}
@Override
public MinioFile getMinioFile(String fileId) {
Assert.notEmpty(fileId, "文件id不能为空");
return minioFileMapper.selectById(fileId);
}
@Override
public List<MinioFile> listMinioFile(List<String> fileIdList) {
if (CollUtil.isEmpty(fileIdList)){
return new ArrayList<>(1);
}
return minioFileMapper.selectBatchIds(fileIdList);
}
}

@ -6,7 +6,7 @@ import com.supervision.police.domain.NotePrompt;
import com.supervision.police.domain.NoteRecord;
import com.supervision.police.domain.TripleInfo;
import com.supervision.police.dto.ListDTO;
import com.supervision.police.dto.NoteRecordReqVo;
import com.supervision.police.dto.NoteRecordDTO;
import com.supervision.police.dto.TypeDTO;
import com.supervision.police.service.ModelRecordTypeService;
import com.supervision.police.service.NoteRecordSplitService;
@ -14,7 +14,6 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
@ -107,9 +106,8 @@ public class RecordController {
* @return
*/
@PostMapping("/addOrUpdRecords")
public R<String> uploadRecords(NoteRecordReqVo records,
@RequestPart("file") List<MultipartFile> fileList) throws IOException {
return R.ok(noteRecordSplitService.uploadRecords(records, fileList));
public R<String> uploadRecords(@RequestBody NoteRecordDTO records) throws IOException {
return R.ok(noteRecordSplitService.uploadRecords(records));
}
/**

@ -1,10 +1,13 @@
package com.supervision.police.dto;
import cn.hutool.core.collection.CollUtil;
import com.supervision.police.domain.NoteRecord;
import lombok.Data;
import java.util.List;
@Data
public class NoteRecordReqVo {
public class NoteRecordDTO {
private String id;
@ -19,9 +22,9 @@ public class NoteRecordReqVo {
private String recordName;
/**
* id
* id
*/
private String fileIds;
private List<String> fileIdList;
/**
*
@ -58,7 +61,9 @@ public class NoteRecordReqVo {
noteRecord.setId(id);
noteRecord.setCaseId(caseId);
noteRecord.setRecordName(recordName);
noteRecord.setFileIds(fileIds);
if (CollUtil.isNotEmpty(fileIdList)){
noteRecord.setFileIds(CollUtil.join(fileIdList, ","));
}
noteRecord.setName(name);
noteRecord.setRole(role);
noteRecord.setConfessionMaterial(confessionMaterial);

@ -0,0 +1,90 @@
package com.supervision.police.dto;
import cn.hutool.core.util.StrUtil;
import com.supervision.minio.domain.MinioFile;
import com.supervision.police.domain.NoteRecord;
import lombok.Data;
import java.util.*;
@Data
public class NoteRecordDetailDTO {
private String id;
/**
* id
*/
private String caseId;
/**
*
*/
private String recordName;
/**
*
*/
private List<NoteRecordFileDTO> fileList = new ArrayList<>();
/**
*
*/
private String name;
/**
*
*/
private String role;
/**
*
*/
private Integer confessionMaterial;
/**
*
*/
private String lawAsker;
/**
*
*/
private String confessionStartTime;
/**
*
*/
private String confessionEndTime;
private List<NoteRecordDetailDTO> children = new ArrayList<>();
public NoteRecordDetailDTO() {
}
public NoteRecordDetailDTO(NoteRecord noteRecord, Map<String, MinioFile> fileMap) {
if (Objects.isNull(noteRecord)){
return;
}
this.id = noteRecord.getId();
this.caseId = noteRecord.getCaseId();
this.recordName = noteRecord.getRecordName();
this.name = noteRecord.getName();
this.role = noteRecord.getRole();
this.confessionMaterial = noteRecord.getConfessionMaterial();
this.lawAsker = noteRecord.getLawAsker();
this.confessionStartTime = noteRecord.getConfessionStartTime();
this.confessionEndTime = noteRecord.getConfessionEndTime();
if (StrUtil.isNotEmpty(noteRecord.getFileIds())){
this.fileList = Arrays.stream(noteRecord.getFileIds().split(",")).map(fileId->{
MinioFile minioFile = fileMap.get(fileId);
if (Objects.isNull(minioFile)){
return null;
}
return new NoteRecordFileDTO(this.id,minioFile);
}).filter(Objects::nonNull).toList();
}else {
this.fileList = new ArrayList<>(1);
}
}
}

@ -0,0 +1,36 @@
package com.supervision.police.dto;
import com.supervision.minio.domain.MinioFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Objects;
@Data
public class NoteRecordFileDTO {
@Schema(description = "笔录id")
private String noteRecordId;
@Schema(description = "文件id集合")
private String fileId;
@Schema(description = "文件名称")
private String fileName;
@Schema(description = "文件类型")
private String fileType;
public NoteRecordFileDTO() {
}
public NoteRecordFileDTO(String noteRecordId,MinioFile minioFile) {
this.noteRecordId = noteRecordId;
if (Objects.isNull(minioFile)){
return;
}
this.fileId = minioFile.getId();
this.fileName = minioFile.getFilename();
this.fileType = minioFile.getFileType();
}
}

@ -3,16 +3,14 @@ package com.supervision.police.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.domain.NoteRecord;
import com.supervision.police.domain.NoteRecordSplit;
import com.supervision.police.dto.NoteRecordReqVo;
import org.springframework.web.multipart.MultipartFile;
import com.supervision.police.dto.NoteRecordDTO;
import java.io.IOException;
import java.util.List;
import java.util.Map;
public interface NoteRecordSplitService extends IService<NoteRecordSplit> {
String uploadRecords(NoteRecordReqVo records, List<MultipartFile> fileList) throws IOException;
String uploadRecords(NoteRecordDTO records) throws IOException;
Map<String, Object> queryRecords(NoteRecord noteRecord, Integer page, Integer size);

@ -427,6 +427,9 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
@Override
public String addNeo4j(List<String> ids) {
if (CollUtil.isEmpty(ids)){
return "成功插入0条信息";
}
List<TripleInfo> tripleInfos = tripleInfoService.listByIds(ids);
int i = 0;
for (TripleInfo tripleInfo : tripleInfos) {

@ -1,5 +1,6 @@
package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -9,11 +10,11 @@ import com.supervision.common.utils.StringUtils;
import com.supervision.minio.domain.MinioFile;
import com.supervision.minio.mapper.MinioFileMapper;
import com.supervision.minio.service.MinioService;
import com.supervision.police.domain.ModelCase;
import com.supervision.police.domain.ModelRecordType;
import com.supervision.police.domain.NoteRecordSplit;
import com.supervision.police.domain.NoteRecord;
import com.supervision.police.dto.NoteRecordReqVo;
import com.supervision.police.dto.NoteRecordDTO;
import com.supervision.police.dto.NoteRecordDetailDTO;
import com.supervision.police.mapper.ModelCaseMapper;
import com.supervision.police.mapper.NoteRecordSplitMapper;
import com.supervision.police.mapper.NoteRecordMapper;
@ -29,11 +30,12 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@ -60,20 +62,9 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
@Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public String uploadRecords(NoteRecordReqVo records, List<MultipartFile> fileList) throws IOException {
//上传文件获取文件ids
List<String> fileIds = new ArrayList<>();
for (MultipartFile file : fileList) {
String fileId = minioService.uploadFile(file);
fileIds.add(fileId);
}
if (StringUtils.isNotEmpty(records.getFileIds())) {
records.setFileIds(records.getFileIds() + "," + StringUtils.join(fileIds, ","));
} else {
records.setFileIds(StringUtils.join(fileIds, ","));
}
public String uploadRecords(NoteRecordDTO records) throws IOException {
//修改案件的行为人、当事人
if (StringUtils.isNotEmpty(records.getRole()) && !"嫌疑人".equals(records.getRole())) {
/*if (StringUtils.isNotEmpty(records.getRole()) && !"嫌疑人".equals(records.getRole())) {
ModelCase modelCase = modelCaseMapper.selectById(records.getCaseId());
//行为人
if ("行为人".equals(records.getRole()) && StringUtils.isEmpty(modelCase.getLawActor())) {
@ -90,8 +81,8 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
}
modelCaseMapper.updateById(modelCase);
}
}
int i = 0;
}*/
int i;
if (StringUtils.isEmpty(records.getId())) {
i = noteRecordMapper.insert(records.toNoteRecord());
} else {
@ -99,17 +90,26 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
}
//所有对话类型
List<ModelRecordType> allTypeList = modelRecordTypeService.lambdaQuery().list();
if (i > 0) {
if (i > 0 && CollUtil.isNotEmpty(records.getFileIdList())) {
//拆分笔录
for (MultipartFile file : fileList) {
String context = WordReadUtil.readWord(file);
for (String fileId : records.getFileIdList()) {
MinioFile minioFile = minioService.getMinioFile(fileId);
InputStream inputStream = null;
try {
inputStream = minioService.getObjectInputStream(minioFile);
} catch (Exception e) {
e.printStackTrace();
log.error("从minio中获取文件失败:{}", e.getMessage());
continue;
}
String context = WordReadUtil.readWord(inputStream);
List<QARecordNodeDTO> qaList = RecordRegexUtil.recordRegex(context, records.getName());
for (QARecordNodeDTO qa : qaList) {
try {
NoteRecordSplit noteRecord = new NoteRecordSplit();
noteRecord.setCaseId(records.getCaseId());
noteRecord.setNoteRecordsId(records.getId());
noteRecord.setNoteName(file.getName());
noteRecord.setNoteName(minioFile.getFilename());
noteRecord.setPersonName(records.getName());
noteRecord.setQuestion(qa.getQuestion());
noteRecord.setAnswer(qa.getAnswer());
@ -131,30 +131,28 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
@Override
public Map<String, Object> queryRecords(NoteRecord noteRecords, Integer page, Integer size) {
LambdaQueryWrapper<NoteRecord> wrapper = Wrappers.lambdaQuery();
wrapper.like(StringUtils.isNotEmpty(noteRecords.getName()), NoteRecord::getName, noteRecords.getName())
LambdaQueryWrapper<NoteRecord> wrapper = Wrappers.lambdaQuery(NoteRecord.class)
.like(StringUtils.isNotEmpty(noteRecords.getName()), NoteRecord::getName, noteRecords.getName())
.eq(NoteRecord::getCaseId, noteRecords.getCaseId())
.eq(NoteRecord::getDataStatus, "1");
List<NoteRecord> list = noteRecordMapper.selectList(wrapper);
List<String> fileIdList = list.stream().map(NoteRecord::getFileIds).filter(StringUtils::isNotEmpty)
.flatMap(s -> Arrays.stream(s.split(","))).distinct().toList();
Map<String, MinioFile> fileMap = minioService.listMinioFile(fileIdList).stream().collect(Collectors.toMap(MinioFile::getId, Function.identity()));
// LinkedHashMap 保障顺序
Map<String, List<NoteRecord>> nameMap = list.stream().filter(item -> StringUtils.isNotBlank(item.getName()))
.collect(Collectors.groupingBy(NoteRecord::getName, LinkedHashMap::new, Collectors.toList()));
List<NoteRecord> res = new ArrayList<>();
Map<String, List<NoteRecordDetailDTO>> nameMap = list.stream().filter(item -> StringUtils.isNotBlank(item.getName())).map(item -> new NoteRecordDetailDTO(item, fileMap))
.collect(Collectors.groupingBy(NoteRecordDetailDTO::getName, LinkedHashMap::new, Collectors.toList()));
List<NoteRecordDetailDTO> res = new ArrayList<>();
for (String name : nameMap.keySet()) {
NoteRecord noteRecord = new NoteRecord();
noteRecord.setName(name);
noteRecord.setChildren(nameMap.get(name));
res.add(noteRecord);
}
List<NoteRecord> pager = ListUtils.Pager(size, page, res);
for (NoteRecord person : pager) {
for (NoteRecord noteRecord : person.getChildren()) {
String fileIds = noteRecord.getFileIds();
if (StringUtils.isNotEmpty(fileIds)) {
noteRecord.setConfessionMaterial(fileIds.split(",").length);
}
}
NoteRecordDetailDTO noteRecordDetailDTO = new NoteRecordDetailDTO();
noteRecordDetailDTO.setName(name);
noteRecordDetailDTO.setChildren(nameMap.get(name));
noteRecordDetailDTO.setConfessionMaterial(CollUtil.size(noteRecordDetailDTO.getFileList()));
res.add(noteRecordDetailDTO);
}
List<NoteRecordDetailDTO> pager = ListUtils.Pager(size, page, res);
return IPages.buildDataMap(pager, res.size());
}

@ -54,4 +54,21 @@ public class WordReadUtil {
return stringBuilder.toString();
}
public static String readWord(InputStream inputStream) {
StringBuilder stringBuilder = new StringBuilder();
try (inputStream) {
// 创建 XWPFDocument 对象
XWPFDocument document = new XWPFDocument(inputStream);
// 获取所有段落
List<XWPFParagraph> paragraphs = document.getParagraphs();
// 遍历所有段落并打印文本
for (XWPFParagraph paragraph : paragraphs) {
stringBuilder.append(paragraph.getText());
}
} catch (Exception e) {
log.error("获取笔录内容失败",e);
}
return stringBuilder.toString();
}
}

Loading…
Cancel
Save