123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- package ieven.server.webapp.service.tenpay;
- import com.mongodb.client.MongoCursor;
- import ieven.server.webapp.domain.alipay.HeaderProperties;
- import ieven.server.webapp.domain.data.DataMap;
- import ieven.server.webapp.domain.file.FileService;
- import ieven.server.webapp.service.Ops;
- 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.HashMap;
- import java.util.HashSet;
- import java.util.Map;
- import java.util.Set;
- import java.util.concurrent.CountDownLatch;
- @Slf4j
- public class TenpayTradesEndAnalysis extends Ops implements Runnable {
- private HeaderProperties headerProperties;
- String modelId;
- MongoTemplate mongoTemplate;
- FileService fileService;
- CountDownLatch latch;
- public TenpayTradesEndAnalysis(
- HeaderProperties headerProperties,
- String modelId,
- MongoTemplate mongoTemplate,
- FileService fileService,
- CountDownLatch latch) {
- this.headerProperties = headerProperties;
- this.modelId = modelId;
- this.mongoTemplate = mongoTemplate;
- this.fileService = fileService;
- this.latch = latch;
- }
- @Override
- public void run() {
- log.info("财付通-对手透视开始");
- // 直接删除并创建表
- String newFileId = "";
- String dateFileId = getFileId("财付通-交易明细", modelId, mongoTemplate);
- // 插入记录用户后续查询明细
- MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
- if (cursor.hasNext() && StringUtils.isNotBlank(dateFileId)) {
- newFileId =
- createLogicAndDeleteOld(
- "财付通-对手透视",
- modelId,
- headerProperties.getAntiSecurityTradeEndAnalysisOutput(),
- mongoTemplate,
- fileService);
- insertFromTo(dateFileId, 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<>();
- Document origin;
- while (cursor.hasNext()) {
- origin = cursor.next();
- String alipayId = origin.getString("交易对手账号");
- DataMap dataMap;
- if (alipayIds.contains(alipayId)) {
- dataMap = idToData.get(alipayId);
- } else {
- alipayIds.add(alipayId);
- dataMap = new DataMap();
- dataMap.put("fileId", newFileId);
- dataMap.put("交易对手账号", alipayId);
- dataMap.put("交易对手户名", "");
- dataMap.put("交易总额", new BigDecimal("0.00"));
- dataMap.put("交易主体收入金额", new BigDecimal("0.00"));
- dataMap.put("交易主体支出金额", new BigDecimal("0.00"));
- dataMap.put("交易主体收入笔数", 0);
- dataMap.put("交易主体支出笔数", 0);
- dataMap.put("总笔数", 0);
- dataMap.put("共同交易主体数", 0);
- dataMap.put("共同交易主体账号汇总", "");
- idToData.put(alipayId, dataMap);
- }
- String alipayUsername = origin.getString("交易对手户名");
- if (StringUtils.isNotBlank(alipayUsername)
- && !"_".equals(alipayUsername)
- && !"-".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 = (String) origin.get("交易金额(元)");
- if (StringUtils.isBlank(money)) {
- money = "0";
- }
- if ("入".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体收入金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易主体收入金额", oMoney);
- int oCount = (int) dataMap.get("交易主体收入笔数");
- oCount++;
- dataMap.put("交易主体收入笔数", oCount);
- } else if ("出".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体支出金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易主体支出金额", oMoney);
- int oCount = (int) dataMap.get("交易主体支出笔数");
- oCount++;
- dataMap.put("交易主体支出笔数", 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("交易主体账号");
- 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);
- }
- }
- 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("共同交易主体数", mainIds.size());
- value.put("共同交易主体账号汇总", StringUtils.join(mainIds, ";"));
- }
- 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("交易主体收入金额");
- dataMap.put("交易主体收入金额", money2.doubleValue());
- BigDecimal money3 = (BigDecimal) dataMap.get("交易主体支出金额");
- dataMap.put("交易主体支出金额", money3.doubleValue());
- }
- saveLines(idToData.values(), "交易总额", mongoTemplate);
- }
- latch.countDown();
- log.info("财付通-对手透视结束");
- }
- }
|