瀏覽代碼

代码重构

tom.xu@informa.com 2 年之前
父節點
當前提交
08ecfe1016

+ 5 - 0
src/main/java/ieven/server/webapp/domain/alipay/AlipayHeaders.java

@@ -45,6 +45,11 @@ public class AlipayHeaders {
         Arrays.asList(
             "用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "注册时间", "绑定手机", "绑定银行卡",
             "对应的协查数据"));
+
+    mappedHeaders.put(
+        12,
+        Arrays.asList(
+            "用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "绑定手机", "绑定银行卡", "对应的协查数据"));
     mappedHeaders.put(
         2,
         Arrays.asList(

+ 10 - 12
src/main/java/ieven/server/webapp/domain/file/LogicalFile.java

@@ -10,16 +10,14 @@ import org.springframework.data.mongodb.core.mapping.Document;
 @Data
 @Document(collection = "logical_file")
 public class LogicalFile {
-    @Id
-    private String id;
-    @Indexed
-    private String modelId;
-    @JsonIgnore
-    private ObjectId gridId;
-    private Integer count;
-    private String status;
-    private String filename;
-    private Boolean generated;
-    private String uploadDate;
-    private String modelName;
+  @Id private String id;
+  @Indexed private String modelId;
+  @JsonIgnore private ObjectId gridId;
+  private Integer count;
+  private String status;
+  private String filename;
+  private Boolean generated;
+  private String uploadDate;
+  private String matchType; // 匹配到类型
+  private String modelName;
 }

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

@@ -0,0 +1,73 @@
+package ieven.server.webapp.service;
+
+import ieven.server.webapp.domain.alipay.AlipayType;
+import ieven.server.webapp.domain.alipay.HeaderProperties;
+import ieven.server.webapp.domain.data.Fields;
+import ieven.server.webapp.domain.tenpay.TenpayHeaders;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class FieldsService extends Ops {
+  @Autowired MongoTemplate mongoTemplate;
+
+  @Autowired private HeaderProperties headerProperties;
+
+  /**
+   * 校验上传的文件格式是否符合业务类型规则
+   *
+   * @param originFields
+   */
+  public void checkAllFields(List<Fields> originFields) {
+    // 五联单-注册信息
+    List<Fields> fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRANSFER);
+    this.updateLogicalFile(fields, "五联单-注册信息");
+    fields = this.checkFields(originFields, 12);
+    this.updateLogicalFile(fields, "五联单-注册信息");
+    // 五联单-登录日志
+    fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_LOGIN);
+    this.updateLogicalFile(fields, "五联单-登录日志");
+    // 五联单-交易记录
+    fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRADE);
+    this.updateLogicalFile(fields, "五联单-交易记录");
+    // 五联单-账户明细
+    fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_ACCOUNT);
+    this.updateLogicalFile(fields, "五联单-账户明细");
+    // 五联单-转账明细  ALIPAY_ORIGIN_TRANSFER
+    fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRANSFER);
+    this.updateLogicalFile(fields, "五联单-转账明细 ");
+    // 反诈平台订单数据
+    fields = matchHeaders(originFields, headerProperties.getAntiCheatOrigin());
+    this.updateLogicalFile(fields, "反诈平台订单数据");
+    // 治安平台订单数据
+    fields = matchHeaders(originFields, headerProperties.getSecurityOrigin());
+    this.updateLogicalFile(fields, "治安平台订单数据");
+    // 财付通 开户信息
+    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(3));
+    this.updateLogicalFile(fields, "财付通-开户信息");
+    // 财付通-订单明细
+    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(6));
+    this.updateLogicalFile(fields, "财付通-订单明细");
+    // 财付通-手机明细
+    fields = matchHeaders(originFields, TenpayHeaders.getHeaders(4));
+    this.updateLogicalFile(fields, "财付通-订单明细");
+  }
+
+  void updateLogicalFile(List<Fields> fields, String matchType) {
+    if (fields.size() > 0) {
+      for (Fields field : fields) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("_id").is(field.getFileId()));
+        Update update = new Update();
+        update.set("matchType", matchType);
+        this.mongoTemplate.updateFirst(query, update, "logical_file");
+      }
+    }
+  }
+}

