zhoutg il y a 4 ans
Parent
commit
007268a0d6

+ 34 - 159
cdssman-service/src/main/java/com/diagbot/facade/KlDrugRegisterFacade.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.dto.KlConceptSimDTO;
 import com.diagbot.dto.KlDrugRegisterDTO;
 import com.diagbot.entity.CommonParam;
-import com.diagbot.entity.Ex;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlDrugMapping;
 import com.diagbot.entity.KlDrugRegister;
@@ -18,10 +17,7 @@ import com.diagbot.service.KlDrugRegisterService;
 import com.diagbot.service.impl.KlDrugRegisterServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
-import com.diagbot.util.ExcelUtils;
 import com.diagbot.util.ListUtil;
-import com.diagbot.util.ReflectUtil;
-import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.KlDrugMappingGetVO;
 import com.diagbot.vo.KlDrugRegisterDelVO;
@@ -38,9 +34,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -207,62 +200,53 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
      * 注册药品导入
      *
      * @param file
+     * @return
      */
     public Map importRegister(MultipartFile file) {
         Map res = new LinkedMap();
+        Long t1 = System.currentTimeMillis();
+        List<KlDrugRegisterTestVO> list = XLSXCovertCSVReader.readData(file, "注册药品",
+                30, KlDrugRegisterTestVO.class);
+        // List<KlDrugRegisterTestVO> list = ExcelBigUtil.readData(file, null, 0, KlDrugRegisterTestVO.class);
+        Long t2 = System.currentTimeMillis();
+        res.put("读取sheet耗时:", (t2 - t1) / 1000.0 + "秒");
         try {
-            InputStream inputStream = file.getInputStream();
-            List<String[]> list = XLSXCovertCSVReader.readerExcel(inputStream,
-                    "注册药品", 100);
-            for (String[] arr : list) {
-                for (int i = 0; i < arr.length; i++) {
-                    arr[i] = getObject(arr[i]);
-                }
-            }
-            List<KlDrugRegister> drugRegisterList = Lists.newLinkedList();
-            int i = 0;
-
             List<KlConcept> klConceptList = klConceptFacade.list(new QueryWrapper<KlConcept>()
                     .eq("is_deleted", IsDeleteEnum.N.getKey()).eq("lib_type", 101));
             Map<String, Long> druMap = klConceptList.stream().collect(Collectors.toMap(k -> k.getLibName(), v -> v.getId(), (r1, r2) -> (r2)));
-
             List<String> errMsg = Lists.newArrayList();
-            for (String[] record : list) {
-                // System.out.println(i);
-                if (i++ == 0) {
-                    continue;
-                }
+            List<KlDrugRegister> drugRegisterList = Lists.newLinkedList();
+            int i = 2;
+            for (KlDrugRegisterTestVO  klDrugRegisterTestVO : list) {
                 KlDrugRegister klDrugRegister = new KlDrugRegister();
-                klDrugRegister.setDrugCode(getObject(record[0])); // 药品代码
-                klDrugRegister.setName(getObject(record[1])); // 注册名称
-                klDrugRegister.setTradeName(getObject(record[2])); // 商品名称
-                klDrugRegister.setForm(getObject(record[3])); // 注册剂型
-                klDrugRegister.setSpecification(getObject(record[4])); // 注册规格
-                klDrugRegister.setMinPackQuantity(getObject(record[5])); // 最小包装数量
-                klDrugRegister.setMinPackUnit(getObject(record[6])); // 最小包装单位
-                klDrugRegister.setCompany(getObject(record[7])); // 药品企业
-                klDrugRegister.setApproval(getObject(record[8])); // 批准文号
-                klDrugRegister.setStandardCode(getObject(record[9])); // 药品本位码
-                klDrugRegister.setInsuranceType(getObject(record[10])); // 甲乙类
-                klDrugRegister.setInsuranceRemrk(getObject(record[11])); // 医保备注
-                klDrugRegister.setRemark(getObject(record[12]));// 药品通用名
-                klDrugRegister.setEnName(getObject(record[13])); // 英文名称
-                klDrugRegister.setDrugType(getObject(record[14])); // 药品类别
+                BeanUtil.copyProperties(klDrugRegisterTestVO, klDrugRegister);
+                String drugName = klDrugRegisterTestVO.getDrugName();
+                klDrugRegister.setRemark(drugName);
                 drugRegisterList.add(klDrugRegister);
-
-                String drugName = getObject(record[12]);
-                if (StringUtil.isBlank(drugName)) {
-                    errMsg.add(String.format("第%s行药品通用名为空", i));
-                } else if (druMap.get(drugName) == null) {
-                    errMsg.add(String.format("第%s行【%s】不是标准词", i, drugName));
+                if (druMap.get(drugName) == null) {
+                    errMsg.add(drugName);
                 }
+                // if (StringUtil.isBlank(drugName)) {
+                //     errMsg.add(String.format("第%s行药品通用名为空", i));
+                // } else if (druMap.get(drugName) == null) {
+                //     errMsg.add(String.format("第%s行【%s】不是标准词", i, drugName));
+                // }
+                i++;
             }
             if (ListUtil.isNotEmpty(errMsg)) {
+                errMsg = errMsg.stream().distinct().collect(Collectors.toList());
+                for (String s : errMsg) {
+                    System.out.println(s);
+                }
                 res.put("错误", StringUtils.join(errMsg, ";"));
                 return res;
             }
             this.remove(new QueryWrapper<KlDrugRegister>()); // 删除主表
+            Long t3 = System.currentTimeMillis();
             klDrugRegisterService.saveBatch(drugRegisterList);
+            Long t4 = System.currentTimeMillis();
+            res.put("保存DrugRegister表耗时:", (t4 - t3) / 1000.0 + "秒");
+
             List<KlDrugMapping> klDrugMappingList = ListUtil.newArrayList();
             for (KlDrugRegister klDrugRegister : drugRegisterList) {
                 KlDrugMapping klDrugMapping = new KlDrugMapping();
@@ -271,128 +255,19 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
                 klDrugMappingList.add(klDrugMapping);
             }
             klDrugMappingService.remove(new QueryWrapper<KlDrugMapping>());
+            Long t5 = System.currentTimeMillis();
             klDrugMappingService.saveBatch(klDrugMappingList);
-
+            Long t6 = System.currentTimeMillis();
+            res.put("保存mapping表耗时:", (t6 - t5) / 1000.0 + "秒");
         } catch (Exception e) {
             e.printStackTrace();
         }
+        Long end = System.currentTimeMillis();
+        res.put("总耗时:", (end - t1) / 1000.0 + "秒");
         return res;
     }
 
-    public static String getObject(String s) {
-        if (StringUtil.isBlank(s)) {
-            return s;
-        }
-        if (!s.startsWith("\"")) {
-            return s;
-        }
-        if (s.startsWith("\"")) {
-            s = s.substring(1);
-        }
-
-        if (s.endsWith("\"")) {
-            s = s.substring(0, s.length() -1);
-        }
-        return s;
-    }
-
     public static void main(String[] args) {
-        String path = "D:\\newSVN\\2020新版CDSS\\05.其他资料\\数据\\其他数据\\【注册药品导入模板】 - 副本 - 副本.xlsx";
-
-        List<KlDrugRegisterTestVO> list1 = ExcelUtils.importExcel(path, 0, 1, KlDrugRegisterTestVO.class);
-        List<KlDrugRegisterTestVO> list = refExcel(KlDrugRegisterTestVO.class);
-        System.out.println(list);
-    }
 
-    public static <T> List<T> refExcel(Class<T> c) {
-        KlDrugRegisterTestVO klDrugRegisterTestVO = new KlDrugRegisterTestVO();
-        List<T> res = Lists.newArrayList();
-        try {
-            String path = "D:\\newSVN\\2020新版CDSS\\05.其他资料\\数据\\其他数据\\【注册药品导入模板】 - 副本 - 副本.xlsx";
-            List<String[]> list = XLSXCovertCSVReader.readerExcel(path,
-                    "注册药品", 20);
-
-            if (ListUtil.isEmpty(list)) {
-                throw new RuntimeException("无数据");
-            }
-
-            String[] titleRow = list.get(0);
-            Map<Integer, String> colMap = new LinkedMap();
-            for (int i = 0; i < titleRow.length; i++) {
-                if (StringUtil.isBlank(titleRow[i])) {
-                    break;
-                }
-                colMap.put(i, getObject(titleRow[i]));
-            }
-            System.out.println(colMap);
-
-            Field[] fields = c.getDeclaredFields();
-            // 属性和表格列对应
-            Map<String, Map<String, String>> classMap = new LinkedHashMap();
-            for (Field field : fields) {
-                if (field.isAnnotationPresent(Ex.class)) {
-                    Ex annotation = field.getAnnotation(Ex.class);
-                    Map<String, String> propertyMap = new LinkedHashMap<>();
-                    propertyMap.put("field", field.getName());
-                    propertyMap.put("convertType", field.getGenericType().toString());
-                    classMap.put(annotation.name(), propertyMap);
-                }
-                field.getClass();
-            }
-            System.out.println(classMap);
-
-            int rowNum = 1;
-            for (String[] row : list) {
-                if (rowNum++ == 1) {
-                    continue;
-                }
-                T obj = c.newInstance();
-                for (int i = 0; i < row.length; i++) {
-                    if (classMap.get(colMap.get(i)) == null) {
-                        continue;
-                    }
-                    String property = classMap.get(colMap.get(i)).get("field");
-                    String convertType = classMap.get(colMap.get(i)).get("convertType");
-                    System.out.println(property + ":" + row[i]);
-                    if (StringUtil.isNotBlank(property)) {
-                        Object value = convertValue(getObject(row[i]), convertType);
-                        if (value != null) {
-                            ReflectUtil.setFieldValue(obj, property, value);
-                        }
-                    }
-                }
-                res.add(obj);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return res;
-    }
-
-    public static Object convertValue(String object, String convertType) {
-        if (object == null) {
-            return null;
-        }
-        switch (convertType) {
-            case "class java.lang.Integer":
-            case "int":
-                return Integer.parseInt(object);
-            case "class java.lang.Long":
-            case "long":
-                return Long.parseLong(object);
-            case "class java.lang.Float":
-            case "float":
-                return Float.parseFloat(object);
-            case "class java.lang.Double":
-            case "double":
-                return Double.parseDouble(object);
-            case "class java.lang.Boolean":
-            case "boolean":
-                return Boolean.parseBoolean(object);
-            case "class java.lang.String":
-                return object;
-            default:
-                return object;
-        }
     }
 }

+ 199 - 18
cdssman-service/src/main/java/com/diagbot/facade/XLSXCovertCSVReader.java

@@ -1,6 +1,11 @@
 package com.diagbot.facade;
 
-import com.alibaba.fastjson.JSONObject;
+import com.diagbot.entity.Ex;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.ReflectUtil;
+import com.diagbot.util.StringUtil;
+import com.google.common.collect.Lists;
+import org.apache.commons.collections4.map.LinkedMap;
 import org.apache.poi.hssf.usermodel.HSSFDateUtil;
 import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
 import org.apache.poi.openxml4j.opc.OPCPackage;
@@ -12,6 +17,7 @@ import org.apache.poi.xssf.eventusermodel.XSSFReader;
 import org.apache.poi.xssf.model.StylesTable;
 import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 import org.apache.poi.xssf.usermodel.XSSFRichTextString;
+import org.springframework.web.multipart.MultipartFile;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -24,10 +30,13 @@ import javax.xml.parsers.SAXParserFactory;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
+import java.lang.reflect.Field;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @description:
@@ -405,6 +414,13 @@ public class XLSXCovertCSVReader {
                 ++index;
             }
         }
+        if (ListUtil.isNotEmpty(list)) {
+            for (String[] arr : list) {
+                for (int i = 0; i < arr.length; i++) {
+                    arr[i] = getObject(arr[i]);
+                }
+            }
+        }
         return list;
     }
 
@@ -423,7 +439,7 @@ public class XLSXCovertCSVReader {
      * @throws OpenXML4JException
      * @throws IOException
      */
-    public static List<String[]> readerExcel(String path, String sheetName,
+    private static List<String[]> readerExcel(String path, String sheetName,
                                               int minColumns) throws IOException, OpenXML4JException,
             ParserConfigurationException, SAXException {
         OPCPackage p = OPCPackage.open(path, PackageAccess.READ);
@@ -434,7 +450,19 @@ public class XLSXCovertCSVReader {
         return list;
     }
 
-    public static List<String[]> readerExcel(InputStream inputStream, String sheetName,
+    /**
+     * 读取Excel
+     *
+     * @param inputStream
+     * @param sheetName
+     * @param minColumns
+     * @return
+     * @throws IOException
+     * @throws OpenXML4JException
+     * @throws ParserConfigurationException
+     * @throws SAXException
+     */
+    private static List<String[]> readerExcel(InputStream inputStream, String sheetName,
                                              int minColumns) throws IOException, OpenXML4JException,
             ParserConfigurationException, SAXException {
         OPCPackage p = OPCPackage.open(inputStream);
@@ -445,21 +473,174 @@ public class XLSXCovertCSVReader {
         return list;
     }
 
-    public static void main(String[] args) throws Exception {
-        String name = "\"注册\"";
-        System.out.println(name);
-        Object parse = JSONObject.parse(name);
-        System.out.println(parse);
-        // List<String[]> list = XLSXCovertCSVReader
-        //         .readerExcel(
-        //                 "D:\\newSVN\\2020新版CDSS\\05.其他资料\\数据\\其他数据\\【注册药品导入模板】 - 副本.xlsx",
-        //                 "注册药品", 100);
-        // for (String[] record : list) {
-        //     for (String cell : record) {
-        //         System.out.print(cell + "  ");
-        //     }
-        //     System.out.println();
-        // }
+    /**
+     * 去除前后的""
+     *
+     * @param s
+     * @return
+     */
+    public static String getObject(String s) {
+        if (StringUtil.isBlank(s)) {
+            return s;
+        }
+        if (s.startsWith("\"") && s.endsWith("\"")) {
+            s = s.substring(1, s.length() -1);
+        }
+        return s;
+    }
+
+    /**
+     * 读取数据
+     *
+     * @param path
+     * @param sheetName
+     * @param colNum
+     * @param c
+     * @return
+     */
+    public static <T> List<T> readData(String path, String sheetName, int colNum, Class<T> c) {
+        List<T> list = Lists.newArrayList();
+        try {
+            List<String[]> stringList = XLSXCovertCSVReader.readerExcel(path, sheetName, colNum);
+            return dealData(stringList, c);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return list;
     }
 
+    /**
+     * 读取数据
+     *
+     * @param file
+     * @param sheetName
+     * @param colNum
+     * @param c
+     * @return
+     */
+    public static <T> List<T> readData(MultipartFile file, String sheetName, int colNum, Class<T> c) {
+        List<T> list = Lists.newArrayList();
+        try {
+            List<String[]> stringList = XLSXCovertCSVReader.readerExcel(file.getInputStream(), sheetName, colNum);
+            return dealData(stringList, c);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+
+    /**
+     * 数据处理
+     *
+     * @param list
+     * @param c
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> dealData(List<String[]> list, Class<T> c) {
+        List<T> res = Lists.newArrayList();
+        try {
+            // 标题
+            String[] titleRow = list.get(0);
+            Map<Integer, String> colMap = new LinkedMap();
+            for (int i = 0; i < titleRow.length; i++) {
+                if (StringUtil.isBlank(titleRow[i])) {
+                    break;
+                }
+                colMap.put(i, titleRow[i]);
+            }
+            // System.out.println(colMap);
+
+            // 字段映射
+            Field[] fields = c.getDeclaredFields();
+            // 属性和表格列对应
+            Map<String, Map<String, String>> classMap = new LinkedHashMap();
+            for (Field field : fields) {
+                if (field.isAnnotationPresent(Ex.class)) {
+                    Ex annotation = field.getAnnotation(Ex.class);
+                    Map<String, String> propertyMap = new LinkedHashMap<>();
+                    propertyMap.put("field", field.getName());
+                    propertyMap.put("convertType", field.getGenericType().toString());
+                    classMap.put(annotation.name(), propertyMap);
+                }
+                field.getClass();
+            }
+            // System.out.println(classMap);
+
+            // 有效数据读取
+            int rowNum = 1;
+            for (String[] row : list) {
+                if (rowNum++ == 1) {
+                    continue;
+                }
+                T obj = c.newInstance();
+                for (int i = 0; i < row.length; i++) {
+                    if (classMap.get(colMap.get(i)) == null) {
+                        continue;
+                    }
+                    String property = classMap.get(colMap.get(i)).get("field");
+                    String convertType = classMap.get(colMap.get(i)).get("convertType");
+                    // System.out.println(property + ":" + row[i]);
+                    if (StringUtil.isNotBlank(property)) {
+                        Object value = convertValue(row[i], convertType);
+                        if (value != null) {
+                            ReflectUtil.setFieldValue(obj, property, value);
+                        }
+                    }
+                }
+                res.add(obj);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return res;
+    }
+
+    /**
+     * 根据反射转成不同的类型
+     *
+     * @param object
+     * @param convertType
+     * @return
+     */
+    public static Object convertValue(String object, String convertType) {
+        Object res = null;
+        if (object == null) {
+            return null;
+        }
+        try {
+            switch (convertType) {
+                case "class java.lang.Integer":
+                case "int":
+                    res = Integer.parseInt(object);
+                    break;
+                case "class java.lang.Long":
+                case "long":
+                    res = Long.parseLong(object);
+                    break;
+                case "class java.lang.Float":
+                case "float":
+                    res = Float.parseFloat(object);
+                    break;
+                case "class java.lang.Double":
+                case "double":
+                    res = Double.parseDouble(object);
+                    break;
+                case "class java.lang.Boolean":
+                case "boolean":
+                    res = Boolean.parseBoolean(object);
+                    break;
+                case "class java.lang.String":
+                    res = object;
+                    break;
+                default:
+                    res = object;
+                    break;
+            }
+        } catch (Exception e) {
+            // e.printStackTrace();
+            return null;
+        }
+        return res;
+    }
 }

+ 293 - 0
cdssman-service/src/main/java/com/diagbot/util/ExcelBigUtil.java

@@ -0,0 +1,293 @@
+package com.diagbot.util;
+
+import com.diagbot.entity.Ex;
+import com.diagbot.vo.KlDrugRegisterTestVO;
+import com.google.common.collect.Lists;
+import org.apache.commons.collections4.map.LinkedMap;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @time: 2021/5/24 19:58
+ */
+public class ExcelBigUtil {
+
+    /**
+     * 读取数据
+     *
+     * @param file
+     * @param sheetName
+     * @param titleNo 标题所在行
+     * @param c
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> readData(MultipartFile file, String sheetName, int titleNo, Class<T> c) {
+        List<T> list = Lists.newArrayList();
+        try {
+            Sheet sheet = getSheet(file, sheetName);
+            List<String[]> stringList = getListData(sheet, titleNo);
+            return dealData(stringList, c);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+
+    /**
+     * 读取数据
+     *
+     * @param path
+     * @param sheetName
+     * @param titleNo
+     * @param c
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> readData(String path, String sheetName, int titleNo, Class<T> c) {
+        List<T> list = Lists.newArrayList();
+        try {
+            Sheet sheet = getSheet(path, sheetName);
+            List<String[]> stringList = getListData(sheet, titleNo);
+            return dealData(stringList, c);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+
+    /**
+     * 获取Sheet
+     *
+     * @param filePath
+     * @param sheetName
+     * @return
+     */
+    private static Sheet getSheet(String filePath, String sheetName) {
+        Sheet sheet = null;
+        FileInputStream fileInputStream = null;
+        try {
+            fileInputStream = new FileInputStream(filePath);
+            XSSFWorkbook sheets = new XSSFWorkbook(fileInputStream);
+            if (StringUtil.isBlank(sheetName)) {
+                sheet = sheets.getSheetAt(0);
+            } else {
+                sheet = sheets.getSheet(sheetName);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return sheet;
+    }
+
+    /**
+     * 获取Sheet
+     *
+     * @param file
+     * @param sheetName
+     * @return
+     */
+    private static Sheet getSheet(MultipartFile file, String sheetName) {
+        Sheet sheet = null;
+        try {
+            // XSSFWorkbook sheets = new XSSFWorkbook(file.getInputStream());
+            Workbook workbook = getWorkBook(file);
+            //获取sheet
+            if (StringUtil.isBlank(sheetName)) {
+                sheet = workbook.getSheetAt(0);
+            } else {
+                sheet = workbook.getSheet(sheetName);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return sheet;
+    }
+
+    /**
+     * 得到Workbook对象
+     * @param file
+     * @return
+     * @throws IOException
+     */
+    public static Workbook getWorkBook(MultipartFile file) throws IOException {
+        //这样写  excel 能兼容03和07
+        InputStream is = file.getInputStream();
+        Workbook hssfWorkbook = null;
+        try {
+            hssfWorkbook = new HSSFWorkbook(is);
+        } catch (Exception ex) {
+            is =file.getInputStream();
+            hssfWorkbook = new XSSFWorkbook(is);
+        }
+        return hssfWorkbook;
+    }
+
+    /**
+     * 将sheet数据放入List
+     *
+     * @param sheet
+     * @param title
+     * @return
+     */
+    private static List<String[]> getListData(Sheet sheet, Integer title) {
+        List<String[]> list = new ArrayList<>();
+        int colLength = sheet.getRow(title).getLastCellNum();
+        for (int j = title; j <= sheet.getLastRowNum(); j++) {
+            Row row = sheet.getRow(j);
+            if (row != null) { // 空行数据
+                String[] str = new String[colLength];
+                for (int i = 0; i < colLength; i++) {
+                    Cell cell = row.getCell(i);
+                    if (cell == null) {
+                        str[i] = null;
+                    } else {
+                        cell.setCellType(CellType.STRING);
+                        str[i] = cell.toString();
+                    }
+                }
+                list.add(str);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 数据处理
+     *
+     * @param list
+     * @param c
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> dealData(List<String[]> list, Class<T> c) {
+        List<T> res = Lists.newArrayList();
+        try {
+            // 标题
+            String[] titleRow = list.get(0);
+            Map<Integer, String> colMap = new LinkedMap();
+            for (int i = 0; i < titleRow.length; i++) {
+                if (StringUtil.isBlank(titleRow[i])) {
+                    break;
+                }
+                colMap.put(i, titleRow[i]);
+            }
+            // System.out.println(colMap);
+
+            // 字段映射
+            Field[] fields = c.getDeclaredFields();
+            // 属性和表格列对应
+            Map<String, Map<String, String>> classMap = new LinkedHashMap();
+            for (Field field : fields) {
+                if (field.isAnnotationPresent(Ex.class)) {
+                    Ex annotation = field.getAnnotation(Ex.class);
+                    Map<String, String> propertyMap = new LinkedHashMap<>();
+                    propertyMap.put("field", field.getName());
+                    propertyMap.put("convertType", field.getGenericType().toString());
+                    classMap.put(annotation.name(), propertyMap);
+                }
+                field.getClass();
+            }
+            // System.out.println(classMap);
+
+            // 有效数据读取
+            int rowNum = 1;
+            for (String[] row : list) {
+                if (rowNum++ == 1) {
+                    continue;
+                }
+                T obj = c.newInstance();
+                for (int i = 0; i < row.length; i++) {
+                    if (classMap.get(colMap.get(i)) == null) {
+                        continue;
+                    }
+                    String property = classMap.get(colMap.get(i)).get("field");
+                    String convertType = classMap.get(colMap.get(i)).get("convertType");
+                    // System.out.println(property + ":" + row[i]);
+                    if (StringUtil.isNotBlank(property)) {
+                        Object value = convertValue(row[i], convertType);
+                        if (value != null) {
+                            ReflectUtil.setFieldValue(obj, property, value);
+                        }
+                    }
+                }
+                res.add(obj);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return res;
+    }
+
+    /**
+     * 根据反射转成不同的类型
+     *
+     * @param object
+     * @param convertType
+     * @return
+     */
+    public static Object convertValue(String object, String convertType) {
+        Object res = null;
+        if (object == null) {
+            return null;
+        }
+        try {
+            switch (convertType) {
+                case "class java.lang.Integer":
+                case "int":
+                    res = Integer.parseInt(object);
+                    break;
+                case "class java.lang.Long":
+                case "long":
+                    res = Long.parseLong(object);
+                    break;
+                case "class java.lang.Float":
+                case "float":
+                    res = Float.parseFloat(object);
+                    break;
+                case "class java.lang.Double":
+                case "double":
+                    res = Double.parseDouble(object);
+                    break;
+                case "class java.lang.Boolean":
+                case "boolean":
+                    res = Boolean.parseBoolean(object);
+                    break;
+                case "class java.lang.String":
+                    res = object;
+                    break;
+                default:
+                    res = object;
+                    break;
+            }
+        } catch (Exception e) {
+            // e.printStackTrace();
+            return null;
+        }
+        return res;
+    }
+
+    public static void main(String[] args) {
+        String path = "D:\\newSVN\\2020新版CDSS\\05.其他资料\\数据\\其他数据\\【注册药品导入模板】 - 副本.xlsx";
+        List<KlDrugRegisterTestVO> klDrugRegisterTestVOList = readData(path, null, 0, KlDrugRegisterTestVO.class);
+        System.out.println(klDrugRegisterTestVOList);
+    }
+}
+

+ 18 - 0
cdssman-service/src/main/java/com/diagbot/vo/ImportVO.java

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2020/8/24 17:23
+ */
+@Data
+public class ImportVO {
+
+    // sheet名称
+    private String sheetName;
+    // 列数量
+    private Integer colNum  = 0;
+
+}

+ 1 - 1
cdssman-service/src/main/java/com/diagbot/vo/KlDrugRegisterTestVO.java

@@ -40,7 +40,7 @@ public class KlDrugRegisterTestVO implements Serializable {
 
     @Ex(name="最小包装数量")
     @Excel(name="最小包装数量")
-    private Integer minPackQuantity;
+    private String minPackQuantity;
 
     @Ex(name="最小包装单位")
     private String minPackUnit;

+ 0 - 4
docs/041.20210511知识库扩展/knowledgeExt_init.sql

@@ -4,16 +4,12 @@ INSERT INTO `cdss`.`sys_dictionary_info` (`id`, `is_deleted`, `gmt_create`, `gmt
 
 use `med_2021`;
 
-INSERT INTO `kl_lexicon` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `is_has_common`, `only_one`, `can_change`, `remark`) VALUES ('45', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '疾病系统分类', '411', '0', '0', '0', '');
-INSERT INTO `kl_lexicon` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `is_has_common`, `only_one`, `can_change`, `remark`) VALUES ('46', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '性质', '412', '0', '0', '0', '');
-
 INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('12', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联科室', '511', '');
 INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('13', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联部位', '512', '');
 INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('14', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联系统分类', '513', '');
 INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('15', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联伴随症状', '514', '');
 INSERT INTO `kl_lexicon_relationship` (`id`, `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `code`, `remark`) VALUES ('16', 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '关联性质', '515', '');
 
-
 ALTER TABLE `kl_disease` add COLUMN `en_name` varchar(255) not null DEFAULT '' COMMENT '英文名称' AFTER `icd10_code`;
 ALTER TABLE `kl_disease` add COLUMN `en_name_simple` varchar(255) not null DEFAULT '' COMMENT '英文简称' AFTER `icd10_code`;
 ALTER TABLE `kl_disease` add COLUMN `name_simple` varchar(255) not null DEFAULT '' COMMENT '简称' AFTER `icd10_code`;