From 65bfa92befa25fa54760956c7604707a0e0a0fc1 Mon Sep 17 00:00:00 2001
From: CeDo <cedoogle@gmail.com>
Date: 星期五, 11 六月 2021 16:42:27 +0800
Subject: [PATCH] bugfixed:导入去重&更新已存在记录

---
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComEldersAuthElderlyExcelListen.java |   44 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComEldersAuthElderlyExcelListen.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComEldersAuthElderlyExcelListen.java
index a872f15..feac593 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComEldersAuthElderlyExcelListen.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComEldersAuthElderlyExcelListen.java
@@ -15,8 +15,7 @@
 import com.panzhihua.common.utlis.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -43,6 +42,28 @@
     private static final int BATCH_COUNT = 3000;
     private List<EldersAuthElderlyExcelVO> list = new ArrayList<>();
 
+    /**
+     * @author cedoo
+     * @Description:找出list中的重复数据
+     * @param datas
+     * @return
+     */
+    public static <T> List<T> findRepeat(Collection<T> datas) {
+        if (datas instanceof Set) {
+            return new ArrayList<>();
+        }
+        HashSet<T> set = new HashSet<T>();
+        List<T> repeatEles = new ArrayList<T>();
+        for (T t : datas) {
+            if (set.contains(t)) {
+                repeatEles.add(t);
+            } else {
+                set.add(t);
+            }
+        }
+        return repeatEles;
+    }
+
     @Override
     public void invoke(EldersAuthElderlyExcelVO eldersAuthElderlyExcelVO, AnalysisContext analysisContext) {
         if(StringUtils.isEmpty(eldersAuthElderlyExcelVO.getName())){
@@ -63,19 +84,24 @@
         list.add(eldersAuthElderlyExcelVO);
         // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
         if(list.size() >= BATCH_COUNT){
-            log.info("excel导入数据【{}】", JSONObject.toJSONString(list));
-            List<EldersAuthElderlyExcelVO> newVoList = list.stream().filter(ListUtils.distinctByKey(EldersAuthElderlyExcelVO::getIdCard)).collect(Collectors.toList());
-            R r = this.communityService.listSaveEldersAuthElderlyExcelVO(newVoList,this.communityId,this.createBy);
-            if (!R.isOk(r)) {
-                throw new ServiceException(r.getMsg());
-            }
-            list.clear();           //清空list
+            doAfterAllAnalysed(analysisContext);
+            list.clear();
         }
 
     }
 
     @Override
     public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        //去重
+        List<String>  idcardList = new ArrayList<>();
+        list.forEach(voInList -> {
+            idcardList.add(voInList.getIdCard());
+        });
+        List<String> repeatList = findRepeat(idcardList);
+        if(repeatList!=null && repeatList.size()>0){
+            String repeatedId = StringUtils.join(repeatList, ",");
+            throw new ServiceException(repeatedId + " 身份证号码存在多条");
+        }
         List<EldersAuthElderlyExcelVO> newVoList = list.stream().filter(ListUtils.distinctByKey(EldersAuthElderlyExcelVO::getIdCard)).collect(Collectors.toList());
         R r = this.communityService.listSaveEldersAuthElderlyExcelVO(newVoList,this.communityId,this.createBy);
         if (!R.isOk(r)) {

--
Gitblit v1.7.1