瀏覽代碼

代码重构

tom.xu@informa.com 2 年之前
父節點
當前提交
9883a1ad33
共有 31 個文件被更改,包括 394 次插入167 次删除
  1. 2 1
      src/main/java/ieven/server/webapp/api/AlipayController.java
  2. 6 4
      src/main/java/ieven/server/webapp/api/FileController.java
  3. 0 2
      src/main/java/ieven/server/webapp/config/LoginInterceptor.java
  4. 25 12
      src/main/java/ieven/server/webapp/domain/file/FileService.java
  5. 9 2
      src/main/java/ieven/server/webapp/service/alipay/ALIPAY_GENERATED_ACCOUNT.java
  6. 9 2
      src/main/java/ieven/server/webapp/service/alipay/ALIPAY_GENERATED_LOGIN.java
  7. 10 2
      src/main/java/ieven/server/webapp/service/alipay/ALIPAY_GENERATED_TRADE.java
  8. 10 2
      src/main/java/ieven/server/webapp/service/alipay/ALIPAY_GENERATED_TRANSFER.java
  9. 10 2
      src/main/java/ieven/server/webapp/service/alipay/ALIPAY_ORIGIN_REGISTER.java
  10. 56 19
      src/main/java/ieven/server/webapp/service/alipay/AlipayService.java
  11. 8 3
      src/main/java/ieven/server/webapp/service/alipay/AntiCheat.java
  12. 9 1
      src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade1.java
  13. 8 1
      src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade2.java
  14. 18 9
      src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade3.java
  15. 16 8
      src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade4.java
  16. 19 11
      src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTradeEndAnalysis.java
  17. 19 11
      src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTradeScaleAnalysis.java
  18. 18 9
      src/main/java/ieven/server/webapp/service/alipay/DeliveryAnalysis.java
  19. 18 9
      src/main/java/ieven/server/webapp/service/alipay/EndAnalysis.java
  20. 18 9
      src/main/java/ieven/server/webapp/service/alipay/IpAnalysis.java
  21. 17 9
      src/main/java/ieven/server/webapp/service/alipay/ScaleAnalysis.java
  22. 8 3
      src/main/java/ieven/server/webapp/service/alipay/SecurityOrder.java
  23. 18 9
      src/main/java/ieven/server/webapp/service/alipay/TransferAnalysis.java
  24. 11 1
      src/main/java/ieven/server/webapp/service/tenpay/TenpayAccount.java
  25. 10 1
      src/main/java/ieven/server/webapp/service/tenpay/TenpayMobile.java
  26. 11 1
      src/main/java/ieven/server/webapp/service/tenpay/TenpayOrders.java
  27. 7 1
      src/main/java/ieven/server/webapp/service/tenpay/TenpayTrades.java
  28. 11 1
      src/main/java/ieven/server/webapp/service/tenpay/TenpayTradesEndAnalysis.java
  29. 10 1
      src/main/java/ieven/server/webapp/service/tenpay/TenpayTradesScaleAnalysis.java
  30. 2 20
      src/main/java/ieven/server/webapp/util/excel/ExcelXlsReader.java
  31. 1 1
      src/main/java/ieven/server/webapp/util/excel/ExcelXlsxReader.java

+ 2 - 1
src/main/java/ieven/server/webapp/api/AlipayController.java

