Эх сурвалжийг харах

feat(1): TenpayRegInfo(商户注册信息).txt 格式支持

洪海涛 5 сар өмнө
parent
commit
8280ce1341

+ 85 - 2
src/main/java/ieven/server/webapp/domain/file/FileService.java

@@ -18,6 +18,7 @@ import ieven.server.webapp.domain.IdInput;
 import ieven.server.webapp.domain.data.DataMap;
 import ieven.server.webapp.domain.data.Fields;
 import ieven.server.webapp.domain.model.Model;
+import ieven.server.webapp.domain.tenpay.TenpayHeaders;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
 import ieven.server.webapp.service.MongoExcelService;
 import ieven.server.webapp.util.EncodeDetector;
@@ -55,11 +56,14 @@ import java.io.*;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.*;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
+import static cn.hutool.core.util.ArrayUtil.contains;
+
 @Service
 @EnableAsync
 @Slf4j
@@ -82,7 +86,7 @@ public class FileService {
             "五联单-IP地址分析",
             "五联单-收货地址分析"
     };
-    String[] order3 = {"财付通-注册信息", "财付通-订单明细1", "财付通-订单明细2","财付通-商户订单", "财付通-交易明细", "财付通-账户透视", "财付通-对手透视", "财付通-手机明细"};
+    String[] order3 = {"财付通-注册信息", "财付通-订单明细1", "财付通-订单明细2", "财付通-商户注册信息","财付通-商户订单", "财付通-交易明细", "财付通-账户透视", "财付通-对手透视", "财付通-手机明细"};
 
     String[] order4 = {"数据分析-主体信息汇总", "数据分析-账户透视", "数据分析-对手透视", "数据分析-共同关系网络"};
     @Autowired
