Browse Source

代码重构

tom.xu@informa.com 2 năm trước cách đây
mục cha
commit
f7ddad55da

+ 3 - 0
src/main/java/ieven/server/webapp/config/LoginInterceptor.java

@@ -3,6 +3,7 @@ package ieven.server.webapp.config;
 import cn.hutool.json.JSONUtil;
 import ieven.server.webapp.domain.user.User;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.HandlerInterceptor;
 
@@ -13,11 +14,13 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 
 @Component
+@Slf4j
 public class LoginInterceptor implements HandlerInterceptor {
   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
       throws Exception {
     User user = (User) request.getSession().getAttribute("loginUser");
+    log.info(JSONUtil.toJsonStr(user));
     if (user == null) {
       returnNoLogin(response);
       return false;

+ 149 - 0
src/main/java/ieven/server/webapp/service/tenpay/TenpayTradesEndAnalysis.java

@@ -0,0 +1,149 @@
+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 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;
+
+public class TenpayTradesEndAnalysis extends Ops implements Runnable {
+
+  private HeaderProperties headerProperties;
+  String modelId;
+  MongoTemplate mongoTemplate;
+  FileService fileService;
+
+  public TenpayTradesEndAnalysis(
+      HeaderProperties headerProperties,
+      String modelId,
+      MongoTemplate mongoTemplate,
+      FileService fileService) {
+    this.headerProperties = headerProperties;
+    this.modelId = modelId;
+    this.mongoTemplate = mongoTemplate;
+    this.fileService = fileService;
+  }
+
+  @Override
+  public void run() {
+    // 直接删除并创建表
+    String newFileId =
+        createLogicAndDeleteOld(
+            "财付通-对手透视",
+            modelId,
+            headerProperties.getAntiSecurityTradeEndAnalysisOutput(),
+            mongoTemplate,
+            fileService);
+    String dateFileId = getFileId("财付通-交易明细", modelId, mongoTemplate);
+    // 插入记录用户后续查询明细
+    insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+    MongoCursor<Document> cursor = getCursor(dateFileId, 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 ("入账".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);
+    }
+  }
+}

+ 128 - 0
src/main/java/ieven/server/webapp/service/tenpay/TenpayTradesScaleAnalysis.java

@@ -0,0 +1,128 @@
+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 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;
+
+public class TenpayTradesScaleAnalysis extends Ops implements Runnable {
+  private HeaderProperties headerProperties;
+  String modelId;
+  MongoTemplate mongoTemplate;
+  FileService fileService;
+
+  public TenpayTradesScaleAnalysis(
+      HeaderProperties headerProperties,
+      String modelId,
+      MongoTemplate mongoTemplate,
+      FileService fileService) {
+    this.headerProperties = headerProperties;
+    this.modelId = modelId;
+    this.mongoTemplate = mongoTemplate;
+    this.fileService = fileService;
+  }
+
+  @Override
+  public void run() {
+    // 直接删除并创建表
+    String newFileId =
+        createLogicAndDeleteOld(
+            "财付通-账户透视",
+            modelId,
+            headerProperties.getAntiSecurityTradeScaleAnalysisOutput(),
+            mongoTemplate,
+            fileService);
+    String dateFileId = getFileId("财付通-交易明细", modelId, mongoTemplate);
+    // 插入记录用户后续查询明细
+    insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+    MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+    Set<String> alipayIds = new HashSet<>();
+    Map<String, DataMap> idToData = 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);
+        idToData.put(alipayId, dataMap);
+      }
+      String alipayUsername = origin.getString("交易主体户名");
+      if (StringUtils.isNotBlank(alipayUsername)) {
+        Set<String> namesSet;
+        if (idToNames.containsKey(alipayId)) {
+          namesSet = idToNames.get(alipayId);
+        } else {
+          namesSet = new HashSet<>();
+          idToNames.put(alipayId, namesSet);
+        }
+        namesSet.add(alipayUsername);
+      }
+      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());
+        String id = (String) dataMap.get("交易主体账号");
+        Set<String> namesSet = idToNames.get(id);
+        if (CollectionUtils.isNotEmpty(namesSet)) {
+          dataMap.put("交易主体户名", StringUtils.join(namesSet, ";"));
+        }
+      }
+      saveLines(idToData.values(), "交易总额", mongoTemplate);
+    }
+  }
+}