zhoutg преди 4 години
родител
ревизия
d8aa84c555

+ 11 - 11
src/main/java/com/diagbot/dto/ExportDiagnoseDTO.java

@@ -18,25 +18,25 @@ public class ExportDiagnoseDTO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @Excel(name="类型")
+    @Excel(name="类型", width = 20, orderNum = "10")
     private String type = "";
-    @Excel(name="序号")
+    @Excel(name="序号", width = 10, orderNum = "20")
     private String orderNo = "";
-    @Excel(name="规则")
+    @Excel(name="规则", width = 50, orderNum = "30")
     private String rule = "";
-    @Excel(name="等于")
+    @Excel(name="等于", width = 10, orderNum = "40")
     private String eq;
-    @Excel(name="最大值")
+    @Excel(name="最大值", width = 10, orderNum = "50")
     private String max;
-    @Excel(name="最大值符号")
-    private String maxSymbol;
-    @Excel(name="单位")
+    @Excel(name="最大值符号", width = 10, orderNum = "60")
     private String unit;
-    @Excel(name="最小值")
+    @Excel(name="最小值", width = 10, orderNum = "70")
     private String min;
-    @Excel(name="最小值符号")
+    @Excel(name="最小值符号", width = 10, orderNum = "80")
+    private String maxSymbol;
+    @Excel(name="单位", width = 10, orderNum = "90")
     private String minSymbol;
-    @Excel(name="关联词")
+    @Excel(name="关联词", width = 30, orderNum = "35")
     private String relation;
 
 }

+ 38 - 18
src/main/java/com/diagbot/facade/KlDiagnoseDetailFacade.java

@@ -2,18 +2,30 @@ package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.ExportDiagnoseDTO;
+import com.diagbot.dto.ExportDiagnoseNameDTO;
 import com.diagbot.entity.KlDiagnoseDetail;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.KlDiagnoseDetailServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ExcelUtils;
+import com.diagbot.util.ReflectUtil;
+import com.diagbot.util.RegexUtil;
+import com.diagbot.util.StringUtil;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.compress.utils.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -39,26 +51,35 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
         Map<String, List<KlDiagnoseDetail>> diagnoseDetailMap = EntityUtil.makeEntityListMap(klDiagnoseDetailList, "disName");
         // TODO 获取公式,分隔编码,替换编码,组装导出数据  Map<String, List<ExportDiagnoseDTO>>
         Map<String, List<ExportDiagnoseDTO>> diagnoseDetails = processDiagnoseDetail(diagnoseDetailMap);
-        System.out.println();
-
-
+        List<ExportDiagnoseDTO> res = new ArrayList<>();
+        for (String disName : diagnoseDetails.keySet()) {
+            ExportDiagnoseDTO exportDiagnoseDTO = new ExportDiagnoseDTO();
+            exportDiagnoseDTO.setType("【" + disName + "】"); // 疾病
+            res.add(exportDiagnoseDTO);
+            res.addAll(diagnoseDetails.get(disName));
+        }
         // 导出数据
         List<Map<String, Object>> exportDto = new LinkedList<>();
 
-        List<ExportDiagnoseNameDTO> exportDiagnoseNameDTOList = getCatalogue(diagnoseDetails); // 生成目录名称
-        Map<String, String> styleMap = new LinkedHashMap<>();
-        styleMap.put(ExcelUtils.HYPERLINK, "com.diagbot.entity.ExcelDataHandler");
-        exportDto.add(ExcelUtils.createOneSheet("目录", null, ExportDiagnoseNameDTO.class, exportDiagnoseNameDTOList, null));
-
-        int i = 0;
-        for (String key : diagnoseDetails.keySet()) {
-            if (i > 10) {
-                break;
-            }
-            exportDto.add(ExcelUtils.createOneSheet(key, null, ExportDiagnoseDTO.class, diagnoseDetails.get(key), null));
-            i++;
-        }
-        ExcelUtils.exportExcel(exportDto, "diagnose.xls", response);
+        // Map<String, List<ExportDiagnoseDTO>> diagnoseDetailsNew = new LinkedHashMap<>();
+        // diagnoseDetailsNew.put("测试", res);
+        // List<ExportDiagnoseNameDTO> exportDiagnoseNameDTOList = getCatalogue(diagnoseDetailsNew); // 生成目录名称
+        // Map<String, String> styleMap = new LinkedHashMap<>();
+        // styleMap.put(ExcelUtils.HYPERLINK, "com.diagbot.entity.ExcelDataHandler");
+        // styleMap.put(ExcelUtils.DATA_HEIGHT, "6");
+        // exportDto.add(ExcelUtils.createOneSheet("目录", null, ExportDiagnoseNameDTO.class, exportDiagnoseNameDTOList, styleMap));
+
+        Map<String, String> styleMap1 = new LinkedHashMap<>();
+        styleMap1.put(ExcelUtils.DATA_HEIGHT, "6");
+        exportDto.add(ExcelUtils.createOneSheet("诊断依据", null, ExportDiagnoseDTO.class, res, styleMap1));
+        // int i = 0;
+        // for (String key : diagnoseDetailsNew.keySet()) {
+        //     if (i++ > 50) {
+        //         // break;
+        //     }
+        //
+        // }
+        ExcelUtils.exportExcel(exportDto, "diagnose.xlsx", response);
     }
 
 
@@ -87,7 +108,6 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
                 }
 
                 exportDiagnoseDTO.setEq(kdl.getMidResult());
-                exportDiagnoseDTO.setType("1223");
                 eds.add(exportDiagnoseDTO);
             }
             data.put(sheetName,eds);

+ 55 - 35
src/main/java/com/diagbot/facade/KlDiagnoseImportFacade.java

@@ -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++) {