|
@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.diagbot.dto.KlConceptSimDTO;
|
|
import com.diagbot.dto.KlConceptSimDTO;
|
|
import com.diagbot.dto.KlDrugRegisterDTO;
|
|
import com.diagbot.dto.KlDrugRegisterDTO;
|
|
import com.diagbot.entity.CommonParam;
|
|
import com.diagbot.entity.CommonParam;
|
|
-import com.diagbot.entity.Ex;
|
|
|
|
import com.diagbot.entity.KlConcept;
|
|
import com.diagbot.entity.KlConcept;
|
|
import com.diagbot.entity.KlDrugMapping;
|
|
import com.diagbot.entity.KlDrugMapping;
|
|
import com.diagbot.entity.KlDrugRegister;
|
|
import com.diagbot.entity.KlDrugRegister;
|
|
@@ -18,10 +17,7 @@ import com.diagbot.service.KlDrugRegisterService;
|
|
import com.diagbot.service.impl.KlDrugRegisterServiceImpl;
|
|
import com.diagbot.service.impl.KlDrugRegisterServiceImpl;
|
|
import com.diagbot.util.BeanUtil;
|
|
import com.diagbot.util.BeanUtil;
|
|
import com.diagbot.util.DateUtil;
|
|
import com.diagbot.util.DateUtil;
|
|
-import com.diagbot.util.ExcelUtils;
|
|
|
|
import com.diagbot.util.ListUtil;
|
|
import com.diagbot.util.ListUtil;
|
|
-import com.diagbot.util.ReflectUtil;
|
|
|
|
-import com.diagbot.util.StringUtil;
|
|
|
|
import com.diagbot.util.UserUtils;
|
|
import com.diagbot.util.UserUtils;
|
|
import com.diagbot.vo.KlDrugMappingGetVO;
|
|
import com.diagbot.vo.KlDrugMappingGetVO;
|
|
import com.diagbot.vo.KlDrugRegisterDelVO;
|
|
import com.diagbot.vo.KlDrugRegisterDelVO;
|
|
@@ -38,9 +34,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
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.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -207,62 +200,53 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
|
|
* 注册药品导入
|
|
* 注册药品导入
|
|
*
|
|
*
|
|
* @param file
|
|
* @param file
|
|
|
|
+ * @return
|
|
*/
|
|
*/
|
|
public Map importRegister(MultipartFile file) {
|
|
public Map importRegister(MultipartFile file) {
|
|
Map res = new LinkedMap();
|
|
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 {
|
|
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>()
|
|
List<KlConcept> klConceptList = klConceptFacade.list(new QueryWrapper<KlConcept>()
|
|
.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("lib_type", 101));
|
|
.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)));
|
|
Map<String, Long> druMap = klConceptList.stream().collect(Collectors.toMap(k -> k.getLibName(), v -> v.getId(), (r1, r2) -> (r2)));
|
|
-
|
|
|
|
List<String> errMsg = Lists.newArrayList();
|
|
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 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);
|
|
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)) {
|
|
if (ListUtil.isNotEmpty(errMsg)) {
|
|
|
|
+ errMsg = errMsg.stream().distinct().collect(Collectors.toList());
|
|
|
|
+ for (String s : errMsg) {
|
|
|
|
+ System.out.println(s);
|
|
|
|
+ }
|
|
res.put("错误", StringUtils.join(errMsg, ";"));
|
|
res.put("错误", StringUtils.join(errMsg, ";"));
|
|
return res;
|
|
return res;
|
|
}
|
|
}
|
|
this.remove(new QueryWrapper<KlDrugRegister>()); // 删除主表
|
|
this.remove(new QueryWrapper<KlDrugRegister>()); // 删除主表
|
|
|
|
+ Long t3 = System.currentTimeMillis();
|
|
klDrugRegisterService.saveBatch(drugRegisterList);
|
|
klDrugRegisterService.saveBatch(drugRegisterList);
|
|
|
|
+ Long t4 = System.currentTimeMillis();
|
|
|
|
+ res.put("保存DrugRegister表耗时:", (t4 - t3) / 1000.0 + "秒");
|
|
|
|
+
|
|
List<KlDrugMapping> klDrugMappingList = ListUtil.newArrayList();
|
|
List<KlDrugMapping> klDrugMappingList = ListUtil.newArrayList();
|
|
for (KlDrugRegister klDrugRegister : drugRegisterList) {
|
|
for (KlDrugRegister klDrugRegister : drugRegisterList) {
|
|
KlDrugMapping klDrugMapping = new KlDrugMapping();
|
|
KlDrugMapping klDrugMapping = new KlDrugMapping();
|
|
@@ -271,128 +255,19 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
|
|
klDrugMappingList.add(klDrugMapping);
|
|
klDrugMappingList.add(klDrugMapping);
|
|
}
|
|
}
|
|
klDrugMappingService.remove(new QueryWrapper<KlDrugMapping>());
|
|
klDrugMappingService.remove(new QueryWrapper<KlDrugMapping>());
|
|
|
|
+ Long t5 = System.currentTimeMillis();
|
|
klDrugMappingService.saveBatch(klDrugMappingList);
|
|
klDrugMappingService.saveBatch(klDrugMappingList);
|
|
-
|
|
|
|
|
|
+ Long t6 = System.currentTimeMillis();
|
|
|
|
+ res.put("保存mapping表耗时:", (t6 - t5) / 1000.0 + "秒");
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
+ Long end = System.currentTimeMillis();
|
|
|
|
+ res.put("总耗时:", (end - t1) / 1000.0 + "秒");
|
|
return res;
|
|
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) {
|
|
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;
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|