Selaa lähdekoodia

主体信息模型

hankunkun 11 kuukautta sitten
vanhempi
sitoutus
198d450a4a

+ 1 - 1
src/main/java/ieven/server/webapp/domain/file/FileService.java

@@ -70,7 +70,7 @@ public class FileService {
     };
     String[] order3 = {"财付通-注册信息", "财付通-订单明细1","财付通-订单明细2", "财付通-交易明细", "财付通-账户透视", "财付通-对手透视", "财付通-手机明细"};
 
-    String[] order4 = {"数据分析-主体信息汇总", "数据分析-共同关系网络"};
+    String[] order4 = {"数据分析-主体信息汇总","数据分析-账户透视","数据分析-对手透视", "数据分析-共同关系网络"};
     @Autowired
     private GridFsTemplate gridFsTemplate;
     @Autowired

+ 69 - 67
src/main/java/ieven/server/webapp/service/FieldsService.java

@@ -15,81 +15,83 @@ import java.util.List;
 
 @Service
 public class FieldsService extends Ops {
-  @Autowired MongoTemplate mongoTemplate;
+    @Autowired
+    MongoTemplate mongoTemplate;
 
-  @Autowired private HeaderProperties headerProperties;
+    @Autowired
+    private HeaderProperties headerProperties;
 
-  /**
-   * 校验上传的文件格式是否符合业务类型规则
-   *
-   * @param originFields
-   */
-  public void checkAllFields(List<Fields> originFields) {
-    // 五联单-注册信息
-    List<Fields> fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_REGISTER);
-    this.updateLogicalFile(fields, "五联单-注册信息");
+    /**
+     * 校验上传的文件格式是否符合业务类型规则
+     *
+     * @param originFields
+     */
+    public void checkAllFields(List<Fields> originFields) {
+        // 五联单-注册信息
+        List<Fields> fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_REGISTER);
+        this.updateLogicalFile(fields, "五联单-注册信息");
 
-    fields = this.checkFields(originFields, 12);
-    this.updateLogicalFile(fields, "五联单-注册信息");
+        fields = this.checkFields(originFields, 12);
+        this.updateLogicalFile(fields, "五联单-注册信息");
 
-    fields = this.checkFields(originFields, 13);
-    this.updateLogicalFile(fields, "五联单-注册信息");
+        fields = this.checkFields(originFields, 13);
+        this.updateLogicalFile(fields, "五联单-注册信息");
 
-      fields = this.checkFields(originFields, 14);
-      this.updateLogicalFile(fields, "五联单-注册信息");
+        fields = this.checkFields(originFields, 14);
+        this.updateLogicalFile(fields, "五联单-注册信息");
 
-    // 五联单-登录日志
-    fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_LOGIN);
-    this.updateLogicalFile(fields, "五联单-登录日志");
-    // 五联单-交易记录
-    fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRADE);
-    this.updateLogicalFile(fields, "五联单-交易记录");
-    // 五联单-账户明细
-    fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_ACCOUNT);
-    this.updateLogicalFile(fields, "五联单-账户明细");
-    // 五联单-转账明细  ALIPAY_ORIGIN_TRANSFER
-    fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRANSFER);
-    this.updateLogicalFile(fields, "五联单-转账明细 ");
-    // 反诈平台订单数据
-    fields = matchHeaders(originFields, headerProperties.getAntiCheatOrigin());
-    this.updateLogicalFile(fields, "反诈平台订单数据");
-    // 治安平台订单数据
-    fields = matchHeaders(originFields, headerProperties.getSecurityOrigin());
-    this.updateLogicalFile(fields, "治安平台订单数据");
-    // 财付通 开户信息
-    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(3));
-    this.updateLogicalFile(fields, "财付通-注册信息");
-    // 财付通-订单明细
-    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(6));
-    this.updateLogicalFile(fields, "财付通-订单明细2");
-    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(5));
-    this.updateLogicalFile(fields, "财付通-订单明细2");
-    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(1));
-    this.updateLogicalFile(fields, "财付通-订单明细2");
-    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(2));
-    this.updateLogicalFile(fields, "财付通-订单明细2");
-    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(7));
-    this.updateLogicalFile(fields, "财付通-订单明细1");
-    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(8));
-    this.updateLogicalFile(fields, "财付通-订单明细1");
-    // 财付通-手机明细
-    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(4));
-    this.updateLogicalFile(fields, "财付通-手机明细");
+        // 五联单-登录日志
+        fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_LOGIN);
+        this.updateLogicalFile(fields, "五联单-登录日志");
+        // 五联单-交易记录
+        fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRADE);
+        this.updateLogicalFile(fields, "五联单-交易记录");
+        // 五联单-账户明细
+        fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_ACCOUNT);
+        this.updateLogicalFile(fields, "五联单-账户明细");
+        // 五联单-转账明细  ALIPAY_ORIGIN_TRANSFER
+        fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRANSFER);
+        this.updateLogicalFile(fields, "五联单-转账明细 ");
+        // 反诈平台订单数据
+        fields = matchHeaders(originFields, headerProperties.getAntiCheatOrigin());
+        this.updateLogicalFile(fields, "反诈平台订单数据");
+        // 治安平台订单数据
+        fields = matchHeaders(originFields, headerProperties.getSecurityOrigin());
+        this.updateLogicalFile(fields, "治安平台订单数据");
+        // 财付通 开户信息
+        fields = matchHeaders(originFields, TenpayHeaders.getHeaders(3));
+        this.updateLogicalFile(fields, "财付通-注册信息");
+        // 财付通-订单明细
+        fields = matchHeaders(originFields, TenpayHeaders.getHeaders(6));
+        this.updateLogicalFile(fields, "财付通-订单明细2");
+        fields = matchHeaders(originFields, TenpayHeaders.getHeaders(5));
+        this.updateLogicalFile(fields, "财付通-订单明细2");
+        fields = matchHeaders(originFields, TenpayHeaders.getHeaders(1));
+        this.updateLogicalFile(fields, "财付通-订单明细2");
+        fields = matchHeaders(originFields, TenpayHeaders.getHeaders(2));
+        this.updateLogicalFile(fields, "财付通-订单明细2");
+        fields = matchHeaders(originFields, TenpayHeaders.getHeaders(7));
+        this.updateLogicalFile(fields, "财付通-订单明细1");
+        fields = matchHeaders(originFields, TenpayHeaders.getHeaders(8));
+        this.updateLogicalFile(fields, "财付通-订单明细1");
+        // 财付通-手机明细
+        fields = matchHeaders(originFields, TenpayHeaders.getHeaders(4));
+        this.updateLogicalFile(fields, "财付通-手机明细");
 
