TenpayTradesEndAnalysis.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package ieven.server.webapp.service.tenpay;
  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.file.FileService;
  6. import ieven.server.webapp.service.Ops;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.apache.commons.collections4.CollectionUtils;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.bson.Document;
  11. import org.springframework.data.mongodb.core.MongoTemplate;
  12. import java.math.BigDecimal;
  13. import java.util.HashMap;
  14. import java.util.HashSet;
  15. import java.util.Map;
  16. import java.util.Set;
  17. import java.util.concurrent.CountDownLatch;
  18. @Slf4j
  19. public class TenpayTradesEndAnalysis extends Ops implements Runnable {
  20. private HeaderProperties headerProperties;
  21. String modelId;
  22. MongoTemplate mongoTemplate;
  23. FileService fileService;
  24. CountDownLatch latch;
  25. public TenpayTradesEndAnalysis(
  26. HeaderProperties headerProperties,
  27. String modelId,
  28. MongoTemplate mongoTemplate,
  29. FileService fileService,
  30. CountDownLatch latch) {
  31. this.headerProperties = headerProperties;
  32. this.modelId = modelId;
  33. this.mongoTemplate = mongoTemplate;
  34. this.fileService = fileService;
  35. this.latch = latch;
  36. }
  37. @Override
  38. public void run() {
  39. log.info("财付通-对手透视开始");
  40. // 直接删除并创建表
  41. String newFileId = "";
  42. String dateFileId = getFileId("财付通-交易明细", modelId, mongoTemplate);
  43. // 插入记录用户后续查询明细
  44. MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
  45. if (cursor.hasNext() && StringUtils.isNotBlank(dateFileId)) {
  46. newFileId =
  47. createLogicAndDeleteOld(
  48. "财付通-对手透视",
  49. modelId,
  50. headerProperties.getAntiSecurityTradeEndAnalysisOutput(),
  51. mongoTemplate,
  52. fileService);
  53. insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
  54. }
  55. Set<String> alipayIds = new HashSet<>();
  56. Map<String, DataMap> idToData = new HashMap<>();
  57. Map<String, Set<String>> idToMainIds = new HashMap<>();
  58. Map<String, Set<String>> idToNames = new HashMap<>();
  59. Document origin;
  60. while (cursor.hasNext()) {
  61. origin = cursor.next();
  62. String alipayId = origin.getString("交易对手账号");
  63. DataMap dataMap;
  64. if (alipayIds.contains(alipayId)) {
  65. dataMap = idToData.get(alipayId);
  66. } else {
  67. alipayIds.add(alipayId);
  68. dataMap = new DataMap();
  69. dataMap.put("fileId", newFileId);
  70. dataMap.put("交易对手账号", alipayId);
  71. dataMap.put("交易对手户名", "");
  72. dataMap.put("交易总额", new BigDecimal("0.00"));
  73. dataMap.put("交易主体收入金额", new BigDecimal("0.00"));
  74. dataMap.put("交易主体支出金额", new BigDecimal("0.00"));
  75. dataMap.put("交易主体收入笔数", 0);
  76. dataMap.put("交易主体支出笔数", 0);
  77. dataMap.put("总笔数", 0);
  78. dataMap.put("共同交易主体数", 0);
  79. dataMap.put("共同交易主体账号汇总", "");
  80. idToData.put(alipayId, dataMap);
  81. }
  82. String alipayUsername = origin.getString("交易对手户名");
  83. if (StringUtils.isNotBlank(alipayUsername)
  84. && !"_".equals(alipayUsername)
  85. && !"-".equals(alipayUsername)) {
  86. if (idToNames.containsKey(alipayId)) {
  87. Set<String> names = idToNames.get(alipayId);
  88. names.add(alipayUsername);
  89. } else {
  90. Set<String> names = new HashSet<>();
  91. names.add(alipayUsername);
  92. idToNames.put(alipayId, names);
  93. }
  94. }
  95. String flag = "借贷类型";
  96. String flagValue = origin.getString(flag);
  97. String money = (String) origin.get("交易金额(元)");
  98. if (StringUtils.isBlank(money)) {
  99. money = "0";
  100. }
  101. if ("入".equals(flagValue)) {
  102. BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体收入金额");
  103. oMoney = oMoney.add(new BigDecimal(money));
  104. dataMap.put("交易主体收入金额", oMoney);
  105. int oCount = (int) dataMap.get("交易主体收入笔数");
  106. oCount++;
  107. dataMap.put("交易主体收入笔数", oCount);
  108. } else if ("出".equals(flagValue)) {
  109. BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体支出金额");
  110. oMoney = oMoney.add(new BigDecimal(money));
  111. dataMap.put("交易主体支出金额", oMoney);
  112. int oCount = (int) dataMap.get("交易主体支出笔数");
  113. oCount++;
  114. dataMap.put("交易主体支出笔数", oCount);
  115. }
  116. BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
  117. oMoney = oMoney.add(new BigDecimal(money));
  118. dataMap.put("交易总额", oMoney);
  119. int oCount = (int) dataMap.get("总笔数");
  120. oCount++;
  121. dataMap.put("总笔数", oCount);
  122. String mainId = (String) origin.get("交易主体账号");
  123. if (idToMainIds.containsKey(alipayId)) {
  124. Set<String> mainIds = idToMainIds.get(alipayId);
  125. mainIds.add(mainId);
  126. } else {
  127. Set<String> mainIds = new HashSet<>();
  128. mainIds.add(mainId);
  129. idToMainIds.put(alipayId, mainIds);
  130. }
  131. }
  132. if (CollectionUtils.isNotEmpty(idToData.values())) {
  133. for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
  134. String key = entry.getKey();
  135. DataMap value = entry.getValue();
  136. Set<String> mainIds = idToMainIds.get(key);
  137. if (CollectionUtils.isNotEmpty(mainIds)) {
  138. value.put("共同交易主体数", mainIds.size());
  139. value.put("共同交易主体账号汇总", StringUtils.join(mainIds, ";"));
  140. }
  141. Set<String> names = idToNames.get(key);
  142. if (CollectionUtils.isNotEmpty(names)) {
  143. value.put("交易对手户名", StringUtils.join(names, ";"));
  144. }
  145. DataMap dataMap = entry.getValue();
  146. BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
  147. dataMap.put("交易总额", money1.doubleValue());
  148. BigDecimal money2 = (BigDecimal) dataMap.get("交易主体收入金额");
  149. dataMap.put("交易主体收入金额", money2.doubleValue());
  150. BigDecimal money3 = (BigDecimal) dataMap.get("交易主体支出金额");
  151. dataMap.put("交易主体支出金额", money3.doubleValue());
  152. }
  153. saveLines(idToData.values(), "交易总额", mongoTemplate);
  154. }
  155. latch.countDown();
  156. log.info("财付通-对手透视结束");
  157. }
  158. }