+ 12 - 2
src/main/java/ieven/server/webapp/service/alipay/ALIPAY_ORIGIN_REGISTER.java

@@ -44,7 +44,7 @@ public class ALIPAY_ORIGIN_REGISTER extends Ops implements Runnable {
 
   @Override
   public void run() {
-    log.info("五联单-注册信息开始");
+    log.info("五联单-注册信息开始 格式1 带注册时间");
     List<Fields> fieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_REGISTER);
     if (CollectionUtils.isNotEmpty(fieldsList)) {
       Fields output = Ops.createFile(AlipayType.ALIPAY_GENERATED_REGISTER, modelId);
@@ -54,6 +54,17 @@ public class ALIPAY_ORIGIN_REGISTER extends Ops implements Runnable {
         extractRegister(origin, output);
       }
     }
+    log.info("五联单-注册信息开始 格式2 不带注册时间 老数据");
+    fieldsList = checkFields(originFields, 12);
+    if (CollectionUtils.isNotEmpty(fieldsList)) {
+      Fields output = Ops.createFile(AlipayType.ALIPAY_GENERATED_REGISTER, modelId);
+      // 创建并存储文件和表头
+      // 可能有多个文件,对多个文件并行解析
+      for (Fields origin : fieldsList) {
+        extractRegister(origin, output);
+      }
+    }
+
     latch.countDown();
     log.info("五联单-注册信息结束");
   }