@@ -37,7 +37,8 @@ public class AlipayController {
   public AlipayController() {}
   public AlipayController() {}
 
 
   @PostMapping({"/extractPersonInfo"})
   @PostMapping({"/extractPersonInfo"})
-  public Mapped extractPersonInfo(@RequestBody ModelIdInput modelIdInput) {
+  public Mapped extractPersonInfo(@RequestBody ModelIdInput modelIdInput)
+      throws InterruptedException {
     String modelId = modelIdInput.getModelId();
     String modelId = modelIdInput.getModelId();
     return modelId == null ? Mapped.ERROR("没有选择模型!") : this.alipayService.extractAll(modelId);
     return modelId == null ? Mapped.ERROR("没有选择模型!") : this.alipayService.extractAll(modelId);
   }
   }

+ 6 - 4
src/main/java/ieven/server/webapp/api/FileController.java

@@ -64,12 +64,14 @@ public class FileController {
     List<String> headers = new ArrayList<>();
     List<String> headers = new ArrayList<>();
     for (Sheet sheet : sheets) {
     for (Sheet sheet : sheets) {
       reader.setSheet(sheet);
       reader.setSheet(sheet);
-      StringBuilder stringBuilder = new StringBuilder();
       List<Object> objects = reader.readRow(0);
       List<Object> objects = reader.readRow(0);
-      for (Object object : objects) {
-        stringBuilder.append(object);
+      if (objects.size() > 1) { // 至少大于1
+        StringBuilder stringBuilder = new StringBuilder();
+        for (Object object : objects) {
+          stringBuilder.append(object);
+        }
+        headers.add(stringBuilder.toString());
       }
       }
-      headers.add(stringBuilder.toString());
     }
     }
     if (headers.size() > 1) {
     if (headers.size() > 1) {
       // 判断sheet第一行内容是否一致
       // 判断sheet第一行内容是否一致

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

@@ -19,9 +19,7 @@ public class LoginInterceptor implements HandlerInterceptor {
   @Override
   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
       throws Exception {
       throws Exception {
-    log.info(request.getSession().getId());
     User user = (User) request.getSession().getAttribute("loginUser");
     User user = (User) request.getSession().getAttribute("loginUser");
-    log.info(JSONUtil.toJsonStr(user));
     if (user == null) {
     if (user == null) {
       // returnNoLogin(response);
       // returnNoLogin(response);
       return true;
       return true;

+ 25 - 12
src/main/java/ieven/server/webapp/domain/file/FileService.java

@@ -144,9 +144,9 @@ public class FileService {
       List<LogicalFile> resultList = this.mongoTemplate.find(query, LogicalFile.class);
       List<LogicalFile> resultList = this.mongoTemplate.find(query, LogicalFile.class);
       // 将文件 按照  反诈  财付通 五联单  进行分类
       // 将文件 按照  反诈  财付通 五联单  进行分类
       List<GroupLogincalFile> groupLogincalFiles = new ArrayList<>();
       List<GroupLogincalFile> groupLogincalFiles = new ArrayList<>();
-      groupLogincalFiles.add(groupLogicalFile("反诈平台数据分析", "反诈", resultList));
-      groupLogincalFiles.add(groupLogicalFile("支付宝数据分析", "五联单", resultList));
-      groupLogincalFiles.add(groupLogicalFile("财付通数据分析", "财付通", resultList));
+      groupLogicalFile("反诈平台数据分析", "反诈", resultList, groupLogincalFiles);
+      groupLogicalFile("支付宝数据分析", "五联单", resultList, groupLogincalFiles);
+      groupLogicalFile("财付通数据分析", "财付通", resultList, groupLogincalFiles);
       Mapped res = Mapped.OK();
       Mapped res = Mapped.OK();
       res.put("code", 200);
       res.put("code", 200);
       res.put("result", groupLogincalFiles);
       res.put("result", groupLogincalFiles);
@@ -154,16 +154,22 @@ public class FileService {
     }
     }
   }
   }
 
 
-  public GroupLogincalFile groupLogicalFile(
-      String groupName, String group, List<LogicalFile> logicalFileList) {
-    GroupLogincalFile groupLogincalFile = new GroupLogincalFile();
-    groupLogincalFile.setGroupName(groupName);
-    groupLogincalFile.setId(IdUtil.randomUUID());
-    groupLogincalFile.setChildren(
+  public void groupLogicalFile(
+      String groupName,
+      String group,
+      List<LogicalFile> logicalFileList,
+      List<GroupLogincalFile> groupLogincalFiles) {
+    List<LogicalFile> children =
         logicalFileList.stream()
         logicalFileList.stream()
             .filter(t -> t.getFilename().startsWith(group))
             .filter(t -> t.getFilename().startsWith(group))
-            .collect(Collectors.toList()));
-    return groupLogincalFile;
+            .collect(Collectors.toList());
+    if (children != null && children.size() > 0) {
+      GroupLogincalFile groupLogincalFile = new GroupLogincalFile();
+      groupLogincalFile.setGroupName(groupName);
+      groupLogincalFile.setId(IdUtil.randomUUID());
+      groupLogincalFile.setChildren(children);
+      groupLogincalFiles.add(groupLogincalFile);
+    }
   }
   }
 
 
   public Mapped listUploaded(FileListInput fileListInput) {
   public Mapped listUploaded(FileListInput fileListInput) {
@@ -173,6 +179,7 @@ public class FileService {
     } else {
     } else {
       String generated = fileListInput.getGenerated();
       String generated = fileListInput.getGenerated();
       Future<Long> longFuture = this.fileService.countTotalByModelId(modelId, generated);
       Future<Long> longFuture = this.fileService.countTotalByModelId(modelId, generated);
+      Future<String> modelNameFuture = this.fileService.retrieveModelname(modelId);
       int page = fileListInput.getPage();
       int page = fileListInput.getPage();
       int pageSize = fileListInput.getPageSize();
       int pageSize = fileListInput.getPageSize();
       int skip = (page - 1) * pageSize;
       int skip = (page - 1) * pageSize;
@@ -182,7 +189,6 @@ public class FileService {
       } else if ("false".equals(generated)) {
       } else if ("false".equals(generated)) {
         criteria.and("generated").is(Boolean.FALSE);
         criteria.and("generated").is(Boolean.FALSE);
       }
       }
-
       Query query = new Query(criteria);
       Query query = new Query(criteria);
       query.with(Sort.by(Order.desc("uploadDate")));
       query.with(Sort.by(Order.desc("uploadDate")));
       List<LogicalFile> resultList =
       List<LogicalFile> resultList =
@@ -193,10 +199,17 @@ public class FileService {
       } catch (ExecutionException | InterruptedException var17) {
       } catch (ExecutionException | InterruptedException var17) {
         return Mapped.ERROR("查询出错");
         return Mapped.ERROR("查询出错");
       }
       }
+      String modelName;
+      try {
+        modelName = modelNameFuture.get();
+      } catch (ExecutionException | InterruptedException var17) {
+        return Mapped.ERROR("查询出错");
+      }
       int i = skip;
       int i = skip;
       for (LogicalFile file : resultList) {
       for (LogicalFile file : resultList) {
         ++i;
         ++i;
         file.setCount(i);
         file.setCount(i);
+        file.setModelName(modelName);
       }
       }
       Mapped res = Mapped.OK();
       Mapped res = Mapped.OK();
       res.put("code", 200);
       res.put("code", 200);

+ 9 - 2
src/main/java/ieven/server/webapp/service/alipay/ALIPAY_GENERATED_ACCOUNT.java

@@ -13,29 +13,36 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 
 public class ALIPAY_GENERATED_ACCOUNT extends Ops implements Runnable {
 public class ALIPAY_GENERATED_ACCOUNT extends Ops implements Runnable {
   List<Fields> originFields;
   List<Fields> originFields;
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
+  CountDownLatch latch;
 
 
   public ALIPAY_GENERATED_ACCOUNT(
   public ALIPAY_GENERATED_ACCOUNT(
-      List<Fields> originFields, String modelId, MongoTemplate mongoTemplate) {
+      List<Fields> originFields,
+      String modelId,
+      MongoTemplate mongoTemplate,
+      CountDownLatch latch) {
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
-    Fields outputAccount = Ops.createFile(AlipayType.ALIPAY_GENERATED_ACCOUNT, modelId);
     // 账户明细
     // 账户明细
     List<Fields> accountFieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_ACCOUNT);
     List<Fields> accountFieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_ACCOUNT);
     if (CollectionUtils.isNotEmpty(accountFieldsList)) {
     if (CollectionUtils.isNotEmpty(accountFieldsList)) {
+      Fields outputAccount = Ops.createFile(AlipayType.ALIPAY_GENERATED_ACCOUNT, modelId);
       for (Fields origin : accountFieldsList) {
       for (Fields origin : accountFieldsList) {
         extractAccount(getCursor(origin.getFileId(), mongoTemplate), origin, outputAccount);
         extractAccount(getCursor(origin.getFileId(), mongoTemplate), origin, outputAccount);
       }
       }
     }
     }
+    latch.countDown();
   }
   }
 
 
   public void extractAccount(MongoCursor<Document> cursor, Fields origin, Fields output) {
   public void extractAccount(MongoCursor<Document> cursor, Fields origin, Fields output) {

+ 9 - 2
src/main/java/ieven/server/webapp/service/alipay/ALIPAY_GENERATED_LOGIN.java

@@ -14,29 +14,36 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 
 public class ALIPAY_GENERATED_LOGIN extends Ops implements Runnable {
 public class ALIPAY_GENERATED_LOGIN extends Ops implements Runnable {
 
 
   List<Fields> originFields;
   List<Fields> originFields;
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
+  CountDownLatch latch;
 
 
   public ALIPAY_GENERATED_LOGIN(
   public ALIPAY_GENERATED_LOGIN(
-      List<Fields> originFields, String modelId, MongoTemplate mongoTemplate) {
+      List<Fields> originFields,
+      String modelId,
+      MongoTemplate mongoTemplate,
+      CountDownLatch latch) {
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
-    Fields outputLogin = Ops.createFile(AlipayType.ALIPAY_GENERATED_LOGIN, modelId);
     List<Fields> loginFieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_LOGIN);
     List<Fields> loginFieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_LOGIN);
     if (CollectionUtils.isNotEmpty(loginFieldsList)) {
     if (CollectionUtils.isNotEmpty(loginFieldsList)) {
+      Fields outputLogin = Ops.createFile(AlipayType.ALIPAY_GENERATED_LOGIN, modelId);
       for (Fields origin : loginFieldsList) {
       for (Fields origin : loginFieldsList) {
         extractLogin(getCursor(origin.getFileId(), mongoTemplate), origin, outputLogin);
         extractLogin(getCursor(origin.getFileId(), mongoTemplate), origin, outputLogin);
       }
       }
     }
     }
+    latch.countDown();
   }
   }
 
 
   public void extractLogin(MongoCursor<Document> cursor, Fields origin, Fields output) {
   public void extractLogin(MongoCursor<Document> cursor, Fields origin, Fields output) {

+ 10 - 2
src/main/java/ieven/server/webapp/service/alipay/ALIPAY_GENERATED_TRADE.java

@@ -12,29 +12,37 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 
 public class ALIPAY_GENERATED_TRADE extends Ops implements Runnable {
 public class ALIPAY_GENERATED_TRADE extends Ops implements Runnable {
   List<Fields> originFields;
   List<Fields> originFields;
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
 
 
+  CountDownLatch latch;
+
   public ALIPAY_GENERATED_TRADE(
   public ALIPAY_GENERATED_TRADE(
-      List<Fields> originFields, String modelId, MongoTemplate mongoTemplate) {
+      List<Fields> originFields,
+      String modelId,
+      MongoTemplate mongoTemplate,
+      CountDownLatch latch) {
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
-    Fields outputTrade = Ops.createFile(AlipayType.ALIPAY_GENERATED_TRADE, modelId);
     // 交易记录
     // 交易记录
     List<Fields> tradeFieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRADE);
     List<Fields> tradeFieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRADE);
     if (CollectionUtils.isNotEmpty(tradeFieldsList)) {
     if (CollectionUtils.isNotEmpty(tradeFieldsList)) {
+      Fields outputTrade = Ops.createFile(AlipayType.ALIPAY_GENERATED_TRADE, modelId);
       for (Fields origin : tradeFieldsList) {
       for (Fields origin : tradeFieldsList) {
         extractTrade(getCursor(origin.getFileId(), mongoTemplate), origin, outputTrade);
         extractTrade(getCursor(origin.getFileId(), mongoTemplate), origin, outputTrade);
       }
       }
     }
     }
+    latch.countDown();
   }
   }
 
 
   public void extractTrade(MongoCursor<Document> cursor, Fields origin, Fields output) {
   public void extractTrade(MongoCursor<Document> cursor, Fields origin, Fields output) {

+ 10 - 2
src/main/java/ieven/server/webapp/service/alipay/ALIPAY_GENERATED_TRANSFER.java

@@ -11,29 +11,37 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 
 public class ALIPAY_GENERATED_TRANSFER extends Ops implements Runnable {
 public class ALIPAY_GENERATED_TRANSFER extends Ops implements Runnable {
   List<Fields> originFields;
   List<Fields> originFields;
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
 
 
+  CountDownLatch latch;
+
   public ALIPAY_GENERATED_TRANSFER(
   public ALIPAY_GENERATED_TRANSFER(
-      List<Fields> originFields, String modelId, MongoTemplate mongoTemplate) {
+      List<Fields> originFields,
+      String modelId,
+      MongoTemplate mongoTemplate,
+      CountDownLatch latch) {
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
-    Fields outputTransfer = Ops.createFile(AlipayType.ALIPAY_GENERATED_TRANSFER, modelId);
     // 转账明细
     // 转账明细
     List<Fields> transferFieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRANSFER);
     List<Fields> transferFieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_TRANSFER);
     if (CollectionUtils.isNotEmpty(transferFieldsList)) {
     if (CollectionUtils.isNotEmpty(transferFieldsList)) {
+      Fields outputTransfer = Ops.createFile(AlipayType.ALIPAY_GENERATED_TRANSFER, modelId);
       for (Fields origin : transferFieldsList) {
       for (Fields origin : transferFieldsList) {
         extractTransfer(getCursor(origin.getFileId(), mongoTemplate), outputTransfer);
         extractTransfer(getCursor(origin.getFileId(), mongoTemplate), outputTransfer);
       }
       }
     }
     }
+    latch.countDown();
   }
   }
 
 
   public void extractTransfer(MongoCursor<Document> cursor, Fields output) {
   public void extractTransfer(MongoCursor<Document> cursor, Fields output) {

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

@@ -16,6 +16,7 @@ import org.springframework.data.mongodb.core.query.Query;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 
 public class ALIPAY_ORIGIN_REGISTER extends Ops implements Runnable {
 public class ALIPAY_ORIGIN_REGISTER extends Ops implements Runnable {
 
 
@@ -24,26 +25,33 @@ public class ALIPAY_ORIGIN_REGISTER extends Ops implements Runnable {
 
 
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
 
 
+  CountDownLatch latch;
+
   public ALIPAY_ORIGIN_REGISTER() {}
   public ALIPAY_ORIGIN_REGISTER() {}
 
 
   public ALIPAY_ORIGIN_REGISTER(
   public ALIPAY_ORIGIN_REGISTER(
-      List<Fields> originFields, String modelId, MongoTemplate mongoTemplate) {
+      List<Fields> originFields,
+      String modelId,
+      MongoTemplate mongoTemplate,
+      CountDownLatch latch) {
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
     List<Fields> fieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_REGISTER);
     List<Fields> fieldsList = checkFields(originFields, AlipayType.ALIPAY_ORIGIN_REGISTER);
-    Fields output = Ops.createFile(AlipayType.ALIPAY_GENERATED_REGISTER, modelId);
     if (CollectionUtils.isNotEmpty(fieldsList)) {
     if (CollectionUtils.isNotEmpty(fieldsList)) {
+      Fields output = Ops.createFile(AlipayType.ALIPAY_GENERATED_REGISTER, modelId);
       // 创建并存储文件和表头
       // 创建并存储文件和表头
       // 可能有多个文件,对多个文件并行解析
       // 可能有多个文件,对多个文件并行解析
       for (Fields origin : fieldsList) {
       for (Fields origin : fieldsList) {
         extractRegister(origin, output);
         extractRegister(origin, output);
       }
       }
     }
     }
+    latch.countDown();
   }
   }
 
 
   public void extractRegister(Fields origin, Fields output) {
   public void extractRegister(Fields origin, Fields output) {

+ 56 - 19
src/main/java/ieven/server/webapp/service/alipay/AlipayService.java

@@ -7,6 +7,7 @@ import ieven.server.webapp.domain.data.Fields;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.file.LogicalFile;
 import ieven.server.webapp.domain.file.LogicalFile;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
+import ieven.server.webapp.service.tenpay.*;
 import ieven.server.webapp.util.DataUtils;
 import ieven.server.webapp.util.DataUtils;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
@@ -22,6 +23,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Executors;
 
 
@@ -32,7 +34,7 @@ public class AlipayService {
   @Autowired private HeaderProperties headerProperties;
   @Autowired private HeaderProperties headerProperties;
   @Autowired private FileService fileService;
   @Autowired private FileService fileService;
 
 
-  public Mapped extractAll(String modelId) {
+  public Mapped extractAll(String modelId) throws InterruptedException {
     // 先删除所有原来生成的表
     // 先删除所有原来生成的表
     clearAllGenerated(modelId);
     clearAllGenerated(modelId);
     // 查询出modelId的所有原始表头
     // 查询出modelId的所有原始表头
@@ -40,60 +42,95 @@ public class AlipayService {
     if (CollectionUtils.isEmpty(originFields)) {
     if (CollectionUtils.isEmpty(originFields)) {
       return Mapped.ERROR("文件为空");
       return Mapped.ERROR("文件为空");
     }
     }
+
     // 无限制大小的threadpool
     // 无限制大小的threadpool
     ExecutorService exec = Executors.newCachedThreadPool();
     ExecutorService exec = Executors.newCachedThreadPool();
+    CountDownLatch latch = new CountDownLatch(7);
     // 五联单-注册信息
     // 五联单-注册信息
-    exec.execute(new ALIPAY_ORIGIN_REGISTER(originFields, modelId, mongoTemplate));
+    exec.execute(new ALIPAY_ORIGIN_REGISTER(originFields, modelId, mongoTemplate, latch));
     // 五联单-登录日志
     // 五联单-登录日志
-    exec.execute(new ALIPAY_GENERATED_LOGIN(originFields, modelId, mongoTemplate));
+    exec.execute(new ALIPAY_GENERATED_LOGIN(originFields, modelId, mongoTemplate, latch));
     // 五联单-交易记录
     // 五联单-交易记录
-    exec.execute(new ALIPAY_GENERATED_TRADE(originFields, modelId, mongoTemplate));
+    exec.execute(new ALIPAY_GENERATED_TRADE(originFields, modelId, mongoTemplate, latch));
     // 五联单-账户明细
     // 五联单-账户明细
-    exec.execute(new ALIPAY_GENERATED_ACCOUNT(originFields, modelId, mongoTemplate));
+    exec.execute(new ALIPAY_GENERATED_ACCOUNT(originFields, modelId, mongoTemplate, latch));
     // 五联单-转账明细
     // 五联单-转账明细
-    exec.execute(new ALIPAY_GENERATED_TRANSFER(originFields, modelId, mongoTemplate));
+    exec.execute(new ALIPAY_GENERATED_TRANSFER(originFields, modelId, mongoTemplate, latch));
     // 反诈平台订单数据
     // 反诈平台订单数据
     exec.execute(
     exec.execute(
-        new AntiCheat(headerProperties, originFields, modelId, mongoTemplate, fileService));
+        new AntiCheat(headerProperties, originFields, modelId, mongoTemplate, fileService, latch));
     // 治安平台订单数据
     // 治安平台订单数据
     exec.execute(
     exec.execute(
-        new SecurityOrder(headerProperties, originFields, modelId, mongoTemplate, fileService));
+        new SecurityOrder(
+            headerProperties, originFields, modelId, mongoTemplate, fileService, latch));
+    latch.await();
+    CountDownLatch latch2 = new CountDownLatch(7);
     // 五联单-账户透视
     // 五联单-账户透视
     exec.execute(
     exec.execute(
-        new ScaleAnalysis(headerProperties, originFields, modelId, mongoTemplate, fileService));
+        new ScaleAnalysis(
+            headerProperties, originFields, modelId, mongoTemplate, fileService, latch2));
     // 转账分析
     // 转账分析
     exec.execute(
     exec.execute(
-        new TransferAnalysis(headerProperties, originFields, modelId, mongoTemplate, fileService));
+        new TransferAnalysis(
+            headerProperties, originFields, modelId, mongoTemplate, fileService, latch2));
     // 对手分析
     // 对手分析
     exec.execute(
     exec.execute(
-        new EndAnalysis(headerProperties, originFields, modelId, mongoTemplate, fileService));
+        new EndAnalysis(
+            headerProperties, originFields, modelId, mongoTemplate, fileService, latch2));
     // 收货地址分析
     // 收货地址分析
     exec.execute(
     exec.execute(
-        new DeliveryAnalysis(headerProperties, originFields, modelId, mongoTemplate, fileService));
+        new DeliveryAnalysis(
+            headerProperties, originFields, modelId, mongoTemplate, fileService, latch2));
     // IP分析
     // IP分析
     exec.execute(
     exec.execute(
-        new IpAnalysis(headerProperties, originFields, modelId, mongoTemplate, fileService));
+        new IpAnalysis(
+            headerProperties, originFields, modelId, mongoTemplate, fileService, latch2));
 
 
     // 存储了账号-户名的的信息
     // 存储了账号-户名的的信息
     Map<String, String> accountToName = new ConcurrentHashMap<>();
     Map<String, String> accountToName = new ConcurrentHashMap<>();
     // 反诈治安交易数据明细-从反诈读取户名
     // 反诈治安交易数据明细-从反诈读取户名
-    exec.execute(new AntiSecurityTrade1(modelId, mongoTemplate, accountToName));
+    exec.execute(new AntiSecurityTrade1(modelId, mongoTemplate, accountToName, latch2));
     // 反诈治安交易数据明细-从治安读取户名
     // 反诈治安交易数据明细-从治安读取户名
-    exec.execute(new AntiSecurityTrade2(modelId, mongoTemplate, accountToName));
+    exec.execute(new AntiSecurityTrade2(modelId, mongoTemplate, accountToName, latch2));
+    latch2.await();
+    CountDownLatch latch3 = new CountDownLatch(2);
     // 反诈治安交易数据明细-从反诈读取
     // 反诈治安交易数据明细-从反诈读取
     exec.execute(
     exec.execute(
         new AntiSecurityTrade3(
         new AntiSecurityTrade3(
-            headerProperties, modelId, mongoTemplate, accountToName, fileService));
+            headerProperties, modelId, mongoTemplate, accountToName, fileService, latch3));
     // 反诈治安交易数据明细-从治安读取
     // 反诈治安交易数据明细-从治安读取
     exec.execute(
     exec.execute(
         new AntiSecurityTrade4(
         new AntiSecurityTrade4(
-            headerProperties, modelId, mongoTemplate, accountToName, fileService));
+            headerProperties, modelId, mongoTemplate, accountToName, fileService, latch3));
+    latch3.await();
+    CountDownLatch latch4 = new CountDownLatch(2);
     // 反诈治安-账户透视
     // 反诈治安-账户透视
     exec.execute(
     exec.execute(
-        new AntiSecurityTradeScaleAnalysis(headerProperties, modelId, mongoTemplate, fileService));
+        new AntiSecurityTradeScaleAnalysis(
+            headerProperties, modelId, mongoTemplate, fileService, latch4));
     // 反诈治安-对手分析
     // 反诈治安-对手分析
     exec.execute(
     exec.execute(
-        new AntiSecurityTradeEndAnalysis(headerProperties, modelId, mongoTemplate, fileService));
+        new AntiSecurityTradeEndAnalysis(
+            headerProperties, modelId, mongoTemplate, fileService, latch4));
+    latch4.await();
+    CountDownLatch latch5 = new CountDownLatch(1);
+    exec.execute(
+        new TenpayAccount(
+            originFields, modelId, mongoTemplate, fileService, accountToName, latch5));
+    latch5.await();
+    CountDownLatch latch6 = new CountDownLatch(1);
+    exec.execute(new TenpayOrders(originFields, modelId, mongoTemplate, fileService, latch6));
+    latch6.await();
+
+    CountDownLatch latch7 = new CountDownLatch(4);
+    exec.execute(new TenpayTrades(modelId, mongoTemplate, accountToName, fileService, latch7));
+    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));
+    latch7.await();
     reorder(modelId);
     reorder(modelId);
     return Mapped.OK();
     return Mapped.OK();
   }
   }

+ 8 - 3
src/main/java/ieven/server/webapp/service/alipay/AntiCheat.java

@@ -12,12 +12,14 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 
 public class AntiCheat extends Ops implements Runnable {
 public class AntiCheat extends Ops implements Runnable {
   List<Fields> originFields;
   List<Fields> originFields;
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
+  CountDownLatch latch;
   private HeaderProperties headerProperties;
   private HeaderProperties headerProperties;
 
 
   public AntiCheat(
   public AntiCheat(
@@ -25,12 +27,14 @@ public class AntiCheat extends Ops implements Runnable {
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
@@ -38,10 +42,10 @@ public class AntiCheat extends Ops implements Runnable {
     List<String> headers = headerProperties.getAntiCheatOrigin();
     List<String> headers = headerProperties.getAntiCheatOrigin();
     List<String> outputHeaders = headerProperties.getAntiCheatOutput();
     List<String> outputHeaders = headerProperties.getAntiCheatOutput();
     // 直接删除旧表创建新表
     // 直接删除旧表创建新表
-    String newFileId =
-        createLogicAndDeleteOld("反诈数据-订单明细", modelId, outputHeaders, mongoTemplate, fileService);
     List<Fields> matched = matchHeaders(originFields, headers);
     List<Fields> matched = matchHeaders(originFields, headers);
     if (CollectionUtils.isNotEmpty(matched)) {
     if (CollectionUtils.isNotEmpty(matched)) {
+      String newFileId =
+          createLogicAndDeleteOld("反诈数据-订单明细", modelId, outputHeaders, mongoTemplate, fileService);
       for (Fields fields : matched) {
       for (Fields fields : matched) {
         String fileId = fields.getFileId();
         String fileId = fields.getFileId();
         MongoCursor<Document> cursor = getCursor(fileId, mongoTemplate);
         MongoCursor<Document> cursor = getCursor(fileId, mongoTemplate);
@@ -64,5 +68,6 @@ public class AntiCheat extends Ops implements Runnable {
         }
         }
       }
       }
     }
     }
+    latch.countDown();
   }
   }
 }
 }

+ 9 - 1
src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade1.java

@@ -7,6 +7,7 @@ import org.bson.Document;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
 
 
 public class AntiSecurityTrade1 extends Ops implements Runnable {
 public class AntiSecurityTrade1 extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
@@ -14,11 +15,17 @@ public class AntiSecurityTrade1 extends Ops implements Runnable {
 
 
   Map<String, String> accountToName;
   Map<String, String> accountToName;
 
 
+  CountDownLatch latch;
+
   public AntiSecurityTrade1(
   public AntiSecurityTrade1(
-      String modelId, MongoTemplate mongoTemplate, Map<String, String> accountToName) {
+      String modelId,
+      MongoTemplate mongoTemplate,
+      Map<String, String> accountToName,
+      CountDownLatch latch2) {
     this.accountToName = accountToName;
     this.accountToName = accountToName;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
+    this.latch = latch2;
   }
   }
 
 
   @Override
   @Override
@@ -40,5 +47,6 @@ public class AntiSecurityTrade1 extends Ops implements Runnable {
         }
         }
       }
       }
     }
     }
+    this.latch.countDown();
   }
   }
 }
 }

+ 8 - 1
src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade2.java

@@ -7,18 +7,24 @@ import org.bson.Document;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
 
 
 public class AntiSecurityTrade2 extends Ops implements Runnable {
 public class AntiSecurityTrade2 extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   String modelId;
   String modelId;
 
 
   Map<String, String> accountToName;
   Map<String, String> accountToName;
+  CountDownLatch latch;
 
 
   public AntiSecurityTrade2(
   public AntiSecurityTrade2(
-      String modelId, MongoTemplate mongoTemplate, Map<String, String> accountToName) {
+      String modelId,
+      MongoTemplate mongoTemplate,
+      Map<String, String> accountToName,
+      CountDownLatch latch2) {
     this.accountToName = accountToName;
     this.accountToName = accountToName;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
+    this.latch = latch2;
   }
   }
 
 
   @Override
   @Override
@@ -40,5 +46,6 @@ public class AntiSecurityTrade2 extends Ops implements Runnable {
         }
         }
       }
       }
     }
     }
+    this.latch.countDown();
   }
   }
 }
 }

+ 18 - 9
src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade3.java

@@ -14,6 +14,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
 
 
 public class AntiSecurityTrade3 extends Ops implements Runnable {
 public class AntiSecurityTrade3 extends Ops implements Runnable {
 
 
@@ -25,32 +26,39 @@ public class AntiSecurityTrade3 extends Ops implements Runnable {
   Map<String, String> accountToName;
   Map<String, String> accountToName;
   FileService fileService;
   FileService fileService;
 
 
+  CountDownLatch latch;
+
   public AntiSecurityTrade3(
   public AntiSecurityTrade3(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
       Map<String, String> accountToName,
       Map<String, String> accountToName,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch3) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.accountToName = accountToName;
     this.accountToName = accountToName;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    latch = latch3;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
-    String antiSecurityFileId =
-        createLogicAndDeleteOld(
-            "反诈治安-交易明细",
-            modelId,
-            headerProperties.getAntiSecurityTradeOutput(),
-            mongoTemplate,
-            fileService);
-
+    String antiSecurityFileId = "";
     String dateFileId = getFileId("反诈数据-订单明细", modelId, mongoTemplate);
     String dateFileId = getFileId("反诈数据-订单明细", modelId, mongoTemplate);
     // 遍历登录日志全表
     // 遍历登录日志全表
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+    if (cursor.hasNext()) {
+      antiSecurityFileId =
+          createLogicAndDeleteOld(
+              "反诈治安-交易明细",
+              modelId,
+              headerProperties.getAntiSecurityTradeOutput(),
+              mongoTemplate,
+              fileService);
+    }
+
     Document origin;
     Document origin;
     List<DataMap> needToSave = new ArrayList<>(1000);
     List<DataMap> needToSave = new ArrayList<>(1000);
     while (cursor.hasNext()) {
     while (cursor.hasNext()) {
@@ -123,5 +131,6 @@ public class AntiSecurityTrade3 extends Ops implements Runnable {
     if (CollectionUtils.isNotEmpty(needToSave)) {
     if (CollectionUtils.isNotEmpty(needToSave)) {
       saveLines(needToSave, mongoTemplate);
       saveLines(needToSave, mongoTemplate);
     }
     }
+    latch.countDown();
   }
   }
 }
 }

+ 16 - 8
src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTrade4.java

@@ -14,6 +14,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
 
 
 public class AntiSecurityTrade4 extends Ops implements Runnable {
 public class AntiSecurityTrade4 extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
@@ -22,31 +23,37 @@ public class AntiSecurityTrade4 extends Ops implements Runnable {
   Map<String, String> accountToName;
   Map<String, String> accountToName;
   HeaderProperties headerProperties;
   HeaderProperties headerProperties;
   FileService fileService;
   FileService fileService;
+  CountDownLatch latch;
 
 
   public AntiSecurityTrade4(
   public AntiSecurityTrade4(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
       Map<String, String> accountToName,
       Map<String, String> accountToName,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch3) {
     this.accountToName = accountToName;
     this.accountToName = accountToName;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    latch = latch3;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
-    String antiSecurityFileId =
-        createLogicAndDeleteOld(
-            "反诈治安-交易明细",
-            modelId,
-            headerProperties.getAntiSecurityTradeOutput(),
-            mongoTemplate,
-            fileService);
+    String antiSecurityFileId = "";
     String dateFileId = getFileId("治安数据-订单明细", modelId, mongoTemplate);
     String dateFileId = getFileId("治安数据-订单明细", modelId, mongoTemplate);
     // 遍历登录日志全表
     // 遍历登录日志全表
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+    if (cursor.hasNext()) {
+      antiSecurityFileId =
+          createLogicAndDeleteOld(
+              "反诈治安-交易明细",
+              modelId,
+              headerProperties.getAntiSecurityTradeOutput(),
+              mongoTemplate,
+              fileService);
+    }
     Document origin;
     Document origin;
     List<DataMap> needToSave = new ArrayList<>(1000);
     List<DataMap> needToSave = new ArrayList<>(1000);
     while (cursor.hasNext()) {
     while (cursor.hasNext()) {
@@ -119,5 +126,6 @@ public class AntiSecurityTrade4 extends Ops implements Runnable {
     if (CollectionUtils.isNotEmpty(needToSave)) {
     if (CollectionUtils.isNotEmpty(needToSave)) {
       saveLines(needToSave, mongoTemplate);
       saveLines(needToSave, mongoTemplate);
     }
     }
+    latch.countDown();
   }
   }
 }
 }

+ 19 - 11
src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTradeEndAnalysis.java

@@ -15,39 +15,46 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
 
 
 public class AntiSecurityTradeEndAnalysis extends Ops implements Runnable {
 public class AntiSecurityTradeEndAnalysis extends Ops implements Runnable {
 
 
-  private HeaderProperties headerProperties;
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
+  CountDownLatch latch;
+  private HeaderProperties headerProperties;
 
 
   public AntiSecurityTradeEndAnalysis(
   public AntiSecurityTradeEndAnalysis(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch4) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch4;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
     // 直接删除并创建表
     // 直接删除并创建表
-    String newFileId =
-        createLogicAndDeleteOld(
-            "反诈治安-对手透视",
-            modelId,
-            headerProperties.getAntiSecurityTradeEndAnalysisOutput(),
-            mongoTemplate,
-            fileService);
+    String newFileId = "";
     String dateFileId = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
     String dateFileId = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
-    // 插入记录用户后续查询明细
-    insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+    if (cursor.hasNext()) {
+      newFileId =
+          createLogicAndDeleteOld(
+              "反诈治安-对手透视",
+              modelId,
+              headerProperties.getAntiSecurityTradeEndAnalysisOutput(),
+              mongoTemplate,
+              fileService);
+      // 插入记录用户后续查询明细
+      insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+    }
     Set<String> alipayIds = new HashSet<>();
     Set<String> alipayIds = new HashSet<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, Set<String>> idToMainIds = new HashMap<>();
     Map<String, Set<String>> idToMainIds = new HashMap<>();
@@ -145,5 +152,6 @@ public class AntiSecurityTradeEndAnalysis extends Ops implements Runnable {
       }
       }
       saveLines(idToData.values(), "交易总额", mongoTemplate);
       saveLines(idToData.values(), "交易总额", mongoTemplate);
     }
     }
+    this.latch.countDown();
   }
   }
 }
 }

+ 19 - 11
src/main/java/ieven/server/webapp/service/alipay/AntiSecurityTradeScaleAnalysis.java

@@ -15,38 +15,45 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
 
 
 public class AntiSecurityTradeScaleAnalysis extends Ops implements Runnable {
 public class AntiSecurityTradeScaleAnalysis extends Ops implements Runnable {
-  private HeaderProperties headerProperties;
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
+  CountDownLatch latch;
+  private HeaderProperties headerProperties;
 
 
   public AntiSecurityTradeScaleAnalysis(
   public AntiSecurityTradeScaleAnalysis(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch4) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch4;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
     // 直接删除并创建表
     // 直接删除并创建表
-    String newFileId =
-        createLogicAndDeleteOld(
-            "反诈治安-账户透视",
-            modelId,
-            headerProperties.getAntiSecurityTradeScaleAnalysisOutput(),
-            mongoTemplate,
-            fileService);
+    String newFileId = "";
     String dateFileId = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
     String dateFileId = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
-    // 插入记录用户后续查询明细
-    insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+    if (cursor.hasNext()) {
+      newFileId =
+          createLogicAndDeleteOld(
+              "反诈治安-账户透视",
+              modelId,
+              headerProperties.getAntiSecurityTradeScaleAnalysisOutput(),
+              mongoTemplate,
+              fileService);
+      // 插入记录用户后续查询明细
+      insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+    }
     Set<String> alipayIds = new HashSet<>();
     Set<String> alipayIds = new HashSet<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, Set<String>> idToNames = new HashMap<>();
     Map<String, Set<String>> idToNames = new HashMap<>();
@@ -124,5 +131,6 @@ public class AntiSecurityTradeScaleAnalysis extends Ops implements Runnable {
       }
       }
       saveLines(idToData.values(), "交易总额", mongoTemplate);
       saveLines(idToData.values(), "交易总额", mongoTemplate);
     }
     }
+    latch.countDown();
   }
   }
 }
 }

+ 18 - 9
src/main/java/ieven/server/webapp/service/alipay/DeliveryAnalysis.java

@@ -13,6 +13,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.CountDownLatch;
 
 
 public class DeliveryAnalysis extends Ops implements Runnable {
 public class DeliveryAnalysis extends Ops implements Runnable {
 
 
@@ -22,33 +23,40 @@ public class DeliveryAnalysis extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
 
 
+  CountDownLatch latch;
+
   public DeliveryAnalysis(
   public DeliveryAnalysis(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch2) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    latch = latch2;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
     // 直接删除并创建表
     // 直接删除并创建表
-    String newFileId =
-        createLogicAndDeleteOld(
-            "五联单-收货地址分析",
-            modelId,
-            headerProperties.getDeliveryAnalysisOutput(),
-            mongoTemplate,
-            fileService);
+    String newFileId = "";
     String dateFileId = getFileId("五联单-交易记录", modelId, mongoTemplate);
     String dateFileId = getFileId("五联单-交易记录", modelId, mongoTemplate);
-    insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
     // 遍历交易记录全表
     // 遍历交易记录全表
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+    if (cursor.hasNext()) {
+      newFileId =
+          createLogicAndDeleteOld(
+              "五联单-收货地址分析",
+              modelId,
+              headerProperties.getDeliveryAnalysisOutput(),
+              mongoTemplate,
+              fileService);
+      insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+    }
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, Set<String>> idToBuyerIds = new HashMap<>();
     Map<String, Set<String>> idToBuyerIds = new HashMap<>();
     Document origin;
     Document origin;
@@ -103,5 +111,6 @@ public class DeliveryAnalysis extends Ops implements Runnable {
       }
       }
       saveLines(idToData.values(), "交易金额", mongoTemplate);
       saveLines(idToData.values(), "交易金额", mongoTemplate);
     }
     }
+    latch.countDown();
   }
   }
 }
 }