-      fields = matchHeaders(originFields, headerProperties.getEconomicOrder());
-      this.updateLogicalFile(fields, "经侦数据-订单明细");
+        fields = matchHeaders(originFields, headerProperties.getEconomicOrder());
+        this.updateLogicalFile(fields, "经侦数据-订单明细");
 
-  }
+    }
 
-  void updateLogicalFile(List<Fields> fields, String matchType) {
-    if (fields.size() > 0) {
-      for (Fields field : fields) {
-        Query query = new Query();
-        query.addCriteria(Criteria.where("_id").is(field.getFileId()));
-        Update update = new Update();
-        update.set("matchType", matchType);
-        this.mongoTemplate.updateFirst(query, update, "logical_file");
-      }
+    void updateLogicalFile(List<Fields> fields, String matchType) {
+        if (fields.size() > 0) {
+            for (Fields field : fields) {
+                Query query = new Query();
+                query.addCriteria(Criteria.where("_id").is(field.getFileId()));
+                Update update = new Update();
+                update.set("matchType", matchType);
+                this.mongoTemplate.updateFirst(query, update, "logical_file");
+            }
+        }
     }
-  }
 }

+ 16 - 0
src/main/java/ieven/server/webapp/service/alipay/AlipayService.java

@@ -9,6 +9,8 @@ import ieven.server.webapp.domain.file.LogicalFile;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
 import ieven.server.webapp.service.FieldsService;
 import ieven.server.webapp.service.datastatic.DataStaticAnalysis;
+import ieven.server.webapp.service.datastatic.DataStaticAnalysisDs;
+import ieven.server.webapp.service.datastatic.DataStaticAnalysisMain;
 import ieven.server.webapp.service.datastatic.DataStaticAnalysisTotal;
 import ieven.server.webapp.service.tenpay.*;
 import ieven.server.webapp.util.DataUtils;
@@ -208,6 +210,20 @@ public class AlipayService {
                 new DataStaticAnalysisTotal(
                         headerProperties, modelId, mongoTemplate, fileService, latch11));
         latch11.await();
+
+        //数据统计-账户透视
+        CountDownLatch latch12 = new CountDownLatch(1);
+        exec.execute(
+                new DataStaticAnalysisMain(
+                        headerProperties, modelId, mongoTemplate, fileService, latch12));
+        latch12.await();
+
+        //数据统计-对手透视
+        CountDownLatch latch13 = new CountDownLatch(1);
+        exec.execute(
+                new DataStaticAnalysisDs(
+                        headerProperties, modelId, mongoTemplate, fileService, latch13));
+        latch13.await();
         reorder(modelId);
         log.info("执行完毕");
         return Mapped.OK();

+ 170 - 0
src/main/java/ieven/server/webapp/service/datastatic/DataStaticAnalysisDs.java

