123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package ieven.server.webapp.service.alipay;
- 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 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;
- public class ScaleAnalysis extends Ops implements Runnable {
- private HeaderProperties headerProperties;
- List<Fields> originFields;
- String modelId;
- MongoTemplate mongoTemplate;
- FileService fileService;
- CountDownLatch latch;
- public ScaleAnalysis(
- HeaderProperties headerProperties,
- List<Fields> originFields,
- String modelId,
- MongoTemplate mongoTemplate,
- FileService fileService,
- CountDownLatch latch) {
- this.headerProperties = headerProperties;
- this.originFields = originFields;
- this.modelId = modelId;
- this.mongoTemplate = mongoTemplate;
- this.fileService = fileService;
- this.latch = latch;
- }
- @Override
- public void run() {
- // 直接删除并创建表
- String newFileId = "";
- String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
- // 遍历账户明细全表
- if (StringUtils.isNotBlank(dateFileId)) {
- MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
- if (cursor.hasNext()) {
- createLogicAndDeleteOld(
- "五联单-账户透视",
- modelId,
- headerProperties.getScaleAnalysisOutput(),
- mongoTemplate,
- fileService);
- insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
- }
- Set<String> alipayIds = new HashSet<>();
- Map<String, DataMap> idToData = new HashMap<>();
- Document origin;
- while (cursor.hasNext()) {
- origin = cursor.next();
- String alipayId = origin.getString("支付宝用户ID");
- DataMap dataMap;
- if (alipayIds.contains(alipayId)) {
- dataMap = idToData.get(alipayId);
- } else {
- alipayIds.add(alipayId);
- String alipayUsername = origin.getString("支付宝户名");
- dataMap = new DataMap();
- dataMap.put("fileId", newFileId);
- dataMap.put("支付宝用户ID", alipayId);
- dataMap.put("支付宝户名", alipayUsername);
- 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);
- idToData.put(alipayId, dataMap);
- }
- String flag = "收/支";
- String flagValue = origin.getString(flag);
- String money = (String) origin.get("金额(元)");
- 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);
- }
- if (CollectionUtils.isNotEmpty(idToData.values())) {
- for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
- 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();
- }
- }
|