1. 修复bug

topo_dev
xueqingkun 11 months ago
parent 77800c8f54
commit 485744c598

@ -3,12 +3,9 @@ package com.supervision.minio.client;
import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.IoUtil;
import com.supervision.minio.exception.SysObsException; import com.supervision.minio.exception.SysObsException;
import io.minio.*; import io.minio.*;
import io.minio.errors.MinioException; import io.minio.errors.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteError; import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject; import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -19,7 +16,6 @@ import java.io.InputStream;
import java.security.InvalidKeyException; import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
/** /**
* minio Template * 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; package com.supervision.minio.service;
import com.supervision.common.domain.R; import com.supervision.common.domain.R;
import com.supervision.minio.domain.MinioFile;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public interface MinioService { public interface MinioService {
@ -14,4 +17,14 @@ public interface MinioService {
R<?> delFile(String fileId); 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; 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.domain.R;
import com.supervision.common.utils.StringUtils; import com.supervision.common.utils.StringUtils;
import com.supervision.minio.client.MinioTemplate; import com.supervision.minio.client.MinioTemplate;
@ -14,9 +16,7 @@ import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Date; import java.util.*;
import java.util.Objects;
import java.util.UUID;
@Service @Service
public class MinioServiceImpl implements MinioService { public class MinioServiceImpl implements MinioService {
@ -64,4 +64,31 @@ public class MinioServiceImpl implements MinioService {
return R.ok(); 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.NoteRecord;
import com.supervision.police.domain.TripleInfo; import com.supervision.police.domain.TripleInfo;
import com.supervision.police.dto.ListDTO; 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.dto.TypeDTO;
import com.supervision.police.service.ModelRecordTypeService; import com.supervision.police.service.ModelRecordTypeService;
import com.supervision.police.service.NoteRecordSplitService; import com.supervision.police.service.NoteRecordSplitService;
@ -14,7 +14,6 @@ import io.swagger.annotations.ApiOperation;
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.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
@ -107,9 +106,8 @@ public class RecordController {
* @return * @return
*/ */
@PostMapping("/addOrUpdRecords") @PostMapping("/addOrUpdRecords")
public R<String> uploadRecords(NoteRecordReqVo records, public R<String> uploadRecords(@RequestBody NoteRecordDTO records) throws IOException {
@RequestPart("file") List<MultipartFile> fileList) throws IOException { return R.ok(noteRecordSplitService.uploadRecords(records));
return R.ok(noteRecordSplitService.uploadRecords(records, fileList));
} }
/** /**

@ -1,10 +1,13 @@
package com.supervision.police.dto; package com.supervision.police.dto;
import cn.hutool.core.collection.CollUtil;
import com.supervision.police.domain.NoteRecord; import com.supervision.police.domain.NoteRecord;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class NoteRecordReqVo { public class NoteRecordDTO {
private String id; private String id;
@ -19,9 +22,9 @@ public class NoteRecordReqVo {
private String recordName; private String recordName;
/** /**
* id * id
*/ */
private String fileIds; private List<String> fileIdList;
/** /**
* *
@ -58,7 +61,9 @@ public class NoteRecordReqVo {
noteRecord.setId(id); noteRecord.setId(id);
noteRecord.setCaseId(caseId); noteRecord.setCaseId(caseId);
noteRecord.setRecordName(recordName); noteRecord.setRecordName(recordName);
noteRecord.setFileIds(fileIds); if (CollUtil.isNotEmpty(fileIdList)){
noteRecord.setFileIds(CollUtil.join(fileIdList, ","));
}
noteRecord.setName(name); noteRecord.setName(name);
noteRecord.setRole(role); noteRecord.setRole(role);
noteRecord.setConfessionMaterial(confessionMaterial); 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.baomidou.mybatisplus.extension.service.IService;
import com.supervision.police.domain.NoteRecord; import com.supervision.police.domain.NoteRecord;
import com.supervision.police.domain.NoteRecordSplit; import com.supervision.police.domain.NoteRecordSplit;
import com.supervision.police.dto.NoteRecordReqVo; import com.supervision.police.dto.NoteRecordDTO;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.Map; import java.util.Map;
public interface NoteRecordSplitService extends IService<NoteRecordSplit> { 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); Map<String, Object> queryRecords(NoteRecord noteRecord, Integer page, Integer size);

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

@ -1,5 +1,6 @@
package com.supervision.police.service.impl; 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.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.domain.MinioFile;
import com.supervision.minio.mapper.MinioFileMapper; import com.supervision.minio.mapper.MinioFileMapper;
import com.supervision.minio.service.MinioService; import com.supervision.minio.service.MinioService;
import com.supervision.police.domain.ModelCase;
import com.supervision.police.domain.ModelRecordType; import com.supervision.police.domain.ModelRecordType;
import com.supervision.police.domain.NoteRecordSplit; import com.supervision.police.domain.NoteRecordSplit;
import com.supervision.police.domain.NoteRecord; 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.ModelCaseMapper;
import com.supervision.police.mapper.NoteRecordSplitMapper; import com.supervision.police.mapper.NoteRecordSplitMapper;
import com.supervision.police.mapper.NoteRecordMapper; 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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@ -60,20 +62,9 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
@Override @Override
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
public String uploadRecords(NoteRecordReqVo records, List<MultipartFile> fileList) throws IOException { public String uploadRecords(NoteRecordDTO records) 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, ","));
}
//修改案件的行为人、当事人 //修改案件的行为人、当事人
if (StringUtils.isNotEmpty(records.getRole()) && !"嫌疑人".equals(records.getRole())) { /*if (StringUtils.isNotEmpty(records.getRole()) && !"嫌疑人".equals(records.getRole())) {
ModelCase modelCase = modelCaseMapper.selectById(records.getCaseId()); ModelCase modelCase = modelCaseMapper.selectById(records.getCaseId());
//行为人 //行为人
if ("行为人".equals(records.getRole()) && StringUtils.isEmpty(modelCase.getLawActor())) { if ("行为人".equals(records.getRole()) && StringUtils.isEmpty(modelCase.getLawActor())) {
@ -90,8 +81,8 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
} }
modelCaseMapper.updateById(modelCase); modelCaseMapper.updateById(modelCase);
} }
} }*/
int i = 0; int i;
if (StringUtils.isEmpty(records.getId())) { if (StringUtils.isEmpty(records.getId())) {
i = noteRecordMapper.insert(records.toNoteRecord()); i = noteRecordMapper.insert(records.toNoteRecord());
} else { } else {
@ -99,17 +90,26 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
} }
//所有对话类型 //所有对话类型
List<ModelRecordType> allTypeList = modelRecordTypeService.lambdaQuery().list(); List<ModelRecordType> allTypeList = modelRecordTypeService.lambdaQuery().list();
if (i > 0) { if (i > 0 && CollUtil.isNotEmpty(records.getFileIdList())) {
//拆分笔录 //拆分笔录
for (MultipartFile file : fileList) { for (String fileId : records.getFileIdList()) {
String context = WordReadUtil.readWord(file); 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()); List<QARecordNodeDTO> qaList = RecordRegexUtil.recordRegex(context, records.getName());
for (QARecordNodeDTO qa : qaList) { for (QARecordNodeDTO qa : qaList) {
try { try {
NoteRecordSplit noteRecord = new NoteRecordSplit(); NoteRecordSplit noteRecord = new NoteRecordSplit();
noteRecord.setCaseId(records.getCaseId()); noteRecord.setCaseId(records.getCaseId());
noteRecord.setNoteRecordsId(records.getId()); noteRecord.setNoteRecordsId(records.getId());
noteRecord.setNoteName(file.getName()); noteRecord.setNoteName(minioFile.getFilename());
noteRecord.setPersonName(records.getName()); noteRecord.setPersonName(records.getName());
noteRecord.setQuestion(qa.getQuestion()); noteRecord.setQuestion(qa.getQuestion());
noteRecord.setAnswer(qa.getAnswer()); noteRecord.setAnswer(qa.getAnswer());
@ -131,30 +131,28 @@ public class NoteRecordSplitServiceImpl extends ServiceImpl<NoteRecordSplitMappe
@Override @Override
public Map<String, Object> queryRecords(NoteRecord noteRecords, Integer page, Integer size) { public Map<String, Object> queryRecords(NoteRecord noteRecords, Integer page, Integer size) {
LambdaQueryWrapper<NoteRecord> wrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<NoteRecord> wrapper = Wrappers.lambdaQuery(NoteRecord.class)
wrapper.like(StringUtils.isNotEmpty(noteRecords.getName()), NoteRecord::getName, noteRecords.getName()) .like(StringUtils.isNotEmpty(noteRecords.getName()), NoteRecord::getName, noteRecords.getName())
.eq(NoteRecord::getCaseId, noteRecords.getCaseId()) .eq(NoteRecord::getCaseId, noteRecords.getCaseId())
.eq(NoteRecord::getDataStatus, "1"); .eq(NoteRecord::getDataStatus, "1");
List<NoteRecord> list = noteRecordMapper.selectList(wrapper); 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 保障顺序 // LinkedHashMap 保障顺序
Map<String, List<NoteRecord>> nameMap = list.stream().filter(item -> StringUtils.isNotBlank(item.getName())) Map<String, List<NoteRecordDetailDTO>> nameMap = list.stream().filter(item -> StringUtils.isNotBlank(item.getName())).map(item -> new NoteRecordDetailDTO(item, fileMap))
.collect(Collectors.groupingBy(NoteRecord::getName, LinkedHashMap::new, Collectors.toList())); .collect(Collectors.groupingBy(NoteRecordDetailDTO::getName, LinkedHashMap::new, Collectors.toList()));
List<NoteRecord> res = new ArrayList<>(); List<NoteRecordDetailDTO> res = new ArrayList<>();
for (String name : nameMap.keySet()) { for (String name : nameMap.keySet()) {
NoteRecord noteRecord = new NoteRecord(); NoteRecordDetailDTO noteRecordDetailDTO = new NoteRecordDetailDTO();
noteRecord.setName(name); noteRecordDetailDTO.setName(name);
noteRecord.setChildren(nameMap.get(name)); noteRecordDetailDTO.setChildren(nameMap.get(name));
res.add(noteRecord); noteRecordDetailDTO.setConfessionMaterial(CollUtil.size(noteRecordDetailDTO.getFileList()));
} res.add(noteRecordDetailDTO);
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);
}
}
} }
List<NoteRecordDetailDTO> pager = ListUtils.Pager(size, page, res);
return IPages.buildDataMap(pager, res.size()); return IPages.buildDataMap(pager, res.size());
} }

@ -54,4 +54,21 @@ public class WordReadUtil {
return stringBuilder.toString(); 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