@@ -0,0 +1,170 @@
+package ieven.server.webapp.service.datastatic;
+
+import com.mongodb.client.MongoCursor;
+import ieven.server.webapp.domain.alipay.HeaderProperties;
+import ieven.server.webapp.domain.data.DataMap;
+import ieven.server.webapp.domain.file.FileService;
+import ieven.server.webapp.service.Ops;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+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.concurrent.CountDownLatch;
+
+@Slf4j
+public class DataStaticAnalysisDs extends Ops implements Runnable {
+    private HeaderProperties headerProperties;
+    String modelId;
+    MongoTemplate mongoTemplate;
+    FileService fileService;
+    CountDownLatch latch;
+
+    public DataStaticAnalysisDs(
+            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 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<>();
+            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("交易总额",  dataMap.get("交易总额"));
+                    dataMap.put("交易主体收入金额",  dataMap.get("交易主体收入金额"));
+                    dataMap.put("交易主体支出金额",  dataMap.get("交易主体支出金额"));
+                    dataMap.put("交易主体收入笔数", dataMap.get("交易主体收入笔数"));
+                    dataMap.put("交易主体支出笔数",dataMap.get("交易主体支出笔数"));
+                    dataMap.put("总笔数", dataMap.get("总笔数"));
+                    dataMap.put("共同交易主体数", dataMap.get("共同交易主体数"));
+                    dataMap.put("共同交易主体账号汇总", dataMap.get("共同交易主体账号汇总"));
+                    cftList.add(dataMap);
+                    if (cftList.size() >= 1000) {
+                        saveLines(new ArrayList<>(cftList), mongoTemplate);
+                        cftList.clear();
+                    }
+                } catch (Exception exception) {
+                    log.error(exception.getMessage(), exception);
+                }
+
+            }
+            if (CollectionUtils.isNotEmpty(cftList)) {
+                saveLines(cftList, mongoTemplate);
+            }
+        }
+
+        if (StringUtils.isNotBlank(dateFileIdfa)) {
+            MongoCursor<Document> cursor = getCursor(dateFileIdfa, mongoTemplate);
+            if (cursor.hasNext()) {
+                insertFromTo(dateFileIdfa, newFileId, modelId, mongoTemplate);
+            }
+            List<DataMap> fzList = new ArrayList<>();
+            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("交易总额", dataMap.get("交易总额"));
+                    dataMap.put("交易主体收入金额",  dataMap.get("交易主体收入金额"));
+                    dataMap.put("交易主体支出金额",  dataMap.get("交易主体支出金额"));
+                    dataMap.put("交易主体收入笔数",  dataMap.get("交易主体收入笔数"));
+                    dataMap.put("交易主体支出笔数",  dataMap.get("交易主体支出笔数"));
+                    dataMap.put("总笔数",  dataMap.get("总笔数"));
+                    dataMap.put("共同交易主体数",  dataMap.get("共同交易主体数"));
+                    dataMap.put("共同交易主体账号汇总",  dataMap.get("共同交易主体账号汇总"));
+                    fzList.add(dataMap);
+                    if (fzList.size() >= 1000) {
+                        saveLines(new ArrayList<>(fzList), mongoTemplate);
+                        fzList.clear();
+                    }
+                } catch (Exception exception) {
+                    log.error(exception.getMessage(), exception);
+                }
+
+            }
+            if (CollectionUtils.isNotEmpty(fzList)) {
+                saveLines(fzList, mongoTemplate);
+            }
+        }
+
+        if (StringUtils.isNotBlank(dateFileIdwld)) {
+            MongoCursor<Document> cursor = getCursor(dateFileIdwld, mongoTemplate);
+            if (cursor.hasNext()) {
+                insertFromTo(dateFileIdwld, newFileId, modelId, mongoTemplate);
+            }
+            List<DataMap> wldList = new ArrayList<>();
+            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("交易总额",  dataMap.get("交易总额"));
+                    dataMap.put("主用户ID收入金额", dataMap.get("主用户ID收入金额"));
+                    dataMap.put("主用户ID支出金额",  dataMap.get("主用户ID支出金额"));
+                    dataMap.put("主用户ID收入笔数",  dataMap.get("主用户ID收入笔数"));
+                    dataMap.put("主用户ID支出笔数",  dataMap.get("主用户ID支出笔数"));
+                    dataMap.put("总笔数",  dataMap.get("总笔数"));
+                    dataMap.put("共同主用户ID数",  dataMap.get("共同主用户ID数"));
+                    dataMap.put("共同主用户ID汇总",  dataMap.get("共同主用户ID汇总"));
+                    wldList.add(dataMap);
+                    if (wldList.size() >= 1000) {
+                        saveLines(new ArrayList<>(wldList), mongoTemplate);
+                        wldList.clear();
+                    }
+                } catch (Exception exception) {
+                    log.error(exception.getMessage(), exception);
+                }
+
+            }
+            if (CollectionUtils.isNotEmpty(wldList)) {
+                saveLines(wldList, mongoTemplate);
+            }
+        }
+
+        latch.countDown();
+        log.info("数据分析-对手透视");
+    }
+}

