EndAnalysis.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. package ieven.server.webapp.service.alipay;
  2. import com.google.common.collect.Lists;
  3. import com.mongodb.client.MongoCursor;
  4. import ieven.server.webapp.domain.alipay.HeaderProperties;
  5. import ieven.server.webapp.domain.data.DataMap;
  6. import ieven.server.webapp.domain.data.Fields;
  7. import ieven.server.webapp.domain.file.FileService;
  8. import ieven.server.webapp.service.Ops;
  9. import ieven.server.webapp.util.excel.PublicStatic;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.apache.commons.collections4.CollectionUtils;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.bson.Document;
  14. import org.springframework.data.mongodb.core.MongoTemplate;
  15. import java.math.BigDecimal;
  16. import java.util.*;
  17. import java.util.concurrent.CountDownLatch;
  18. @Slf4j
  19. public class EndAnalysis extends Ops implements Runnable {
  20. private HeaderProperties headerProperties;
  21. List<Fields> originFields;
  22. String modelId;
  23. MongoTemplate mongoTemplate;
  24. FileService fileService;
  25. CountDownLatch latch;
  26. public EndAnalysis(
  27. HeaderProperties headerProperties,
  28. List<Fields> originFields,
  29. String modelId,
  30. MongoTemplate mongoTemplate,
  31. FileService fileService,
  32. CountDownLatch latch2) {
  33. this.headerProperties = headerProperties;
  34. this.originFields = originFields;
  35. this.modelId = modelId;
  36. this.mongoTemplate = mongoTemplate;
  37. this.fileService = fileService;
  38. this.latch = latch2;
  39. }
  40. @Override
  41. public void run() {
  42. // 直接删除并创建表
  43. String newFileId = "";
  44. String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
  45. String dateFileId1 = getFileId("经侦云-账户明细", modelId, mongoTemplate);
  46. List<String> dateFileIdList = new ArrayList<>();
  47. if (StringUtils.isNotBlank(dateFileId)) {
  48. dateFileIdList.add(dateFileId);
  49. }
  50. if (StringUtils.isNotBlank(dateFileId1)) {
  51. dateFileIdList.add(dateFileId1);
  52. }
  53. // 遍历账户明细全表
  54. if (StringUtils.isNotBlank(dateFileId)||StringUtils.isNotBlank(dateFileId1)) {
  55. MongoCursor<Document> cursor = getCursor(dateFileIdList, mongoTemplate);
  56. if (cursor.hasNext()) {
  57. newFileId =
  58. createLogicAndDeleteOld(
  59. "五联单-对手透视",
  60. modelId,
  61. headerProperties.getEndAnalysisOutput(),
  62. mongoTemplate,
  63. fileService
  64. );
  65. if(StringUtils.isNotBlank(dateFileId)){
  66. insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
  67. }
  68. if(StringUtils.isNotBlank(dateFileId1)){
  69. insertFromTo(dateFileId1, newFileId, modelId, mongoTemplate);
  70. }
  71. }
  72. Set<String> alipayIds = new HashSet<>();
  73. Map<String, DataMap> idToData = new HashMap<>();
  74. Map<String, Set<String>> idToMainIds = new HashMap<>();
  75. Map<String, Set<String>> idToNames = new HashMap<>();
  76. Map<String, Set<String>> hm = new HashMap<>();
  77. Document origin;
  78. while (cursor.hasNext()) {
  79. try {
  80. origin = cursor.next();
  81. String alipayId = origin.getString("对手支付宝用户ID");
  82. DataMap dataMap;
  83. if (alipayIds.contains(alipayId)) {
  84. dataMap = idToData.get(alipayId);
  85. } else {
  86. alipayIds.add(alipayId);
  87. dataMap = new DataMap();
  88. dataMap.put("fileId", newFileId);
  89. dataMap.put("对手支付宝用户ID", alipayId);
  90. dataMap.put("对手支付宝户名", "");
  91. dataMap.put("交易总额", new BigDecimal("0.00"));
  92. dataMap.put("主用户ID收入金额", new BigDecimal("0.00"));
  93. dataMap.put("主用户ID支出金额", new BigDecimal("0.00"));
  94. dataMap.put("主用户ID收入笔数", 0);
  95. dataMap.put("主用户ID支出笔数", 0);
  96. dataMap.put("总笔数", 0);
  97. dataMap.put("共同主用户ID数", 0);
  98. dataMap.put("共同主用户ID汇总", "");
  99. idToData.put(alipayId, dataMap);
  100. }
  101. String alipayUsername = origin.getString("对手支付宝户名");
  102. if (StringUtils.isNotBlank(alipayUsername)
  103. && !"_".equals(alipayUsername)
  104. && !"-".equals(alipayUsername) && !"null".equals(alipayUsername)) {
  105. if (idToNames.containsKey(alipayId)) {
  106. Set<String> names = idToNames.get(alipayId);
  107. names.add(alipayUsername);
  108. } else {
  109. Set<String> names = new HashSet<>();
  110. names.add(alipayUsername);
  111. idToNames.put(alipayId, names);
  112. }
  113. }
  114. String flag = "收/支";
  115. String flagValue = origin.getString(flag);
  116. String money = PublicStatic.checkStrJe((String) origin.get("金额(元)"));
  117. if ("收入".equals(flagValue)) {
  118. BigDecimal oMoney = (BigDecimal) dataMap.get("主用户ID收入金额");
  119. oMoney = oMoney.add(new BigDecimal(money));
  120. dataMap.put("主用户ID收入金额", oMoney);
  121. int oCount = (int) dataMap.get("主用户ID收入笔数");
  122. oCount++;
  123. dataMap.put("主用户ID收入笔数", oCount);
  124. } else if ("支出".equals(flagValue)) {
  125. BigDecimal oMoney = (BigDecimal) dataMap.get("主用户ID支出金额");
  126. oMoney = oMoney.add(new BigDecimal(money));
  127. dataMap.put("主用户ID支出金额", oMoney);
  128. int oCount = (int) dataMap.get("主用户ID支出笔数");
  129. oCount++;
  130. dataMap.put("主用户ID支出笔数", oCount);
  131. }
  132. BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
  133. oMoney = oMoney.add(new BigDecimal(money));
  134. dataMap.put("交易总额", oMoney);
  135. int oCount = (int) dataMap.get("总笔数");
  136. oCount++;
  137. dataMap.put("总笔数", oCount);
  138. String mainId = (String) origin.get("支付宝用户ID");
  139. String mainIdhm = (String) origin.get("支付宝户名");
  140. if (StringUtils.isNotBlank(mainId) && StringUtils.isNotBlank(mainIdhm)) {
  141. if (hm.containsKey(mainId)) {
  142. Set<String> hmnew = hm.get(mainId);
  143. hmnew.add(mainIdhm);
  144. hm.put(mainId, hmnew);
  145. } else {
  146. Set<String> mainIds = new HashSet<>();
  147. mainIds.add(mainIdhm);
  148. hm.put(mainId, mainIds);
  149. }
  150. }
  151. if (idToMainIds.containsKey(alipayId)) {
  152. Set<String> mainIds = idToMainIds.get(alipayId);
  153. mainIds.add(mainId);
  154. } else {
  155. Set<String> mainIds = new HashSet<>();
  156. mainIds.add(mainId);
  157. idToMainIds.put(alipayId, mainIds);
  158. }
  159. } catch (Exception exception) {
  160. log.error(exception.getMessage(), exception);
  161. }
  162. }
  163. if (CollectionUtils.isNotEmpty(idToData.values())) {
  164. for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
  165. String key = entry.getKey();
  166. DataMap value = entry.getValue();
  167. Set<String> mainIds = idToMainIds.get(key);
  168. if (CollectionUtils.isNotEmpty(mainIds)) {
  169. value.put("共同主用户ID数", mainIds.size());
  170. String str="";
  171. for (String mainId : mainIds) {
  172. Set<String> strings = hm.get(mainId);
  173. str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
  174. }
  175. value.put("共同主用户ID汇总", str);
  176. }
  177. Set<String> names = idToNames.get(key);
  178. if (CollectionUtils.isNotEmpty(names)) {
  179. value.put("对手支付宝户名", StringUtils.join(names, ";"));
  180. }
  181. DataMap dataMap = entry.getValue();
  182. BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
  183. dataMap.put("交易总额", money1.doubleValue());
  184. BigDecimal money2 = (BigDecimal) dataMap.get("主用户ID收入金额");
  185. dataMap.put("主用户ID收入金额", money2.doubleValue());
  186. BigDecimal money3 = (BigDecimal) dataMap.get("主用户ID支出金额");
  187. dataMap.put("主用户ID支出金额", money3.doubleValue());
  188. }
  189. saveLines(idToData.values(), "共同主用户ID数", mongoTemplate);
  190. }
  191. }
  192. latch.countDown();
  193. }
  194. }