ソースを参照

注册药品导入

zhoutg 4 年 前
コミット
5d64cf29c7

+ 59 - 47
cdssman-service/src/main/java/com/diagbot/facade/KlDrugRegisterFacade.java

@@ -5,12 +5,14 @@ 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.KlConcept;
 import com.diagbot.entity.KlDrugMapping;
 import com.diagbot.entity.KlDrugRegister;
 import com.diagbot.enums.InsertOrUpdateEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.service.KlDrugMappingService;
 import com.diagbot.service.KlDrugRegisterService;
 import com.diagbot.service.impl.KlDrugRegisterServiceImpl;
 import com.diagbot.util.BeanUtil;
@@ -25,6 +27,8 @@ import com.diagbot.vo.KlDrugRegisterPageVO;
 import com.diagbot.vo.KlDrugRegisterSaveVO;
 import com.diagbot.vo.KlDrugSearchVO;
 import com.google.common.collect.Lists;
+import org.apache.commons.collections4.map.LinkedMap;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
@@ -32,6 +36,8 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.InputStream;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author zhoutg
@@ -42,7 +48,8 @@ import java.util.List;
 public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
 
     @Autowired
-    KlDrugMappingFacade klDrugMappingFacade;
+    @Qualifier("klDrugMappingServiceImpl")
+    KlDrugMappingService klDrugMappingService;
     @Autowired
     KlConceptFacade klConceptFacade;
     @Autowired
@@ -86,7 +93,7 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
         this.saveOrUpdate(klDrugRegister);
 
         // 保存药品通用名和注册名映射关系
-        klDrugMappingFacade.remove(new QueryWrapper<KlDrugMapping>()
+        klDrugMappingService.remove(new QueryWrapper<KlDrugMapping>()
                 .eq("register_id", klDrugRegister.getId()));
 
         // 保存药品通用名和注册药品的关联
@@ -98,7 +105,7 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
             klDrugMapping.setModifier(param.getPerson());
             klDrugMapping.setGmtModified(param.getNow());
             klDrugMapping.setGmtCreate(param.getNow());
-            klDrugMappingFacade.save(klDrugMapping);
+            klDrugMappingService.save(klDrugMapping);
         }
     }
 
@@ -134,7 +141,7 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
      * @return
      */
     public void deleteByIdFac(KlDrugRegisterDelVO klDrugRegisterDelVO) {
-        List<KlDrugMapping> klDrugMappingList = klDrugMappingFacade.list(new QueryWrapper<KlDrugMapping>()
+        List<KlDrugMapping> klDrugMappingList = klDrugMappingService.list(new QueryWrapper<KlDrugMapping>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("register_id", klDrugRegisterDelVO.getId()));
         if (ListUtil.isNotEmpty(klDrugMappingList)) {
@@ -148,7 +155,7 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
             //         throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "已关联药品通用名:" + errMsg);
             //     }
             // }
-            klDrugMappingFacade.remove(new QueryWrapper<KlDrugMapping>().in("register_id", klDrugRegisterDelVO.getId()));
+            klDrugMappingService.remove(new QueryWrapper<KlDrugMapping>().in("register_id", klDrugRegisterDelVO.getId()));
         }
         this.remove(new QueryWrapper<KlDrugRegister>().eq("id", klDrugRegisterDelVO.getId()));
     }
@@ -195,58 +202,69 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
      *
      * @param file
      */
-    public void importRegister(MultipartFile file) {
+    public Map importRegister(MultipartFile file) {
+        Map res = new LinkedMap();
         try {
             InputStream inputStream = file.getInputStream();
-            // List<String[]> list = XLSXCovertCSVReader
-            //         .readerExcel(
-            //                 "D:\\newSVN\\2020新版CDSS\\05.其他资料\\数据\\其他数据\\【注册药品导入模板】 - 副本.xlsx",
-            //                 "注册药品", 100);
-
-
-            // Map<String, String> map = new LinkedHashMap();
-            // map.put("注册代码", "drugCode");
-            // map.put("注册名称", "name");
-            // KlDrugRegisterImportExVO klDrugRegisterImportExVO = new KlDrugRegisterImportExVO();
-
-            this.remove(new QueryWrapper<KlDrugRegister>());
-
-            List<String[]> list = XLSXCovertCSVReader
-                    .readerExcel(
-                            inputStream,
-                            "注册药品", 100);
+            List<String[]> list = XLSXCovertCSVReader.readerExcel(inputStream,
+                    "注册药品", 100);
             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;
                 }
                 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.setEnName(getObject(record[13]));
-                klDrugRegister.setDrugType(getObject(record[14]));
+                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])); // 药品类别
                 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 (ListUtil.isNotEmpty(errMsg)) {
+                res.put("错误", StringUtils.join(errMsg, ";"));
+                return res;
             }
-            // List<KlDrugRegisterImportExVO> data = ExcelUtils.importExcel(file, 0, 1, KlDrugRegisterImportExVO.class);
-            // List<KlDrugRegister> drugRegisterList = BeanUtil.listCopyTo(data, KlDrugRegister.class);
-            // // TODO 校验通用名,删除原注册名称、映射关系
+            this.remove(new QueryWrapper<KlDrugRegister>()); // 删除主表
             klDrugRegisterService.saveBatch(drugRegisterList);
+            List<KlDrugMapping> klDrugMappingList = ListUtil.newArrayList();
+            for (KlDrugRegister klDrugRegister : drugRegisterList) {
+                KlDrugMapping klDrugMapping = new KlDrugMapping();
+                klDrugMapping.setRegisterId(klDrugRegister.getId());
+                klDrugMapping.setDrugConcept(druMap.get(klDrugRegister.getRemark()));
+                klDrugMappingList.add(klDrugMapping);
+            }
+            klDrugMappingService.remove(new QueryWrapper<KlDrugMapping>());
+            klDrugMappingService.saveBatch(klDrugMappingList);
         } catch (Exception e) {
             e.printStackTrace();
         }
+        return res;
     }
 
     public static String getObject(String s) {
@@ -265,10 +283,4 @@ public class KlDrugRegisterFacade extends KlDrugRegisterServiceImpl {
         }
         return s;
     }
-
-    public static void main(String[] args) {
-        String text = "\"需经营养风险筛查,明确具有营养风险,且不能经饮食或使用\"肠内营养剂 \"补充足够营养的重症住院患者方予支付。\"";
-
-        System.out.println(getObject(text));
-    }
 }

+ 5 - 3
cdssman-service/src/main/java/com/diagbot/web/KlDrugRegisterController.java

@@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -110,8 +111,9 @@ public class KlDrugRegisterController {
     @ApiOperation(value = "注册药品导入[by:zhoutg]",
             notes = "")
     @PostMapping("/importRegister")
-    public RespDTO<Boolean> importRegister(@RequestParam("file") MultipartFile file) {
-        klDrugRegisterFacade.importRegister(file);
-        return RespDTO.onSuc(true);
+    @DSTransactional
+    public RespDTO<Map> importRegister(@RequestParam("file") MultipartFile file) {
+        Map data = klDrugRegisterFacade.importRegister(file);
+        return RespDTO.onSuc(data);
     }
 }