+ 18 - 9
src/main/java/ieven/server/webapp/service/alipay/EndAnalysis.java

@@ -13,6 +13,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.CountDownLatch;
 
 
 public class EndAnalysis extends Ops implements Runnable {
 public class EndAnalysis extends Ops implements Runnable {
 
 
@@ -22,33 +23,40 @@ public class EndAnalysis extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
 
 
+  CountDownLatch latch;
+
   public EndAnalysis(
   public EndAnalysis(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch2) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch2;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
     // 直接删除并创建表
     // 直接删除并创建表
-    String newFileId =
-        createLogicAndDeleteOld(
-            "五联单-对手透视",
-            modelId,
-            headerProperties.getEndAnalysisOutput(),
-            mongoTemplate,
-            fileService);
+    String newFileId = "";
     String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
     String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
-    insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
     // 遍历账户明细全表
     // 遍历账户明细全表
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+    if (cursor.hasNext()) {
+      newFileId =
+          createLogicAndDeleteOld(
+              "五联单-对手透视",
+              modelId,
+              headerProperties.getEndAnalysisOutput(),
+              mongoTemplate,
+              fileService);
+      insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+    }
     Set<String> alipayIds = new HashSet<>();
     Set<String> alipayIds = new HashSet<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, Set<String>> idToMainIds = new HashMap<>();
     Map<String, Set<String>> idToMainIds = new HashMap<>();
@@ -146,5 +154,6 @@ public class EndAnalysis extends Ops implements Runnable {
       }
       }
       saveLines(idToData.values(), "交易总额", mongoTemplate);
       saveLines(idToData.values(), "交易总额", mongoTemplate);
     }
     }