@@ -251,6 +255,8 @@ public class FileService {
                         IoUtil.readLines(new InputStreamReader(inputStream, "utf-8"), lines);
                         int curRow = 0;
                         boolean processNext = false;
+                        boolean lineAccount = false;
+
 
                         for (String line : lines) {
                             if (line.equals("注销信息")) {
@@ -268,7 +274,20 @@ public class FileService {
                                 }
                                 break;
                             }
-                            if (line.contains("账户状态\t账号")) {
+                            /*
+                            *   // 定义需要检查的字段
+                            String[] requiredFields = {"账户状态", "账号", "注册姓名", "注册时间", "注册身份证号"};
+                            // 将行拆分为字段数组
+                            String[] fields = line.split("\t");
+
+                            // 检查每个必要字段是否存在
+                            for (String field : requiredFields) {
+                                if (contains(fields, field) && !lineAccount) {
+                                    lineAccount = true;
+                                }
+                            }
+                            * */
+                            if (line.contains("账户状态\t账号\t注册姓名\t注册时间\t注册身份证号\t绑定手机\t绑定状态")) {
                                 // 先存储表头行
                                 mongoExcelService.getRows(
                                         0,
@@ -281,6 +300,70 @@ public class FileService {
                                 processNext = true;
                             }
                         }
+
+                        int isMerchant = 0; // 商户注册信息
+                        HashMap<String, String> merchantMap = new HashMap<>();
+                        List<String> headers = TenpayHeaders.getHeaders(11);
+                        for (String line : lines) {
+                            try {
+
+                                for (String header : headers) {
+                                    if (line.contains(header)) {
+                                        // Split each line into left and right parts
+                                        String[] merchantLine = line.split(":");
+                                        String key = merchantLine[0].trim();
+                                        String value = merchantLine.length < 2 ? "" : merchantLine[1].trim();
+                                        merchantMap.put(key, value);
+                                        isMerchant++;
+                                    }
+                                }
+                            } catch (ArrayIndexOutOfBoundsException e) {
+                                System.out.println("错误: 行解析失败,行内容可能不正确。");
+                                System.out.println("错误信息: " + e.getMessage());
+                                e.printStackTrace();
+                            } catch (NullPointerException e) {
+                                System.out.println("错误: 空指针异常,可能是headers或line为空。");
+                                System.out.println("错误信息: " + e.getMessage());
+                                e.printStackTrace();
+                            }
+                        }
+                        System.out.println(merchantMap);
+                        /*财付通-商户注册信息 */
+                        if(merchantMap.size() > 8) {
+                            String bankNo = merchantMap.get("绑定银行卡号");
+                            /*
+                            * "商户账号", "商户名", "注册时间", "证件号",  "邮箱", "绑定手机", "银行账户名", "绑定银行", "绑定银行卡号", "商户地址"
+                            * */
+                            String[] bankNoArray = bankNo.split(",");
+                            mongoExcelService.getRows(
+                                    0,
+                                    0,
+                                    headers
+                            );
+                            for (String no : bankNoArray) {
+                                // 创建每行的数据,包含所有字段,其中bankNo为当前值
+                                List<String> row = new ArrayList<>();
+                                row.add(merchantMap.get("商户账号"));
+                                row.add(merchantMap.get("商户名"));
+
+                                row.add(merchantMap.get("注册时间"));
+                                row.add(merchantMap.get("证件号"));
+                                row.add(merchantMap.get("邮箱"));
+                                row.add(merchantMap.get("绑定手机"));
+                                row.add(merchantMap.get("银行账户名"));
+                                row.add(merchantMap.get("绑定银行"));
+                                row.add(no);
+                                row.add(merchantMap.get("商户地址"));
+                                // 假设bankNo是第三个字段
+
+                                // 添加其他字段...
+                                mongoExcelService.getRows(
+                                        0,
+                                        1,
+                                        row
+                                );
+                            }
+                        }
                         mongoExcelService.insertRest();
                     }
                 } catch (Exception var11) {

+ 5 - 0
src/main/java/ieven/server/webapp/domain/tenpay/TenpayHeaders.java

@@ -74,10 +74,15 @@ public class TenpayHeaders {
                 "商户ID", "交易单号", "大单号", "用户侧账户名称",  "借贷类型", "交易业务类型", "交易用途类型", "交易时间", "交易金额(分)", "账户余额(分)", "对手方ID", "对手侧账户名称", "对手方银行卡号", "对手侧银行名称", "对手侧网银联单号", "网联/银联", "第三方账户名称", "对手方接收时间", "对手方接收金额(分)", "是否内部交易", "备注"
 
         ));
+        mappedHeaders.put(11, Arrays.asList(
+                "商户账号", "商户名", "注册时间", "证件号",  "邮箱", "绑定手机", "银行账户名", "绑定银行", "绑定银行卡号", "商户地址"
+        ));
+
         mappedNames.put(1, "财付通-订单明细1");
         mappedNames.put(2, "财付通-订单明细2");
         mappedNames.put(3, "财付通-注册信息");
         mappedNames.put(4, "财付通-交易明细");
+        mappedNames.put(5, "财付通-商户注册信息");
 
 
     }

+ 3 - 0
src/main/java/ieven/server/webapp/service/FieldsService.java

@@ -72,6 +72,9 @@ public class FieldsService extends Ops {
         // 财付通 开户信息
         fields = matchHeaders(originFields, TenpayHeaders.getHeaders(3));
         this.updateLogicalFile(fields, "财付通-注册信息");
+        // 财付通 商户注册信息
+        fields = matchHeaders(originFields, TenpayHeaders.getHeaders(11));
+        this.updateLogicalFile(fields, "财付通-商户注册信息");
         // 财付通-订单明细
         fields = matchHeaders(originFields, TenpayHeaders.getHeaders(6));
         this.updateLogicalFile(fields, "财付通-订单明细2");

+ 9 - 0
src/main/java/ieven/server/webapp/service/alipay/AlipayService.java

@@ -206,6 +206,15 @@ public class AlipayService {
 
         CountDownLatch latch7 = new CountDownLatch(3);
         // 财付通-手机明细
+
+        // 财付通-商户注册信息
+        CountDownLatch latch17 = new CountDownLatch(1);
+        exec.execute(
+                new TenpayMerchantAccount(
+                        originFields, modelId, mongoTemplate, fileService, accountToName, latch17));
+        latch17.await();
+        // 财付通-商户注册信息
+
         exec.execute(new TenpayMobile(originFields, modelId, mongoTemplate, fileService, latch7));
         // 财付通-对手透视
         exec.execute(

+ 102 - 0
src/main/java/ieven/server/webapp/service/tenpay/TenpayMerchantAccount.java

@@ -0,0 +1,102 @@
+package ieven.server.webapp.service.tenpay;
+
+import com.mongodb.client.MongoCursor;
+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.domain.tenpay.TenpayHeaders;
+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.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+
+@Slf4j
+public class TenpayMerchantAccount extends Ops implements Runnable {
+  List<Fields> originFields;
+  String modelId;
+  MongoTemplate mongoTemplate;
+  FileService fileService;
+
+  Map<String, String> accountToName;
+
+  CountDownLatch latch;
+
+  public TenpayMerchantAccount(
+      List<Fields> originFields,
+      String modelId,
+      MongoTemplate mongoTemplate,
+      FileService fileService,
+      Map<String, String> accountToName,
+      CountDownLatch latch) {
+    this.originFields = originFields;
+    this.modelId = modelId;
+    this.mongoTemplate = mongoTemplate;
+    this.fileService = fileService;
+    this.accountToName = accountToName;
+    this.latch = latch;
+  }
+
+  @Override
+  public void run() {
+    log.info("财付通-商户注册信息开始");
+    List<String> headers = TenpayHeaders.getHeaders(11);
+    // 直接删除旧表创建新表
+    List<Fields> matched = matchHeaders(originFields, headers);
+    if (CollectionUtils.isNotEmpty(matched)) {
+      String newFileId =
+          createLogicAndDeleteOld("财付通-商户注册信息", modelId, headers, mongoTemplate, fileService);
+      for (Fields fields : matched) {
+        String fileId = fields.getFileId();
+        MongoCursor<Document> cursor = getCursor(fileId, mongoTemplate);
+        Document originDoc;
+        List<DataMap> needToSave = new ArrayList<>(1000);
+        while (cursor.hasNext()) {
+          originDoc = cursor.next();
+          /*
+          * "商户账号", "商户名", "注册时间", "证件号",  "邮箱", "绑定手机", "银行账户名", "绑定银行", "绑定银行卡号", "商户地址"
+          * */
+          // 拷贝到新的
+          DataMap newDoc = initWithOrigin(originDoc, newFileId);
+          deleteKey(newDoc, "FILEID");
+          String s1 = (String) newDoc.get("商户账号");
+          String s2 = (String) newDoc.get("商户名");
+          String s3 = (String) newDoc.get("注册时间");
+          String s4 = (String) newDoc.get("证件号");
+          String s5 = (String) newDoc.get("邮箱");
+          String s6 = (String) newDoc.get("绑定手机");
+          String s7 = (String) newDoc.get("银行账户名");
+          String s8 = (String) newDoc.get("绑定银行");
+          String s9 = (String) newDoc.get("绑定银行卡号");
+          String s10 = (String) newDoc.get("商户地址");
+          newDoc.put("商户账号", s1);
+          newDoc.put("商户名", s2);
+          newDoc.put("注册时间", s3);
+          newDoc.put("证件号", s4);
+          newDoc.put("邮箱", s5);
+          newDoc.put("绑定手机", s6);
+          newDoc.put("银行账户名", s7);
+          newDoc.put("绑定银行", s8);
+          newDoc.put("绑定银行卡号", s9);
+          newDoc.put("商户地址", s10);
+          needToSave.add(newDoc);
+          if (needToSave.size() >= 1000) {
+            saveLines(new ArrayList<>(needToSave), mongoTemplate);
+            needToSave.clear();
+          }
+        }
+        if (CollectionUtils.isNotEmpty(needToSave)) {
+          saveLines(needToSave, mongoTemplate);
+        }
+      }
+    }
+    latch.countDown();
+    log.info("财付通-商户注册信息结束");
+  }
+}