123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- package ieven.server.webapp.service.alipay;
- import com.google.common.collect.Lists;
- import com.mongodb.client.MongoCursor;
- import ieven.server.webapp.domain.alipay.HeaderProperties;
- import ieven.server.webapp.domain.data.DataMap;
- import ieven.server.webapp.domain.data.Fields;
- import ieven.server.webapp.domain.file.FileService;
- import ieven.server.webapp.service.Ops;
- import ieven.server.webapp.util.excel.PublicStatic;
- 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.*;
- import java.util.concurrent.CountDownLatch;
- @Slf4j
- public class EndAnalysis extends Ops implements Runnable {
- private HeaderProperties headerProperties;
- List<Fields> originFields;
- String modelId;
- MongoTemplate mongoTemplate;
- FileService fileService;
- CountDownLatch latch;
- public EndAnalysis(
- HeaderProperties headerProperties,
- List<Fields> originFields,
- String modelId,
- MongoTemplate mongoTemplate,
- FileService fileService,
- CountDownLatch latch2) {
- this.headerProperties = headerProperties;
- this.originFields = originFields;
- this.modelId = modelId;
- this.mongoTemplate = mongoTemplate;
- this.fileService = fileService;
- this.latch = latch2;
- }
- @Override
- public void run() {
- // 直接删除并创建表
- String newFileId = "";
- String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
- String dateFileId1 = getFileId("经侦云-账户明细", modelId, mongoTemplate);
- List<String> dateFileIdList = new ArrayList<>();
- if (StringUtils.isNotBlank(dateFileId)) {
- dateFileIdList.add(dateFileId);
- }
- if (StringUtils.isNotBlank(dateFileId1)) {
- dateFileIdList.add(dateFileId1);
- }
- // 遍历账户明细全表
- if (StringUtils.isNotBlank(dateFileId)||StringUtils.isNotBlank(dateFileId1)) {
- MongoCursor<Document> cursor = getCursor(dateFileIdList, mongoTemplate);
- if (cursor.hasNext()) {
- newFileId =
- createLogicAndDeleteOld(
- "五联单-对手透视",
- modelId,
- headerProperties.getEndAnalysisOutput(),
- mongoTemplate,
- fileService
- );
- if(StringUtils.isNotBlank(dateFileId)){
- insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
- }
- if(StringUtils.isNotBlank(dateFileId1)){
- insertFromTo(dateFileId1, newFileId, modelId, mongoTemplate);
- }
- }
- Set<String> alipayIds = new HashSet<>();
- Map<String, DataMap> idToData = new HashMap<>();
- Map<String, Set<String>> idToMainIds = new HashMap<>();
- Map<String, Set<String>> idToNames = new HashMap<>();
- Map<String, Set<String>> hm = new HashMap<>();
- Document origin;
- while (cursor.hasNext()) {
- try {
- origin = cursor.next();
- String alipayId = origin.getString("对手支付宝用户ID");
- DataMap dataMap;
- if (alipayIds.contains(alipayId)) {
- dataMap = idToData.get(alipayId);
- } else {
- alipayIds.add(alipayId);
- dataMap = new DataMap();
- dataMap.put("fileId", newFileId);
- dataMap.put("对手支付宝用户ID", alipayId);
- dataMap.put("对手支付宝户名", "");
- dataMap.put("交易总额", new BigDecimal("0.00"));
- dataMap.put("主用户ID收入金额", new BigDecimal("0.00"));
- dataMap.put("主用户ID支出金额", new BigDecimal("0.00"));
- dataMap.put("主用户ID收入笔数", 0);
- dataMap.put("主用户ID支出笔数", 0);
- dataMap.put("总笔数", 0);
- dataMap.put("共同主用户ID数", 0);
- dataMap.put("共同主用户ID汇总", "");
- idToData.put(alipayId, dataMap);
- }
- String alipayUsername = origin.getString("对手支付宝户名");
- if (StringUtils.isNotBlank(alipayUsername)
- && !"_".equals(alipayUsername)
- && !"-".equals(alipayUsername) && !"null".equals(alipayUsername)) {
- if (idToNames.containsKey(alipayId)) {
- Set<String> names = idToNames.get(alipayId);
- names.add(alipayUsername);
- } else {
- Set<String> names = new HashSet<>();
- names.add(alipayUsername);
- idToNames.put(alipayId, names);
- }
- }
- String flag = "收/支";
- String flagValue = origin.getString(flag);
- String money = PublicStatic.checkStrJe((String) origin.get("金额(元)"));
- if ("收入".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("主用户ID收入金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("主用户ID收入金额", oMoney);
- int oCount = (int) dataMap.get("主用户ID收入笔数");
- oCount++;
- dataMap.put("主用户ID收入笔数", oCount);
- } else if ("支出".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("主用户ID支出金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("主用户ID支出金额", oMoney);
- int oCount = (int) dataMap.get("主用户ID支出笔数");
- oCount++;
- dataMap.put("主用户ID支出笔数", oCount);
- }
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易总额", oMoney);
- int oCount = (int) dataMap.get("总笔数");
- oCount++;
- dataMap.put("总笔数", oCount);
- String mainId = (String) origin.get("支付宝用户ID");
- String mainIdhm = (String) origin.get("支付宝户名");
- if (StringUtils.isNotBlank(mainId) && StringUtils.isNotBlank(mainIdhm)) {
- if (hm.containsKey(mainId)) {
- Set<String> hmnew = hm.get(mainId);
- hmnew.add(mainIdhm);
- hm.put(mainId, hmnew);
- } else {
- Set<String> mainIds = new HashSet<>();
- mainIds.add(mainIdhm);
- hm.put(mainId, mainIds);
- }
- }
- if (idToMainIds.containsKey(alipayId)) {
- Set<String> mainIds = idToMainIds.get(alipayId);
- mainIds.add(mainId);
- } else {
- Set<String> mainIds = new HashSet<>();
- mainIds.add(mainId);
- idToMainIds.put(alipayId, mainIds);
- }
- } catch (Exception exception) {
- log.error(exception.getMessage(), exception);
- }
- }
- if (CollectionUtils.isNotEmpty(idToData.values())) {
- for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
- String key = entry.getKey();
- DataMap value = entry.getValue();
- Set<String> mainIds = idToMainIds.get(key);
- if (CollectionUtils.isNotEmpty(mainIds)) {
- value.put("共同主用户ID数", mainIds.size());
- String str="";
- for (String mainId : mainIds) {
- Set<String> strings = hm.get(mainId);
- str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
- }
- value.put("共同主用户ID汇总", str);
- }
- Set<String> names = idToNames.get(key);
- if (CollectionUtils.isNotEmpty(names)) {
- value.put("对手支付宝户名", StringUtils.join(names, ";"));
- }
- DataMap dataMap = entry.getValue();
- BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
- dataMap.put("交易总额", money1.doubleValue());
- BigDecimal money2 = (BigDecimal) dataMap.get("主用户ID收入金额");
- dataMap.put("主用户ID收入金额", money2.doubleValue());
- BigDecimal money3 = (BigDecimal) dataMap.get("主用户ID支出金额");
- dataMap.put("主用户ID支出金额", money3.doubleValue());
- }
- saveLines(idToData.values(), "共同主用户ID数", mongoTemplate);
- }
- }
- latch.countDown();
- }
- }
|