瀏覽代碼

导入大数据量时,速度较慢,需要提升;2)共同交易主体账号汇总有错

hankunkun 10 月之前
父節點
當前提交
7897c2f527

+ 20 - 12
src/main/java/ieven/server/webapp/service/alipay/ALIPAY_GENERATED_TRADE.java

@@ -15,7 +15,9 @@ import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 
 @Slf4j
@@ -53,6 +55,8 @@ public class ALIPAY_GENERATED_TRADE extends Ops implements Runnable {
     public void extractTrade(MongoCursor<Document> cursor, Fields origin, Fields output) {
         Document originDoc;
         List<DataMap> needToSave = new ArrayList<>(1000);
+        String dateFileId2 = getFileId(AlipayHeaders.getGeneratedName(2), modelId, mongoTemplate);
+        Map<String, List<DataMap>> userMap = new HashMap<>();
         while (cursor.hasNext()) {
             // 写法1(建议)
             try {
@@ -73,18 +77,22 @@ public class ALIPAY_GENERATED_TRADE extends Ops implements Runnable {
                 //获取支付宝名称
                 String zfbName = Ops.getString(originDoc, origin, AlipayHeaders.ACCOUNT_2);
                 if (StringUtils.isBlank(zfbName)) {
-                    //去用户注册中进行数据补全
-                    String dateFileId2 = getFileId(AlipayHeaders.getGeneratedName(2), modelId, mongoTemplate);
-                    List<DataMap> dataMaps = this.mongoTemplate.find((new Query(
-                            Criteria.where("modelId")
-                                    .is(modelId)
-                                    .and("fileId")
-                                    .is(dateFileId2)
-                                    .and(AlipayHeaders.ACCOUNT_1)
-                                    .is(zfbName)
-                                    .and("generated")
-                                    .is(Boolean.TRUE))), DataMap.class);
-                    if(CollectionUtils.isNotEmpty(dataMaps)){
+                    List<DataMap> dataMaps = userMap.get(zfbName);
+                    if (CollectionUtils.isEmpty(dataMaps)) {
+                        //去用户注册中进行数据补全
+                        dataMaps = this.mongoTemplate.find((new Query(
+                                Criteria.where("modelId")
+                                        .is(modelId)
+                                        .and("fileId")
+                                        .is(dateFileId2)
+                                        .and(AlipayHeaders.ACCOUNT_1)
+                                        .is(zfbName))), DataMap.class);
+                        userMap.put(zfbName,dataMaps);
+                        if (CollectionUtils.isNotEmpty(dataMaps)) {
+                            userMap.put(zfbName, dataMaps);
+                        }
+                    }
+                    if (CollectionUtils.isNotEmpty(dataMaps)) {
                         Ops.setString(newDoc, AlipayHeaders.ACCOUNT_2, output, String.valueOf(dataMaps.get(0).get("支付宝户名")));
                     }
 

+ 17 - 36
src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade3.java

@@ -135,8 +135,7 @@ public class AntiSecurityTrade3 extends Ops implements Runnable {
                     dataMapUser.put(jyztzh, jyztzhhm);
                 }
 
-            }
-            else if ("入账".equals(flag)) {
+            } else if ("入账".equals(flag)) {
                 dataMap.put("交易主体账号", origin.getString("收款方的支付账号"));
                 dataMap.put("交易主体银行卡号", origin.getString("收款方银行卡所属银行卡号"));
                 dataMap.put("交易主体银行名称", origin.getString("收款方银行卡所属银行名称"));
@@ -154,49 +153,31 @@ public class AntiSecurityTrade3 extends Ops implements Runnable {
             }
             dataMap.put("交易时间", DataUtils.transferDateToStr(origin.getString("交易时间")));
 
-            if ("".equals(dataMap.get("交易主体户名"))) {
+            if (PublicStatic.checkStr(String.valueOf(dataMap.get("交易主体户名")))) {
                 String account = (String) dataMap.getOrDefault("交易主体账号", "");
                 if (StringUtils.isBlank(account) || "-".equals(account)) {
                 } else {
                     String newName = accountToName.getOrDefault(account, "");
                     if (StringUtils.isNotBlank(newName)) {
                         dataMap.put("交易主体户名", newName);
-                    }else{
+                    } /*else {
                         //财付通-注册信息
-                        //去用户注册中进行数据补全
-                        String dateFileId2 = getFileId(TenpayHeaders.getGeneratedName(3), modelId, mongoTemplate);
-                        List<DataMap> dataMaps = this.mongoTemplate.find((new Query(
-                                Criteria.where("modelId")
-                                        .is(modelId)
-                                        .and("fileId")
-                                        .is(dateFileId2)
-                                        .and("账号")
-                                        .is(account)
-                                        .and("generated")
-                                        .is(Boolean.TRUE))), DataMap.class);
-                        if(CollectionUtils.isNotEmpty(dataMaps)){
-                            dataMap.put("交易主体户名", dataMaps.get(0).get("注册姓名"));
+                        List<DataMap> dataMaps = dataMapList.get(account);
+                        if(CollectionUtils.isEmpty(dataMaps)){
+                            dataMaps = this.mongoTemplate.find((new Query(
+                                    Criteria.where("modelId")
+                                            .is(modelId)
+                                            .and("fileId")
+                                            .is(dateFileId2)
+                                            .and("账号")
+                                            .is(account))), DataMap.class);
+                            dataMapList.put(account,dataMaps);
                         }
-                    }
-                }
-            }
-
-            String jyzthm = String.valueOf(dataMap.get("交易主体户名"));
-            if (StringUtils.isBlank(jyzthm) || "-".equals(jyzthm) || "null".equals(jyzthm)) {
-                String account = (String) dataMap.getOrDefault("交易主体账号", "");
-                if (StringUtils.isBlank(account) || "-".equals(account)) {
-                } else {
-                    String newName = accountToName.getOrDefault(account, "");
-                    if (StringUtils.isNotBlank(newName)) {
-                        dataMap.put("交易主体户名", PublicStatic.specialFormatStr(newName));
-                    } else {
-                        if(StringUtils.isNotBlank(String.valueOf(dataMapUser.get(account)))&&!"null".equals(String.valueOf(dataMapUser.get(account)))){
-                            dataMap.put("交易主体户名", PublicStatic.specialFormatStr(String.valueOf(dataMapUser.get(account))));
+                        if (CollectionUtils.isNotEmpty(dataMaps)) {
+                            dataMap.put("交易主体户名", dataMaps.get(0).get("注册姓名"));
                         }
-                    }
+                    }*/
                 }
-            } else {
-                dataMap.put("交易主体户名", PublicStatic.specialFormatStr(jyzthm));
             }
 
             String value = String.valueOf(dataMap.get("交易对手户名"));
@@ -280,6 +261,7 @@ public class AntiSecurityTrade3 extends Ops implements Runnable {
                 }
             }
             dataMap.put("交易时间", DataUtils.transferDateToStr(origin.getString("交易时间")));
+
             String jyzthm = String.valueOf(dataMap.get("交易主体户名"));
             if (StringUtils.isBlank(jyzthm) || "-".equals(jyzthm) || "null".equals(jyzthm)) {
                 String account = (String) dataMap.getOrDefault("交易主体账号", "");
@@ -290,7 +272,6 @@ public class AntiSecurityTrade3 extends Ops implements Runnable {
                         dataMap.put("交易主体户名", PublicStatic.specialFormatStr(newName));
                     } else {
                         dataMap.put("交易主体户名", PublicStatic.specialFormatStr(String.valueOf(dataMapUser.get(account))));
-
                     }
                 }
             } else {

+ 290 - 68
src/main/java/ieven/server/webapp/service/datastatic/DataStaticAnalysisDs.java

@@ -12,8 +12,7 @@ import org.bson.Document;
 import org.springframework.data.mongodb.core.MongoTemplate;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.CountDownLatch;
 
 @Slf4j
@@ -42,125 +41,348 @@ public class DataStaticAnalysisDs extends Ops implements Runnable {
         log.info("数据分析-对手透视");
         // 直接删除并创建表
         String newFileId = "";
-        String dateFileIdwld = getFileId("五联单-对手透视", modelId, mongoTemplate);
-        String dateFileIdfa = getFileId("反诈治安-对手透视", modelId, mongoTemplate);
-        String dateFileIdcft = getFileId("财付通-对手透视", modelId, mongoTemplate);
+        String dateFileIdwld = getFileId("五联单-账户明细", modelId, mongoTemplate);
+        String dateFileIdfa = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
+        String dateFileIdcft = getFileId("财付通-交易明细", modelId, mongoTemplate);
         // 插入记录用户后续查询明细
         if (StringUtils.isNotBlank(dateFileIdwld) || StringUtils.isNotBlank(dateFileIdfa) || StringUtils.isNotBlank(dateFileIdcft)) {
             newFileId = createLogicAndDeleteOld("数据分析-对手透视", modelId, headerProperties.getAntiSecurityTradeEndAnalysisOutput(), mongoTemplate, fileService);
         }
 
+        // 插入记录用户后续查询明细
         if (StringUtils.isNotBlank(dateFileIdcft)) {
             MongoCursor<Document> cursor = getCursor(dateFileIdcft, mongoTemplate);
             if (cursor.hasNext()) {
                 insertFromTo(dateFileIdcft, newFileId, modelId, mongoTemplate);
             }
-            List<DataMap> cftList = new ArrayList<>();
+            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();
-                    DataMap dataMap = new DataMap();
-                    dataMap = new DataMap();
-                    dataMap.put("fileId", newFileId);
-                    dataMap.put("交易对手账号", String.valueOf(origin.get("交易对手账号")));
-                    dataMap.put("交易对手户名", String.valueOf(origin.get("交易对手户名")));
-                    dataMap.put("交易总额",  origin.get("交易总额"));
-                    dataMap.put("交易主体收入金额",  origin.get("交易主体收入金额"));
-                    dataMap.put("交易主体支出金额",  origin.get("交易主体支出金额"));
-                    dataMap.put("交易主体收入笔数", origin.get("交易主体收入笔数"));
-                    dataMap.put("交易主体支出笔数",origin.get("交易主体支出笔数"));
-                    dataMap.put("总笔数", origin.get("总笔数"));
-                    dataMap.put("共同交易主体数", origin.get("共同交易主体数"));
-                    dataMap.put("共同交易主体账号汇总", origin.get("共同交易主体账号汇总"));
-                    cftList.add(dataMap);
-                    if (cftList.size() >= 1000) {
-                        saveLines(new ArrayList<>(cftList), mongoTemplate);
-                        cftList.clear();
+                    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("交易主体账号");
+                    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(cftList)) {
-                saveLines(cftList, mongoTemplate);
+            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());
+                        value.put("共同交易主体账号汇总", StringUtils.join(mainIds+"("+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);
             }
         }
 
         if (StringUtils.isNotBlank(dateFileIdfa)) {
+
             MongoCursor<Document> cursor = getCursor(dateFileIdfa, mongoTemplate);
             if (cursor.hasNext()) {
                 insertFromTo(dateFileIdfa, newFileId, modelId, mongoTemplate);
             }
-            List<DataMap> fzList = new ArrayList<>();
+            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();
-                    DataMap dataMap = new DataMap();
-                    dataMap = new DataMap();
-                    dataMap.put("fileId", newFileId);
-                    dataMap.put("交易对手账号", String.valueOf(origin.get("交易对手账号")));
-                    dataMap.put("交易对手户名", String.valueOf(origin.get("交易对手户名")));
-                    dataMap.put("交易总额", origin.get("交易总额"));
-                    dataMap.put("交易主体收入金额",  origin.get("交易主体收入金额"));
-                    dataMap.put("交易主体支出金额",  origin.get("交易主体支出金额"));
-                    dataMap.put("交易主体收入笔数",  origin.get("交易主体收入笔数"));
-                    dataMap.put("交易主体支出笔数",  origin.get("交易主体支出笔数"));
-                    dataMap.put("总笔数",  origin.get("总笔数"));
-                    dataMap.put("共同交易主体数",  origin.get("共同交易主体数"));
-                    dataMap.put("共同交易主体账号汇总",  origin.get("共同交易主体账号汇总"));
-                    fzList.add(dataMap);
-                    if (fzList.size() >= 1000) {
-                        saveLines(new ArrayList<>(fzList), mongoTemplate);
-                        fzList.clear();
+                    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 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(fzList)) {
-                saveLines(fzList, mongoTemplate);
+            if (CollectionUtils.isNotEmpty(idToData.values())) {
+                for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
+                    String key = entry.getKey();
+                    DataMap value = entry.getValue();
+                    Set<String> names = idToNames.get(key);
+                    if (CollectionUtils.isNotEmpty(names)) {
+                        value.put("交易对手户名", StringUtils.join(names, ";"));
+                    }
+                    Set<String> mainIds = idToMainIds.get(key);
+                    if (CollectionUtils.isNotEmpty(mainIds)) {
+                        value.put("共同交易主体数", mainIds.size());
+                        value.put("共同交易主体账号汇总", StringUtils.join(mainIds+"("+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);
             }
         }
 
         if (StringUtils.isNotBlank(dateFileIdwld)) {
+
             MongoCursor<Document> cursor = getCursor(dateFileIdwld, mongoTemplate);
             if (cursor.hasNext()) {
                 insertFromTo(dateFileIdwld, newFileId, modelId, mongoTemplate);
             }
-            List<DataMap> wldList = new ArrayList<>();
+            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();
-                    DataMap dataMap = new DataMap();
-                    dataMap = new DataMap();
-                    dataMap.put("fileId", newFileId);
-                    dataMap.put("对手支付宝用户ID", String.valueOf(origin.get("对手支付宝用户ID")));
-                    dataMap.put("对手支付宝户名", String.valueOf(origin.get("对手支付宝用户ID")));
-                    dataMap.put("交易总额",  origin.get("交易总额"));
-                    dataMap.put("主用户ID收入金额", origin.get("主用户ID收入金额"));
-                    dataMap.put("主用户ID支出金额",  origin.get("主用户ID支出金额"));
-                    dataMap.put("主用户ID收入笔数",  origin.get("主用户ID收入笔数"));
-                    dataMap.put("主用户ID支出笔数",  origin.get("主用户ID支出笔数"));
-                    dataMap.put("总笔数",  origin.get("总笔数"));
-                    dataMap.put("共同主用户ID数",  origin.get("共同主用户ID数"));
-                    dataMap.put("共同主用户ID汇总",  origin.get("共同主用户ID汇总"));
-                    wldList.add(dataMap);
-                    if (wldList.size() >= 1000) {
-                        saveLines(new ArrayList<>(wldList), mongoTemplate);
-                        wldList.clear();
+                    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("交易对手账号", 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 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);
+                        idToMainIds.put(alipayId, mainIds);
                     }
                 } catch (Exception exception) {
                     log.error(exception.getMessage(), exception);
                 }
-
             }
-            if (CollectionUtils.isNotEmpty(wldList)) {
-                saveLines(wldList, mongoTemplate);
+            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("共同主用户ID数", mainIds.size());
+                        value.put("共同主用户ID汇总", StringUtils.join(mainIds+"("+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);
             }
         }
 

+ 209 - 61
src/main/java/ieven/server/webapp/service/datastatic/DataStaticAnalysisMain.java

@@ -45,119 +45,267 @@ public class DataStaticAnalysisMain extends Ops implements Runnable {
         log.info("数据分析-账户透视");
         // 直接删除并创建表
         String newFileId = "";
-        String dateFileIdwld = getFileId("五联单-账户透视", modelId, mongoTemplate);
-        String dateFileIdfa = getFileId("反诈治安-账户透视", modelId, mongoTemplate);
+        String dateFileIdwld = getFileId("五联单-账户明细", modelId, mongoTemplate);
+        String dateFileIdfa = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
         String dateFileIdcft = getFileId("财付通-交易明细", modelId, mongoTemplate);
         // 插入记录用户后续查询明细
         if (StringUtils.isNotBlank(dateFileIdwld) || StringUtils.isNotBlank(dateFileIdfa) || StringUtils.isNotBlank(dateFileIdcft)) {
             newFileId = createLogicAndDeleteOld("数据分析-账户透视", modelId, headerProperties.getAntiSecurityTradeScaleAnalysisOutput(), mongoTemplate, fileService);
         }
-
+        // 插入记录用户后续查询明细
         if (StringUtils.isNotBlank(dateFileIdcft)) {
             MongoCursor<Document> cursor = getCursor(dateFileIdcft, mongoTemplate);
             if (cursor.hasNext()) {
                 insertFromTo(dateFileIdcft, newFileId, modelId, mongoTemplate);
             }
-            List<DataMap> cftList = new ArrayList<>();
+            Set<String> alipayIds = new HashSet<>();
+            Map<String, DataMap> idToData = new HashMap<>();
+            Map<String, Set<String>> idToNames = new HashMap<>();
             Document origin;
             while (cursor.hasNext()) {
                 try {
+
                     origin = cursor.next();
-                    DataMap dataMap = new DataMap();
-                    dataMap = new DataMap();
-                    dataMap.put("fileId", newFileId);
-                    dataMap.put("交易主体账号", String.valueOf(origin.get("交易主体账号")));
-                    dataMap.put("交易主体户名", String.valueOf(origin.get("交易主体户名")));
-                    dataMap.put("交易总额", origin.get("交易总额"));
-                    dataMap.put("收入金额", origin.get("收入金额"));
-                    dataMap.put("支出金额", origin.get("支出金额"));
-                    dataMap.put("收入笔数", origin.get("收入笔数"));
-                    dataMap.put("支出笔数", origin.get("支出笔数"));
-                    dataMap.put("总笔数", origin.get("总笔数"));
-                    cftList.add(dataMap);
-                    if (cftList.size() >= 1000) {
-                        saveLines(new ArrayList<>(cftList), mongoTemplate);
-                        cftList.clear();
+                    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);
+                        idToData.put(alipayId, dataMap);
+                    }
+                    String alipayUsername = origin.getString("交易主体户名");
+                    if (StringUtils.isNotBlank(alipayUsername)) {
+                        Set<String> namesSet;
+                        if (idToNames.containsKey(alipayId)) {
+                            namesSet = idToNames.get(alipayId);
+                        } else {
+                            namesSet = new HashSet<>();
+                            idToNames.put(alipayId, namesSet);
+                        }
+                        namesSet.add(alipayUsername);
+                    }
+                    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("交易总额");
+                    if (oMoney == null) {
+                        oMoney = new BigDecimal(0);
+                    }
+                    oMoney = oMoney.add(new BigDecimal(money));
+                    dataMap.put("交易总额", oMoney);
+                    int oCount = (int) dataMap.get("总笔数");
+                    oCount++;
+                    dataMap.put("总笔数", oCount);
                 } catch (Exception exception) {
                     log.error(exception.getMessage(), exception);
                 }
-
             }
-            if (CollectionUtils.isNotEmpty(cftList)) {
-                saveLines(cftList, mongoTemplate);
+            if (CollectionUtils.isNotEmpty(idToData.values())) {
+                for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
+                    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());
+                    String id = (String) dataMap.get("交易主体账号");
+                    Set<String> namesSet = idToNames.get(id);
+                    if (CollectionUtils.isNotEmpty(namesSet)) {
+                        dataMap.put("交易主体户名", StringUtils.join(namesSet, ";"));
+                    }
+                }
+                saveLines(idToData.values(), "交易总额", mongoTemplate);
             }
         }
 
         if (StringUtils.isNotBlank(dateFileIdfa)) {
             MongoCursor<Document> cursor = getCursor(dateFileIdfa, mongoTemplate);
             if (cursor.hasNext()) {
+                // 插入记录用户后续查询明细
                 insertFromTo(dateFileIdfa, newFileId, modelId, mongoTemplate);
             }
-            List<DataMap> fzList = new ArrayList<>();
+            Set<String> alipayIds = new HashSet<>();
+            Map<String, DataMap> idToData = new HashMap<>();
+            Map<String, Set<String>> idToNames = new HashMap<>();
             Document origin;
             while (cursor.hasNext()) {
+                origin = cursor.next();
+                String alipayId = origin.getString("交易主体账号");
+                DataMap dataMap;
                 try {
-                    origin = cursor.next();
-                    DataMap dataMap = new DataMap();
-                    dataMap = new DataMap();
-                    dataMap.put("fileId", newFileId);
-                    dataMap.put("交易主体账号", String.valueOf(origin.get("交易主体账号")));
-                    dataMap.put("交易主体户名", String.valueOf(origin.get("交易主体户名")));
-                    dataMap.put("交易总额", origin.get("交易总额"));
-                    dataMap.put("收入金额", origin.get("收入金额"));
-                    dataMap.put("支出金额", origin.get("支出金额"));
-                    dataMap.put("收入笔数", origin.get("收入笔数"));
-                    dataMap.put("支出笔数", origin.get("支出笔数"));
-                    dataMap.put("总笔数", origin.get("总笔数"));
-                    fzList.add(dataMap);
-                    if (fzList.size() >= 1000) {
-                        saveLines(new ArrayList<>(fzList), mongoTemplate);
-                        fzList.clear();
+                    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);
+                        idToData.put(alipayId, dataMap);
                     }
+                    String alipayUsername = origin.getString("交易主体户名");
+                    if (StringUtils.isNotBlank(alipayUsername)) {
+                        Set<String> namesSet;
+                        if (idToNames.containsKey(alipayId)) {
+                            namesSet = idToNames.get(alipayId);
+                        } else {
+                            namesSet = new HashSet<>();
+                            idToNames.put(alipayId, namesSet);
+                        }
+                        namesSet.add(alipayUsername);
+                    }
+                    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);
                 } catch (Exception exception) {
+                    idToData.remove(alipayId);
                     log.error(exception.getMessage(), exception);
                 }
-
             }
-            if (CollectionUtils.isNotEmpty(fzList)) {
-                saveLines(fzList, mongoTemplate);
+            if (CollectionUtils.isNotEmpty(idToData.values())) {
+                for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
+                    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());
+                    String id = (String) dataMap.get("交易主体账号");
+                    Set<String> namesSet = idToNames.get(id);
+                    if (CollectionUtils.isNotEmpty(namesSet)) {
+                        dataMap.put("交易主体户名", StringUtils.join(namesSet, ";"));
+                    }
+                }
+                saveLines(idToData.values(), "交易总额", mongoTemplate);
             }
         }
 
         if (StringUtils.isNotBlank(dateFileIdwld)) {
+
             MongoCursor<Document> cursor = getCursor(dateFileIdwld, mongoTemplate);
             if (cursor.hasNext()) {
                 insertFromTo(dateFileIdwld, newFileId, modelId, mongoTemplate);
             }
-            List<DataMap> wldList = new ArrayList<>();
+            Set<String> alipayIds = new HashSet<>();
+            Map<String, DataMap> idToData = new HashMap<>();
             Document origin;
             while (cursor.hasNext()) {
                 try {
+
                     origin = cursor.next();
-                    DataMap dataMap = new DataMap();
-                    dataMap = new DataMap();
-                    dataMap.put("fileId", newFileId);
-                    dataMap.put("交易主体账号", String.valueOf(origin.get("支付宝用户ID")));
-                    dataMap.put("交易主体户名", String.valueOf(origin.get("支付宝户名")));
-                    dataMap.put("交易总额", origin.get("交易总额"));
-                    dataMap.put("收入金额", origin.get("收入金额"));
-                    dataMap.put("支出金额", origin.get("支出金额"));
-                    dataMap.put("收入笔数", origin.get("收入笔数"));
-                    dataMap.put("支出笔数", origin.get("支出笔数"));
-                    dataMap.put("总笔数", origin.get("总笔数"));
-                    wldList.add(dataMap);
-                    if (wldList.size() >= 1000) {
-                        saveLines(new ArrayList<>(wldList), mongoTemplate);
-                        wldList.clear();
+                    String alipayId = origin.getString("支付宝用户ID");
+                    DataMap dataMap;
+                    if (alipayIds.contains(alipayId)) {
+                        dataMap = idToData.get(alipayId);
+                    } else {
+                        alipayIds.add(alipayId);
+                        String alipayUsername = origin.getString("支付宝户名");
+                        dataMap = new DataMap();
+                        dataMap.put("fileId", newFileId);
+                        dataMap.put("交易主体账号", alipayId);
+                        dataMap.put("交易主体户名", alipayUsername);
+                        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);
+                        idToData.put(alipayId, dataMap);
+                    }
+                    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);
                 } catch (Exception exception) {
                     log.error(exception.getMessage(), exception);
                 }
-
             }
-            if (CollectionUtils.isNotEmpty(wldList)) {
-                saveLines(wldList, mongoTemplate);
+            if (CollectionUtils.isNotEmpty(idToData.values())) {
+                for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
+                    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);
             }
         }
 

+ 42 - 33
src/main/java/ieven/server/webapp/service/tenpay/TenpayTrades.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;
@@ -16,6 +17,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
@@ -51,14 +53,16 @@ public class TenpayTrades extends Ops implements Runnable {
         String dateFileId = getFileId("财付通-订单明细2", modelId, mongoTemplate);
         String dateFileIdnew = getFileId("财付通-订单明细1", modelId, mongoTemplate);
         // 遍历登录日志全表
-        if(StringUtils.isNotBlank(dateFileId)||StringUtils.isNotBlank(dateFileIdnew)){
+        if (StringUtils.isNotBlank(dateFileId) || StringUtils.isNotBlank(dateFileIdnew)) {
             antiSecurityFileId = createLogicAndDeleteOld("财付通-交易明细", modelId, TenpayHeaders.getHeaders(2), mongoTemplate, fileService);
 
         }
         if (StringUtils.isNotBlank(dateFileId)) {
             MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+            String dateFileId2 = getFileId(TenpayHeaders.getGeneratedName(3), modelId, mongoTemplate);
             Document origin;
             List<DataMap> needToSave = new ArrayList<>(1000);
+            Map<String, List<DataMap>> userMap = new HashMap<>();
             while (cursor.hasNext()) {
                 origin = cursor.next();
                 DataMap dataMap = new DataMap();
@@ -78,11 +82,11 @@ public class TenpayTrades extends Ops implements Runnable {
                     }
                     dataMap.put("交易主体银行卡号", origin.getString("银行卡号"));
                     dataMap.put("交易主体银行名称", "");
-                    dataMap.put("交易主体户名", StringUtils.isBlank(accountToName.getOrDefault(origin.getString("发送方"), ""))||"null".equals(accountToName.getOrDefault(origin.getString("发送方"), ""))?"":accountToName.getOrDefault(origin.getString("发送方"), ""));
+                    dataMap.put("交易主体户名", StringUtils.isBlank(accountToName.getOrDefault(origin.getString("发送方"), "")) || "null".equals(accountToName.getOrDefault(origin.getString("发送方"), "")) ? "" : accountToName.getOrDefault(origin.getString("发送方"), ""));
                     dataMap.put("交易对手账号", origin.getString("接收方"));
                     dataMap.put("交易对手银行卡号", origin.getString("对手银行卡号"));
                     dataMap.put("交易对手银行名称", "");
-                    dataMap.put("交易对手户名", StringUtils.isBlank(accountToName.getOrDefault(origin.getString("接收方"), ""))||"null".equals(accountToName.getOrDefault(origin.getString("接收方"), ""))?"":accountToName.getOrDefault(origin.getString("接收方"), ""));
+                    dataMap.put("交易对手户名", StringUtils.isBlank(accountToName.getOrDefault(origin.getString("接收方"), "")) || "null".equals(accountToName.getOrDefault(origin.getString("接收方"), "")) ? "" : accountToName.getOrDefault(origin.getString("接收方"), ""));
                 }
                 if ("入".equals(flag)) {
                     dataMap.put("交易主体账号", StringUtils.trimToEmpty(origin.getString("接收方")));
@@ -91,11 +95,11 @@ public class TenpayTrades extends Ops implements Runnable {
                     }
                     dataMap.put("交易主体银行卡号", origin.getString("对手银行卡号"));
                     dataMap.put("交易主体银行名称", "");
-                    dataMap.put("交易主体户名", StringUtils.isBlank(accountToName.getOrDefault(origin.getString("接收方"), ""))||"null".equals(accountToName.getOrDefault(origin.getString("接收方"), ""))?"":accountToName.getOrDefault(origin.getString("接收方"), ""));
+                    dataMap.put("交易主体户名", StringUtils.isBlank(accountToName.getOrDefault(origin.getString("接收方"), "")) || "null".equals(accountToName.getOrDefault(origin.getString("接收方"), "")) ? "" : accountToName.getOrDefault(origin.getString("接收方"), ""));
                     dataMap.put("交易对手账号", StringUtils.trimToEmpty(origin.getString("发送方")));
                     dataMap.put("交易对手银行卡号", origin.getString("银行卡号"));
                     dataMap.put("交易对手银行名称", "");
-                    dataMap.put("交易对手户名", StringUtils.isBlank(accountToName.getOrDefault(origin.getString("发送方"), ""))||"null".equals(accountToName.getOrDefault(origin.getString("发送方"), ""))?"":accountToName.getOrDefault(origin.getString("发送方"), ""));
+                    dataMap.put("交易对手户名", StringUtils.isBlank(accountToName.getOrDefault(origin.getString("发送方"), "")) || "null".equals(accountToName.getOrDefault(origin.getString("发送方"), "")) ? "" : accountToName.getOrDefault(origin.getString("发送方"), ""));
                 }
                 dataMap.put("借贷类型", flag);
                 dataMap.put("交易类型", origin.getString("交易类型"));
@@ -116,33 +120,34 @@ public class TenpayTrades extends Ops implements Runnable {
                 dataMap.put("网银联单号2", origin.getString("网银联单号2"));
                 dataMap.put("交易主体第三方账号名", origin.getString("第三方账户名称"));
                 dataMap.put("对手第三方账号名", origin.getString("第三方账户名称"));
-                if ("".equals(dataMap.get("交易主体户名"))) {
+                if (PublicStatic.checkStr(String.valueOf(dataMap.get("交易主体户名")))) {
                     String account = (String) dataMap.getOrDefault("交易主体账号", "");
                     if (StringUtils.isBlank(account) || "-".equals(account)) {
                     } else {
                         String newName = accountToName.getOrDefault(account, "");
                         if (StringUtils.isNotBlank(newName)) {
                             dataMap.put("交易主体户名", newName);
-                        }else{
+                        } else {
                             //财付通-注册信息
                             //去用户注册中进行数据补全
-                            String dateFileId2 = getFileId(TenpayHeaders.getGeneratedName(3), modelId, mongoTemplate);
-                            List<DataMap> dataMaps = this.mongoTemplate.find((new Query(
-                                    Criteria.where("modelId")
-                                            .is(modelId)
-                                            .and("fileId")
-                                            .is(dateFileId2)
-                                            .and("账号")
-                                            .is(account)
-                                            .and("generated")
-                                            .is(Boolean.TRUE))), DataMap.class);
-                            if(CollectionUtils.isNotEmpty(dataMaps)){
+                            List<DataMap> dataMaps = userMap.get(account);
+                            if (CollectionUtils.isEmpty(dataMaps)) {
+                                dataMaps = this.mongoTemplate.find((new Query(
+                                        Criteria.where("modelId")
+                                                .is(modelId)
+                                                .and("fileId")
+                                                .is(dateFileId2)
+                                                .and("账号")
+                                                .is(account))), DataMap.class);
+                                userMap.put(account, dataMaps);
+                            }
+                            if (CollectionUtils.isNotEmpty(dataMaps)) {
                                 dataMap.put("交易主体户名", dataMaps.get(0).get("注册姓名"));
                             }
                         }
                     }
                 }
-                if ("".equals(dataMap.get("交易对手户名"))) {
+                if (PublicStatic.checkStr(String.valueOf(dataMap.get("交易对手户名")))) {
                     String account = (String) dataMap.getOrDefault("交易对手账号", "");
                     if (StringUtils.isBlank(account) || "-".equals(account)) {
                     } else {
@@ -184,6 +189,8 @@ public class TenpayTrades extends Ops implements Runnable {
             MongoCursor<Document> cursor = getCursor(dateFileIdnew, mongoTemplate);
             Document origin;
             List<DataMap> needToSave = new ArrayList<>(1000);
+            String dateFileId2 = getFileId(TenpayHeaders.getGeneratedName(3), modelId, mongoTemplate);
+            Map<String, List<DataMap>> userMap = new HashMap<>();
             while (cursor.hasNext()) {
                 origin = cursor.next();
                 DataMap dataMap = new DataMap();
@@ -205,7 +212,7 @@ public class TenpayTrades extends Ops implements Runnable {
                 dataMap.put("交易单号", lognumber.replace("[", "").replace("]", ""));
                 dataMap.put("借贷类型", origin.getString("借贷类型"));
 
-                dataMap.put("交易对手账号",dsUserId);
+                dataMap.put("交易对手账号", dsUserId);
                 dataMap.put("交易时间", origin.getString("交易时间"));
                 String string5 = origin.getString("交易金额(分)");
                 if (!NumberUtil.isNumber(string5)) {
@@ -225,27 +232,29 @@ public class TenpayTrades extends Ops implements Runnable {
                 dataMap.put("交易主体第三方账号名", origin.getString("第三方账户名称"));
                 dataMap.put("对手第三方账号名", "");
 
-                if ("".equals(dataMap.get("交易主体户名"))) {
+                if (PublicStatic.checkStr(String.valueOf(dataMap.get("交易主体户名")))) {
                     String account = (String) dataMap.getOrDefault("交易主体账号", "");
                     if (StringUtils.isBlank(account) || "-".equals(account)) {
                     } else {
                         String newName = accountToName.getOrDefault(account, "");
                         if (StringUtils.isNotBlank(newName)) {
                             dataMap.put("交易主体户名", newName);
-                        }else{
+                        } else {
                             //财付通-注册信息
                             //去用户注册中进行数据补全
-                            String dateFileId2 = getFileId(TenpayHeaders.getGeneratedName(3), modelId, mongoTemplate);
-                            List<DataMap> dataMaps = this.mongoTemplate.find((new Query(
-                                    Criteria.where("modelId")
-                                            .is(modelId)
-                                            .and("fileId")
-                                            .is(dateFileId2)
-                                            .and("账号")
-                                            .is(account)
-                                            .and("generated")
-                                            .is(Boolean.TRUE))), DataMap.class);
-                            if(CollectionUtils.isNotEmpty(dataMaps)){
+                            List<DataMap> dataMaps = userMap.get(account);
+                            if (CollectionUtils.isEmpty(dataMaps)) {
+                                dataMaps = this.mongoTemplate.find((new Query(
+                                        Criteria.where("modelId")
+                                                .is(modelId)
+                                                .and("fileId")
+                                                .is(dateFileId2)
+                                                .and("账号")
+                                                .is(account))), DataMap.class);
+                                userMap.put(account, dataMaps);
+                            }
+
+                            if (CollectionUtils.isNotEmpty(dataMaps)) {
                                 dataMap.put("交易主体户名", dataMaps.get(0).get("注册姓名"));
                             }
                         }

+ 7 - 7
src/main/java/ieven/server/webapp/service/tenpay/TenpayTradesScaleAnalysis.java

@@ -44,18 +44,18 @@ public class TenpayTradesScaleAnalysis extends Ops implements Runnable {
     log.info("财付通-账户透视开始");
     // 直接删除并创建表
     String newFileId = "";
-      String dateFileId = getFileId("财付通-交易明细", modelId, mongoTemplate);
+    String dateFileId = getFileId("财付通-交易明细", modelId, mongoTemplate);
     // 插入记录用户后续查询明细
     if (StringUtils.isNotBlank(dateFileId)) {
       MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
       if (cursor.hasNext()) {
         newFileId =
-            createLogicAndDeleteOld(
-                "财付通-账户透视",
-                modelId,
-                headerProperties.getAntiSecurityTradeScaleAnalysisOutput(),
-                mongoTemplate,
-                fileService);
+                createLogicAndDeleteOld(
+                        "财付通-账户透视",
+                        modelId,
+                        headerProperties.getAntiSecurityTradeScaleAnalysisOutput(),
+                        mongoTemplate,
+                        fileService);
         insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
       }
       Set<String> alipayIds = new HashSet<>();

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

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