|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
package com.supervision.police.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import com.alibaba.druid.util.StringUtils;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
|
|
@ -12,6 +13,7 @@ import com.supervision.neo4j.domain.Rel;
|
|
|
|
|
import com.supervision.neo4j.service.Neo4jService;
|
|
|
|
|
import com.supervision.police.domain.*;
|
|
|
|
|
import com.supervision.police.dto.TripleInfoDTO;
|
|
|
|
|
import com.supervision.police.dto.TypeDTO;
|
|
|
|
|
import com.supervision.police.mapper.ModelRecordTypeMapper;
|
|
|
|
|
import com.supervision.police.mapper.NoteRecordSplitMapper;
|
|
|
|
|
import com.supervision.police.service.*;
|
|
|
|
@ -27,9 +29,9 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import org.springframework.util.StopWatch;
|
|
|
|
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Optional;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Service
|
|
|
|
@ -50,24 +52,48 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
|
|
|
|
|
|
|
|
|
|
private final CaseTaskRecordService caseTaskRecordService;
|
|
|
|
|
|
|
|
|
|
private final NotePromptTypeRelService notePromptTypeRelService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ExtractTripleInfoService extractTripleInfo;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<TypeDTO> queryTypeListChoose() {
|
|
|
|
|
List<ModelRecordType> list = modelRecordTypeMapper.selectByName(null);
|
|
|
|
|
return list.stream().map(e -> new TypeDTO(e.getId(),e.getRecordType())).collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<ModelRecordType> queryType(String name, Integer page, Integer size) {
|
|
|
|
|
List<ModelRecordType> list = modelRecordTypeMapper.selectByName(name);
|
|
|
|
|
Map<String, TypeDTO> modelRecordTypeMap = list.stream().map(e -> new TypeDTO(e.getId(),e.getRecordType())).collect(Collectors.toMap(TypeDTO::getId, Function.identity()));
|
|
|
|
|
// 获取类型和三元组提示词的关系表
|
|
|
|
|
List<NotePromptTypeRel> relList = notePromptTypeRelService.lambdaQuery().list();
|
|
|
|
|
Map<String, List<NotePromptTypeRel>> typeIdMap = relList.stream().collect(Collectors.groupingBy(NotePromptTypeRel::getTypeId));
|
|
|
|
|
Map<String, List<NotePromptTypeRel>> promptIdMap = relList.stream().collect(Collectors.groupingBy(NotePromptTypeRel::getPromptId));
|
|
|
|
|
|
|
|
|
|
for (ModelRecordType modelRecordType : list) {
|
|
|
|
|
//笔录内容
|
|
|
|
|
List<NoteRecordSplit> noteRecords = noteRecordSplitMapper.selectByRecordType(modelRecordType.getRecordType());
|
|
|
|
|
modelRecordType.setRecords(noteRecords);
|
|
|
|
|
// grideOptions
|
|
|
|
|
//提示词
|
|
|
|
|
List<NotePrompt> prompts = notePromptService.lambdaQuery().eq(NotePrompt::getTypeId, modelRecordType.getId()).list();
|
|
|
|
|
for (NotePrompt prompt : prompts) {
|
|
|
|
|
prompt.setTripleList(buildTripleInfo(prompt));
|
|
|
|
|
// 根据类型表获取所有的prompt
|
|
|
|
|
List<NotePromptTypeRel> promptRelList = typeIdMap.get(modelRecordType.getId());
|
|
|
|
|
if (CollUtil.isNotEmpty(promptRelList)) {
|
|
|
|
|
Set<String> promptIdSet = promptRelList.stream().map(NotePromptTypeRel::getPromptId).collect(Collectors.toSet());
|
|
|
|
|
List<NotePrompt> prompts = Optional.ofNullable(notePromptService.listByIds(promptIdSet)).orElse(new ArrayList<>());
|
|
|
|
|
for (NotePrompt prompt : prompts) {
|
|
|
|
|
List<String> modelRecordTypes = new ArrayList<>();
|
|
|
|
|
List<NotePromptTypeRel> promptTypeRelList = promptIdMap.get(prompt.getId());
|
|
|
|
|
for (NotePromptTypeRel notePromptTypeRel : promptTypeRelList) {
|
|
|
|
|
TypeDTO existType = modelRecordTypeMap.get(notePromptTypeRel.getTypeId());
|
|
|
|
|
modelRecordTypes.add(existType.getId());
|
|
|
|
|
}
|
|
|
|
|
prompt.setTypeList(modelRecordTypes);
|
|
|
|
|
prompt.setTripleList(buildTripleInfo(prompt));
|
|
|
|
|
}
|
|
|
|
|
modelRecordType.setPrompts(prompts);
|
|
|
|
|
}
|
|
|
|
|
modelRecordType.setPrompts(prompts);
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
@ -116,15 +142,56 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class)
|
|
|
|
|
@Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
|
|
|
|
|
public R<?> addOrUpdPrompt(NotePrompt prompt) {
|
|
|
|
|
List<String> typeList = prompt.getTypeList();
|
|
|
|
|
if (CollUtil.isEmpty(typeList)) {
|
|
|
|
|
throw new RuntimeException("类型信息不能为空");
|
|
|
|
|
}
|
|
|
|
|
int i = 0;
|
|
|
|
|
boolean save;
|
|
|
|
|
if (StringUtils.isEmpty(prompt.getId())) {
|
|
|
|
|
save = notePromptService.save(prompt);
|
|
|
|
|
// 新增prompt绑定的分类信息
|
|
|
|
|
for (String typeId : typeList) {
|
|
|
|
|
NotePromptTypeRel rel = new NotePromptTypeRel();
|
|
|
|
|
rel.setPromptId(prompt.getId());
|
|
|
|
|
rel.setTypeId(typeId);
|
|
|
|
|
notePromptTypeRelService.save(rel);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
save = notePromptService.updateById(prompt);
|
|
|
|
|
// 更新prompt绑定的分类信息
|
|
|
|
|
// 首先查询已经有的,如果都存在,就不变,如果数据库有,前端没有,就删除,如果前端有,数据库没有,就新增
|
|
|
|
|
List<NotePromptTypeRel> existDatabaseRelList = notePromptTypeRelService.lambdaQuery().eq(NotePromptTypeRel::getPromptId, prompt.getId()).list();
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(existDatabaseRelList)) {
|
|
|
|
|
Set<String> existTypeList = existDatabaseRelList.stream().map(NotePromptTypeRel::getTypeId).collect(Collectors.toSet());
|
|
|
|
|
Set<String> frontRelIdList = new HashSet<>(typeList);
|
|
|
|
|
// 删除(数据库有,前端没有的)
|
|
|
|
|
List<String> deleteIdList = existTypeList.stream().filter(id -> !frontRelIdList.contains(id)).collect(Collectors.toList());
|
|
|
|
|
if (CollUtil.isNotEmpty(deleteIdList)) {
|
|
|
|
|
notePromptTypeRelService.removeByIds(deleteIdList);
|
|
|
|
|
}
|
|
|
|
|
// 新增(前端有数据库没有的)
|
|
|
|
|
frontRelIdList.stream().filter(id -> !existTypeList.contains(id)).forEach(e ->{
|
|
|
|
|
NotePromptTypeRel rel = new NotePromptTypeRel();
|
|
|
|
|
rel.setPromptId(prompt.getId());
|
|
|
|
|
rel.setTypeId(e);
|
|
|
|
|
notePromptTypeRelService.save(rel);
|
|
|
|
|
});
|
|
|
|
|
}else {
|
|
|
|
|
// 如果数据库里面没查到,直接新增,一般不会走这一步
|
|
|
|
|
for (String typeId : typeList) {
|
|
|
|
|
NotePromptTypeRel rel = new NotePromptTypeRel();
|
|
|
|
|
rel.setPromptId(prompt.getId());
|
|
|
|
|
rel.setTypeId(typeId);
|
|
|
|
|
notePromptTypeRelService.save(rel);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 更新类型字段
|
|
|
|
|
List<TripleInfoDTO> tripleList = prompt.getTripleList();
|
|
|
|
|
for (TripleInfoDTO dto : tripleList) {
|
|
|
|
@ -132,11 +199,11 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
|
|
|
|
|
notePromptService.lambdaUpdate().set(NotePrompt::getStartEntityTemplate, dto.getTemplateName())
|
|
|
|
|
.set(NotePrompt::getStartEntityType, dto.getValue())
|
|
|
|
|
.eq(NotePrompt::getId, prompt.getId()).update();
|
|
|
|
|
}else if ("关系".equals(dto.getType())){
|
|
|
|
|
} else if ("关系".equals(dto.getType())) {
|
|
|
|
|
notePromptService.lambdaUpdate().set(NotePrompt::getRelTemplate, dto.getTemplateName())
|
|
|
|
|
.set(NotePrompt::getRelType, dto.getValue())
|
|
|
|
|
.eq(NotePrompt::getId, prompt.getId()).update();
|
|
|
|
|
}else if ("尾节点".equals(dto.getType())){
|
|
|
|
|
} else if ("尾节点".equals(dto.getType())) {
|
|
|
|
|
notePromptService.lambdaUpdate().set(NotePrompt::getEndEntityTemplate, dto.getTemplateName())
|
|
|
|
|
.set(NotePrompt::getEndEntityType, dto.getValue())
|
|
|
|
|
.eq(NotePrompt::getId, prompt.getId()).update();
|
|
|
|
@ -154,6 +221,8 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
|
|
|
|
|
public R<?> delPrompt(NotePrompt prompt) {
|
|
|
|
|
String id = prompt.getId();
|
|
|
|
|
boolean removeById = notePromptService.removeById(id);
|
|
|
|
|
// 删除同时从所有分类里面都删除掉
|
|
|
|
|
notePromptTypeRelService.lambdaUpdate().eq(NotePromptTypeRel::getPromptId, id).remove();
|
|
|
|
|
if (removeById) {
|
|
|
|
|
return R.ok("删除成功");
|
|
|
|
|
} else {
|
|
|
|
|