topo_dev
liu 11 months ago
parent 159eaa5f0e
commit c00a2c2da0

@ -1,12 +1,16 @@
package com.supervision.police.controller; package com.supervision.police.controller;
import com.supervision.common.domain.R; import com.supervision.common.domain.R;
import com.supervision.police.domain.ModelRecordType;
import com.supervision.police.domain.NotePrompt; import com.supervision.police.domain.NotePrompt;
import com.supervision.police.domain.NoteRecords; import com.supervision.police.domain.NoteRecords;
import com.supervision.police.domain.TripleInfo;
import com.supervision.police.dto.ListDTO; import com.supervision.police.dto.ListDTO;
import com.supervision.police.service.ModelRecordTypeService; import com.supervision.police.service.ModelRecordTypeService;
import com.supervision.police.service.RecordService; import com.supervision.police.service.RecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
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.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -14,31 +18,32 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map;
@RestController @RestController
@Slf4j @Slf4j
@RequestMapping("record") @RequestMapping("record")
@ApiOperation(value = "笔录接口") @ApiOperation(value = "笔录接口")
@RequiredArgsConstructor
public class RecordController { public class RecordController {
@Autowired public final ModelRecordTypeService modelRecordTypeService;
public ModelRecordTypeService modelRecordTypeService;
@Autowired public final RecordService recordService;
public RecordService recordService;
/** /**
* *
*
* @param name * @param name
* @param page * @param page
* @param size * @param size
* @return * @return
*/ */
@GetMapping("queryType") @GetMapping("queryType")
public R<?> queryType(@RequestParam(required = false) String name, public R<List<ModelRecordType>> queryType(@RequestParam(required = false) String name,
@RequestParam(required = false, defaultValue = "1") Integer page, @RequestParam(required = false, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "20") Integer size) { @RequestParam(required = false, defaultValue = "20") Integer size) {
return modelRecordTypeService.queryType(name, page, size); return R.ok(modelRecordTypeService.queryType(name, page, size));
} }
// @PostMapping("saveType") // @PostMapping("saveType")
@ -48,6 +53,7 @@ public class RecordController {
/** /**
* *
*
* @param prompt * @param prompt
* @return * @return
*/ */
@ -58,6 +64,7 @@ public class RecordController {
/** /**
* *
*
* @param prompt * @param prompt
* @return * @return
*/ */
@ -68,56 +75,63 @@ public class RecordController {
/** /**
* *
*
* @param caseId * @param caseId
* @param name * @param name
* @param recordId * @param recordId
* @return * @return
*/ */
@GetMapping("/getThreeInfo") @GetMapping("/getThreeInfo")
public R<?> getThreeInfo(@RequestParam String caseId, @ApiOperation("获取笔录的三元组信息")
public R<List<TripleInfo>> getThreeInfo(@RequestParam String caseId,
@RequestParam String name, @RequestParam String name,
@RequestParam(required = false) String recordId) { @RequestParam(required = false) String recordId) {
return modelRecordTypeService.getThreeInfo(caseId, name, recordId); return R.ok(modelRecordTypeService.getThreeInfo(caseId, name, recordId));
} }
@ApiOperation("将三元组信息保存到知识图谱")
@PostMapping("/addNeo4j") @PostMapping("/addNeo4j")
public R<?> addNeo4j(@RequestBody ListDTO list) { public R<String> addNeo4j(@RequestBody ListDTO list) {
return modelRecordTypeService.addNeo4j(list.getIds()); return R.ok(modelRecordTypeService.addNeo4j(list.getIds()));
} }
/** /**
* *
*
* @param records * @param records
* @return * @return
*/ */
@PostMapping("/addOrUpdRecords") @PostMapping("/addOrUpdRecords")
public R<?> uploadRecords(NoteRecords records, public R<String> uploadRecords(NoteRecords records,
@RequestPart("file") List<MultipartFile> fileList) throws IOException { @RequestPart("file") List<MultipartFile> fileList) throws IOException {
return recordService.uploadRecords(records, fileList); return R.ok(recordService.uploadRecords(records, fileList));
} }
/** /**
* *
*
* @param noteRecords * @param noteRecords
* @param page * @param page
* @param size * @param size
* @return * @return
*/ */
@PostMapping("/queryRecords") @PostMapping("/queryRecords")
public R<?> queryRecords(@RequestBody NoteRecords noteRecords, public R<Map<String, Object>> queryRecords(@RequestBody NoteRecords noteRecords,
@RequestParam(required = false, defaultValue = "1") Integer page, @RequestParam(required = false, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "20") Integer size) { @RequestParam(required = false, defaultValue = "20") Integer size) {
return recordService.queryRecords(noteRecords, page, size); return R.ok(recordService.queryRecords(noteRecords, page, size));
} }
/** /**
* *
*
* @param id * @param id
* @return * @return
*/ */
@PostMapping("/delRecords") @PostMapping("/delRecords")
public R<?> delRecords(@RequestParam String id) { public R<?> delRecords(@RequestParam String id) {
return recordService.delRecords(id); recordService.delRecords(id);
return R.ok();
} }

@ -4,12 +4,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.common.domain.R; import com.supervision.common.domain.R;
import com.supervision.police.domain.ModelRecordType; import com.supervision.police.domain.ModelRecordType;
import com.supervision.police.domain.NotePrompt; import com.supervision.police.domain.NotePrompt;
import com.supervision.police.domain.TripleInfo;
import java.util.List; import java.util.List;
public interface ModelRecordTypeService extends IService<ModelRecordType> { public interface ModelRecordTypeService extends IService<ModelRecordType> {
R<?> queryType(String name, Integer page, Integer size); List<ModelRecordType> queryType(String name, Integer page, Integer size);
ModelRecordType queryByName(String content); ModelRecordType queryByName(String content);
@ -19,7 +20,7 @@ public interface ModelRecordTypeService extends IService<ModelRecordType> {
R<?> delPrompt(NotePrompt prompt); R<?> delPrompt(NotePrompt prompt);
R<?> getThreeInfo(String caseId, String name, String recordId); List<TripleInfo> getThreeInfo(String caseId, String name, String recordId);
R<?> addNeo4j(List<String> ids); String addNeo4j(List<String> ids);
} }

@ -8,13 +8,14 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map;
public interface RecordService extends IService<NoteRecord> { public interface RecordService extends IService<NoteRecord> {
R<?> uploadRecords(NoteRecords records, List<MultipartFile> fileList) throws IOException; String uploadRecords(NoteRecords records, List<MultipartFile> fileList) throws IOException;
R<?> queryRecords(NoteRecords noteRecords, Integer page, Integer size); Map<String, Object> queryRecords(NoteRecords noteRecords, Integer page, Integer size);
R<?> delRecords(String id); void delRecords(String id);
} }

@ -17,6 +17,7 @@ import com.supervision.police.mapper.NoteRecordMapper;
import com.supervision.police.mapper.NotePromptMapper; import com.supervision.police.mapper.NotePromptMapper;
import com.supervision.police.mapper.TripleInfoMapper; import com.supervision.police.mapper.TripleInfoMapper;
import com.supervision.police.service.ModelRecordTypeService; import com.supervision.police.service.ModelRecordTypeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
@ -24,6 +25,7 @@ import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.Generation; import org.springframework.ai.chat.Generation;
import org.springframework.ai.chat.messages.Message; import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.SystemMessage; import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.ollama.OllamaChatClient; import org.springframework.ai.ollama.OllamaChatClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -36,31 +38,23 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor
public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMapper, ModelRecordType> implements ModelRecordTypeService { public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMapper, ModelRecordType> implements ModelRecordTypeService {
@Autowired private final ModelRecordTypeMapper modelRecordTypeMapper;
private ModelRecordTypeMapper modelRecordTypeMapper;
@Autowired private final NoteRecordMapper noteRecordMapper;
private NoteRecordMapper noteRecordMapper;
@Autowired private final NotePromptMapper notePromptMapper;
private NotePromptMapper notePromptMapper;
private final OllamaChatClient chatClient; private final TripleInfoMapper tripleInfoMapper;
@Autowired
public ModelRecordTypeServiceImpl(OllamaChatClient chatClient) {
this.chatClient = chatClient;
}
@Autowired private final Neo4jService neo4jService;
private TripleInfoMapper tripleInfoMapper;
@Autowired private final OllamaChatClient chatClient;
private Neo4jService neo4jService;
@Override @Override
public R<?> queryType(String name, Integer page, Integer size) { public List<ModelRecordType> queryType(String name, Integer page, Integer size) {
// IPage<ModelRecordType> iPage = new Page<>(page, size); // IPage<ModelRecordType> iPage = new Page<>(page, size);
// iPage = modelRecordTypeMapper.selectByName(iPage, name); // iPage = modelRecordTypeMapper.selectByName(iPage, name);
// return R.ok(IPages.buildDataMap(iPage)); // return R.ok(IPages.buildDataMap(iPage));
@ -74,7 +68,7 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
List<NotePrompt> prompts = notePromptMapper.queryPrompt(modelRecordType.getId()); List<NotePrompt> prompts = notePromptMapper.queryPrompt(modelRecordType.getId());
modelRecordType.setPrompts(prompts); modelRecordType.setPrompts(prompts);
} }
return R.ok(list); return list;
// return R.ok(IPages.buildDataMap(iPage)); // return R.ok(IPages.buildDataMap(iPage));
} }
@ -127,8 +121,7 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
} }
} }
@Override private List<TripleInfo> extractThreeInfo(String caseId, String name, String recordId) {
public R<?> getThreeInfo(String caseId, String name, String recordId) {
List<NoteRecord> records = noteRecordMapper.selectRecord(caseId, name, recordId); List<NoteRecord> records = noteRecordMapper.selectRecord(caseId, name, recordId);
List<TripleInfo> tripleInfos = new ArrayList<>(); List<TripleInfo> tripleInfos = new ArrayList<>();
for (NoteRecord record : records) { for (NoteRecord record : records) {
@ -138,17 +131,15 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
continue; continue;
} }
try { try {
// 分析三元组
List<Message> messages = new ArrayList<>(List.of(new SystemMessage(prompt.getPrompt() + record.getQuestion() + record.getAnswer())));
Prompt ask = new Prompt(messages);
StopWatch stopWatch = new StopWatch(); StopWatch stopWatch = new StopWatch();
// 分析三元组
Prompt ask = new Prompt(new UserMessage(prompt.getPrompt() + record.getQuestion() + record.getAnswer()));
stopWatch.start(); stopWatch.start();
log.info("开始分析:"); log.info("开始分析:");
ChatResponse call = chatClient.call(ask); ChatResponse call = chatClient.call(ask);
stopWatch.stop(); stopWatch.stop();
log.info("耗时:{}", stopWatch.getTotalTimeSeconds()); log.info("耗时:{}", stopWatch.getTotalTimeSeconds());
Generation result = call.getResult(); String content = call.getResult().getOutput().getContent();
String content = result.getOutput().getContent();
log.info("分析的结果是:{}", content); log.info("分析的结果是:{}", content);
JSONObject jsonObject = new JSONObject(content); JSONObject jsonObject = new JSONObject(content);
JSONArray threeInfo = jsonObject.getJSONArray("result"); JSONArray threeInfo = jsonObject.getJSONArray("result");
@ -169,15 +160,21 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
tripleInfos.add(tripleInfo); tripleInfos.add(tripleInfo);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(e.getMessage(), e);
}
} }
} }
return tripleInfos;
} }
return R.ok(tripleInfos);
@Override
public List<TripleInfo> getThreeInfo(String caseId, String name, String recordId) {
// TODO 这里应该改成异步的形式,通过异步的形式来进行提取三元组信息,不能每次点击就跑一遍
return extractThreeInfo(caseId, name, recordId);
} }
@Override @Override
public R<?> addNeo4j(List<String> ids) { public String addNeo4j(List<String> ids) {
List<TripleInfo> tripleInfos = tripleInfoMapper.selectByIds(ids); List<TripleInfo> tripleInfos = tripleInfoMapper.selectByIds(ids);
int i = 0; int i = 0;
for (TripleInfo tripleInfo : tripleInfos) { for (TripleInfo tripleInfo : tripleInfos) {
@ -210,9 +207,9 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
i++; i++;
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(e.getMessage(), e);
} }
} }
return R.ok("成功插入" + i + "条信息"); return ("成功插入" + i + "条信息");
} }
} }