+    latch.countDown();
   }
   }
 }
 }

+ 18 - 9
src/main/java/ieven/server/webapp/service/alipay/IpAnalysis.java

@@ -12,6 +12,7 @@ import org.bson.Document;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.CountDownLatch;
 
 
 public class IpAnalysis extends Ops implements Runnable {
 public class IpAnalysis extends Ops implements Runnable {
 
 
@@ -21,32 +22,39 @@ public class IpAnalysis extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
 
 
+  CountDownLatch latch;
+
   public IpAnalysis(
   public IpAnalysis(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch2) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    latch = latch2;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
-    String newFileId =
-        createLogicAndDeleteOld(
-            "五联单-IP地址分析",
-            modelId,
-            headerProperties.getIpAnalysisOutput(),
-            mongoTemplate,
-            fileService);
+    String newFileId = "";
     String dateFileId = getFileId("五联单-登录日志", modelId, mongoTemplate);
     String dateFileId = getFileId("五联单-登录日志", modelId, mongoTemplate);
-    insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
     // 遍历登录日志全表
     // 遍历登录日志全表
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+    if (cursor.hasNext()) {
+      newFileId =
+          createLogicAndDeleteOld(
+              "五联单-IP地址分析",
+              modelId,
+              headerProperties.getIpAnalysisOutput(),
+              mongoTemplate,
+              fileService);
+      insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+    }
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, Set<String>> idToAlipayIds = new HashMap<>();
     Map<String, Set<String>> idToAlipayIds = new HashMap<>();
     Document origin;
     Document origin;
@@ -121,5 +129,6 @@ public class IpAnalysis extends Ops implements Runnable {
       }
       }
       saveLines(idToData.values(), "登录次数", mongoTemplate);
       saveLines(idToData.values(), "登录次数", mongoTemplate);
     }
     }
