TransferAnalysis.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package ieven.server.webapp.service.alipay;
  2. import com.mongodb.client.MongoCursor;
  3. import ieven.server.webapp.domain.alipay.HeaderProperties;
  4. import ieven.server.webapp.domain.data.DataMap;
  5. import ieven.server.webapp.domain.data.Fields;
  6. import ieven.server.webapp.domain.file.FileService;
  7. import ieven.server.webapp.service.Ops;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.apache.commons.collections4.CollectionUtils;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.bson.Document;
  12. import org.springframework.data.mongodb.core.MongoTemplate;
  13. import java.math.BigDecimal;
  14. import java.util.*;
  15. import java.util.concurrent.CountDownLatch;
  16. @Slf4j
  17. public class TransferAnalysis extends Ops implements Runnable {
  18. private HeaderProperties headerProperties;
  19. List<Fields> originFields;
  20. String modelId;
  21. MongoTemplate mongoTemplate;
  22. FileService fileService;
  23. CountDownLatch latch;
  24. public TransferAnalysis(
  25. HeaderProperties headerProperties,
  26. List<Fields> originFields,
  27. String modelId,
  28. MongoTemplate mongoTemplate,
  29. FileService fileService,
  30. CountDownLatch latch2) {
  31. this.headerProperties = headerProperties;
  32. this.originFields = originFields;
  33. this.modelId = modelId;
  34. this.mongoTemplate = mongoTemplate;
  35. this.fileService = fileService;
  36. this.latch = latch2;
  37. }
  38. @Override
  39. public void run() {
  40. // 直接删除并创建表
  41. String newFileId = "";
  42. String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
  43. // 遍历账户明细全表
  44. if (StringUtils.isNotBlank(dateFileId)) {
  45. MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
  46. if (cursor.hasNext()) {
  47. newFileId =
  48. createLogicAndDeleteOld(
  49. "五联单-转账分析",
  50. modelId,
  51. headerProperties.getTransferAnalysisOutput(),
  52. mongoTemplate,
  53. fileService);
  54. insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
  55. }
  56. Set<String> alipayIds = new HashSet<>();
  57. Map<String, DataMap> idToData = new HashMap<>();
  58. Document origin;
  59. while (cursor.hasNext()) {
  60. try {
  61. origin = cursor.next();
  62. String transferFlag = origin.getString("消费名称");
  63. if (!transferFlag.equals("转账")) {
  64. continue;
  65. }
  66. String alipayId = origin.getString("支付宝用户ID");
  67. DataMap dataMap;
  68. if (alipayIds.contains(alipayId)) {
  69. dataMap = idToData.get(alipayId);
  70. } else {
  71. alipayIds.add(alipayId);
  72. String alipayUsername = origin.getString("支付宝户名");
  73. dataMap = new DataMap();
  74. dataMap.put("fileId", newFileId);
  75. dataMap.put("支付宝用户ID", alipayId);
  76. dataMap.put("支付宝户名", alipayUsername);
  77. dataMap.put("转账总额", new BigDecimal("0.00"));
  78. dataMap.put("转账收入", new BigDecimal("0.00"));
  79. dataMap.put("转账支出", new BigDecimal("0.00"));
  80. dataMap.put("转收笔数", 0);
  81. dataMap.put("转支笔数", 0);
  82. dataMap.put("总笔数", 0);
  83. idToData.put(alipayId, dataMap);
  84. }
  85. String flag = "收/支";
  86. String flagValue = origin.getString(flag);
  87. String money = (String) origin.get("金额(元)");
  88. if ("收入".equals(flagValue)) {
  89. BigDecimal oMoney = (BigDecimal) dataMap.get("转账收入");
  90. oMoney = oMoney.add(new BigDecimal(money));
  91. dataMap.put("转账收入", oMoney);
  92. int oCount = (int) dataMap.get("转收笔数");
  93. oCount++;
  94. dataMap.put("转收笔数", oCount);
  95. } else if ("支出".equals(flagValue)) {
  96. BigDecimal oMoney = (BigDecimal) dataMap.get("转账支出");
  97. oMoney = oMoney.add(new BigDecimal(money));
  98. dataMap.put("转账支出", oMoney);
  99. int oCount = (int) dataMap.get("转支笔数");
  100. oCount++;
  101. dataMap.put("转支笔数", oCount);
  102. }
  103. BigDecimal oMoney = (BigDecimal) dataMap.get("转账总额");
  104. oMoney = oMoney.add(new BigDecimal(money));
  105. dataMap.put("转账总额", oMoney);
  106. int oCount = (int) dataMap.get("总笔数");
  107. oCount++;
  108. dataMap.put("总笔数", oCount);
  109. } catch (Exception exception) {
  110. log.error(exception.getMessage(), exception);
  111. }
  112. }
  113. if (CollectionUtils.isNotEmpty(idToData.values())) {
  114. for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
  115. DataMap dataMap = entry.getValue();
  116. BigDecimal money1 = (BigDecimal) dataMap.get("转账总额");
  117. dataMap.put("转账总额", money1.doubleValue());
  118. BigDecimal money2 = (BigDecimal) dataMap.get("转账收入");
  119. dataMap.put("转账收入", money2.doubleValue());
  120. BigDecimal money3 = (BigDecimal) dataMap.get("转账支出");
  121. dataMap.put("转账支出", money3.doubleValue());
  122. }
  123. saveLines(idToData.values(), "转账总额", mongoTemplate);
  124. }
  125. }
  126. latch.countDown();
  127. }
  128. }