Bläddra i källkod

perf: 文件导入导出功能提供简单的调用入口

Scott 2 år sedan
förälder
incheckning
14f1b724e8
13 ändrade filer med 222 tillägg och 100 borttagningar
  1. 45 13
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/ExcelImportUtilService.java
  2. 36 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/ReportAfterQueryResponseBO.java
  3. 11 10
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/controller/AfterwardsAuditController.java
  4. 7 4
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/AfterwardsAudit.java
  5. 10 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/AfterwardsAuditMapper.java
  6. 26 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/xml/AfterwardsAuditMapper.xml
  7. 10 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IAfterDataReportService.java
  8. 4 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IAfterwardsAuditService.java
  9. 18 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/AfterDataReportServiceImpl.java
  10. 7 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/AfterwardsAuditServiceImpl.java
  11. 4 3
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/MaterialItemsServiceImpl.java
  12. 38 43
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/MedicalInsuranceDrugsServiceImpl.java
  13. 6 26
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/TreatmentItemsServiceImpl.java

+ 45 - 13
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/ExcelImportUtilService.java

@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
@@ -39,7 +40,7 @@ import java.util.stream.Collectors;
 @Slf4j
 @Transactional(readOnly = true)
 @Component
-public class ExcelImportUtilService {
+public class ExcelImportUtilService<T extends Serializable, R extends Comparable<? super R>> {
 
     @Value("${jeecg.path.upload}")
     private String upLoadPath;
@@ -49,19 +50,16 @@ public class ExcelImportUtilService {
      * @param clazz
      * @param duplicateRm 去重因子
      * @param dbExistsListService 根据要导入的数据,查询当前库里是否有已存在
-     * @param extractUnion 取出并集,交集(用于更新) T参数为import,U参数为数据库已有的参数
-     * @param extractDiffSet 取出差集,用于新增 T参数为import,U参数为数据库已有的参数
+     * @param fillUpdateField 遇到要更新的数据时,填充更新字段
      * @param updateService 更新服务
      * @param insertService 新增服务
      * @return
-     * @param <T>
      */
     @Transactional(readOnly = false)
-    public <T extends Serializable> Result<?>  importExcel(HttpServletRequest request, Class<T> clazz,
-                                                           Function<T, String> duplicateRm,
+    public Result<?> importExcel(HttpServletRequest request,
+                                 Class<T> clazz, Function<T, R> duplicateRm,
                                                            BiFunction<List<T>, List<T>> dbExistsListService,
-                                                           com.alibaba.fastjson.util.BiFunction<List<T>,List<T>, List<T>> extractUnion,
-                                                           com.alibaba.fastjson.util.BiFunction<List<T>, List<T>, List<T>> extractDiffSet,
+                                                           com.alibaba.fastjson.util.BiFunction<T,T,T> fillUpdateField,
                                                            com.alibaba.fastjson.util.BiFunction<List<T>, Integer,Boolean> updateService,
                                                            com.alibaba.fastjson.util.BiFunction<List<T>, Integer,Boolean> insertService
                                                            ) {
@@ -82,14 +80,15 @@ public class ExcelImportUtilService {
                 if (list.size() > 10000) {
                     return Result.error("文件导入失败:不可一次性导入超过10000条数据!");
                 }
-                // 去重
-                list = list.stream().collect(
+                // 去重  暂不去重
+/*                list = list.stream().collect(
                         Collectors.collectingAndThen(
                                 Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(
                                         duplicateRm
                                 ))), ArrayList::new
                         )
-                );
+                );*/
+
                 //检查是否有更新的数据
                 List<T> dbExistsList = dbExistsListService.apply(list);
                 // 更新列表
@@ -98,14 +97,16 @@ public class ExcelImportUtilService {
                 List<T> instalList = list;
                 if (!CollectionUtils.isEmpty(dbExistsList)) { // 不为空时, 需要将存在的做更新操作
                     // 取出交集
-                    updateList = extractUnion.apply(list,dbExistsList);
+                    updateList = this.getUpdateDatas(list, dbExistsList, duplicateRm, fillUpdateField);//
+//                            extractUnion.apply(list,dbExistsList);
                     // 如果有则需要更新
                     if (!CollectionUtils.isEmpty(updateList)) {
 //                        this.updateBatchById(updateList, 500);
                         updateService.apply(updateList, 500);
                     }
                     // 取出差集
-                    instalList = extractDiffSet.apply(list, dbExistsList);
+                    instalList = this.getInsertDatas(list, dbExistsList, duplicateRm);
+                    //extractDiffSet.apply(list, dbExistsList);
                 }
                 //update-begin-author:taoyan date:20190528 for:批量插入数据
                 long start = System.currentTimeMillis();
@@ -140,6 +141,37 @@ public class ExcelImportUtilService {
         return Result.error("文件导入失败!");
     }
 
+    private List<T> getInsertDatas(List<T> list, List<T> dbExistsList, Function<T,R> duplicateRm) {
+        return list.stream().filter(
+                excelData -> dbExistsList.stream().map(duplicateRm).noneMatch(medicineCode ->
+                        ObjectUtils.nullSafeEquals(duplicateRm.apply(excelData), medicineCode))
+        ).collect(Collectors.toList());
+    }
+
+
+    public List<T> getUpdateDatas(
+            List<T> list, List<T> dbExistsList,
+            Function<? super T, ? extends R> mapper, com.alibaba.fastjson.util.BiFunction<T, T, T> process) {
+        List<T> collect = list.stream().filter(
+                a -> dbExistsList.stream().map(mapper)
+                        .anyMatch(
+                                medicineCode -> ObjectUtils.nullSafeEquals(mapper.apply(a), medicineCode)
+                        )
+        ).collect(Collectors.toList());
+        //取出交集之后,要将相同数据的数据库id给新数据
+        if (!CollectionUtils.isEmpty(collect)) {
+            collect = collect.stream().map(item -> {
+                Optional<T> first = dbExistsList.stream().filter(o -> ObjectUtils.nullSafeEquals(mapper, mapper)).findFirst();
+                if (first.isPresent()) {
+                    T t = first.get();
+                    item = process.apply(item, t);
+                }
+                return item;
+            }).collect(Collectors.toList());
+        }
+        return collect;
+    }
+
     public <T extends Serializable> ModelAndView getModelAndView(HttpServletRequest request, T object, Class<T> clazz, String title) {
         QueryWrapper<T> queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap());
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();

+ 36 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/common/bo/ReportAfterQueryResponseBO.java

@@ -0,0 +1,36 @@
+package org.jeecg.modules.medical.common.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author soft01
+ * @time 2023/5/18 10:57
+ * @description '统计报表,事后科室稽核请求参数'
+ * @parentProject medical-java
+ */
+@Data
+public class ReportAfterQueryResponseBO implements Serializable {
+
+    @ApiModelProperty(value = "排名")
+    private Integer orderNum;
+    @ApiModelProperty(value = "科室名称")
+    private String medicalDeptName;
+    @ApiModelProperty(value = "科室医生总数")
+    private Integer medicalDeptDoctorTotal;
+    @ApiModelProperty(value = "违规医生总数")
+    private Integer violationDoctorTotal;
+    @ApiModelProperty(value = "违规总数")
+    private Integer violationTotal;
+    @ApiModelProperty(value = "门诊异常金额")
+    private BigDecimal outpatientErrorAmt;
+    @ApiModelProperty(value = "住院异常金额")
+    private BigDecimal hospErrorAmt;
+    @ApiModelProperty(value = "异常金额统计")
+    private BigDecimal errorAmtTotal;
+
+
+}

+ 11 - 10
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/controller/AfterwardsAuditController.java

@@ -12,6 +12,7 @@ import javax.servlet.http.HttpServletResponse;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.medical.common.bo.ReportAfterQueryResponseBO;
 import org.jeecg.modules.medical.entity.AfterwardsAudit;
 import org.jeecg.modules.medical.service.IAfterwardsAuditService;
 
@@ -43,14 +44,14 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
  * @Date:   2023-05-09 14:37:31
  * @Version: V1.0
  */
-@Api(tags="afterwards_audit")
+ @Api(value = "统计报表:事后数据报表统计", tags="medical_ins_knowledge")
 @RestController
 @RequestMapping("/medical/afterwardsAudit")
 @Slf4j
 public class AfterwardsAuditController extends JeecgController<AfterwardsAudit, IAfterwardsAuditService> {
 	@Autowired
 	private IAfterwardsAuditService afterwardsAuditService;
-	
+
 	/**
 	 * 分页列表查询
 	 *
@@ -75,16 +76,16 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 
 	 @ApiOperation(value="事后-科室统计", notes="事后-科室统计")
 	 @GetMapping(value = "/group/department")
-	 public Result<IPage<AfterwardsAudit>> department(AfterwardsAudit afterwardsAudit,
+	 public Result<IPage<ReportAfterQueryResponseBO>> department(AfterwardsAudit afterwardsAudit,
 														 @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
 														 @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
 														 HttpServletRequest req) {
-		 QueryWrapper<AfterwardsAudit> queryWrapper = QueryGenerator.initQueryWrapper(afterwardsAudit, req.getParameterMap());
+//		 QueryWrapper<AfterwardsAudit> queryWrapper = QueryGenerator.initQueryWrapper(afterwardsAudit, req.getParameterMap());
 		 Page<AfterwardsAudit> page = new Page<AfterwardsAudit>(pageNo, pageSize);
-		 IPage<AfterwardsAudit> pageList = afterwardsAuditService.page(page, queryWrapper);
+		 IPage<ReportAfterQueryResponseBO> pageList = afterwardsAuditService.departmentStatistics(page, afterwardsAudit);
 		 return Result.OK(pageList);
 	 }
-	
+
 	/**
 	 *   添加
 	 *
@@ -99,7 +100,7 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 		afterwardsAuditService.save(afterwardsAudit);
 		return Result.OK("添加成功!");
 	}
-	
+
 	/**
 	 *  编辑
 	 *
@@ -114,7 +115,7 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 		afterwardsAuditService.updateById(afterwardsAudit);
 		return Result.OK("编辑成功!");
 	}
-	
+
 	/**
 	 *   通过id删除
 	 *
@@ -129,7 +130,7 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 		afterwardsAuditService.removeById(id);
 		return Result.OK("删除成功!");
 	}
-	
+
 	/**
 	 *  批量删除
 	 *
@@ -144,7 +145,7 @@ public class AfterwardsAuditController extends JeecgController<AfterwardsAudit,
 		this.afterwardsAuditService.removeByIds(Arrays.asList(ids.split(",")));
 		return Result.OK("批量删除成功!");
 	}
-	
+
 	/**
 	 * 通过id查询
 	 *

+ 7 - 4
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/AfterwardsAudit.java

@@ -4,10 +4,8 @@ import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
 import java.util.Date;
 import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableLogic;
+
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -112,4 +110,9 @@ public class AfterwardsAudit implements Serializable {
     @DateTimeFormat(pattern= "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "更新时间")
     private java.util.Date updateTime;
+
+    @TableField(exist = false)
+    private Date startTime;
+    @TableField(exist = false)
+    private Date endTime;
 }

+ 10 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/AfterwardsAuditMapper.java

@@ -2,7 +2,10 @@ package org.jeecg.modules.medical.mapper;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.medical.common.bo.ReportAfterQueryResponseBO;
 import org.jeecg.modules.medical.entity.AfterwardsAudit;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -14,4 +17,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface AfterwardsAuditMapper extends BaseMapper<AfterwardsAudit> {
 
+    /**
+     * 科室:事后统计主页
+     * @param page
+     * @param afterwardsAudit
+     * @return
+     */
+    IPage<ReportAfterQueryResponseBO> departmentStatistics(Page<AfterwardsAudit> page, AfterwardsAudit afterwardsAudit);
 }

+ 26 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/mapper/xml/AfterwardsAuditMapper.xml

@@ -2,4 +2,29 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.medical.mapper.AfterwardsAuditMapper">
 
-</mapper>
+    <select id="departmentStatistics"
+            resultType="org.jeecg.modules.medical.common.bo.ReportAfterQueryResponseBO">
+        SELECT
+            any_value ( m.medical_dept_code ),
+            any_value ( m.medical_dept_name ) ,
+            (
+                SELECT count(*) FROM afterwards_audit_detail WHERE medical_dept_code = m.medical_dept_code GROUP BY doctor_id
+            ) as 违规医生总数,
+            (
+                SELECT count(*) FROM afterwards_audit_detail WHERE medical_dept_code = m.medical_dept_code GROUP BY doctor_id
+            ) as 违规总数,
+            (
+                SELECT sum(amount) FROM afterwards_audit_detail WHERE 	medical_dept_code = m.medical_dept_code AND treatment_type = 'outpatient'
+            ) as 门诊异常金额,
+            (
+                SELECT sum(amount) FROM afterwards_audit_detail WHERE 	medical_dept_code = m.medical_dept_code AND treatment_type = 'hosp'
+            ) as 住院异常金额,
+            (
+                SELECT sum(amount) FROM afterwards_audit_detail WHERE 	medical_dept_code = m.medical_dept_code
+            ) as 异常金额合计
+        FROM
+            afterwards_audit as m
+        GROUP BY
+            medical_dept_code
+    </select>
+</mapper>

+ 10 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IAfterDataReportService.java

@@ -0,0 +1,10 @@
+package org.jeecg.modules.medical.service;
+
+/**
+ * @author soft01
+ * @time 2023/5/18 10:55
+ * @description '报表统计-事后报表统计服务'
+ * @parentProject medical-java
+ */
+public interface IAfterDataReportService {
+}

+ 4 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/IAfterwardsAuditService.java

@@ -1,5 +1,8 @@
 package org.jeecg.modules.medical.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.modules.medical.common.bo.ReportAfterQueryResponseBO;
 import org.jeecg.modules.medical.entity.AfterwardsAudit;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -11,4 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAfterwardsAuditService extends IService<AfterwardsAudit> {
 
+    IPage<ReportAfterQueryResponseBO> departmentStatistics(Page<AfterwardsAudit> page, AfterwardsAudit afterwardsAudit);
 }

+ 18 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/AfterDataReportServiceImpl.java

@@ -0,0 +1,18 @@
+package org.jeecg.modules.medical.service.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.medical.service.IAfterDataReportService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author soft01
+ * @time 2023/5/18 10:55
+ * @description '报表统计-事后报表统计服务'
+ * @parentProject medical-java
+ */
+
+@Service
+@Slf4j
+public class AfterDataReportServiceImpl implements IAfterDataReportService {
+
+}

+ 7 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/AfterwardsAuditServiceImpl.java

@@ -1,5 +1,8 @@
 package org.jeecg.modules.medical.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.modules.medical.common.bo.ReportAfterQueryResponseBO;
 import org.jeecg.modules.medical.entity.AfterwardsAudit;
 import org.jeecg.modules.medical.mapper.AfterwardsAuditMapper;
 import org.jeecg.modules.medical.service.IAfterwardsAuditService;
@@ -16,4 +19,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 public class AfterwardsAuditServiceImpl extends ServiceImpl<AfterwardsAuditMapper, AfterwardsAudit> implements IAfterwardsAuditService {
 
+    @Override
+    public IPage<ReportAfterQueryResponseBO> departmentStatistics(Page<AfterwardsAudit> page, AfterwardsAudit afterwardsAudit) {
+        return baseMapper.departmentStatistics(page, afterwardsAudit);
+    }
 }

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

@@ -33,7 +33,7 @@ import java.util.stream.Collectors;
 public class MaterialItemsServiceImpl extends ServiceImpl<MaterialItemsMapper, MaterialItems> implements IMaterialItemsService {
 
     @Autowired
-    private ExcelImportUtilService excelImportUtilService;
+    private ExcelImportUtilService<MaterialItems, String> excelImportUtilService;
 
     @Override
     public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
@@ -44,7 +44,8 @@ public class MaterialItemsServiceImpl extends ServiceImpl<MaterialItemsMapper, M
             log.error("找不到用户登录的tokne");
         }
         final String finalUsername = username;
-        return excelImportUtilService.importExcel(request, MaterialItems.class,
+        return null;
+        /*return excelImportUtilService.importExcel(request, MaterialItems.class,
                 // 根据什么字段去重
                 MaterialItems::getItemId,
                 // 根据导入数据,查询哪些在数据库中已经有了
@@ -82,7 +83,7 @@ public class MaterialItemsServiceImpl extends ServiceImpl<MaterialItemsMapper, M
                 ).collect(Collectors.toList()),
                 this::updateBatchById,
                 this::saveBatch
-        );
+        );*/
     }
 
     private List<MaterialItems> listByItemIdIn(List<String> itemIds) {

+ 38 - 43
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/MedicalInsuranceDrugsServiceImpl.java

@@ -1,36 +1,23 @@
 package org.jeecg.modules.medical.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
-import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.util.JwtUtil;
-import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.medical.common.ExcelImportUtilService;
 import org.jeecg.modules.medical.entity.MedicalInsuranceDrugs;
 import org.jeecg.modules.medical.mapper.MedicalInsuranceDrugsMapper;
 import org.jeecg.modules.medical.service.IMedicalInsuranceDrugsService;
-import org.jeecgframework.poi.excel.def.NormalExcelConstants;
-import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
-import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.ObjectUtils;
-import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.Serializable;
-import java.util.*;
+import java.util.Date;
+import java.util.List;
 import java.util.stream.Collectors;
 
 /**
@@ -47,7 +34,7 @@ public class MedicalInsuranceDrugsServiceImpl extends ServiceImpl<MedicalInsuran
 
 
     @Autowired
-    private ExcelImportUtilService excelImportUtilService;
+    private ExcelImportUtilService<MedicalInsuranceDrugs, String> excelImportUtilService;
 
     @Transactional(readOnly = false)
     @Override
@@ -59,8 +46,9 @@ public class MedicalInsuranceDrugsServiceImpl extends ServiceImpl<MedicalInsuran
             log.error("找不到用户登录的tokne");
         }
         final String finalUsername = username;
-        return excelImportUtilService.importExcel(request, MedicalInsuranceDrugs.class,
-                // 根据什么字段去重
+        return excelImportUtilService.importExcel(request,
+                MedicalInsuranceDrugs.class,
+                // 根据什么字段去重,以及筛选哪些数据已经有了的依据
                 MedicalInsuranceDrugs::getMedicineCode,
                 // 根据导入数据,查询哪些在数据库中已经有了
                 list -> {
@@ -68,32 +56,13 @@ public class MedicalInsuranceDrugsServiceImpl extends ServiceImpl<MedicalInsuran
                     return listByMedicineCodeIn(collect);
                 },
                 // 根据导入数据,和数据库中的数据,取出交集 用于更新
-                (list, dbExistsList) ->{
-                    List<MedicalInsuranceDrugs> collect = list.stream().filter(
-                            a -> dbExistsList.stream().map(MedicalInsuranceDrugs::getMedicineCode)
-                                    .anyMatch(
-                                            medicineCode -> ObjectUtils.nullSafeEquals(a.getMedicineCode(), medicineCode)
-                                    )
-                    ).collect(Collectors.toList());
-                    //取出交集之后,要将相同数据的数据库id给新数据
-                    if (!CollectionUtils.isEmpty(collect)) {
-                        collect = collect.stream().peek(item -> {
-                            Optional<MedicalInsuranceDrugs> first = dbExistsList.stream().filter(o -> ObjectUtils.nullSafeEquals(o.getMedicineCode(), item.getMedicineCode())).findFirst();
-                            if (first.isPresent()) {
-                                MedicalInsuranceDrugs medicalInsuranceDrugs = first.get();
-                                item.setId(medicalInsuranceDrugs.getId());
-                                item.setUpdateBy(finalUsername);
-                                item.setUpdateTime(new Date());
-                            }
-                        }).collect(Collectors.toList());
-                    }
-                    return collect;
-                } ,
+                (nd, od) -> {
+                    nd.setId(od.getId());
+                    nd.setUpdateBy(finalUsername); //更新人
+                    nd.setUpdateTime(new Date());
+                    return nd;
+                },
                 // 根据导入数据,和数据库中的数据,取出差集 用于新增
-                (list, dbExistsList) -> list.stream().filter(
-                        excelData -> dbExistsList.stream().map(MedicalInsuranceDrugs::getMedicineCode).noneMatch(medicineCode ->
-                                ObjectUtils.nullSafeEquals(excelData.getMedicineCode(), medicineCode))
-                ).collect(Collectors.toList()),
                 this::updateBatchById,
                 this::saveBatch
         );
@@ -179,6 +148,32 @@ public class MedicalInsuranceDrugsServiceImpl extends ServiceImpl<MedicalInsuran
         }*/
     }
 
+
+
+
+    /*@NotNull
+    private static List<MedicalInsuranceDrugs> getUpdateDatas(final String updateOperator, List<MedicalInsuranceDrugs> list, List<MedicalInsuranceDrugs> dbExistsList) {
+        List<MedicalInsuranceDrugs> collect = list.stream().filter(
+                a -> dbExistsList.stream().map(MedicalInsuranceDrugs::getMedicineCode)
+                        .anyMatch(
+                                medicineCode -> ObjectUtils.nullSafeEquals(a.getMedicineCode(), medicineCode)
+                        )
+        ).collect(Collectors.toList());
+        //取出交集之后,要将相同数据的数据库id给新数据
+        if (!CollectionUtils.isEmpty(collect)) {
+            collect = collect.stream().peek(item -> {
+                Optional<MedicalInsuranceDrugs> first = dbExistsList.stream().filter(o -> ObjectUtils.nullSafeEquals(o.getMedicineCode(), item.getMedicineCode())).findFirst();
+                if (first.isPresent()) {
+                    MedicalInsuranceDrugs medicalInsuranceDrugs = first.get();
+                    item.setId(medicalInsuranceDrugs.getId());
+                    item.setUpdateBy(updateOperator);
+                    item.setUpdateTime(new Date());
+                }
+            }).collect(Collectors.toList());
+        }
+        return collect;
+    }*/
+
     @Override
     public List<MedicalInsuranceDrugs> listByMedicineCodeIn(List<String> medicineCodes) {
         LambdaQueryWrapper<MedicalInsuranceDrugs> in = Wrappers.<MedicalInsuranceDrugs>lambdaQuery()

+ 6 - 26
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/service/impl/TreatmentItemsServiceImpl.java

@@ -35,7 +35,7 @@ import java.util.stream.Collectors;
 public class TreatmentItemsServiceImpl extends ServiceImpl<TreatmentItemsMapper, TreatmentItems> implements ITreatmentItemsService {
 
     @Autowired
-    private ExcelImportUtilService excelImportUtilService;
+    private ExcelImportUtilService<TreatmentItems, String> excelImportUtilService;
 
     @Override
     public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
@@ -53,32 +53,12 @@ public class TreatmentItemsServiceImpl extends ServiceImpl<TreatmentItemsMapper,
                     return listByItemId(collect);
                 },
                 // 取交集
-                (list, dbExistsList) -> {
-                    List<TreatmentItems> collect = list.stream().filter(
-                            a -> dbExistsList.stream().map(TreatmentItems::getItemId)
-                                    .anyMatch(
-                                            itemId -> ObjectUtils.nullSafeEquals(a.getItemId(), itemId)
-                                    )
-                    ).collect(Collectors.toList());
-                    //取出交集之后,要将相同数据的数据库id给新数据
-                    if (!CollectionUtils.isEmpty(collect)) {
-                        collect = collect.stream().peek(item -> {
-                            Optional<TreatmentItems> first = dbExistsList.stream().filter(o -> ObjectUtils.nullSafeEquals(o.getItemId(), item.getItemId())).findFirst();
-                            if (first.isPresent()) {
-                                TreatmentItems treatmentItems = first.get();
-                                item.setId(treatmentItems.getId());
-                                item.setUpdateBy(finalUsername);
-                                item.setUpdateTime(new Date());
-                            }
-                        }).collect(Collectors.toList());
-                    }
-                    return collect;
+                (nd, od) -> {
+                    nd.setId(od.getId());
+                    nd.setUpdateBy(finalUsername);
+                    nd.setUpdateTime(new Date());
+                    return nd;
                 },
-                // 取差集
-                (list, dbExistsList) -> list.stream().filter(
-                        excelData -> dbExistsList.stream().map(TreatmentItems::getItemId).noneMatch(itemId ->
-                                ObjectUtils.nullSafeEquals(excelData.getItemId(), itemId))
-                ).collect(Collectors.toList()),
                 this::updateBatchById,
                 this::saveBatch
         );