+    this.latch.countDown();
   }
   }
 }
 }

+ 17 - 9
src/main/java/ieven/server/webapp/service/alipay/ScaleAnalysis.java

@@ -12,6 +12,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.CountDownLatch;
 
 
 public class ScaleAnalysis extends Ops implements Runnable {
 public class ScaleAnalysis extends Ops implements Runnable {
 
 
@@ -21,33 +22,39 @@ public class ScaleAnalysis extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
 
 
+  CountDownLatch latch;
+
   public ScaleAnalysis(
   public ScaleAnalysis(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
     // 直接删除并创建表
     // 直接删除并创建表
-    String newFileId =
-        createLogicAndDeleteOld(
-            "五联单-账户透视",
-            modelId,
-            headerProperties.getScaleAnalysisOutput(),
-            mongoTemplate,
-            fileService);
+    String newFileId = "";
     String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
     String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
-    insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
     // 遍历账户明细全表
     // 遍历账户明细全表
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
     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<>();
     Set<String> alipayIds = new HashSet<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Document origin;
     Document origin;
@@ -109,5 +116,6 @@ public class ScaleAnalysis extends Ops implements Runnable {
       }
       }
       saveLines(idToData.values(), "交易总额", mongoTemplate);
       saveLines(idToData.values(), "交易总额", mongoTemplate);
     }
     }
+    latch.countDown();
   }
   }
 }
 }

