hankunkun 10 сар өмнө
parent
commit
32c1600afb

+ 156 - 138
src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTradeEndAnalysis.java

@@ -21,149 +21,167 @@ import java.util.concurrent.CountDownLatch;
 @Slf4j
 public class AntiSecurityTradeEndAnalysis extends Ops implements Runnable {
 
-  String modelId;
-  MongoTemplate mongoTemplate;
-  FileService fileService;
-  CountDownLatch latch;
-  private HeaderProperties headerProperties;
+    String modelId;
+    MongoTemplate mongoTemplate;
+    FileService fileService;
+    CountDownLatch latch;
+    private HeaderProperties headerProperties;
 
-  public AntiSecurityTradeEndAnalysis(
-      HeaderProperties headerProperties,
-      String modelId,
-      MongoTemplate mongoTemplate,
-      FileService fileService,
-      CountDownLatch latch4) {
-    this.headerProperties = headerProperties;
-    this.modelId = modelId;
-    this.mongoTemplate = mongoTemplate;
-    this.fileService = fileService;
-    this.latch = latch4;
-  }
+    public AntiSecurityTradeEndAnalysis(
+            HeaderProperties headerProperties,
+            String modelId,
+            MongoTemplate mongoTemplate,
+            FileService fileService,
+            CountDownLatch latch4) {
+        this.headerProperties = headerProperties;
+        this.modelId = modelId;
+        this.mongoTemplate = mongoTemplate;
+        this.fileService = fileService;
+        this.latch = latch4;
+    }
 
-  @Override
-  public void run() {
-    // 直接删除并创建表
-    String newFileId = "";
-    String dateFileId = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
-    if (StringUtils.isNotBlank(dateFileId)) {
+    @Override
+    public void run() {
+        // 直接删除并创建表
+        String newFileId = "";
+        String dateFileId = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
+        if (StringUtils.isNotBlank(dateFileId)) {
 
-      MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
-      if (cursor.hasNext()) {
-        newFileId =
-            createLogicAndDeleteOld(
-                "反诈治安-对手透视",
-                modelId,
-                headerProperties.getAntiSecurityTradeEndAnalysisOutput(),
-                mongoTemplate,
-                fileService);
-        // 插入记录用户后续查询明细
-        insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
-      }
-      Set<String> alipayIds = new HashSet<>();
-      Map<String, DataMap> idToData = new HashMap<>();
-      Map<String, Set<String>> idToMainIds = new HashMap<>();
-      Map<String, Set<String>> idToNames = new HashMap<>();
-      Document origin;
-      while (cursor.hasNext()) {
-        try {
+            MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+            if (cursor.hasNext()) {
+                newFileId =
+                        createLogicAndDeleteOld(
+                                "反诈治安-对手透视",
+                                modelId,
+                                headerProperties.getAntiSecurityTradeEndAnalysisOutput(),
+                                mongoTemplate,
+                                fileService
+                        );
+                // 插入记录用户后续查询明细
+                insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+            }
+            Set<String> alipayIds = new HashSet<>();
+            Map<String, DataMap> idToData = new HashMap<>();
+            Map<String, Set<String>> idToMainIds = new HashMap<>();
+            Map<String, Set<String>> idToNames = new HashMap<>();
+            Map<String, Set<String>> hm = new HashMap<>();
+            Document origin;
+            while (cursor.hasNext()) {
+                try {
 
-          origin = cursor.next();
-          String alipayId = origin.getString("交易对手账号");
-          DataMap dataMap;
-          if (alipayIds.contains(alipayId)) {
-            dataMap = idToData.get(alipayId);
-          } else {
-            alipayIds.add(alipayId);
-            dataMap = new DataMap();
-            dataMap.put("fileId", newFileId);
-            dataMap.put("交易对手账号", alipayId);
-            dataMap.put("交易对手户名", "");
-            dataMap.put("交易总额", new BigDecimal("0.00"));
-            dataMap.put("交易主体收入金额", new BigDecimal("0.00"));
-            dataMap.put("交易主体支出金额", new BigDecimal("0.00"));
-            dataMap.put("交易主体收入笔数", 0);
-            dataMap.put("交易主体支出笔数", 0);
-            dataMap.put("总笔数", 0);
-            dataMap.put("共同交易主体数", 0);
-            dataMap.put("共同交易主体账号汇总", "");
-            idToData.put(alipayId, dataMap);
-          }
-          String alipayUsername = origin.getString("交易对手户名");
-          if (StringUtils.isNotBlank(alipayUsername)
-              && !"_".equals(alipayUsername)
-              && !"-".equals(alipayUsername)&& !"null".equals(alipayUsername)) {
-            if (idToNames.containsKey(alipayId)) {
-              Set<String> names = idToNames.get(alipayId);
-              names.add(alipayUsername);
-            } else {
-              Set<String> names = new HashSet<>();
-              names.add(alipayUsername);
-              idToNames.put(alipayId, names);
+                    origin = cursor.next();
+                    String alipayId = origin.getString("交易对手账号");
+                    DataMap dataMap;
+                    if (alipayIds.contains(alipayId)) {
+                        dataMap = idToData.get(alipayId);
+                    } else {
+                        alipayIds.add(alipayId);
+                        dataMap = new DataMap();
+                        dataMap.put("fileId", newFileId);
+                        dataMap.put("交易对手账号", alipayId);
+                        dataMap.put("交易对手户名", "");
+                        dataMap.put("交易总额", new BigDecimal("0.00"));
+                        dataMap.put("交易主体收入金额", new BigDecimal("0.00"));
+                        dataMap.put("交易主体支出金额", new BigDecimal("0.00"));
+                        dataMap.put("交易主体收入笔数", 0);
+                        dataMap.put("交易主体支出笔数", 0);
+                        dataMap.put("总笔数", 0);
+                        dataMap.put("共同交易主体数", 0);
+                        dataMap.put("共同交易主体账号汇总", "");
+                        idToData.put(alipayId, dataMap);
+                    }
+                    String alipayUsername = origin.getString("交易对手户名");
+                    if (StringUtils.isNotBlank(alipayUsername)
+                            && !"_".equals(alipayUsername)
+                            && !"-".equals(alipayUsername) && !"null".equals(alipayUsername)) {
+                        if (idToNames.containsKey(alipayId)) {
+                            Set<String> names = idToNames.get(alipayId);
+                            names.add(alipayUsername);
+                        } else {
+                            Set<String> names = new HashSet<>();
+                            names.add(alipayUsername);
+                            idToNames.put(alipayId, names);
+                        }
+                    }
+                    String flag = "交易主体的出入账标识";
+                    String flagValue = origin.getString(flag);
+                    String money = (String) origin.get("交易金额");
+                    if ("入账".equals(flagValue)) {
+                        BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体收入金额");
+                        oMoney = oMoney.add(new BigDecimal(money));
+                        dataMap.put("交易主体收入金额", oMoney);
+                        int oCount = (int) dataMap.get("交易主体收入笔数");
+                        oCount++;
+                        dataMap.put("交易主体收入笔数", oCount);
+                    } else if ("出账".equals(flagValue)) {
+                        BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体支出金额");
+                        oMoney = oMoney.add(new BigDecimal(money));
+                        dataMap.put("交易主体支出金额", oMoney);
+                        int oCount = (int) dataMap.get("交易主体支出笔数");
+                        oCount++;
+                        dataMap.put("交易主体支出笔数", oCount);
+                    }
+                    BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
+                    oMoney = oMoney.add(new BigDecimal(money));
+                    dataMap.put("交易总额", oMoney);
+                    int oCount = (int) dataMap.get("总笔数");
+                    oCount++;
+                    dataMap.put("总笔数", oCount);
+                    String mainId = (String) origin.get("交易主体账号");
+                    String mainIdhm = (String) origin.get("交易主体户名");
+                    if(StringUtils.isNotBlank(mainId)&&StringUtils.isNotBlank(mainIdhm)){
+                        if (hm.containsKey(mainId)) {
+                            Set<String> hmnew = hm.get(mainId);
+                            hmnew.add(mainIdhm);
+                            hm.put(mainId,hmnew);
+                        } else {
+                            Set<String> mainIds = new HashSet<>();
+                            mainIds.add(mainIdhm);
+                            hm.put(alipayId, mainIds);
+                        }
+                    }
+                    if (idToMainIds.containsKey(alipayId)) {
+                        Set<String> mainIds = idToMainIds.get(alipayId);
+                        mainIds.add(mainId);
+                    } else {
+                        Set<String> mainIds = new HashSet<>();
+                        mainIds.add(mainId);
+                        //mainIds.add(mainId+(StringUtils.isBlank(mainName)||"null".equals(mainName)?"":"("+mainName+")"));
+                        idToMainIds.put(alipayId, mainIds);
+                    }
+                } catch (Exception exception) {
+                    log.error(exception.getMessage(), exception);
+                }
+            }
+            if (CollectionUtils.isNotEmpty(idToData.values())) {
+                for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
+                    String key = entry.getKey();
+                    DataMap value = entry.getValue();
+                    Set<String> mainIds = idToMainIds.get(key);
+                    Set<String> names = idToNames.get(key);
+                    if (CollectionUtils.isNotEmpty(names)) {
+                        value.put("交易对手户名", StringUtils.join(names, ";"));
+                    }
+                    if (CollectionUtils.isNotEmpty(mainIds)) {
+                        value.put("共同交易主体数", mainIds.size());
+                        String str="";
+                        for (String mainId : mainIds) {
+                            Set<String> strings = hm.get(mainId);
+                            str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
+                        }
+                        value.put("共同交易主体账号汇总", str);
+                    }
+                    DataMap dataMap = entry.getValue();
+                    BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
+                    dataMap.put("交易总额", money1.doubleValue());
+                    BigDecimal money2 = (BigDecimal) dataMap.get("交易主体收入金额");
+                    dataMap.put("交易主体收入金额", money2.doubleValue());
+                    BigDecimal money3 = (BigDecimal) dataMap.get("交易主体支出金额");
+                    dataMap.put("交易主体支出金额", money3.doubleValue());
+                }
+                saveLines(idToData.values(), "交易总额", mongoTemplate);
             }
-          }
-          String flag = "交易主体的出入账标识";
-          String flagValue = origin.getString(flag);
-          String money = (String) origin.get("交易金额");
-          if ("入账".equals(flagValue)) {
-            BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体收入金额");
-            oMoney = oMoney.add(new BigDecimal(money));
-            dataMap.put("交易主体收入金额", oMoney);
-            int oCount = (int) dataMap.get("交易主体收入笔数");
-            oCount++;
-            dataMap.put("交易主体收入笔数", oCount);
-          } else if ("出账".equals(flagValue)) {
-            BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体支出金额");
-            oMoney = oMoney.add(new BigDecimal(money));
-            dataMap.put("交易主体支出金额", oMoney);
-            int oCount = (int) dataMap.get("交易主体支出笔数");
-            oCount++;
-            dataMap.put("交易主体支出笔数", oCount);
-          }
-          BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
-          oMoney = oMoney.add(new BigDecimal(money));
-          dataMap.put("交易总额", oMoney);
-          int oCount = (int) dataMap.get("总笔数");
-          oCount++;
-          dataMap.put("总笔数", oCount);
-          String mainId = (String) origin.get("交易主体账号");
-          String mainName = (String) origin.get("交易主体户名");
-          if (idToMainIds.containsKey(alipayId)) {
-            Set<String> mainIds = idToMainIds.get(alipayId);
-            mainIds.add(mainId);
-          } else {
-            Set<String> mainIds = new HashSet<>();
-              mainIds.add(mainId);
-            //mainIds.add(mainId+(StringUtils.isBlank(mainName)||"null".equals(mainName)?"":"("+mainName+")"));
-            idToMainIds.put(alipayId, mainIds);
-          }
-        } catch (Exception exception) {
-          log.error(exception.getMessage(), exception);
-        }
-      }
-      if (CollectionUtils.isNotEmpty(idToData.values())) {
-        for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
-          String key = entry.getKey();
-          DataMap value = entry.getValue();
-          Set<String> mainIds = idToMainIds.get(key);
-          if (CollectionUtils.isNotEmpty(mainIds)) {
-            value.put("共同交易主体数", mainIds.size());
-            value.put("共同交易主体账号汇总", StringUtils.join(mainIds, ";"));
-          }
-          Set<String> names = idToNames.get(key);
-          if (CollectionUtils.isNotEmpty(names)) {
-            value.put("交易对手户名", StringUtils.join(names, ";"));
-          }
-          DataMap dataMap = entry.getValue();
-          BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
-          dataMap.put("交易总额", money1.doubleValue());
-          BigDecimal money2 = (BigDecimal) dataMap.get("交易主体收入金额");
-          dataMap.put("交易主体收入金额", money2.doubleValue());
-          BigDecimal money3 = (BigDecimal) dataMap.get("交易主体支出金额");
-          dataMap.put("交易主体支出金额", money3.doubleValue());
         }
-        saveLines(idToData.values(), "交易总额", mongoTemplate);
-      }
+        this.latch.countDown();
     }
-    this.latch.countDown();
-  }
 }

+ 158 - 140
src/main/java/ieven/server/webapp/service/alipay/EndAnalysis.java

@@ -19,153 +19,171 @@ import java.util.concurrent.CountDownLatch;
 @Slf4j
 public class EndAnalysis extends Ops implements Runnable {
 
-  private HeaderProperties headerProperties;
-  List<Fields> originFields;
-  String modelId;
-  MongoTemplate mongoTemplate;
-  FileService fileService;
+    private HeaderProperties headerProperties;
+    List<Fields> originFields;
+    String modelId;
+    MongoTemplate mongoTemplate;
+    FileService fileService;
 
-  CountDownLatch latch;
+    CountDownLatch latch;
 
-  public EndAnalysis(
-      HeaderProperties headerProperties,
-      List<Fields> originFields,
-      String modelId,
-      MongoTemplate mongoTemplate,
-      FileService fileService,
-      CountDownLatch latch2) {
-    this.headerProperties = headerProperties;
-    this.originFields = originFields;
-    this.modelId = modelId;
-    this.mongoTemplate = mongoTemplate;
-    this.fileService = fileService;
-    this.latch = latch2;
-  }
+    public EndAnalysis(
+            HeaderProperties headerProperties,
+            List<Fields> originFields,
+            String modelId,
+            MongoTemplate mongoTemplate,
+            FileService fileService,
+            CountDownLatch latch2) {
+        this.headerProperties = headerProperties;
+        this.originFields = originFields;
+        this.modelId = modelId;
+        this.mongoTemplate = mongoTemplate;
+        this.fileService = fileService;
+        this.latch = latch2;
+    }
 
-  @Override
-  public void run() {
-    // 直接删除并创建表
-    String newFileId = "";
-    String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
-    // 遍历账户明细全表
-    if (StringUtils.isNotBlank(dateFileId)) {
+    @Override
+    public void run() {
+        // 直接删除并创建表
+        String newFileId = "";
+        String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
+        // 遍历账户明细全表
+        if (StringUtils.isNotBlank(dateFileId)) {
 
-      MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
-      if (cursor.hasNext()) {
-        newFileId =
-            createLogicAndDeleteOld(
-                "五联单-对手透视",
-                modelId,
-                headerProperties.getEndAnalysisOutput(),
-                mongoTemplate,
-                fileService);
-        insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
-      }
-      Set<String> alipayIds = new HashSet<>();
-      Map<String, DataMap> idToData = new HashMap<>();
-      Map<String, Set<String>> idToMainIds = new HashMap<>();
-      Map<String, Set<String>> idToNames = new HashMap<>();
-      Document origin;
-      while (cursor.hasNext()) {
+            MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+            if (cursor.hasNext()) {
+                newFileId =
+                        createLogicAndDeleteOld(
+                                "五联单-对手透视",
+                                modelId,
+                                headerProperties.getEndAnalysisOutput(),
+                                mongoTemplate,
+                                fileService
+                        );
+                insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+            }
+            Set<String> alipayIds = new HashSet<>();
+            Map<String, DataMap> idToData = new HashMap<>();
+            Map<String, Set<String>> idToMainIds = new HashMap<>();
+            Map<String, Set<String>> idToNames = new HashMap<>();
+            Map<String, Set<String>> hm = new HashMap<>();
+            Document origin;
+            while (cursor.hasNext()) {
 
-        try {
+                try {
 
-          origin = cursor.next();
-          String alipayId = origin.getString("对手支付宝用户ID");
-          DataMap dataMap;
-          if (alipayIds.contains(alipayId)) {
-            dataMap = idToData.get(alipayId);
-          } else {
-            alipayIds.add(alipayId);
-            dataMap = new DataMap();
-            dataMap.put("fileId", newFileId);
-            dataMap.put("对手支付宝用户ID", alipayId);
-            dataMap.put("对手支付宝户名", "");
-            dataMap.put("交易总额", new BigDecimal("0.00"));
-            dataMap.put("主用户ID收入金额", new BigDecimal("0.00"));
-            dataMap.put("主用户ID支出金额", new BigDecimal("0.00"));
-            dataMap.put("主用户ID收入笔数", 0);
-            dataMap.put("主用户ID支出笔数", 0);
-            dataMap.put("总笔数", 0);
-            dataMap.put("共同主用户ID数", 0);
-            dataMap.put("共同主用户ID汇总", "");
-            idToData.put(alipayId, dataMap);
-          }
-          String alipayUsername = origin.getString("对手支付宝户名");
-          if (StringUtils.isNotBlank(alipayUsername)
-              && !"_".equals(alipayUsername)
-              && !"-".equals(alipayUsername)&& !"null".equals(alipayUsername)) {
-            if (idToNames.containsKey(alipayId)) {
-              Set<String> names = idToNames.get(alipayId);
-              names.add(alipayUsername);
-            } else {
-              Set<String> names = new HashSet<>();
-              names.add(alipayUsername);
-              idToNames.put(alipayId, names);
+                    origin = cursor.next();
+                    String alipayId = origin.getString("对手支付宝用户ID");
+                    DataMap dataMap;
+                    if (alipayIds.contains(alipayId)) {
+                        dataMap = idToData.get(alipayId);
+                    } else {
+                        alipayIds.add(alipayId);
+                        dataMap = new DataMap();
+                        dataMap.put("fileId", newFileId);
+                        dataMap.put("对手支付宝用户ID", alipayId);
+                        dataMap.put("对手支付宝户名", "");
+                        dataMap.put("交易总额", new BigDecimal("0.00"));
+                        dataMap.put("主用户ID收入金额", new BigDecimal("0.00"));
+                        dataMap.put("主用户ID支出金额", new BigDecimal("0.00"));
+                        dataMap.put("主用户ID收入笔数", 0);
+                        dataMap.put("主用户ID支出笔数", 0);
+                        dataMap.put("总笔数", 0);
+                        dataMap.put("共同主用户ID数", 0);
+                        dataMap.put("共同主用户ID汇总", "");
+                        idToData.put(alipayId, dataMap);
+                    }
+                    String alipayUsername = origin.getString("对手支付宝户名");
+                    if (StringUtils.isNotBlank(alipayUsername)
+                            && !"_".equals(alipayUsername)
+                            && !"-".equals(alipayUsername) && !"null".equals(alipayUsername)) {
+                        if (idToNames.containsKey(alipayId)) {
+                            Set<String> names = idToNames.get(alipayId);
+                            names.add(alipayUsername);
+                        } else {
+                            Set<String> names = new HashSet<>();
+                            names.add(alipayUsername);
+                            idToNames.put(alipayId, names);
+                        }
+                    }
+                    String flag = "收/支";
+                    String flagValue = origin.getString(flag);
+                    String money = (String) origin.get("金额(元)");
+                    if ("收入".equals(flagValue)) {
+                        BigDecimal oMoney = (BigDecimal) dataMap.get("主用户ID收入金额");
+                        oMoney = oMoney.add(new BigDecimal(money));
+                        dataMap.put("主用户ID收入金额", oMoney);
+                        int oCount = (int) dataMap.get("主用户ID收入笔数");
+                        oCount++;
+                        dataMap.put("主用户ID收入笔数", oCount);
+                    } else if ("支出".equals(flagValue)) {
+                        BigDecimal oMoney = (BigDecimal) dataMap.get("主用户ID支出金额");
+                        oMoney = oMoney.add(new BigDecimal(money));
+                        dataMap.put("主用户ID支出金额", oMoney);
+                        int oCount = (int) dataMap.get("主用户ID支出笔数");
+                        oCount++;
+                        dataMap.put("主用户ID支出笔数", oCount);
+                    }
+                    BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
+                    oMoney = oMoney.add(new BigDecimal(money));
+                    dataMap.put("交易总额", oMoney);
+                    int oCount = (int) dataMap.get("总笔数");
+                    oCount++;
+                    dataMap.put("总笔数", oCount);
+                    String mainId = (String) origin.get("支付宝用户ID");
+                    String mainIdhm = (String) origin.get("支付宝户名");
+                    if (StringUtils.isNotBlank(mainId) && StringUtils.isNotBlank(mainIdhm)) {
+                        if (hm.containsKey(mainId)) {
+                            Set<String> hmnew = hm.get(mainId);
+                            hmnew.add(mainIdhm);
+                            hm.put(mainId, hmnew);
+                        } else {
+                            Set<String> mainIds = new HashSet<>();
+                            mainIds.add(mainIdhm);
+                            hm.put(alipayId, mainIds);
+                        }
+                    }
+                    if (idToMainIds.containsKey(alipayId)) {
+                        Set<String> mainIds = idToMainIds.get(alipayId);
+                        mainIds.add(mainId);
+                    } else {
+                        Set<String> mainIds = new HashSet<>();
+                        mainIds.add(mainId);
+                        idToMainIds.put(alipayId, mainIds);
+                    }
+                } catch (Exception exception) {
+                    log.error(exception.getMessage(), exception);
+                }
+            }
+            if (CollectionUtils.isNotEmpty(idToData.values())) {
+                for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
+                    String key = entry.getKey();
+                    DataMap value = entry.getValue();
+                    Set<String> mainIds = idToMainIds.get(key);
+                    if (CollectionUtils.isNotEmpty(mainIds)) {
+                        value.put("共同主用户ID数", mainIds.size());
+                        String str="";
+                        for (String mainId : mainIds) {
+                            Set<String> strings = hm.get(mainId);
+                            str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
+                        }
+                        value.put("共同主用户ID汇总", str);
+                    }
+                    Set<String> names = idToNames.get(key);
+                    if (CollectionUtils.isNotEmpty(names)) {
+                        value.put("对手支付宝户名", StringUtils.join(names, ";"));
+                    }
+                    DataMap dataMap = entry.getValue();
+                    BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
+                    dataMap.put("交易总额", money1.doubleValue());
+                    BigDecimal money2 = (BigDecimal) dataMap.get("主用户ID收入金额");
+                    dataMap.put("主用户ID收入金额", money2.doubleValue());
+                    BigDecimal money3 = (BigDecimal) dataMap.get("主用户ID支出金额");
+                    dataMap.put("主用户ID支出金额", money3.doubleValue());
+                }
+                saveLines(idToData.values(), "交易总额", mongoTemplate);
             }
-          }
-          String flag = "收/支";
-          String flagValue = origin.getString(flag);
-          String money = (String) origin.get("金额(元)");
-          if ("收入".equals(flagValue)) {
-            BigDecimal oMoney = (BigDecimal) dataMap.get("主用户ID收入金额");
-            oMoney = oMoney.add(new BigDecimal(money));
-            dataMap.put("主用户ID收入金额", oMoney);
-            int oCount = (int) dataMap.get("主用户ID收入笔数");
-            oCount++;
-            dataMap.put("主用户ID收入笔数", oCount);
-          } else if ("支出".equals(flagValue)) {
-            BigDecimal oMoney = (BigDecimal) dataMap.get("主用户ID支出金额");
-            oMoney = oMoney.add(new BigDecimal(money));
-            dataMap.put("主用户ID支出金额", oMoney);
-            int oCount = (int) dataMap.get("主用户ID支出笔数");
-            oCount++;
-            dataMap.put("主用户ID支出笔数", oCount);
-          }
-          BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
-          oMoney = oMoney.add(new BigDecimal(money));
-          dataMap.put("交易总额", oMoney);
-          int oCount = (int) dataMap.get("总笔数");
-          oCount++;
-          dataMap.put("总笔数", oCount);
-          String mainId = (String) origin.get("支付宝用户ID");
-          String mainName = (String) origin.get("支付宝户名");
-          if (idToMainIds.containsKey(alipayId)) {
-            Set<String> mainIds = idToMainIds.get(alipayId);
-            mainIds.add(mainId);
-          } else {
-            Set<String> mainIds = new HashSet<>();
-            mainIds.add(mainId+(StringUtils.isBlank(mainName)||"null".equals(mainName)?"":"("+mainName+")"));
-            idToMainIds.put(alipayId, mainIds);
-          }
-        } catch (Exception exception) {
-          log.error(exception.getMessage(), exception);
-        }
-      }
-      if (CollectionUtils.isNotEmpty(idToData.values())) {
-        for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
-          String key = entry.getKey();
-          DataMap value = entry.getValue();
-          Set<String> mainIds = idToMainIds.get(key);
-          if (CollectionUtils.isNotEmpty(mainIds)) {
-            value.put("共同主用户ID数", mainIds.size());
-            value.put("共同主用户ID汇总", StringUtils.join(mainIds, ";"));
-          }
-          Set<String> names = idToNames.get(key);
-          if (CollectionUtils.isNotEmpty(names)) {
-            value.put("对手支付宝户名", StringUtils.join(names, ";"));
-          }
-          DataMap dataMap = entry.getValue();
-          BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
-          dataMap.put("交易总额", money1.doubleValue());
-          BigDecimal money2 = (BigDecimal) dataMap.get("主用户ID收入金额");
-          dataMap.put("主用户ID收入金额", money2.doubleValue());
-          BigDecimal money3 = (BigDecimal) dataMap.get("主用户ID支出金额");
-          dataMap.put("主用户ID支出金额", money3.doubleValue());
         }
-        saveLines(idToData.values(), "交易总额", mongoTemplate);
-      }
+        latch.countDown();
     }
-    latch.countDown();
-  }
 }

+ 57 - 5
src/main/java/ieven/server/webapp/service/datastatic/DataStaticAnalysisDs.java

@@ -59,6 +59,7 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
             Map<String, DataMap> idToData = new HashMap<>();
             Map<String, Set<String>> idToMainIds = new HashMap<>();
             Map<String, Set<String>> idToNames = new HashMap<>();
+            Map<String, Set<String>> hm = new HashMap<>();
             Document origin;
             while (cursor.hasNext()) {
                 try {
@@ -125,6 +126,18 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
                     oCount++;
                     dataMap.put("总笔数", oCount);
                     String mainId = (String) origin.get("交易主体账号");
+                    String mainIdhm = (String) origin.get("交易主体户名");
+                    if(StringUtils.isNotBlank(mainId)&&StringUtils.isNotBlank(mainIdhm)){
+                        if (hm.containsKey(mainId)) {
+                            Set<String> hmnew = hm.get(mainId);
+                            hmnew.add(mainIdhm);
+                            hm.put(mainId,hmnew);
+                        } else {
+                            Set<String> mainIds = new HashSet<>();
+                            mainIds.add(mainIdhm);
+                            hm.put(alipayId, mainIds);
+                        }
+                    }
                     if (idToMainIds.containsKey(alipayId)) {
                         Set<String> mainIds = idToMainIds.get(alipayId);
                         mainIds.add(mainId);
@@ -148,7 +161,12 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
                     }
                     if (CollectionUtils.isNotEmpty(mainIds)) {
                         value.put("共同交易主体数", mainIds.size());
-                        value.put("共同交易主体账号汇总", StringUtils.join(mainIds+"("+StringUtils.join(names, ",")+")", ";"));
+                        String str="";
+                        for (String mainId : mainIds) {
+                            Set<String> strings = hm.get(mainId);
+                            str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
+                        }
+                        value.put("共同交易主体账号汇总", str);
                     }
                     DataMap dataMap = entry.getValue();
                     BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
@@ -173,6 +191,7 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
             Map<String, Set<String>> idToMainIds = new HashMap<>();
             Map<String, Set<String>> idToNames = new HashMap<>();
             Document origin;
+            Map<String, Set<String>> hm = new HashMap<>();
             while (cursor.hasNext()) {
                 try {
 
@@ -235,7 +254,18 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
                     oCount++;
                     dataMap.put("总笔数", oCount);
                     String mainId = (String) origin.get("交易主体账号");
-                    String mainName = (String) origin.get("交易主体户名");
+                    String mainIdhm = (String) origin.get("交易主体户名");
+                    if(StringUtils.isNotBlank(mainId)&&StringUtils.isNotBlank(mainIdhm)){
+                        if (hm.containsKey(mainId)) {
+                            Set<String> hmnew = hm.get(mainId);
+                            hmnew.add(mainIdhm);
+                            hm.put(mainId,hmnew);
+                        } else {
+                            Set<String> mainIds = new HashSet<>();
+                            mainIds.add(mainIdhm);
+                            hm.put(alipayId, mainIds);
+                        }
+                    }
                     if (idToMainIds.containsKey(alipayId)) {
                         Set<String> mainIds = idToMainIds.get(alipayId);
                         mainIds.add(mainId);
@@ -260,7 +290,12 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
                     Set<String> mainIds = idToMainIds.get(key);
                     if (CollectionUtils.isNotEmpty(mainIds)) {
                         value.put("共同交易主体数", mainIds.size());
-                        value.put("共同交易主体账号汇总", StringUtils.join(mainIds+"("+StringUtils.join(names, ",")+")", ";"));
+                        String str="";
+                        for (String mainId : mainIds) {
+                            Set<String> strings = hm.get(mainId);
+                            str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
+                        }
+                        value.put("共同交易主体账号汇总", str);
                     }
                     DataMap dataMap = entry.getValue();
                     BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
@@ -284,6 +319,7 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
             Map<String, DataMap> idToData = new HashMap<>();
             Map<String, Set<String>> idToMainIds = new HashMap<>();
             Map<String, Set<String>> idToNames = new HashMap<>();
+            Map<String, Set<String>> hm = new HashMap<>();
             Document origin;
             while (cursor.hasNext()) {
 
@@ -348,7 +384,18 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
                     oCount++;
                     dataMap.put("总笔数", oCount);
                     String mainId = (String) origin.get("支付宝用户ID");
-                    String mainName = (String) origin.get("支付宝户名");
+                    String mainIdhm = (String) origin.get("支付宝户名");
+                    if (StringUtils.isNotBlank(mainId) && StringUtils.isNotBlank(mainIdhm)) {
+                        if (hm.containsKey(mainId)) {
+                            Set<String> hmnew = hm.get(mainId);
+                            hmnew.add(mainIdhm);
+                            hm.put(mainId, hmnew);
+                        } else {
+                            Set<String> mainIds = new HashSet<>();
+                            mainIds.add(mainIdhm);
+                            hm.put(alipayId, mainIds);
+                        }
+                    }
                     if (idToMainIds.containsKey(alipayId)) {
                         Set<String> mainIds = idToMainIds.get(alipayId);
                         mainIds.add(mainId);
@@ -372,7 +419,12 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
                     }
                     if (CollectionUtils.isNotEmpty(mainIds)) {
                         value.put("共同主用户ID数", mainIds.size());
-                        value.put("共同主用户ID汇总", StringUtils.join(mainIds+"("+StringUtils.join(names, ",")+")", ";"));
+                        String str="";
+                        for (String mainId : mainIds) {
+                            Set<String> strings = hm.get(mainId);
+                            str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
+                        }
+                        value.put("共同主用户ID汇总", str);
                     }
                     DataMap dataMap = entry.getValue();
                     BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");

+ 37 - 9
src/main/java/ieven/server/webapp/service/datastatic/DataStaticAnalysisTotal.java

@@ -7,6 +7,7 @@ import ieven.server.webapp.domain.data.DataMap;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.tenpay.TenpayHeaders;
 import ieven.server.webapp.service.Ops;
+import ieven.server.webapp.util.excel.PublicStatic;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -68,6 +69,7 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
             List<DataMap> needToSave = new ArrayList<>(1000);
             List<DataMap> needToSaveall = new ArrayList<>(1000);
             Map<String, Object> dataMapUser = new HashMap<>();
+            Map<String, String> dateFileId2Map = new HashMap<>();
             while (cursor.hasNext()) {
                 try {
                     origin = cursor.next();
@@ -94,18 +96,45 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
                         namesSet.add(alipayUsername);
                     }
                     //组装用户基本信息
-                    getDataAll(needToSaveall, origin, alipayIdsAll, newFileIdAll, dataMapUser, idToData);
+                    String type = origin.getString("类型");
+                    String dateFileId2 = "";
+                    if ("财付通".equals(type)) {
+                        String s = dateFileId2Map.get(type);
+                        if (PublicStatic.checkStr(s)) {
+                            s = getFileId(TenpayHeaders.getGeneratedName(3), modelId, mongoTemplate);
+                            dateFileId2Map.put(type, s);
+                        }
+                        dateFileId2 = s;
+
+                    } else if ("反诈".equals(type)) {
+                        String s = dateFileId2Map.get(type);
+                        if (PublicStatic.checkStr(s)) {
+                            s = getFileId(TenpayHeaders.getGeneratedName(3), modelId, mongoTemplate);
+                            dateFileId2Map.put(type, s);
+                        }
+                        dateFileId2 = s;
+
+                    } else if ("五联单".equals(type)) {
+                        String s = dateFileId2Map.get(type);
+                        if (PublicStatic.checkStr(s)) {
+                            s = getFileId(AlipayHeaders.getGeneratedName(2), modelId, mongoTemplate);
+                            dateFileId2Map.put(type, s);
+                        }
+                        dateFileId2 = s;
+
+                    }
+                    getDataAll(needToSaveall, origin, alipayIdsAll, newFileIdAll, dataMapUser, idToData, dateFileId2);
                     if (needToSaveall.size() >= 1000) {
                         List<DataMap> newDataList = new ArrayList<>();
                         for (DataMap map : needToSaveall) {
                             String zh = String.valueOf(map.get("账号"));
-                            String zhmc = String.valueOf(map.get("账号名称"));
+                            String zhmc = String.valueOf(map.get("账名称"));
                             if (StringUtils.isBlank(zhmc) || "null".equals(zhmc)) {
                                 String newZh = String.valueOf(dataMapUser.get(zh));
                                 if (StringUtils.isBlank(newZh) || "null".equals(newZh)) {
                                     continue;
                                 } else {
-                                    map.put("账号名称", newZh);
+                                    map.put("账名称", newZh);
                                     newDataList.add(map);
                                 }
                             } else {
@@ -153,7 +182,7 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
                         if (StringUtils.isBlank(newZh) || "null".equals(newZh)) {
                             continue;
                         } else {
-                            map.put("账名称", newZh);
+                            map.put("账名称", newZh);
                             newDataList.add(map);
                         }
                     } else {
@@ -228,7 +257,7 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
         dataMap.put("注册时间", zcsj);
     }
 
-    public void getDataAll(List<DataMap> needToSaveall, Document origin, Set<String> alipayIdsAll, String newFileIdAll, Map<String, Object> userMap, Map<String, DataMap> havedUser) {
+    public void getDataAll(List<DataMap> needToSaveall, Document origin, Set<String> alipayIdsAll, String newFileIdAll, Map<String, Object> userMap, Map<String, DataMap> havedUser, String dateFileId2) {
         String type = origin.getString("类型");
         String account = String.valueOf(origin.getString("交易主体账号"));
         String accounthm = String.valueOf(origin.getString("交易主体户名"));
@@ -242,7 +271,7 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
             dataMaphm.put(account, accounthm);
             if (StringUtils.isNotBlank(account) && !"null".equals(account) && StringUtils.isNotBlank(accounthm) && !"null".equals(accounthm)) {
                 String s = String.valueOf(userMap.get(account));
-                if (StringUtils.isBlank(s)) {
+                if (PublicStatic.checkStr(s)) {
                     userMap.put(account, accounthm);
                 }
             }
@@ -253,7 +282,7 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
             dataMaphm.put(accountds, accountdshm);
             if (StringUtils.isNotBlank(accountds) && !"null".equals(accountds) && StringUtils.isNotBlank(accountdshm) && !"null".equals(accountdshm)) {
                 String s = String.valueOf(userMap.get(accountds));
-                if (StringUtils.isBlank(s)) {
+                if (PublicStatic.checkStr(s)) {
                     userMap.put(accountds, accountdshm);
                 }
             }
@@ -270,7 +299,6 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
                     if (dataMap != null) {
                         dataMaps.add(dataMap);
                     } else {
-                        String dateFileId2 = getFileId(TenpayHeaders.getGeneratedName(3), modelId, mongoTemplate);
                         if (StringUtils.isNotBlank(dateFileId2)) {
                             dataMaps = this.mongoTemplate.find((new Query(
                                     Criteria.where("modelId")
@@ -330,7 +358,7 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
                     if (dataMap != null) {
                         dataMaps.add(dataMap);
                     } else {
-                        String dateFileId2 = getFileId(AlipayHeaders.getGeneratedName(2), modelId, mongoTemplate);
+
                         if (StringUtils.isNotBlank(dateFileId2)) {
                             dataMaps = this.mongoTemplate.find((new Query(
                                     Criteria.where("modelId")

+ 2 - 1
src/main/java/ieven/server/webapp/service/datastatic/DataStaticService.java

@@ -190,7 +190,8 @@ public class DataStaticService extends Ops {
         List<DataMap>newList=Lists.newArrayList();
         for (Map.Entry<String,List<DataMap>> entry : dsMap.entrySet()) {
            if(entry.getValue().size()>1){
-               newList.addAll(entry.getValue());
+               List<DataMap> dataMaps1 = dsMap.get(entry.getKey());
+               newList.addAll(dataMaps1);
            }
         }
 

+ 157 - 139
src/main/java/ieven/server/webapp/service/tenpay/TenpayTradesEndAnalysis.java

@@ -21,151 +21,169 @@ import java.util.concurrent.CountDownLatch;
 @Slf4j
 public class TenpayTradesEndAnalysis extends Ops implements Runnable {
 
-  private HeaderProperties headerProperties;
-  String modelId;
-  MongoTemplate mongoTemplate;
-  FileService fileService;
+    private HeaderProperties headerProperties;
+    String modelId;
+    MongoTemplate mongoTemplate;
+    FileService fileService;
 
-  CountDownLatch latch;
+    CountDownLatch latch;
 
-  public TenpayTradesEndAnalysis(
-      HeaderProperties headerProperties,
-      String modelId,
-      MongoTemplate mongoTemplate,
-      FileService fileService,
-      CountDownLatch latch) {
-    this.headerProperties = headerProperties;
-    this.modelId = modelId;
-    this.mongoTemplate = mongoTemplate;
-    this.fileService = fileService;
-    this.latch = latch;
-  }
-
-  @Override
-  public void run() {
-    log.info("财付通-对手透视开始");
-    // 直接删除并创建表
-    String newFileId = "";
-    String dateFileId = getFileId("财付通-交易明细", modelId, mongoTemplate);
-    // 插入记录用户后续查询明细
-    MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
-    if (cursor.hasNext() && StringUtils.isNotBlank(dateFileId)) {
-      newFileId =
-          createLogicAndDeleteOld(
-              "财付通-对手透视",
-              modelId,
-              headerProperties.getAntiSecurityTradeEndAnalysisOutput(),
-              mongoTemplate,
-              fileService);
-      insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+    public TenpayTradesEndAnalysis(
+            HeaderProperties headerProperties,
+            String modelId,
+            MongoTemplate mongoTemplate,
+            FileService fileService,
+            CountDownLatch latch) {
+        this.headerProperties = headerProperties;
+        this.modelId = modelId;
+        this.mongoTemplate = mongoTemplate;
+        this.fileService = fileService;
+        this.latch = latch;
     }
-    Set<String> alipayIds = new HashSet<>();
-    Map<String, DataMap> idToData = new HashMap<>();
-    Map<String, Set<String>> idToMainIds = new HashMap<>();
-    Map<String, Set<String>> idToNames = new HashMap<>();
-    Document origin;
-    while (cursor.hasNext()) {
-      try {
 
-        origin = cursor.next();
-        String alipayId = origin.getString("交易对手账号");
-        DataMap dataMap;
-        if (alipayIds.contains(alipayId)) {
-          dataMap = idToData.get(alipayId);
-        } else {
-          alipayIds.add(alipayId);
-          dataMap = new DataMap();
-          dataMap.put("fileId", newFileId);
-          dataMap.put("交易对手账号", alipayId);
-          dataMap.put("交易对手户名", "");
-          dataMap.put("交易总额", new BigDecimal("0.00"));
-          dataMap.put("交易主体收入金额", new BigDecimal("0.00"));
-          dataMap.put("交易主体支出金额", new BigDecimal("0.00"));
-          dataMap.put("交易主体收入笔数", 0);
-          dataMap.put("交易主体支出笔数", 0);
-          dataMap.put("总笔数", 0);
-          dataMap.put("共同交易主体数", 0);
-          dataMap.put("共同交易主体账号汇总", "");
-          idToData.put(alipayId, dataMap);
-        }
-        String alipayUsername = origin.getString("交易对手户名");
-        if (StringUtils.isNotBlank(alipayUsername)
-            && !"_".equals(alipayUsername)
-            && !"-".equals(alipayUsername)&& !"null".equals(alipayUsername)) {
-          if (idToNames.containsKey(alipayId)) {
-            Set<String> names = idToNames.get(alipayId);
-            names.add(alipayUsername);
-          } else {
-            Set<String> names = new HashSet<>();
-            names.add(alipayUsername);
-            idToNames.put(alipayId, names);
-          }
-        }
-        String flag = "借贷类型";
-        String flagValue = origin.getString(flag);
-        String money = (String) origin.get("交易金额(元)");
-        if (StringUtils.isBlank(money)) {
-          money = "0";
-        }
-        if ("入".equals(flagValue)) {
-          BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体收入金额");
-          oMoney = oMoney.add(new BigDecimal(money));
-          dataMap.put("交易主体收入金额", oMoney);
-          int oCount = (int) dataMap.get("交易主体收入笔数");
-          oCount++;
-          dataMap.put("交易主体收入笔数", oCount);
-        } else if ("出".equals(flagValue)) {
-          BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体支出金额");
-          oMoney = oMoney.add(new BigDecimal(money));
-          dataMap.put("交易主体支出金额", oMoney);
-          int oCount = (int) dataMap.get("交易主体支出笔数");
-          oCount++;
-          dataMap.put("交易主体支出笔数", oCount);
+    @Override
+    public void run() {
+        log.info("财付通-对手透视开始");
+        // 直接删除并创建表
+        String newFileId = "";
+        String dateFileId = getFileId("财付通-交易明细", modelId, mongoTemplate);
+        // 插入记录用户后续查询明细
+        MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+        if (cursor.hasNext() && StringUtils.isNotBlank(dateFileId)) {
+            newFileId =
+                    createLogicAndDeleteOld(
+                            "财付通-对手透视",
+                            modelId,
+                            headerProperties.getAntiSecurityTradeEndAnalysisOutput(),
+                            mongoTemplate,
+                            fileService
+                    );
+            insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
         }
-        BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
-        oMoney = oMoney.add(new BigDecimal(money));
-        dataMap.put("交易总额", oMoney);
-        int oCount = (int) dataMap.get("总笔数");
-        oCount++;
-        dataMap.put("总笔数", oCount);
-        String mainId = (String) origin.get("交易主体账号");
-        String mainName = (String) origin.get("交易主体户名");
-        if (idToMainIds.containsKey(alipayId)) {
-          Set<String> mainIds = idToMainIds.get(alipayId);
-          mainIds.add(mainId);
-        } else {
-          Set<String> mainIds = new HashSet<>();
-          mainIds.add(mainId+(StringUtils.isBlank(mainName)||"null".equals(mainName)?"":"("+mainName+")"));
-          idToMainIds.put(alipayId, mainIds);
-        }
-      } catch (Exception exception) {
-        log.error(exception.getMessage(), exception);
-      }
-    }
-    if (CollectionUtils.isNotEmpty(idToData.values())) {
-      for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
-        String key = entry.getKey();
-        DataMap value = entry.getValue();
-        Set<String> mainIds = idToMainIds.get(key);
-        if (CollectionUtils.isNotEmpty(mainIds)) {
-          value.put("共同交易主体数", mainIds.size());
-          value.put("共同交易主体账号汇总", StringUtils.join(mainIds, ";"));
+        Set<String> alipayIds = new HashSet<>();
+        Map<String, DataMap> idToData = new HashMap<>();
+        Map<String, Set<String>> idToMainIds = new HashMap<>();
+        Map<String, Set<String>> idToNames = new HashMap<>();
+        Map<String, Set<String>> hm = new HashMap<>();
+        Document origin;
+        while (cursor.hasNext()) {
+            try {
+
+                origin = cursor.next();
+                String alipayId = origin.getString("交易对手账号");
+                DataMap dataMap;
+                if (alipayIds.contains(alipayId)) {
+                    dataMap = idToData.get(alipayId);
+                } else {
+                    alipayIds.add(alipayId);
+                    dataMap = new DataMap();
+                    dataMap.put("fileId", newFileId);
+                    dataMap.put("交易对手账号", alipayId);
+                    dataMap.put("交易对手户名", "");
+                    dataMap.put("交易总额", new BigDecimal("0.00"));
+                    dataMap.put("交易主体收入金额", new BigDecimal("0.00"));
+                    dataMap.put("交易主体支出金额", new BigDecimal("0.00"));
+                    dataMap.put("交易主体收入笔数", 0);
+                    dataMap.put("交易主体支出笔数", 0);
+                    dataMap.put("总笔数", 0);
+                    dataMap.put("共同交易主体数", 0);
+                    dataMap.put("共同交易主体账号汇总", "");
+                    idToData.put(alipayId, dataMap);
+                }
+                String alipayUsername = origin.getString("交易对手户名");
+                if (StringUtils.isNotBlank(alipayUsername)
+                        && !"_".equals(alipayUsername)
+                        && !"-".equals(alipayUsername) && !"null".equals(alipayUsername)) {
+                    if (idToNames.containsKey(alipayId)) {
+                        Set<String> names = idToNames.get(alipayId);
+                        names.add(alipayUsername);
+                    } else {
+                        Set<String> names = new HashSet<>();
+                        names.add(alipayUsername);
+                        idToNames.put(alipayId, names);
+                    }
+                }
+                String flag = "借贷类型";
+                String flagValue = origin.getString(flag);
+                String money = (String) origin.get("交易金额(元)");
+                if (StringUtils.isBlank(money)) {
+                    money = "0";
+                }
+                if ("入".equals(flagValue)) {
+                    BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体收入金额");
+                    oMoney = oMoney.add(new BigDecimal(money));
+                    dataMap.put("交易主体收入金额", oMoney);
+                    int oCount = (int) dataMap.get("交易主体收入笔数");
+                    oCount++;
+                    dataMap.put("交易主体收入笔数", oCount);
+                } else if ("出".equals(flagValue)) {
+                    BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体支出金额");
+                    oMoney = oMoney.add(new BigDecimal(money));
+                    dataMap.put("交易主体支出金额", oMoney);
+                    int oCount = (int) dataMap.get("交易主体支出笔数");
+                    oCount++;
+                    dataMap.put("交易主体支出笔数", oCount);
+                }
+                BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
+                oMoney = oMoney.add(new BigDecimal(money));
+                dataMap.put("交易总额", oMoney);
+                int oCount = (int) dataMap.get("总笔数");
+                oCount++;
+                dataMap.put("总笔数", oCount);
+                String mainId = (String) origin.get("交易主体账号");
+                String mainIdhm = (String) origin.get("交易主体户名");
+                if (StringUtils.isNotBlank(mainId) && StringUtils.isNotBlank(mainIdhm)) {
+                    if (hm.containsKey(mainId)) {
+                        Set<String> hmnew = hm.get(mainId);
+                        hmnew.add(mainIdhm);
+                        hm.put(mainId, hmnew);
+                    } else {
+                        Set<String> mainIds = new HashSet<>();
+                        mainIds.add(mainIdhm);
+                        hm.put(alipayId, mainIds);
+                    }
+                }
+                if (idToMainIds.containsKey(alipayId)) {
+                    Set<String> mainIds = idToMainIds.get(alipayId);
+                    mainIds.add(mainId);
+                } else {
+                    Set<String> mainIds = new HashSet<>();
+                    mainIds.add(mainId);
+                    idToMainIds.put(alipayId, mainIds);
+                }
+            } catch (Exception exception) {
+                log.error(exception.getMessage(), exception);
+            }
         }
-        Set<String> names = idToNames.get(key);
-        if (CollectionUtils.isNotEmpty(names)) {
-          value.put("交易对手户名", StringUtils.join(names, ";"));
+        if (CollectionUtils.isNotEmpty(idToData.values())) {
+            for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
+                String key = entry.getKey();
+                DataMap value = entry.getValue();
+                Set<String> mainIds = idToMainIds.get(key);
+                if (CollectionUtils.isNotEmpty(mainIds)) {
+                    value.put("共同交易主体数", mainIds.size());
+                    String str="";
+                    for (String mainId : mainIds) {
+                        Set<String> strings = hm.get(mainId);
+                        str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
+                    }
+                    value.put("共同交易主体账号汇总", str);
+                }
+                Set<String> names = idToNames.get(key);
+                if (CollectionUtils.isNotEmpty(names)) {
+                    value.put("交易对手户名", StringUtils.join(names, ";"));
+                }
+                DataMap dataMap = entry.getValue();
+                BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
+                dataMap.put("交易总额", money1.doubleValue());
+                BigDecimal money2 = (BigDecimal) dataMap.get("交易主体收入金额");
+                dataMap.put("交易主体收入金额", money2.doubleValue());
+                BigDecimal money3 = (BigDecimal) dataMap.get("交易主体支出金额");
+                dataMap.put("交易主体支出金额", money3.doubleValue());
+            }
+            saveLines(idToData.values(), "交易总额", mongoTemplate);
         }
-        DataMap dataMap = entry.getValue();
-        BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
-        dataMap.put("交易总额", money1.doubleValue());
-        BigDecimal money2 = (BigDecimal) dataMap.get("交易主体收入金额");
-        dataMap.put("交易主体收入金额", money2.doubleValue());
-        BigDecimal money3 = (BigDecimal) dataMap.get("交易主体支出金额");
-        dataMap.put("交易主体支出金额", money3.doubleValue());
-      }
-      saveLines(idToData.values(), "交易总额", mongoTemplate);
+        latch.countDown();
+        log.info("财付通-对手透视结束");
     }
-    latch.countDown();
-    log.info("财付通-对手透视结束");
-  }
 }

+ 2 - 2
src/main/java/ieven/server/webapp/util/excel/PublicStatic.java

@@ -471,8 +471,8 @@ public class PublicStatic {
 
   public static boolean checkStr(String str){
     if(StringUtils.isBlank(str)||"null".equals(str)){
-      return false;
+      return true;
     }
-    return true;
+    return false;
   }
 }