@ -24,6 +24,7 @@ import com.supervision.police.service.RecordService;
import com.supervision.springaidemo.dto.QARecordNodeDTO; import com.supervision.springaidemo.dto.QARecordNodeDTO;
import com.supervision.springaidemo.util.RecordRegexUtil; import com.supervision.springaidemo.util.RecordRegexUtil;
import com.supervision.springaidemo.util.WordReadUtil; import com.supervision.springaidemo.util.WordReadUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.json.JSONObject; import org.json.JSONObject;
import org.springframework.ai.chat.ChatResponse; import org.springframework.ai.chat.ChatResponse;
@ -45,36 +46,25 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor
public class RecordServiceImpl extends ServiceImpl<NoteRecordMapper, NoteRecord> implements RecordService { public class RecordServiceImpl extends ServiceImpl<NoteRecordMapper, NoteRecord> implements RecordService {
@Autowired private final NoteRecordMapper noteRecordMapper;
private NoteRecordMapper noteRecordMapper;
@Autowired private final NoteRecordsMapper noteRecordsMapper;
private NoteRecordsMapper noteRecordsMapper;
@Autowired private final MinioService minioService;
private MinioService minioService;
@Autowired private final ModelCaseMapper modelCaseMapper;
private ModelCaseMapper modelCaseMapper;
@Autowired private final MinioFileMapper minioFileMapper;
private MinioFileMapper minioFileMapper;
private final OllamaChatClient chatClient; private final OllamaChatClient chatClient;
@Autowired
public RecordServiceImpl(OllamaChatClient chatClient) {
this.chatClient = chatClient;
}
@Autowired
private ModelRecordTypeMapper modelRecordTypeMapper; private ModelRecordTypeMapper modelRecordTypeMapper;
@Override @Override
// @Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
public R<?> uploadRecords(NoteRecords records, List<MultipartFile> fileList) throws IOException { public String uploadRecords(NoteRecords records, List<MultipartFile> fileList) throws IOException {
//上传文件获取文件ids //上传文件获取文件ids
List<String> fileIds = new ArrayList<>(); List<String> fileIds = new ArrayList<>();
for (MultipartFile file : fileList) { for (MultipartFile file : fileList) {
@ -180,14 +170,14 @@ public class RecordServiceImpl extends ServiceImpl<NoteRecordMapper, NoteRecord>
// } // }
} }
} }
return R.okMsg("保存成功"); return "保存成功";
} else { } else {
return R.fail("保存笔录失败"); return "保存笔录失败";
} }
} }
@Override @Override
public R<?> queryRecords(NoteRecords noteRecords, Integer page, Integer size) { public Map<String, Object> queryRecords(NoteRecords noteRecords, Integer page, Integer size) {
LambdaQueryWrapper<NoteRecords> wrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<NoteRecords> wrapper = Wrappers.lambdaQuery();
wrapper.like(StringUtils.isNotEmpty(noteRecords.getName()), NoteRecords::getName, noteRecords.getName()) wrapper.like(StringUtils.isNotEmpty(noteRecords.getName()), NoteRecords::getName, noteRecords.getName())
.eq(NoteRecords::getCaseId, noteRecords.getCaseId()) .eq(NoteRecords::getCaseId, noteRecords.getCaseId())
@ -212,11 +202,11 @@ public class RecordServiceImpl extends ServiceImpl<NoteRecordMapper, NoteRecord>
} }
} }
} }
return R.ok(IPages.buildDataMap(pager, res.size())); return IPages.buildDataMap(pager, res.size());
} }
@Override @Override
public R<?> delRecords(String id) { public void delRecords(String id) {
NoteRecords noteRecords = noteRecordsMapper.selectById(id); NoteRecords noteRecords = noteRecordsMapper.selectById(id);
noteRecords.setDataStatus(StringUtils.getUUID()); noteRecords.setDataStatus(StringUtils.getUUID());
noteRecordsMapper.updateById(noteRecords); noteRecordsMapper.updateById(noteRecords);
@ -230,7 +220,6 @@ public class RecordServiceImpl extends ServiceImpl<NoteRecordMapper, NoteRecord>
minioService.delFile(fileId); minioService.delFile(fileId);
} }
} }
return R.ok();
} }
} }

Loading…
Cancel
Save