+ 8 - 3
src/main/java/ieven/server/webapp/service/alipay/SecurityOrder.java

@@ -12,6 +12,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 
 public class SecurityOrder extends Ops implements Runnable {
 public class SecurityOrder extends Ops implements Runnable {
 
 
@@ -20,18 +21,21 @@ public class SecurityOrder extends Ops implements Runnable {
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
+  CountDownLatch latch;
 
 
   public SecurityOrder(
   public SecurityOrder(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
@@ -39,9 +43,9 @@ public class SecurityOrder extends Ops implements Runnable {
     List<String> headers = headerProperties.getSecurityOrigin();
     List<String> headers = headerProperties.getSecurityOrigin();
     List<String> outputHeaders = headerProperties.getSecurityOutput();
     List<String> outputHeaders = headerProperties.getSecurityOutput();
     List<Fields> matched = matchHeaders(originFields, headers);
     List<Fields> matched = matchHeaders(originFields, headers);
-    String newFileId =
-        createLogicAndDeleteOld("治安数据-订单明细", modelId, outputHeaders, mongoTemplate, fileService);
     if (CollectionUtils.isNotEmpty(matched)) {
     if (CollectionUtils.isNotEmpty(matched)) {
+      String newFileId =
+          createLogicAndDeleteOld("治安数据-订单明细", modelId, outputHeaders, mongoTemplate, fileService);
       for (Fields fields : matched) {
       for (Fields fields : matched) {
         String fileId = fields.getFileId();
         String fileId = fields.getFileId();
         MongoCursor<Document> cursor = getCursor(fileId, mongoTemplate);
         MongoCursor<Document> cursor = getCursor(fileId, mongoTemplate);
@@ -64,5 +68,6 @@ public class SecurityOrder extends Ops implements Runnable {
         }
         }
       }
       }
     }
     }
+    latch.countDown();
   }
   }
 }
 }

+ 18 - 9
src/main/java/ieven/server/webapp/service/alipay/TransferAnalysis.java

@@ -12,6 +12,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.CountDownLatch;
 
 
 public class TransferAnalysis extends Ops implements Runnable {
 public class TransferAnalysis extends Ops implements Runnable {
 
 
@@ -21,33 +22,40 @@ public class TransferAnalysis extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
 
 
+  CountDownLatch latch;
+
   public TransferAnalysis(
   public TransferAnalysis(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch2) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch2;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
     // 直接删除并创建表
     // 直接删除并创建表
-    String newFileId =
-        createLogicAndDeleteOld(
-            "五联单-转账分析",
-            modelId,
-            headerProperties.getTransferAnalysisOutput(),
-            mongoTemplate,
-            fileService);
+    String newFileId = "";
     String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
     String dateFileId = getFileId("五联单-账户明细", modelId, mongoTemplate);
-    insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
     // 遍历账户明细全表
     // 遍历账户明细全表
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
     MongoCursor<Document> cursor = getCursor(dateFileId, mongoTemplate);
+    if (cursor.hasNext()) {
+      newFileId =
+          createLogicAndDeleteOld(
+              "五联单-转账分析",
+              modelId,
+              headerProperties.getTransferAnalysisOutput(),
+              mongoTemplate,
+              fileService);
+      insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+    }
     Set<String> alipayIds = new HashSet<>();
     Set<String> alipayIds = new HashSet<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Map<String, DataMap> idToData = new HashMap<>();
     Document origin;
     Document origin;
@@ -113,5 +121,6 @@ public class TransferAnalysis extends Ops implements Runnable {
       }
       }
       saveLines(idToData.values(), "转账总额", mongoTemplate);
       saveLines(idToData.values(), "转账总额", mongoTemplate);
     }
     }
+    latch.countDown();
   }
   }
 }
 }