+ 167 - 0
src/main/java/ieven/server/webapp/service/datastatic/DataStaticAnalysisMain.java

@@ -0,0 +1,167 @@
+package ieven.server.webapp.service.datastatic;
+
+import com.mongodb.client.MongoCursor;
+import ieven.server.webapp.domain.alipay.AlipayHeaders;
+import ieven.server.webapp.domain.alipay.HeaderProperties;
+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 lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.bson.Document;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.CountDownLatch;
+
+@Slf4j
+public class DataStaticAnalysisMain extends Ops implements Runnable {
+    private HeaderProperties headerProperties;
+    String modelId;
+    MongoTemplate mongoTemplate;
+    FileService fileService;
+    CountDownLatch latch;
+
+    public DataStaticAnalysisMain(
+            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 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<>();
+            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("交易总额", dataMap.get("交易总额"));
+                    dataMap.put("收入金额", dataMap.get("收入金额"));
+                    dataMap.put("支出金额", dataMap.get("支出金额"));
+                    dataMap.put("收入笔数", dataMap.get("收入笔数"));
+                    dataMap.put("支出笔数", dataMap.get("支出笔数"));
+                    dataMap.put("总笔数", dataMap.get("总笔数"));
+                    cftList.add(dataMap);
+                    if (cftList.size() >= 1000) {
+                        saveLines(new ArrayList<>(cftList), mongoTemplate);
+                        cftList.clear();
+                    }
+                } catch (Exception exception) {
+                    log.error(exception.getMessage(), exception);
+                }
+
+            }
+            if (CollectionUtils.isNotEmpty(cftList)) {
+                saveLines(cftList, mongoTemplate);
+            }
+        }
+
+        if (StringUtils.isNotBlank(dateFileIdfa)) {
+            MongoCursor<Document> cursor = getCursor(dateFileIdfa, mongoTemplate);
+            if (cursor.hasNext()) {
+                insertFromTo(dateFileIdfa, newFileId, modelId, mongoTemplate);
+            }
+            List<DataMap> fzList = new ArrayList<>();
+            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("交易总额", dataMap.get("交易总额"));
+                    dataMap.put("收入金额", dataMap.get("收入金额"));
+                    dataMap.put("支出金额", dataMap.get("支出金额"));
+                    dataMap.put("收入笔数", dataMap.get("收入笔数"));
+                    dataMap.put("支出笔数", dataMap.get("支出笔数"));
+                    dataMap.put("总笔数", dataMap.get("总笔数"));
+                    fzList.add(dataMap);
+                    if (fzList.size() >= 1000) {
+                        saveLines(new ArrayList<>(fzList), mongoTemplate);
+                        fzList.clear();
+                    }
+                } catch (Exception exception) {
+                    log.error(exception.getMessage(), exception);
+                }
+
+            }
+            if (CollectionUtils.isNotEmpty(fzList)) {
+                saveLines(fzList, mongoTemplate);
+            }
+        }
+
+        if (StringUtils.isNotBlank(dateFileIdwld)) {
+            MongoCursor<Document> cursor = getCursor(dateFileIdwld, mongoTemplate);
+            if (cursor.hasNext()) {
+                insertFromTo(dateFileIdwld, newFileId, modelId, mongoTemplate);
+            }
+            List<DataMap> wldList = new ArrayList<>();
+            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("交易总额", dataMap.get("交易总额"));
+                    dataMap.put("收入金额", dataMap.get("收入金额"));
+                    dataMap.put("支出金额", dataMap.get("支出金额"));
+                    dataMap.put("收入笔数", dataMap.get("收入笔数"));
+                    dataMap.put("支出笔数", dataMap.get("支出笔数"));
+                    dataMap.put("总笔数", dataMap.get("总笔数"));
+                    wldList.add(dataMap);
+                    if (wldList.size() >= 1000) {
+                        saveLines(new ArrayList<>(wldList), mongoTemplate);
+                        wldList.clear();
+                    }
+                } catch (Exception exception) {
+                    log.error(exception.getMessage(), exception);
+                }
+
+            }
+            if (CollectionUtils.isNotEmpty(wldList)) {
+                saveLines(wldList, mongoTemplate);
+            }
+        }
+
+        latch.countDown();
+        log.info("数据分析-账户透视");
+    }
+}