|
@@ -8,12 +8,23 @@ import com.diagbot.enums.IsDeleteEnum;
|
|
|
import com.diagbot.enums.LexiconEnum;
|
|
|
import com.diagbot.enums.LexiconExtEnum;
|
|
|
import com.diagbot.service.KlConceptService;
|
|
|
-import com.diagbot.util.*;
|
|
|
-import com.diagbot.vo.*;
|
|
|
+import com.diagbot.util.EntityUtil;
|
|
|
+import com.diagbot.util.ExcelUtils;
|
|
|
+import com.diagbot.util.ListUtil;
|
|
|
+import com.diagbot.util.RegexUtil;
|
|
|
+import com.diagbot.util.StringUtil;
|
|
|
+import com.diagbot.util.VerifyUtil;
|
|
|
+import com.diagbot.vo.DiagnoseImportVO;
|
|
|
+import com.diagbot.vo.ImportDiagnoseResVO;
|
|
|
+import com.diagbot.vo.ImportDiagnoseVO;
|
|
|
+import com.diagbot.vo.KlDiagnoseDetailVO;
|
|
|
+import com.diagbot.vo.KlDiagnoseGroupVO;
|
|
|
+import com.diagbot.vo.KlDiagnoseSaveVO;
|
|
|
+import com.diagbot.vo.KlDiagnoseTypeVO;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import com.google.common.collect.Maps;
|
|
|
-import org.apache.commons.collections4.map.LinkedMap;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.poi.openxml4j.util.ZipSecureFile;
|
|
|
import org.apache.poi.ss.usermodel.Workbook;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
@@ -21,6 +32,7 @@ import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.ListIterator;
|
|
@@ -43,6 +55,7 @@ public class KlDiagnoseImportFacade {
|
|
|
KlDiagnoseFacade klDiagnoseFacade;
|
|
|
|
|
|
public Map<String, Object> importDiagnose(MultipartFile file, DiagnoseImportVO diagnoseImportVO) {
|
|
|
+ long t1 = System.currentTimeMillis();
|
|
|
Map<String, Object> errMessage = new LinkedHashMap<>(); // 错误提示语
|
|
|
List<ImportDiagnoseResVO> allData = Lists.newArrayList(); // 最终需要保存的数据
|
|
|
// 校验数据
|
|
@@ -52,6 +65,8 @@ public class KlDiagnoseImportFacade {
|
|
|
if (allFlag) {
|
|
|
saveData(allData);
|
|
|
}
|
|
|
+ long t2 = System.currentTimeMillis();
|
|
|
+ System.out.println("总计:" + (t2 - t1) / 1000.0);
|
|
|
return errMessage;
|
|
|
}
|
|
|
|
|
@@ -70,57 +85,61 @@ public class KlDiagnoseImportFacade {
|
|
|
// 获取标准词库Map
|
|
|
Map<String, KlConcept> concept_map = getConceptMap();
|
|
|
|
|
|
- // 获取所有的sheet和序号的对应关系
|
|
|
- Map<String, Integer> sheetNumNameMap = dealExcel(file);
|
|
|
- // 指定诊断列表
|
|
|
- List<String> diags = diagnoseImportVO.getDiags();
|
|
|
- if (ListUtil.isNotEmpty(diags)) {
|
|
|
- List<String> allErrMsg = Lists.newArrayList();
|
|
|
- Map<String, Integer> inputNumNameMap = new LinkedMap<>();
|
|
|
- for (String diag : diags) {
|
|
|
- if (!sheetNumNameMap.containsKey(diag)) {
|
|
|
- allErrMsg.add(String.format("输入的诊断: %s不在下面的sheet中", "【" + diag + "】"));
|
|
|
- } else {
|
|
|
- inputNumNameMap.put(diag, sheetNumNameMap.get(diag));
|
|
|
+ // 分组之后的数据
|
|
|
+ Map<String, List<ImportDiagnoseVO>> groupData = new LinkedHashMap<>();
|
|
|
+ // 获取全部数据,分组
|
|
|
+ List<ImportDiagnoseVO> data = ExcelUtils.importExcelMultiSheets(file, 0, 1, 0, ImportDiagnoseVO.class);
|
|
|
+ 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)) {
|
|
|
+ groupData.put(addDisName, importDiagnoseVOList);
|
|
|
}
|
|
|
- }
|
|
|
- if (ListUtil.isNotEmpty(allErrMsg)) {
|
|
|
- diagMessage.put("输入校验", StringUtils.join(allErrMsg, "; "));
|
|
|
- allFlag = false;
|
|
|
- return allFlag;
|
|
|
+ importDiagnoseVOList = new ArrayList<>();
|
|
|
+ addDisName = type;
|
|
|
} else {
|
|
|
- sheetNumNameMap = inputNumNameMap;
|
|
|
+ importDiagnoseVOList.add(importDiagnoseVO);
|
|
|
}
|
|
|
}
|
|
|
- for (Map.Entry<String, Integer> sheet : sheetNumNameMap.entrySet()) {
|
|
|
+ groupData.put(addDisName, importDiagnoseVOList); // 添加最后一个
|
|
|
+
|
|
|
+ int i = 0;
|
|
|
+ for (String disName : groupData.keySet()) {
|
|
|
+ // 指定诊断导入
|
|
|
+ if (ListUtil.isNotEmpty(diagnoseImportVO.getDiags())) {
|
|
|
+ if (!diagnoseImportVO.getDiags().contains(disName)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println(i++ + ": " + disName);
|
|
|
List<String> currentErrMsg = Lists.newArrayList();
|
|
|
- String sheetName = sheet.getKey();
|
|
|
- Integer sheetNum = sheet.getValue();
|
|
|
- ImportDiagnoseResVO importDiagnoseResVO = new ImportDiagnoseResVO();
|
|
|
|
|
|
+ ImportDiagnoseResVO importDiagnoseResVO = new ImportDiagnoseResVO();
|
|
|
// 校验疾病名称【sheetName】
|
|
|
- KlConcept klConcept = concept_map.get(sheetName + "_" + String.valueOf(LexiconEnum.Disease.getKey()));
|
|
|
+ KlConcept klConcept = concept_map.get(disName + "_" + String.valueOf(LexiconEnum.Disease.getKey()));
|
|
|
if (klConcept != null) {
|
|
|
- importDiagnoseResVO.setDiseaseName(sheetName);
|
|
|
+ importDiagnoseResVO.setDiseaseName(disName);
|
|
|
importDiagnoseResVO.setDiseaseId(klConcept.getId());
|
|
|
} else {
|
|
|
- currentErrMsg.add(String.format("sheetName: %s不是标准词", "【" + sheetName + "】"));
|
|
|
+ currentErrMsg.add(String.format("%s不是标准词", disName));
|
|
|
}
|
|
|
// 校验其他行数据、格式
|
|
|
- List<ImportDiagnoseVO> data = ExcelUtils.importExcelMultiSheets(file, 0, 1, sheetNum.intValue(), ImportDiagnoseVO.class);
|
|
|
- //处理公式(确诊)
|
|
|
- List<String> orderList = processFormula(data, diagtypes);
|
|
|
- dealVerify(currentErrMsg, orderList, diagtypes, data, concept_map);
|
|
|
+ List<ImportDiagnoseVO> curData = groupData.get(disName);
|
|
|
|
|
|
+ //处理公式(确诊)
|
|
|
+ List<String> orderList = processFormula(curData, diagtypes);
|
|
|
+ dealVerify(currentErrMsg, orderList, diagtypes, curData, concept_map);
|
|
|
// 数据赋值
|
|
|
if (ListUtil.isEmpty(currentErrMsg)) {
|
|
|
- data = dealImportDiagnose(diagtypes, data, concept_map);
|
|
|
+ curData = dealImportDiagnose(diagtypes, curData, concept_map);
|
|
|
// 添加到正确数据列表
|
|
|
- importDiagnoseResVO.setImportDiagnoseVOList(data);
|
|
|
+ importDiagnoseResVO.setImportDiagnoseVOList(curData);
|
|
|
allData.add(importDiagnoseResVO);
|
|
|
} else {
|
|
|
allFlag = false;
|
|
|
- diagMessage.put(sheetName, StringUtils.join(currentErrMsg.stream().distinct().collect(Collectors.toList()), "; "));
|
|
|
+ diagMessage.put(disName, StringUtils.join(currentErrMsg.stream().distinct().collect(Collectors.toList()), "; "));
|
|
|
}
|
|
|
}
|
|
|
return allFlag;
|
|
@@ -178,6 +197,7 @@ public class KlDiagnoseImportFacade {
|
|
|
Map<String, Integer> sheetNumName = Maps.newLinkedHashMap();
|
|
|
Workbook workBook = null;
|
|
|
try {
|
|
|
+ ZipSecureFile.setMinInflateRatio(-1.0d);
|
|
|
workBook = ExcelUtils.getWorkBook(file);
|
|
|
int numberOfSheets = workBook.getNumberOfSheets();
|
|
|
for (int i = 0; i < numberOfSheets; i++) {
|