+ 11 - 1
src/main/java/ieven/server/webapp/service/tenpay/TenpayAccount.java

@@ -6,6 +6,7 @@ import ieven.server.webapp.domain.data.Fields;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.tenpay.TenpayHeaders;
 import ieven.server.webapp.domain.tenpay.TenpayHeaders;
 import ieven.server.webapp.service.Ops;
 import ieven.server.webapp.service.Ops;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.bson.Document;
 import org.bson.Document;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -13,7 +14,9 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
 
 
+@Slf4j
 public class TenpayAccount extends Ops implements Runnable {
 public class TenpayAccount extends Ops implements Runnable {
   List<Fields> originFields;
   List<Fields> originFields;
   String modelId;
   String modelId;
@@ -22,21 +25,26 @@ public class TenpayAccount extends Ops implements Runnable {
 
 
   Map<String, String> accountToName;
   Map<String, String> accountToName;
 
 
+  CountDownLatch latch;
+
   public TenpayAccount(
   public TenpayAccount(
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
       FileService fileService,
       FileService fileService,
-      Map<String, String> accountToName) {
+      Map<String, String> accountToName,
+      CountDownLatch latch) {
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
     this.accountToName = accountToName;
     this.accountToName = accountToName;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
+    log.info("财付通-开户信息开始");
     List<String> headers = TenpayHeaders.getHeaders(3);
     List<String> headers = TenpayHeaders.getHeaders(3);
     // 直接删除旧表创建新表
     // 直接删除旧表创建新表
     String newFileId =
     String newFileId =
@@ -66,5 +74,7 @@ public class TenpayAccount extends Ops implements Runnable {
         }
         }
       }
       }
     }
     }
+    latch.countDown();
+    log.info("财付通-开户信息结束");
   }
   }
 }
 }

+ 10 - 1
src/main/java/ieven/server/webapp/service/tenpay/TenpayMobile.java

@@ -6,33 +6,40 @@ import ieven.server.webapp.domain.data.Fields;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.tenpay.TenpayHeaders;
 import ieven.server.webapp.domain.tenpay.TenpayHeaders;
 import ieven.server.webapp.service.Ops;
 import ieven.server.webapp.service.Ops;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.bson.Document;
 import org.bson.Document;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 
+@Slf4j
 public class TenpayMobile extends Ops implements Runnable {
 public class TenpayMobile extends Ops implements Runnable {
 
 
   List<Fields> originFields;
   List<Fields> originFields;
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
+  CountDownLatch latch;
 
 
   public TenpayMobile(
   public TenpayMobile(
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch) {
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
+    log.info("财付通-手机明细开始");
     List<String> headers = TenpayHeaders.getHeaders(4);
     List<String> headers = TenpayHeaders.getHeaders(4);
     // 直接删除旧表创建新表
     // 直接删除旧表创建新表
     String newFileId =
     String newFileId =
@@ -59,5 +66,7 @@ public class TenpayMobile extends Ops implements Runnable {
         }
         }
       }
       }
     }
     }
+    latch.countDown();
+    log.info("财付通-手机明细结束");
   }
   }
 }
 }

+ 11 - 1
src/main/java/ieven/server/webapp/service/tenpay/TenpayOrders.java

@@ -6,13 +6,16 @@ import ieven.server.webapp.domain.data.Fields;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.tenpay.TenpayHeaders;
 import ieven.server.webapp.domain.tenpay.TenpayHeaders;
 import ieven.server.webapp.service.Ops;
 import ieven.server.webapp.service.Ops;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.bson.Document;
 import org.bson.Document;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.MongoTemplate;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
 
+@Slf4j
 public class TenpayOrders extends Ops implements Runnable {
 public class TenpayOrders extends Ops implements Runnable {
 
 
   List<Fields> originFields;
   List<Fields> originFields;
@@ -20,19 +23,24 @@ public class TenpayOrders extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
 
 
+  CountDownLatch latch;
+
   public TenpayOrders(
   public TenpayOrders(
       List<Fields> originFields,
       List<Fields> originFields,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch) {
     this.originFields = originFields;
     this.originFields = originFields;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
+    log.info("财付通-订单明细开始");
     List<String> headers = TenpayHeaders.getHeaders(1);
     List<String> headers = TenpayHeaders.getHeaders(1);
     // 直接删除旧表创建新表
     // 直接删除旧表创建新表
     String newFileId =
     String newFileId =
@@ -59,5 +67,7 @@ public class TenpayOrders extends Ops implements Runnable {
         }
         }
       }
       }
     }
     }
+    latch.countDown();
+    log.info("财付通-订单明细结束");
   }
   }
 }
 }

+ 7 - 1
src/main/java/ieven/server/webapp/service/tenpay/TenpayTrades.java

