|
@@ -3,11 +3,13 @@ package com.diagbot.facade;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.diagbot.entity.KlConcept;
|
|
|
import com.diagbot.entity.KlDiagnose;
|
|
|
+import com.diagbot.enums.CommonEnum;
|
|
|
import com.diagbot.enums.DiagnoseLexiconTypeEnum;
|
|
|
import com.diagbot.enums.IsDeleteEnum;
|
|
|
import com.diagbot.enums.LexiconEnum;
|
|
|
import com.diagbot.enums.LexiconExtEnum;
|
|
|
import com.diagbot.service.KlConceptService;
|
|
|
+import com.diagbot.util.CoreUtil;
|
|
|
import com.diagbot.util.EntityUtil;
|
|
|
import com.diagbot.util.ExcelUtils;
|
|
|
import com.diagbot.util.ListUtil;
|
|
@@ -33,7 +35,6 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.ListIterator;
|
|
@@ -60,7 +61,7 @@ public class KlDiagnoseImportFacade {
|
|
|
Map<String, Object> message = new LinkedHashMap<>(); // 提示信息
|
|
|
List<ImportDiagnoseResVO> allData = Lists.newArrayList(); // 最终需要保存的数据
|
|
|
if (StringUtil.isNotBlank(diagnoseImportVO.getDiagStr())) {
|
|
|
- List<String> diagList = Arrays.stream(diagnoseImportVO.getDiagStr().split("#")).map(r -> r.trim()).collect(Collectors.toList());
|
|
|
+ List<String> diagList = CoreUtil.getSplit(diagnoseImportVO.getDiagStr());
|
|
|
diagnoseImportVO.setDiags(diagList);
|
|
|
}
|
|
|
// 校验数据
|
|
@@ -72,7 +73,7 @@ public class KlDiagnoseImportFacade {
|
|
|
message.put("导入条数", allData.size() + "条");
|
|
|
// 如果有指定诊断,提示导入的诊断;如果全部导入,提示“所有诊断”
|
|
|
if (ListUtil.isNotEmpty(diagnoseImportVO.getDiags())) {
|
|
|
- message.put("导入诊断", allData.stream().map(r -> r.getDiseaseName()).collect(Collectors.joining("#")));
|
|
|
+ message.put("导入诊断", allData.stream().map(r -> r.getDiseaseName()).collect(Collectors.joining(CommonEnum.splitSymbol.getName())));
|
|
|
} else {
|
|
|
message.put("导入诊断", "所有诊断");
|
|
|
}
|
|
@@ -94,29 +95,29 @@ public class KlDiagnoseImportFacade {
|
|
|
public Boolean verifyData(MultipartFile file, DiagnoseImportVO diagnoseImportVO, Map<String, Object> diagMessage, List<ImportDiagnoseResVO> allData) {
|
|
|
Boolean allFlag = true;
|
|
|
List<String> diagtypes = Lists.newArrayList("拟诊", "确诊", "警惕");
|
|
|
+ List<String> splitType = Lists.newArrayList("症状", "体格检查结果", "疾病", "人群", "辅助检查结果");
|
|
|
// 获取标准词库Map
|
|
|
Map<String, KlConcept> concept_map = getConceptMap();
|
|
|
|
|
|
- // 分组之后的数据
|
|
|
- Map<String, List<ImportDiagnoseVO>> groupData = new LinkedHashMap<>();
|
|
|
- // 获取全部数据,分组
|
|
|
+ // 获取表格数据
|
|
|
List<ImportDiagnoseVO> data = ExcelUtils.importExcelMultiSheets(file, 0, 1, 0, ImportDiagnoseVO.class);
|
|
|
+
|
|
|
+ // 以疾病分组之后的数据
|
|
|
+ Map<String, List<ImportDiagnoseVO>> groupData = new LinkedHashMap<>();
|
|
|
List<ImportDiagnoseVO> importDiagnoseVOList = null;
|
|
|
String addDisName = "";
|
|
|
for (ImportDiagnoseVO importDiagnoseVO : data) {
|
|
|
String type = importDiagnoseVO.getType();
|
|
|
if (type != null && type.startsWith("【") && type.endsWith("】")) {
|
|
|
if (StringUtil.isNotBlank(addDisName)) {
|
|
|
- addDisName = RegexUtil.getRegexData(addDisName, "【(.*?)】", 1);
|
|
|
- groupData.put(addDisName, importDiagnoseVOList);
|
|
|
+ groupData.put(addDisName, importDiagnoseVOList); // 存放上一个疾病数据
|
|
|
}
|
|
|
importDiagnoseVOList = new ArrayList<>();
|
|
|
- addDisName = type;
|
|
|
+ addDisName = RegexUtil.getRegexData(type, "【(.*?)】", 1);
|
|
|
} else {
|
|
|
importDiagnoseVOList.add(importDiagnoseVO);
|
|
|
}
|
|
|
}
|
|
|
- addDisName = RegexUtil.getRegexData(addDisName, "【(.*?)】", 1); // 获取名字
|
|
|
groupData.put(addDisName, importDiagnoseVOList); // 添加最后一个
|
|
|
|
|
|
int i = 0;
|
|
@@ -144,10 +145,10 @@ public class KlDiagnoseImportFacade {
|
|
|
|
|
|
//处理公式(确诊)
|
|
|
List<String> orderList = processFormula(curData, diagtypes);
|
|
|
- dealVerify(currentErrMsg, orderList, diagtypes, curData, concept_map);
|
|
|
+ dealVerify(currentErrMsg, orderList, diagtypes, curData, concept_map, splitType);
|
|
|
// 数据赋值
|
|
|
if (ListUtil.isEmpty(currentErrMsg)) {
|
|
|
- curData = dealImportDiagnose(diagtypes, curData, concept_map);
|
|
|
+ curData = dealImportDiagnose(diagtypes, curData, concept_map, splitType);
|
|
|
// 添加到正确数据列表
|
|
|
importDiagnoseResVO.setImportDiagnoseVOList(curData);
|
|
|
allData.add(importDiagnoseResVO);
|
|
@@ -235,7 +236,7 @@ public class KlDiagnoseImportFacade {
|
|
|
* @param concept_map
|
|
|
* @return
|
|
|
*/
|
|
|
- private List<ImportDiagnoseVO> dealImportDiagnose(List<String> diagtypes, List<ImportDiagnoseVO> importDiagnoseVOS, Map<String, KlConcept> concept_map) {
|
|
|
+ private List<ImportDiagnoseVO> dealImportDiagnose(List<String> diagtypes, List<ImportDiagnoseVO> importDiagnoseVOS, Map<String, KlConcept> concept_map, List<String> splitType) {
|
|
|
for (ImportDiagnoseVO idv : importDiagnoseVOS) {
|
|
|
String type = idv.getType();
|
|
|
String orderNo = idv.getOrderNo();
|
|
@@ -243,10 +244,17 @@ public class KlDiagnoseImportFacade {
|
|
|
if (StringUtil.isBlank(type) && StringUtil.isBlank(orderNo)) {
|
|
|
continue;
|
|
|
}
|
|
|
- if (!type.contains("正则") && !diagtypes.contains(type)) {
|
|
|
- KlConcept klConcept = concept_map.get(rule + "_" + String.valueOf(LexiconExtEnum.getEnum(type).getKey()));
|
|
|
- if (klConcept != null) {
|
|
|
- idv.setConceptId(klConcept.getId());
|
|
|
+ if (!type.contains("正则") && !diagtypes.contains(type) && splitType.contains(type)) {
|
|
|
+ List<String> splits = CoreUtil.getSplit(rule);
|
|
|
+ if (ListUtil.isNotEmpty(splits)) {
|
|
|
+ List<Long> conceptIds = Lists.newArrayList();
|
|
|
+ for (String standName : splits) {
|
|
|
+ KlConcept klConcept = concept_map.get(standName + "_" + String.valueOf(LexiconExtEnum.getEnum(type).getKey()));
|
|
|
+ if (klConcept != null) {
|
|
|
+ conceptIds.add(klConcept.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ idv.setConceptId(conceptIds);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -254,7 +262,7 @@ public class KlDiagnoseImportFacade {
|
|
|
}
|
|
|
|
|
|
//数据及格式校验
|
|
|
- private void dealVerify(List<String> currentErrMsg, List<String> orderNums, List<String> diagtypes, List<ImportDiagnoseVO> data, Map<String, KlConcept> concept_map) {
|
|
|
+ private void dealVerify(List<String> currentErrMsg, List<String> orderNums, List<String> diagtypes, List<ImportDiagnoseVO> data, Map<String, KlConcept> concept_map, List<String> splitType) {
|
|
|
//list元素计数
|
|
|
Map<String, Long> orderNumMap = orderNums.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
|
|
|
for (Map.Entry<String, Long> on : orderNumMap.entrySet()) {
|
|
@@ -284,10 +292,18 @@ public class KlDiagnoseImportFacade {
|
|
|
continue;
|
|
|
}
|
|
|
int key = anEnum.getKey();
|
|
|
- if (!type.contains("正则") &&
|
|
|
+ if (!type.contains("正则") && splitType.contains(type)) {
|
|
|
+ List<String> splits = CoreUtil.getSplit(rule);
|
|
|
+ for (String standName : splits) {
|
|
|
+ if (!concept_map.containsKey(standName + "_" + String.valueOf(key))) {
|
|
|
+ currentErrMsg.add(String.format("第%d行【%s】不是标准词", rowNum, standName));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /*if (!type.contains("正则") &&
|
|
|
!concept_map.containsKey(rule + "_" + String.valueOf(key))) {
|
|
|
currentErrMsg.add(String.format("第%d行【%s】不是标准词", rowNum, rule));
|
|
|
- }
|
|
|
+ }*/
|
|
|
String name = DiagnoseLexiconTypeEnum.getName(key);
|
|
|
Boolean regexRes = RegexUtil.getRegexRes(orderNo, name + "\\d+");
|
|
|
if (!regexRes) {
|
|
@@ -315,7 +331,7 @@ public class KlDiagnoseImportFacade {
|
|
|
currentErrMsg.add(String.format("第%d行【类型】不能为空", rowNum));
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(type) && diagtypes.contains(type) && StringUtils.isBlank(rule)
|
|
|
- && StringUtils.isBlank(orderNo)) {
|
|
|
+ && StringUtils.isBlank(orderNo)) {
|
|
|
currentErrMsg.add(String.format("第%d行【诊断依据规则】不能为空", rowNum));
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(type) && !diagtypes.contains(type) && StringUtils.isBlank(rule)) {
|
|
@@ -382,8 +398,6 @@ public class KlDiagnoseImportFacade {
|
|
|
String rule = importDiagnoseVO.getRule();
|
|
|
if (StringUtil.isNotBlank(type) && StringUtil.isNotBlank(rule)) {
|
|
|
if ("拟诊".equals(type) || "确诊".equals(type) || "警惕".equals(type)) {
|
|
|
- String[] splitGroup = rule.split("\\+");
|
|
|
-
|
|
|
KlDiagnoseTypeVO klDiagnoseTypeVO = new KlDiagnoseTypeVO();
|
|
|
if ("拟诊".equals(type)) {
|
|
|
klDiagnoseTypeVO.setConditionType(2);
|
|
@@ -394,6 +408,7 @@ public class KlDiagnoseImportFacade {
|
|
|
}
|
|
|
|
|
|
// 第三层
|
|
|
+ String[] splitGroup = rule.split("\\+");
|
|
|
List<KlDiagnoseGroupVO> groupVO = Lists.newArrayList();
|
|
|
for (String group : splitGroup) {
|
|
|
KlDiagnoseGroupVO klDiagnoseGroupVO = generateDiagnoseGroup(group, map);
|