@@ -77,7 +88,6 @@ public class ALIPAY_ORIGIN_REGISTER extends Ops implements Runnable {
     while (cursor.hasNext()) {
       // 写法1(建议)
       try {
-
         originDoc = cursor.next();
         DataMap newDoc = initWithOrigin(originDoc, outputFileId);
         // 绑定银行卡字段

+ 32 - 5
src/main/java/ieven/server/webapp/service/alipay/AlipayService.java

@@ -7,10 +7,12 @@ import ieven.server.webapp.domain.data.Fields;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.file.LogicalFile;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
+import ieven.server.webapp.service.FieldsService;
 import ieven.server.webapp.service.tenpay.*;
 import ieven.server.webapp.util.DataUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -34,11 +36,26 @@ public class AlipayService {
   @Autowired private HeaderProperties headerProperties;
   @Autowired private FileService fileService;
 
+  @Autowired FieldsService fieldsService;
+
   public Mapped extractAll(String modelId) throws InterruptedException {
+    final List<Fields> originFields = queryAllFields(modelId);
+    // 先校验文件结构如果有不符合结构的文件 则暂停执行 给于提示
+    fieldsService.checkAllFields(originFields);
+    List<LogicalFile> logicalFiles = this.queryAllLogicalFiles(modelId);
+    List<String> checkResultStrings = new ArrayList<>();
+    for (LogicalFile logicalFile : logicalFiles) {
+      if (StringUtils.isBlank(logicalFile.getMatchType())) {
+        checkResultStrings.add(logicalFile.getFilename() + "未匹配到文件校验规则,请检查!");
+      }
+    }
+    if (checkResultStrings.size() > 0) {
+      return Mapped.ERROR(String.join(" ", checkResultStrings));
+    }
     // 先删除所有原来生成的表
     clearAllGenerated(modelId);
     // 查询出modelId的所有原始表头
-    final List<Fields> originFields = checkFields(modelId);
+
     if (CollectionUtils.isEmpty(originFields)) {
       return Mapped.ERROR("文件为空");
     }
@@ -125,6 +142,7 @@ public class AlipayService {
     log.info("latch4");
     log.info("latch5");
     CountDownLatch latch5 = new CountDownLatch(1);
+    // 财付通 开户信息
     exec.execute(
         new TenpayAccount(
             originFields, modelId, mongoTemplate, fileService, accountToName, latch5));
@@ -132,17 +150,22 @@ public class AlipayService {
     log.info("latch5");
     log.info("latch6");
     CountDownLatch latch6 = new CountDownLatch(1);
+    // 财付通-订单明细
     exec.execute(new TenpayOrders(originFields, modelId, mongoTemplate, fileService, latch6));
     latch6.await();
     log.info("latch6");
     log.info("latch7");
     CountDownLatch latch9 = new CountDownLatch(1);
+    // 财付通-交易明细
     exec.execute(new TenpayTrades(modelId, mongoTemplate, accountToName, fileService, latch9));
     latch9.await();
     CountDownLatch latch7 = new CountDownLatch(3);
+    // 财付通-手机明细
     exec.execute(new TenpayMobile(originFields, modelId, mongoTemplate, fileService, latch7));
+    // 财付通-对手透视
     exec.execute(
         new TenpayTradesEndAnalysis(headerProperties, modelId, mongoTemplate, fileService, latch7));
+    // 财付通-账户透视
     exec.execute(
         new TenpayTradesScaleAnalysis(
             headerProperties, modelId, mongoTemplate, fileService, latch7));
@@ -177,11 +200,15 @@ public class AlipayService {
     }
   }
 
-  private void clearAllGenerated(String modelId) {
+  public List<LogicalFile> queryAllLogicalFiles(String modelId) {
     Query query =
         new Query(Criteria.where("modelId").is(modelId).and("generated").is(Boolean.TRUE));
-    List<LogicalFile> oldFiles = mongoTemplate.find(query, LogicalFile.class);
-    for (LogicalFile old : oldFiles) {
+    return mongoTemplate.find(query, LogicalFile.class);
+  }
+
+  private void clearAllGenerated(String modelId) {
+    List<LogicalFile> logicalFiles = queryAllLogicalFiles(modelId);
+    for (LogicalFile old : logicalFiles) {
       IdInput idInput = new IdInput();
       idInput.setId(old.getId());
       fileService.deleteById(idInput);
@@ -189,7 +216,7 @@ public class AlipayService {
     mongoTemplate.remove(new Query(Criteria.where("modelId").is(modelId)), TFromToFileIds.class);
   }
 
-  private List<Fields> checkFields(String modelId) {
+  private List<Fields> queryAllFields(String modelId) {
     Query query =
         new Query(Criteria.where("modelId").is(modelId).and("generated").is(Boolean.FALSE));
     List<LogicalFile> fileList = mongoTemplate.find(query, LogicalFile.class);

+ 1 - 1
src/main/resources/static/static/js/8.4dd322f4e22f0f584df6.js

@@ -1 +1 @@
-webpackJsonp([8],{"0AeZ":function(n,t,e){t=n.exports=e("FZ+f")(!1),t.push([n.i,"\n.container-404[data-v-4b136946] {\n    text-align: center;\n    width: 100%;\n    padding: 50px 30px;\n}\n.wrap404[data-v-4b136946] {\n    height: 480px;\n    width: 800px;\n    border: 15px solid #e6e6e6;\n    margin: 0 auto;\n    padding: 30px 20px;\n    border-radius: 10px;\n    color: #000;\n    font-weight: 600;\n    font-size: 20px;\n    -webkit-box-shadow: inset 2px 2px 1px 1px #d5d5d5,\n        inset -2px -2px 1px 1px #d5d5d5, 2px 2px 1px 1px #d5d5d5,\n        -2px -2px 1px 1px #d5d5d5;\n    background-color: #032d58;\n}\n.wrap404 .title[data-v-4b136946] {\n    text-shadow: 5px 1px 6px rgb(241, 232, 222);\n    margin-top: 40px;\n    color: lightblue;\n}\n.wrap404 .link[data-v-4b136946] {\n    text-shadow: 5px 1px 6px green;\n    text-decoration: underline;\n    margin-top: 20px;\n}\n.wrap404 .title404[data-v-4b136946] {\n    text-shadow: 5px 1px 6px #f93;\n    font-weight: 800;\n    font-size: 120px;\n    color: #d42f09;\n    margin-top: 30px;\n}\n\n",""])},FNfY:function(n,t,e){"use strict";function a(n){e("X7YA")}Object.defineProperty(t,"__esModule",{value:!0});var p={mounted:function(){console.log("数据分析工具")}},i=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"container-404"},[e("div",{staticClass:"wrap404"},[e("h1",{staticClass:"title"},[n._v("页面不存在")]),n._v(" "),e("router-link",{attrs:{to:"/"}},[e("span",{staticClass:"link"},[n._v("首 页")])]),n._v(" "),e("h1",{staticClass:"title404"},[n._v("404")])],1)])},o=[],x={render:i,staticRenderFns:o},r=x,d=e("VU/8"),s=a,l=d(p,r,!1,s,"data-v-4b136946",null);t.default=l.exports},X7YA:function(n,t,e){var a=e("0AeZ");"string"==typeof a&&(a=[[n.i,a,""]]),a.locals&&(n.exports=a.locals);e("rjj0")("5b107abe",a,!0,{})}});
+webpackJsonp([8],{"0AeZ":function(n,t,e){t=n.exports=e("FZ+f")(!1),t.push([n.i,"\n.container-404[data-v-4b136946] {\n    text-align: center;\n    width: 100%;\n    padding: 50px 30px;\n}\n.wrap404[data-v-4b136946] {\n    height: 480px;\n    width: 800px;\n    border: 15px solid #e6e6e6;\n    margin: 0 auto;\n    padding: 30px 20px;\n    border-radius: 10px;\n    color: #000;\n    font-weight: 600;\n    font-size: 20px;\n    -webkit-box-shadow: inset 2px 2px 1px 1px #d5d5d5,\n        inset -2px -2px 1px 1px #d5d5d5, 2px 2px 1px 1px #d5d5d5,\n        -2px -2px 1px 1px #d5d5d5;\n    background-color: #032d58;\n}\n.wrap404 .title[data-v-4b136946] {\n    text-shadow: 5px 1px 6px rgb(241, 232, 222);\n    margin-top: 40px;\n    color: lightblue;\n}\n.wrap404 .link[data-v-4b136946] {\n    text-shadow: 5px 1px 6px green;\n    text-decoration: underline;\n    margin-top: 20px;\n}\n.wrap404 .title404[data-v-4b136946] {\n    text-shadow: 5px 1px 6px #f93;\n    font-weight: 800;\n    font-size: 120px;\n    color: #d42f09;\n    margin-top: 30px;\n}\n\n",""])},FNfY:function(n,t,e){"use strict";function a(n){e("X7YA")}Object.defineProperty(t,"__esModule",{value:!0});var p={mounted:function(){console.log("数据分析系统")}},i=function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"container-404"},[e("div",{staticClass:"wrap404"},[e("h1",{staticClass:"title"},[n._v("页面不存在")]),n._v(" "),e("router-link",{attrs:{to:"/"}},[e("span",{staticClass:"link"},[n._v("首 页")])]),n._v(" "),e("h1",{staticClass:"title404"},[n._v("404")])],1)])},o=[],x={render:i,staticRenderFns:o},r=x,d=e("VU/8"),s=a,l=d(p,r,!1,s,"data-v-4b136946",null);t.default=l.exports},X7YA:function(n,t,e){var a=e("0AeZ");"string"==typeof a&&(a=[[n.i,a,""]]),a.locals&&(n.exports=a.locals);e("rjj0")("5b107abe",a,!0,{})}});

File diff suppressed because it is too large
+ 0 - 0
src/main/resources/static/static/js/app.afd967708c4346a9dad8.js


Some files were not shown because too many files changed in this diff