@@ -15,6 +15,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
 
 
 public class TenpayTrades extends Ops implements Runnable {
 public class TenpayTrades extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
@@ -23,15 +24,19 @@ public class TenpayTrades extends Ops implements Runnable {
   Map<String, String> accountToName;
   Map<String, String> accountToName;
   FileService fileService;
   FileService fileService;
 
 
+  CountDownLatch latch;
+
   public TenpayTrades(
   public TenpayTrades(
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
       Map<String, String> accountToName,
       Map<String, String> accountToName,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch) {
     this.accountToName = accountToName;
     this.accountToName = accountToName;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
@@ -112,5 +117,6 @@ public class TenpayTrades extends Ops implements Runnable {
     if (CollectionUtils.isNotEmpty(needToSave)) {
     if (CollectionUtils.isNotEmpty(needToSave)) {
       saveLines(needToSave, mongoTemplate);
       saveLines(needToSave, mongoTemplate);
     }
     }
+    this.latch = latch;
   }
   }
 }
 }

+ 11 - 1
src/main/java/ieven/server/webapp/service/tenpay/TenpayTradesEndAnalysis.java

@@ -5,6 +5,7 @@ import ieven.server.webapp.domain.alipay.HeaderProperties;
 import ieven.server.webapp.domain.data.DataMap;
 import ieven.server.webapp.domain.data.DataMap;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.service.Ops;
 import ieven.server.webapp.service.Ops;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.bson.Document;
 import org.bson.Document;
@@ -15,7 +16,9 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
 
 
+@Slf4j
 public class TenpayTradesEndAnalysis extends Ops implements Runnable {
 public class TenpayTradesEndAnalysis extends Ops implements Runnable {
 
 
   private HeaderProperties headerProperties;
   private HeaderProperties headerProperties;
@@ -23,19 +26,24 @@ public class TenpayTradesEndAnalysis extends Ops implements Runnable {
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
 
 
+  CountDownLatch latch;
+
   public TenpayTradesEndAnalysis(
   public TenpayTradesEndAnalysis(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
+    log.info("财付通-对手透视开始");
     // 直接删除并创建表
     // 直接删除并创建表
     String newFileId =
     String newFileId =
         createLogicAndDeleteOld(
         createLogicAndDeleteOld(
@@ -145,5 +153,7 @@ public class TenpayTradesEndAnalysis extends Ops implements Runnable {
       }
       }
       saveLines(idToData.values(), "交易总额", mongoTemplate);
       saveLines(idToData.values(), "交易总额", mongoTemplate);
     }
     }
+    latch.countDown();
+    log.info("财付通-对手透视结束");
   }
   }
 }
 }

+ 10 - 1
src/main/java/ieven/server/webapp/service/tenpay/TenpayTradesScaleAnalysis.java

@@ -5,6 +5,7 @@ import ieven.server.webapp.domain.alipay.HeaderProperties;
 import ieven.server.webapp.domain.data.DataMap;
 import ieven.server.webapp.domain.data.DataMap;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.service.Ops;
 import ieven.server.webapp.service.Ops;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.bson.Document;
 import org.bson.Document;
@@ -15,26 +16,32 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
 
 
+@Slf4j
 public class TenpayTradesScaleAnalysis extends Ops implements Runnable {
 public class TenpayTradesScaleAnalysis extends Ops implements Runnable {
   private HeaderProperties headerProperties;
   private HeaderProperties headerProperties;
   String modelId;
   String modelId;
   MongoTemplate mongoTemplate;
   MongoTemplate mongoTemplate;
   FileService fileService;
   FileService fileService;
+  CountDownLatch latch;
 
 
   public TenpayTradesScaleAnalysis(
   public TenpayTradesScaleAnalysis(
       HeaderProperties headerProperties,
       HeaderProperties headerProperties,
       String modelId,
       String modelId,
       MongoTemplate mongoTemplate,
       MongoTemplate mongoTemplate,
-      FileService fileService) {
+      FileService fileService,
+      CountDownLatch latch) {
     this.headerProperties = headerProperties;
     this.headerProperties = headerProperties;
     this.modelId = modelId;
     this.modelId = modelId;
     this.mongoTemplate = mongoTemplate;
     this.mongoTemplate = mongoTemplate;
     this.fileService = fileService;
     this.fileService = fileService;
+    this.latch = latch;
   }
   }
 
 
   @Override
   @Override
   public void run() {
   public void run() {
+    log.info("财付通-账户透视开始");
     // 直接删除并创建表
     // 直接删除并创建表
     String newFileId =
     String newFileId =
         createLogicAndDeleteOld(
         createLogicAndDeleteOld(
@@ -124,5 +131,7 @@ public class TenpayTradesScaleAnalysis extends Ops implements Runnable {
       }
       }
       saveLines(idToData.values(), "交易总额", mongoTemplate);
       saveLines(idToData.values(), "交易总额", mongoTemplate);
     }
     }
+    latch.countDown();
+    log.info("财付通-账户透视结束");
   }
   }
 }
 }

+ 2 - 20
src/main/java/ieven/server/webapp/util/excel/ExcelXlsReader.java

@@ -255,12 +255,9 @@ public class ExcelXlsReader implements HSSFListener {
         if (formatString == null) {
         if (formatString == null) {
           formatString = "";
           formatString = "";
         }
         }
-        // logger.info("sid:"+record.getSid()+"|||"+thisColumn+"|||"+numrec.getValue()+"|||"+numrec.getRecordSize()+"|||"+formatString);
         value =
         value =
             formatListener.formatNumberDateCell(numrec).trim().replace("\"", "").replace("'", "");
             formatListener.formatNumberDateCell(numrec).trim().replace("\"", "").replace("'", "");
         value = value.equals("") ? " " : value;
         value = value.equals("") ? " " : value;
-        // 向容器加入列值
-
         if (value.startsWith("-")
         if (value.startsWith("-")
             || formatString.endsWith("(#,##0.00)")
             || formatString.endsWith("(#,##0.00)")
             || formatString.endsWith("0.00_);\\(0.00\\)")
             || formatString.endsWith("0.00_);\\(0.00\\)")
@@ -278,26 +275,16 @@ public class ExcelXlsReader implements HSSFListener {
               || formatString.startsWith("h:mm")
               || formatString.startsWith("h:mm")
               || formatString.equals("[h]:mm:ss")
               || formatString.equals("[h]:mm:ss")
               || formatString.startsWith("[$-F800]")
               || formatString.startsWith("[$-F800]")
-              || formatString.startsWith("[$-804]")
-          // formatString.equals("m/d/yy") || formatString.endsWith("mmmm\\ dd\\,\\ yyyy")
-          ) {
+              || formatString.startsWith("[$-804]")) {
             BigDecimal bigDecimal = new BigDecimal(numrec.getValue());
             BigDecimal bigDecimal = new BigDecimal(numrec.getValue());
             value = bigDecimal.toString();
             value = bigDecimal.toString();
             String[] strV = (value).split("\\.");
             String[] strV = (value).split("\\.");
             if (value.length() < 6 || (strV.length == 2 && strV[0].length() < 6)) {
             if (value.length() < 6 || (strV.length == 2 && strV[0].length() < 6)) {
               if (value.indexOf(".") == -1) {
               if (value.indexOf(".") == -1) {
                 value = StringToDate.toDate(numrec.getValue(), "yyyy-MM-dd");
                 value = StringToDate.toDate(numrec.getValue(), "yyyy-MM-dd");
-                //                                thisStr =
-                // formatter.formatRawCellContents(Double.parseDouble(value), formatIndex,
-                // formatString).trim();
-                //                                value =
-                // formatListener.formatNumberDateCell(Double.parseDouble(value), formatIndex,
-                // "yyyy-MM-dd").trim();
+
               } else {
               } else {
                 value = StringToDate.toDate(numrec.getValue(), "yyyy-MM-dd hh:mm:ss");
                 value = StringToDate.toDate(numrec.getValue(), "yyyy-MM-dd hh:mm:ss");
-                //                                value =
-                // formatListener.formatRawCellContents(Double.parseDouble(value), formatIndex,
-                // "yyyy-MM-dd hh:mm:ss").trim();
               }
               }
             } else {
             } else {
               //                            value = value.trim();
               //                            value = value.trim();
@@ -305,19 +292,14 @@ public class ExcelXlsReader implements HSSFListener {
           } else {
           } else {
             if (formatString.endsWith(":mm:ss\\ AM/PM")) {
             if (formatString.endsWith(":mm:ss\\ AM/PM")) {
               if (1 >= numrec.getValue() && numrec.getValue() >= 0) {
               if (1 >= numrec.getValue() && numrec.getValue() >= 0) {
-                //                                value=
-                // StringToDate.toDate(numrec.getValue(),"hh:mm:ss");
               } else {
               } else {
-                //                                value=decimalFormat.format(numrec.getValue());
                 BigDecimal bigDecimal = new BigDecimal(numrec.getValue());
                 BigDecimal bigDecimal = new BigDecimal(numrec.getValue());
                 value = bigDecimal.toString();
                 value = bigDecimal.toString();
               }
               }
             } else {
             } else {
-              //                            value=numrec.getValue()+"";
             }
             }
           }
           }
         }
         }
-        // logger.info(value);
         rowlist.add(thisColumn, PublicStatic.removeAllSpecial(value));
         rowlist.add(thisColumn, PublicStatic.removeAllSpecial(value));
         break;
         break;
       default:
       default:

+ 1 - 1
src/main/java/ieven/server/webapp/util/excel/ExcelXlsxReader.java

@@ -442,7 +442,7 @@ public class ExcelXlsxReader extends DefaultHandler {
             }
             }
           }
           }
           Set<String> valuesSet = new HashSet<>(valueList);
           Set<String> valuesSet = new HashSet<>(valueList);
-          if ((valuesSet.size() != 1 || !valuesSet.contains("")) && valueList.size() != 0) {
+          if ((valuesSet.size() > 1 || !valuesSet.contains("")) && valueList.size() != 0) {
             rowReader.getRows(sheetIndex, curRow, valueList);
             rowReader.getRows(sheetIndex, curRow, valueList);
           }
           }
           preRef = ref;
           preRef = ref;