Quellcode durchsuchen

导出诊断依据

zhoutg vor 4 Jahren
Ursprung
Commit
248303fe0a

+ 1 - 1
pom.xml

@@ -29,7 +29,7 @@
         <mybatis-plus-boot-starter.version>3.2.0</mybatis-plus-boot-starter.version>
         <mybatis-spring-boot.version>2.1.1</mybatis-spring-boot.version>
         <druid.version>1.1.21</druid.version>
-        <easypoi.version>4.2.0</easypoi.version>
+        <easypoi.version>4.3.0</easypoi.version>
         <swagger.version>2.9.2</swagger.version>
         <logstash.version>5.2</logstash.version>
         <docker-maven-plugin.version>1.2.1</docker-maven-plugin.version>

+ 24 - 0
src/main/java/com/diagbot/dto/ExportDiagnoseNameDTO.java

@@ -0,0 +1,24 @@
+package com.diagbot.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 诊断依据导出
+ * </p>
+ *
+ * @author kongwz
+ * @since 2020-07-28
+ */
+@Data
+public class ExportDiagnoseNameDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Excel(name="名称", isHyperlink = true)
+    private String name = "";
+
+}

+ 23 - 0
src/main/java/com/diagbot/entity/ExcelDataHandler.java

@@ -0,0 +1,23 @@
+package com.diagbot.entity;
+
+import cn.afterturn.easypoi.handler.impl.ExcelDataHandlerDefaultImpl;
+import com.diagbot.dto.ExportDiagnoseNameDTO;
+import org.apache.poi.common.usermodel.HyperlinkType;
+import org.apache.poi.ss.usermodel.CreationHelper;
+import org.apache.poi.ss.usermodel.Hyperlink;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @time: 2021/6/10 15:40
+ */
+public class ExcelDataHandler extends ExcelDataHandlerDefaultImpl<ExportDiagnoseNameDTO> {
+
+    @Override
+    public Hyperlink getHyperlink(CreationHelper creationHelper, ExportDiagnoseNameDTO obj, String name, Object value) {
+        Hyperlink hyperlink = creationHelper.createHyperlink(HyperlinkType.DOCUMENT);
+        // hyperlink.setLabel("#EB病毒感染!A1");
+        hyperlink.setAddress("#" + obj.getName() + "!A1");
+        return hyperlink;
+    }
+}

+ 40 - 2
src/main/java/com/diagbot/facade/KlDiagnoseDetailFacade.java

@@ -2,16 +2,20 @@ 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 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.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
@@ -32,7 +36,7 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
     /**
      * 导出诊断依据【初版】
      */
-    public void exportDiagnose() {
+    public void exportDiagnose(HttpServletResponse response) {
         // 获取全部数据、分组
         List<KlDiagnoseDetail> klDiagnoseDetailList = klDiagnoseDetailFacade.list(new QueryWrapper<KlDiagnoseDetail>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey()));
@@ -40,7 +44,24 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
         // TODO 获取公式,分隔编码,替换编码,组装导出数据  Map<String, List<ExportDiagnoseDTO>>
         Map<String, List<ExportDiagnoseDTO>> diagnoseDetails = processDiagnoseDetail(diagnoseDetailMap);
 
-        // TODO 导出数据
+
+        // 导出数据
+        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);
     }
 
 
@@ -53,6 +74,7 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
             for (KlDiagnoseDetail kdl:datats) {
                 ExportDiagnoseDTO exportDiagnoseDTO = new ExportDiagnoseDTO();
                 BeanUtil.copyProperties(kdl, exportDiagnoseDTO);
+                exportDiagnoseDTO.setType("1223");
                 eds.add(exportDiagnoseDTO);
             }
             data.put(sheetName,eds);
@@ -60,4 +82,20 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
         return data;
     }
 
+    /**
+     * 生成目录
+     *
+     * @param diagnoseDetails
+     * @return
+     */
+    public  List<ExportDiagnoseNameDTO> getCatalogue(Map<String, List<ExportDiagnoseDTO>> diagnoseDetails) {
+        List<ExportDiagnoseNameDTO> exportDiagnoseNameDTOList = Lists.newArrayList();
+        for (String key : diagnoseDetails.keySet()) {
+            ExportDiagnoseNameDTO exportDiagnoseNameDTO = new ExportDiagnoseNameDTO();
+            exportDiagnoseNameDTO.setName(key);
+            exportDiagnoseNameDTOList.add(exportDiagnoseNameDTO);
+        }
+        return exportDiagnoseNameDTOList;
+    }
+
 }

+ 57 - 2
src/main/java/com/diagbot/util/ExcelUtils.java

@@ -1,12 +1,12 @@
 package com.diagbot.util;
 
-
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
 import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
 import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
+import cn.afterturn.easypoi.handler.inter.IExcelDataHandler;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import org.apache.commons.lang3.StringUtils;
@@ -44,6 +44,11 @@ import java.util.NoSuchElementException;
  */
 public class ExcelUtils {
 
+    // styleMap中包含的属性名
+    public static final String DATA_HEIGHT = "DATA_HEIGHT";// 数据行高例如:6
+    public static final String EX_STYLE = "EX_STYLE";// 类样式例如:com.ztg.util.ExcelExportStyler
+    public static final String HYPERLINK = "HYPERLINK";// 超级链接对象:com.ztg.util.ExcelExportStyler
+
     /**
      * 得到Workbook对象
      * @param file
@@ -162,7 +167,7 @@ public class ExcelUtils {
     }
 
     private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {
-        Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
+        Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.XSSF);
         if (workbook != null) {
             ;
         }
@@ -428,5 +433,55 @@ public class ExcelUtils {
         }
     }
 
+    /**
+     * 创建多表单表格内容
+     *
+     * @param sheetName
+     * @param title
+     * @param clazz
+     * @param data
+     * @param styleMap
+     * @return
+     */
+    public static Map<String, Object> createOneSheet(String sheetName, String title, Class<?> clazz, List<?> data, Map<String, String> styleMap) {
+        ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.HSSF);
+        setExportParams(exportParams, styleMap);
+        Map<String, Object> map = new HashMap<>();
+        map.put("title", exportParams);
+        map.put("entity", clazz);
+        map.put("data", data);
+        return map;
+    }
+
+    /**
+     * 设置样式
+     *
+     * @param exportParams 参数
+     * @param styleMap     自定义样式
+     */
+    private static void setExportParams(ExportParams exportParams, Map<String, String> styleMap) {
+        if (exportParams == null || styleMap == null) {
+            return;
+        }
+        try {
+            // 设置数据行高
+            String dataHeight = styleMap.get(DATA_HEIGHT);
+            if (dataHeight != null) {
+                exportParams.setHeight(Short.valueOf(dataHeight));
+            }
+            // 设置样式
+            if (styleMap.get(EX_STYLE) != null) {
+                exportParams.setStyle(Class.forName(styleMap.get(EX_STYLE)));
+            }
+            // 设置超级链接
+            if (styleMap.get(HYPERLINK) != null) {
+                exportParams.setDataHandler((IExcelDataHandler) Class.forName(styleMap.get(HYPERLINK)).newInstance());
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
 
 }

+ 1 - 1
src/main/java/com/diagbot/web/KlDiagnoseImportController.java

@@ -44,7 +44,7 @@ public class KlDiagnoseImportController {
     @ApiOperation(value = "诊断依据导出API[zhoutg]")
     @PostMapping("/exportDiagnose")
     public void exportDiagnose(HttpServletResponse response) {
-        klDiagnoseDetailFacade.exportDiagnose();
+        klDiagnoseDetailFacade.exportDiagnose(response);
     }
 
 }