ScaleAnalysis.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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 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.*;
  14. import java.util.concurrent.CountDownLatch;
  15. public class ScaleAnalysis extends Ops implements Runnable {
  16. private HeaderProperties headerProperties;
  17. List<Fields> originFields;
  18. String modelId;
  19. MongoTemplate mongoTemplate;
  20. FileService fileService;
  21. CountDownLatch latch;
  22. public ScaleAnalysis(
  23. HeaderProperties headerProperties,
  24. List<Fields> originFields,
  25. String modelId,
  26. MongoTemplate mongoTemplate,
  27. FileService fileService,
  28. CountDownLatch latch) {
  29. this.headerProperties = headerProperties;
  30. this.originFields = originFields;
  31. this.modelId = modelId;
  32. this.mongoTemplate = mongoTemplate;
  33. this.fileService = fileService;
  34. this.latch = latch;
  35. }
  36. @Override
  37. public void run() {
  38. // 直接删除并创建表
  39. String newFileId = "";
  40. String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
  41. // 遍历账户明细全表
  42. if (StringUtils.isNotBlank(dateFileId)) {
  43. MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
  44. if (cursor.hasNext()) {
  45. createLogicAndDeleteOld(
  46. "五联单-账户透视",
  47. modelId,
  48. headerProperties.getScaleAnalysisOutput(),
  49. mongoTemplate,
  50. fileService);
  51. insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
  52. }
  53. Set<String> alipayIds = new HashSet<>();
  54. Map<String, DataMap> idToData = new HashMap<>();
  55. Document origin;
  56. while (cursor.hasNext()) {
  57. origin = cursor.next();
  58. String alipayId = origin.getString("支付宝用户ID");
  59. DataMap dataMap;
  60. if (alipayIds.contains(alipayId)) {
  61. dataMap = idToData.get(alipayId);
  62. } else {
  63. alipayIds.add(alipayId);
  64. String alipayUsername = origin.getString("支付宝户名");
  65. dataMap = new DataMap();
  66. dataMap.put("fileId", newFileId);
  67. dataMap.put("支付宝用户ID", alipayId);
  68. dataMap.put("支付宝户名", alipayUsername);
  69. dataMap.put("交易总额", new BigDecimal("0.00"));
  70. dataMap.put("收入金额", new BigDecimal("0.00"));
  71. dataMap.put("支出金额", new BigDecimal("0.00"));
  72. dataMap.put("收入笔数", 0);
  73. dataMap.put("支出笔数", 0);
  74. dataMap.put("总笔数", 0);
  75. idToData.put(alipayId, dataMap);
  76. }
  77. String flag = "收/支";
  78. String flagValue = origin.getString(flag);
  79. String money = (String) origin.get("金额(元)");
  80. if ("收入".equals(flagValue)) {
  81. BigDecimal oMoney = (BigDecimal) dataMap.get("收入金额");
  82. oMoney = oMoney.add(new BigDecimal(money));
  83. dataMap.put("收入金额", oMoney);
  84. int oCount = (int) dataMap.get("收入笔数");
  85. oCount++;
  86. dataMap.put("收入笔数", oCount);
  87. } else if ("支出".equals(flagValue)) {
  88. BigDecimal oMoney = (BigDecimal) dataMap.get("支出金额");
  89. oMoney = oMoney.add(new BigDecimal(money));
  90. dataMap.put("支出金额", oMoney);
  91. int oCount = (int) dataMap.get("支出笔数");
  92. oCount++;
  93. dataMap.put("支出笔数", oCount);
  94. }
  95. BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
  96. oMoney = oMoney.add(new BigDecimal(money));
  97. dataMap.put("交易总额", oMoney);
  98. int oCount = (int) dataMap.get("总笔数");
  99. oCount++;
  100. dataMap.put("总笔数", oCount);
  101. }
  102. if (CollectionUtils.isNotEmpty(idToData.values())) {
  103. for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
  104. DataMap dataMap = entry.getValue();
  105. BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
  106. dataMap.put("交易总额", money1.doubleValue());
  107. BigDecimal money2 = (BigDecimal) dataMap.get("收入金额");
  108. dataMap.put("收入金额", money2.doubleValue());
  109. BigDecimal money3 = (BigDecimal) dataMap.get("支出金额");
  110. dataMap.put("支出金额", money3.doubleValue());
  111. }
  112. saveLines(idToData.values(), "交易总额", mongoTemplate);
  113. }
  114. }
  115. latch.countDown();
  116. }
  117. }