Browse Source

Merge remote-tracking branch 'origin/master'

lenovodn 2 years ago
parent
commit
5b6174c37e

+ 57 - 3
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/MedicalInsRuleProjectServiceImpl.java

@@ -165,6 +165,12 @@ public class MedicalInsRuleProjectServiceImpl extends ServiceImpl<MedicalInsRule
     public Result<?> importTemplateExcel(HttpServletRequest request, HttpServletResponse response,
                                          Class<MedicalInsRuleProject> medicalInsRuleProjectClass) {
 
+        Integer rmDuplicateNumber = 0; // excel文件重复数量
+        Integer totalNumber = 0;//导入文件总数
+        Integer addNumber = 0; //新增数量
+        Integer updateNumber = 0;//更新文件数量
+
+
         String username = "";
         try {
             username = JwtUtil.getUsername(request.getHeader("X-Access-Token"));
@@ -216,6 +222,9 @@ public class MedicalInsRuleProjectServiceImpl extends ServiceImpl<MedicalInsRule
                         reserveList = dictDtos.stream().map(MedicalDto::getText).collect(Collectors.toList());
                     }
                 }
+            } else {
+                log.error("规则配置异常,id={},配置的字段异常,找不到需要导入导出的字段列表", id);
+                throw new JeecgBootException("找不到规则表头");
             }
             // 获取本规则的字段名
             List<ExportRuleFieldDTO> ruleFieldDTOS = baseMapper.selectRuleFieldListByFieldList(fieldList);
@@ -285,8 +294,44 @@ public class MedicalInsRuleProjectServiceImpl extends ServiceImpl<MedicalInsRule
 //                List<MedicalInsRuleProject> list = ExcelImportUtil.importExcel(file.getInputStream(), MedicalInsRuleProject.class, params);
                 List<MedicalInsRuleProject> list = DefaultExcelImportUtil
                         .importExcel(file.getInputStream(), MedicalInsRuleProject.class, params);
+                if (CollectionUtils.isEmpty(list)) {
+                    log.error("导入文件没有数据,请检查");
+                    return Result.ok("上传的文件没有数据,请检查");
+                }
+                totalNumber = list.size();
                 //update-begin-author:taoyan date:20190528 for:批量插入数据
 
+                // 如果 3.如果模板字段没有【项目编码】不去重,不判重,直接写入
+                if (!fieldList.contains(PROJECTCODE)) {
+                    // 将索引id写入
+                    Integer finalId = id;
+                    list = list.stream().map(item -> {
+                        item.setMedicalInsRuleInfoId(finalId);
+                        return item;
+                    }).collect(Collectors.toList());
+                    this.saveBatch(list, 500);
+                    return Result.ok("文件导入成功!数据行数:" + list.size());
+                }
+
+                for (MedicalInsRuleProject item : list) {
+                    String projectCode = item.getProjectCode();
+                    String correlationProjectCode = item.getCorrelationProjectCode();
+                    // 1.2 projectCode+correlationProjectCode   两个全部都要有值(所有编码必填,请检查)
+//                    1.1有projecgCode=但是projectCode没值= 提示错误信息(所有项目编码必填,请检查)
+                    if (fieldList.contains(PROJECTCODE)) {
+                        if (!StringUtils.hasText(projectCode)) {
+                            log.error("根据模板导入时,没有找到projectCode请检查导入文件内容");
+                            throw new JeecgBootException("数据项目编码为空,项目编码必填,请检查!");
+                        }
+                    }
+                    if (fieldList.contains(CORRELATIONPROJECTCODE)) {
+                        if (!StringUtils.hasText(correlationProjectCode)) {
+                            log.error("根据模板导入时,没有找到correlationProjectCode请检查导入文件内容");
+                            throw new JeecgBootException("数据关联项目编号为空,关联项目编号必填,请检查!");
+                        }
+                    }
+                }
+
                 // 去重
                 // 倒序去重
                 List<MedicalInsRuleProject> collect = list.stream().map(item -> item).collect(Collectors.toList());
@@ -300,7 +345,10 @@ public class MedicalInsRuleProjectServiceImpl extends ServiceImpl<MedicalInsRule
                 );
                 // 随后把顺序倒回来
                 Collections.reverse(list);
-
+                // 文件总条数 - 去重之后剩余数量 = excel 文件的重复数据
+                if (!CollectionUtils.isEmpty(list)) {
+                    rmDuplicateNumber = totalNumber - list.size();
+                }
 //                list = list.stream().collect(
 //                        Collectors.collectingAndThen(
 //                                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(
@@ -327,6 +375,7 @@ public class MedicalInsRuleProjectServiceImpl extends ServiceImpl<MedicalInsRule
                     });//
                     // 如果有则需要更新
                     if (!CollectionUtils.isEmpty(updateList)) {
+                        updateNumber = updateList.size();
                         this.updateBatchById(updateList, 500);
                     }
                     // 取出差集
@@ -335,6 +384,7 @@ public class MedicalInsRuleProjectServiceImpl extends ServiceImpl<MedicalInsRule
                 }
                 long start = System.currentTimeMillis();
                 if (!CollectionUtils.isEmpty(instalList)) {
+                    addNumber = instalList.size();
                     // 将索引id写入
                     Integer finalId = id;
                     instalList = instalList.stream().map(item -> {
@@ -349,7 +399,7 @@ public class MedicalInsRuleProjectServiceImpl extends ServiceImpl<MedicalInsRule
                 //1200条  saveBatch消耗时间3687毫秒 循环插入消耗时间5212毫秒
                 log.info("消耗时间" + (System.currentTimeMillis() - start) + "毫秒");
                 //update-end-author:taoyan date:20190528 for:批量插入数据
-                return Result.ok("文件导入成功!数据行数:" + list.size());
+                return Result.ok("文件导入成功!文件总行数:" + totalNumber + "文件自身重复:" + rmDuplicateNumber + "新增行数: " + addNumber + "更新行数: " + updateNumber);
             } catch (Exception e) {
                 //update-begin-author:taoyan date:20211124 for: 导入数据重复增加提示
                 String msg = e.getMessage();
@@ -372,7 +422,11 @@ public class MedicalInsRuleProjectServiceImpl extends ServiceImpl<MedicalInsRule
     }
 
     private String getDuplicateRm(MedicalInsRuleProject medicalInsRuleProject) {
-        return medicalInsRuleProject.getProjectCode().concat(ifnull(medicalInsRuleProject.getCorrelationProjectCode()));
+        log.info("调试信息,输入id={}, projectCode={}, corren={}", medicalInsRuleProject.getId(), medicalInsRuleProject.getCode(),
+                medicalInsRuleProject.getCorrelationProjectCode());
+        return ifnull(medicalInsRuleProject.getProjectCode()).concat(ifnull(medicalInsRuleProject.getCorrelationProjectCode()));
+
+//        return medicalInsRuleProject.getProjectCode().concat(ifnull(medicalInsRuleProject.getCorrelationProjectCode()));
     }