Browse Source

主体信息模型

hankunkun 11 tháng trước cách đây
mục cha
commit
55ced733db

+ 1 - 0
src/main/java/ieven/server/webapp/domain/alipay/HeaderProperties.java

@@ -27,6 +27,7 @@ public class HeaderProperties {
   private List<String>staticUserOutput;
   private List<String>economicOrder;
   private List<String>economicOrderOutput;
+  private List<String>staticUserAllOutput;
 
   public HeaderProperties() {}
 

+ 82 - 5
src/main/java/ieven/server/webapp/service/datastatic/DataStaticAnalysisTotal.java

@@ -46,6 +46,7 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
         log.info("数据分析-主体信息汇总开始");
         // 直接删除并创建表
         String newFileId = "";
+        String newFileIdAll = "";
         String dateFileId = getFileId("数据分析-主体信息汇总明细", modelId, mongoTemplate);
         // 插入记录用户后续查询明细
         if (StringUtils.isNotBlank(dateFileId)) {
@@ -53,18 +54,24 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
             if (cursor.hasNext()) {
                 newFileId =createLogicAndDeleteOld("数据分析-主体信息汇总", modelId,headerProperties.getStaticUserOutput(),mongoTemplate, fileService);
                 insertFromTo(dateFileId, newFileId, modelId, mongoTemplate);
+
+                //维护一张人员信息基础表,用于模型计算
+                newFileIdAll =createLogicAndDeleteOld("数据分析-所有主体信息汇总", modelId,headerProperties.getStaticUserAllOutput(),mongoTemplate, fileService);
+                insertFromTo(dateFileId, newFileIdAll, modelId, mongoTemplate);
             }
             Set<String> alipayIds = new HashSet<>();
+            Set<String> alipayIdsAll = new HashSet<>();
             Map<String, DataMap> idToData = new HashMap<>();
             Map<String, Set<String>> idToNames = new HashMap<>();
             Document origin;
             List<DataMap> needToSave = new ArrayList<>(1000);
+            List<DataMap> needToSaveall = new ArrayList<>(1000);
             while (cursor.hasNext()) {
                 try {
                     origin = cursor.next();
                     String alipayId = origin.getString("交易主体账号");
                     DataMap dataMap;
-                    if (!alipayIds.contains(alipayId)) {
+                    if (StringUtils.isNotBlank(alipayId)&&!"null".equals(alipayId)&&!alipayIds.contains(alipayId)) {
                         alipayIds.add(alipayId);
                         dataMap = new DataMap();
                         dataMap.put("fileId", newFileId);
@@ -84,6 +91,12 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
                         }
                         namesSet.add(alipayUsername);
                     }
+                    //组装用户基本信息
+                    getDataAll(needToSaveall,origin,alipayIdsAll,newFileIdAll);
+                    if (needToSaveall.size() >= 1000) {
+                        saveLines(new ArrayList<>(needToSaveall), mongoTemplate);
+                        needToSaveall.clear();
+                    }
 
                 } catch (Exception exception) {
                     log.error(exception.getMessage(), exception);
@@ -140,10 +153,6 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
                 bdsjh=String.valueOf(dataMaps.get(0).get("绑定手机"));
                 zcsj=String.valueOf(dataMaps.get(0).get("注册时间"));
             }
-        }else if("反诈".equals(type)){
-            // "交易号", "商户订单号", "交易创建时间", "付款时间", "最近修改时间", "交易来源地", "类型", "用户信息", "交易对方信息", "消费名称", "金额(元)", "收/支", "交易状态", "备注", "对应的协查数据"));
-
-
         }else if("五联单".equals(type)){
 //       "用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "注册时间", "绑定手机", "绑定银行卡", "对应的协查数据"));
             String dateFileId2 = getFileId(AlipayHeaders.getGeneratedName(2), modelId, mongoTemplate);
@@ -170,4 +179,72 @@ public class DataStaticAnalysisTotal extends Ops implements Runnable {
         dataMap.put("绑定手机号", bdsjh);
         dataMap.put("注册时间", zcsj);
     }
+    public void getDataAll(List<DataMap> needToSaveall,Document origin,Set<String> alipayIdsAll,String newFileIdAll){
+        String type = origin.getString("类型");
+        String account = origin.getString("交易主体账号");
+        String accountds = origin.getString("交易对手账号");
+        List<String>accountList=new ArrayList<>();
+        if(StringUtils.isNotBlank(account)&&!"null".equals(account)){
+            accountList.add(account);
+        }
+
+        if(StringUtils.isNotBlank(accountds)&&!"null".equals(accountds)){
+            accountList.add(accountds);
+        }
+        if(CollectionUtils.isEmpty(accountList)){
+            return;
+        }
+        if("财付通".equals(type)){
+            //账户状态", "账号", "注册姓名", "注册时间", "注册身份证号", "绑定手机", "绑定状态", "开户行信息", "银行账号"
+            String dateFileId2 = getFileId(TenpayHeaders.getGeneratedName(3), modelId, mongoTemplate);
+            List<DataMap> dataMaps = this.mongoTemplate.find((new Query(
+                    Criteria.where("modelId")
+                            .is(modelId)
+                            .and("fileId")
+                            .is(dateFileId2)
+                            .and("账号")
+                            .in(accountList)
+                            .and("generated")
+                            .is(Boolean.TRUE))), DataMap.class);
+            if(CollectionUtils.isNotEmpty(dataMaps)){
+                for (DataMap dataMap : dataMaps) {
+                    if(!alipayIdsAll.contains(String.valueOf(dataMap.get("账号")))){
+                        DataMap newDataMap=new DataMap();
+                        newDataMap.put("fileId", newFileIdAll);
+                        newDataMap.put("注册身份证号",String.valueOf(dataMap.get("注册身份证号")));
+                        newDataMap.put("注册姓名",String.valueOf(dataMap.get("注册姓名")));
+                        newDataMap.put("账号",String.valueOf(dataMap.get("账号")));
+                        needToSaveall.add(newDataMap);
+                        alipayIdsAll.add(String.valueOf(dataMap.get("账号")));
+                    }
+                }
+            }
+        }
+        else if("五联单".equals(type)){
+//       "用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "注册时间", "绑定手机", "绑定银行卡", "对应的协查数据"));
+            String dateFileId2 = getFileId(AlipayHeaders.getGeneratedName(2), modelId, mongoTemplate);
+            List<DataMap> dataMaps = this.mongoTemplate.find((new Query(
+                    Criteria.where("modelId")
+                            .is(modelId)
+                            .and("fileId")
+                            .is(dateFileId2)
+                            .and("用户ID")
+                            .in(accountList)
+                            .and("generated")
+                            .is(Boolean.TRUE))), DataMap.class);
+            if(CollectionUtils.isNotEmpty(dataMaps)){
+                for (DataMap dataMap : dataMaps) {
+                    if(!alipayIdsAll.contains(String.valueOf(dataMap.get("用户ID")))){
+                        DataMap newDataMap=new DataMap();
+                        newDataMap.put("fileId", newFileIdAll);
+                        newDataMap.put("证件号",String.valueOf(dataMap.get("证件号")));
+                        newDataMap.put("账户名称",String.valueOf(dataMap.get("账户名称")));
+                        newDataMap.put("账号",String.valueOf(dataMap.get("用户ID")));
+                        needToSaveall.add(newDataMap);
+                        alipayIdsAll.add(String.valueOf(dataMap.get("用户ID")));
+                    }
+                }
+            }
+        }
+    }
 }

+ 69 - 27
src/main/java/ieven/server/webapp/service/datastatic/DataStaticService.java

@@ -6,6 +6,7 @@ import ieven.server.webapp.domain.data.StaticModelInput;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
 import ieven.server.webapp.service.FieldsService;
 import ieven.server.webapp.service.Ops;
+import ieven.server.webapp.util.SplitCharacterEnum;
 import ieven.server.webapp.util.excel.PublicStatic;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -17,8 +18,9 @@ import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -28,60 +30,60 @@ public class DataStaticService extends Ops {
     @Autowired
     private MongoTemplate mongoTemplate;
 
-    public Mapped update(StaticInput staticInput){
+    public Mapped update(StaticInput staticInput) {
         //获取需要修改的数据
-       DataMap dataMap = this.mongoTemplate.findById(staticInput.getLineId(), DataMap.class);
-       if(dataMap==null){
-           return Mapped.ERROR("当前数据不存在");
-       }
-       if(StringUtils.isBlank(String.valueOf(dataMap.get("交易主体账号")))||"null".equals(String.valueOf(dataMap.get("交易主体账号")))){
-           return Mapped.ERROR("交易主体账号有误");
-       }
-
-       //修改汇总表中的数据
+        DataMap dataMap = this.mongoTemplate.findById(staticInput.getLineId(), DataMap.class);
+        if (dataMap == null) {
+            return Mapped.ERROR("当前数据不存在");
+        }
+        if (StringUtils.isBlank(String.valueOf(dataMap.get("交易主体账号"))) || "null".equals(String.valueOf(dataMap.get("交易主体账号")))) {
+            return Mapped.ERROR("交易主体账号有误");
+        }
+
+        //修改汇总表中的数据
         Query query = new Query();
         query.addCriteria(Criteria.where("_id").is(staticInput.getLineId()));
         Update update = new Update();
-        if(StringUtils.isNotBlank(staticInput.getJyzthm())){
+        if (StringUtils.isNotBlank(staticInput.getJyzthm())) {
             update.set("交易主体户名", PublicStatic.specialFormatStr(staticInput.getJyzthm()));
         }
 
-        if(StringUtils.isNotBlank(staticInput.getZjhm())){
+        if (StringUtils.isNotBlank(staticInput.getZjhm())) {
             update.set("证件号码", PublicStatic.specialFormatStr(staticInput.getZjhm()));
         }
 
-        if(StringUtils.isNotBlank(staticInput.getJyzthm())||StringUtils.isNotBlank(staticInput.getZjhm())){
+        if (StringUtils.isNotBlank(staticInput.getJyzthm()) || StringUtils.isNotBlank(staticInput.getZjhm())) {
             mongoTemplate.updateFirst(query, update, DataMap.class);
         }
 
         //修改明细表的交易主体户名
-        if(StringUtils.isNotBlank(staticInput.getJyzthm())){
-            String modelId=staticInput.getModelId();
-            List<String>fileIds=new ArrayList<>();
-            String jyztzh=String.valueOf(dataMap.get("交易主体账号"));
+        if (StringUtils.isNotBlank(staticInput.getJyzthm())) {
+            String modelId = staticInput.getModelId();
+            List<String> fileIds = new ArrayList<>();
+            String jyztzh = String.valueOf(dataMap.get("交易主体账号"));
             String dateFileId = getFileId("数据分析-主体信息汇总明细", modelId, mongoTemplate);
-            if(StringUtils.isNotBlank(dateFileId)){
+            if (StringUtils.isNotBlank(dateFileId)) {
                 fileIds.add(dateFileId);
             }
 
             //五联单
             String dateFileIdwld = getFileId("五联单-账户明细", modelId, mongoTemplate);
-            if(StringUtils.isNotBlank(dateFileIdwld)){
+            if (StringUtils.isNotBlank(dateFileIdwld)) {
                 fileIds.add(dateFileIdwld);
             }
 
             //财付通
             String dateFileIdcft = getFileId("财付通-交易明细", modelId, mongoTemplate);
-            if(StringUtils.isNotBlank(dateFileIdcft)){
+            if (StringUtils.isNotBlank(dateFileIdcft)) {
                 fileIds.add(dateFileIdcft);
             }
             //反诈
             String dateFileIdfzza = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
-            if(StringUtils.isNotBlank(dateFileIdfzza)){
+            if (StringUtils.isNotBlank(dateFileIdfzza)) {
                 fileIds.add(dateFileIdfzza);
             }
 
-            if(CollectionUtils.isNotEmpty(fileIds)){
+            if (CollectionUtils.isNotEmpty(fileIds)) {
                 Query queryjyzthm = new Query();
                 queryjyzthm.addCriteria(Criteria.where("fileId").in(fileIds).and("交易主体账号").is(jyztzh));
                 Update updatejy = new Update();
@@ -92,12 +94,52 @@ public class DataStaticService extends Ops {
         return Mapped.OK();
     }
 
-    public Mapped staticModel(StaticModelInput staticModelInput){
-        String  modelId=staticModelInput.getModelId();
+    public Mapped staticModel(StaticModelInput staticModelInput) {
+        String modelId = staticModelInput.getModelId();
         String dateFileId = getFileId("数据分析-主体信息汇总明细", modelId, mongoTemplate);
-        if(StringUtils.isBlank(dateFileId)){
+        String dateFileIdUser = getFileId("数据分析-所有主体信息汇总", modelId, mongoTemplate);
+        if (StringUtils.isBlank(dateFileId)) {
             return Mapped.ERROR("数据分析-主体信息汇总明细不存在");
         }
+
+        if (StringUtils.isBlank(dateFileIdUser)) {
+            return Mapped.ERROR("数据分析-所有主体信息汇总");
+        }
+
+        //查询所有的主体信息汇总
+        List<DataMap> dataMaps = this.mongoTemplate.find((new Query(
+                Criteria.where("modelId")
+                        .is(modelId)
+                        .and("fileId")
+                        .is(dateFileIdUser)
+                        .and("generated")
+                        .is(Boolean.TRUE))), DataMap.class);
+        Map<String, DataMap> personMap = dataMaps.stream().collect(Collectors.toMap(dataMap -> String.valueOf(dataMap.get("账号")), Function.identity()));
+
+        //分两种情况,1:主体是否有数据如果有就按交易主体的计算
+
+        Query query=new Query();
+        query.addCriteria(Criteria.where("modelId").is(modelId));
+        query.addCriteria(Criteria.where("fileId").is(dateFileId));
+        query.addCriteria(Criteria.where("generated").is(Boolean.TRUE));
+        if(StringUtils.isNotBlank(staticModelInput.getJyztzh())){
+            query.addCriteria(Criteria.where("交易主体账号").in(Objects.requireNonNull(SplitCharacterEnum.splitByCharacter(staticModelInput.getJyztzh()))));
+        }
+        if(StringUtils.isNotBlank(staticModelInput.getJyzthm())){
+            query.addCriteria(Criteria.where("交易主体户名").in(Objects.requireNonNull(SplitCharacterEnum.splitByCharacter(staticModelInput.getJyzthm()))));
+        }
+        if(StringUtils.isNotBlank(staticModelInput.getJyztzhds())){
+            query.addCriteria(Criteria.where("交易对手账号").in(Objects.requireNonNull(SplitCharacterEnum.splitByCharacter(staticModelInput.getJyztzhds()))));
+        }
+        if(StringUtils.isNotBlank(staticModelInput.getJyzthmds())){
+            query.addCriteria(Criteria.where("交易对手户名").in(Objects.requireNonNull(SplitCharacterEnum.splitByCharacter(staticModelInput.getJyzthmds()))));
+        }
+
+        if(StringUtils.isNotBlank(staticModelInput.getJysj())){
+            query.addCriteria(Criteria.where("交易时间").in(Objects.requireNonNull(SplitCharacterEnum.splitByCharacter(staticModelInput.getJysj()))));
+        }
+        List<DataMap> dataMapDetail = this.mongoTemplate.find(query, DataMap.class);
+
         return Mapped.OK();
 
     }

+ 80 - 0
src/main/java/ieven/server/webapp/util/SplitCharacterEnum.java

@@ -0,0 +1,80 @@
+package ieven.server.webapp.util;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 分割字符枚举
+ */
+public enum SplitCharacterEnum {
+  ydh("英文逗号",",", 1), zdh("中文逗号",",", 1),kg("空格"," ", 2), denh("顿号", "、",3);
+  // 成员变量
+  private String name;
+  private String character;
+  private int index;
+  // 构造方法
+  SplitCharacterEnum(String name, String character, int index) {
+    this.name = name;
+    this.character=character;
+    this.index = index;
+  }
+
+
+  // 普通方法
+  public static String getName(int index) {
+    for (SplitCharacterEnum c : SplitCharacterEnum.values()) {
+      if (c.getIndex() == index) {
+        return c.name;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * 根据切割字符枚举 切割字符串
+   * @param value
+   * @return
+   */
+  public static List<String> splitByCharacter(String value){
+    //空字符串 返回null
+    if(StringUtils.isEmpty(value)){
+      return null;
+    }
+    //将字符串 切割字符统一替换成英文逗号
+    for(SplitCharacterEnum s:SplitCharacterEnum.values()){
+       value=value.replace(s.getCharacter(),SplitCharacterEnum.ydh.character);
+    }
+    return Arrays.asList(value.split(SplitCharacterEnum.ydh.character));
+
+  }
+  // get set 方法
+  public String getName() {
+    return name;
+  }
+  public void setName(String name) {
+    this.name = name;
+  }
+  public int getIndex() {
+    return index;
+  }
+  public void setIndex(int index) {
+    this.index = index;
+  }
+
+  public String getCharacter() {
+    return character;
+  }
+
+  public void setCharacter(String character) {
+    this.character = character;
+  }
+
+//  public static void main(String[] args) {
+//      String value="英文逗号,中文逗号,中文、顿号";
+//      logger.info(splitByCharacter(value).toString());
+//  }
+
+}
+

+ 1 - 0
src/main/resources/application.properties

@@ -45,5 +45,6 @@ headers.anti-security-trade=\u5e8f\u53f7,\u67e5\u8be2\u8d26\u53f7,\u652f\u4ed8\u
 headers.static-user-output=\u4ea4\u6613\u4e3b\u4f53\u8d26\u53f7,\u4ea4\u6613\u4e3b\u4f53\u6237\u540d,\u8bc1\u4ef6\u53f7\u7801,\u7ed1\u5b9a\u94f6\u884c\u5361\u53f7,\u5f00\u6237\u94f6\u884c\u540d\u79f0,\u7ed1\u5b9a\u624b\u673a\u53f7,\u6ce8\u518c\u65f6\u95f4
 headers.economic-order=\u5e8f\u53f7,\u67e5\u8be2\u8d26\u53f7,\u652f\u4ed8\u673a\u6784\u5185\u90e8\u8ba2\u5355\u53f7,\u4ed8\u6b3e\u65b9\u652f\u4ed8\u5e10\u53f7,\u4ed8\u6b3e\u65b9\u94f6\u884c\u5361\u6240\u5c5e\u884c,\u4ed8\u6b3e\u65b9\u94f6\u884c\u5361\u53f7,\u4ea4\u6613\u91d1\u989d,\u4ea4\u6613\u4f59\u989d,\u6536\u6b3e\u65b9\u652f\u4ed8\u5e10\u53f7,\u6536\u6b3e\u65b9\u94f6\u884c\u5361\u6240\u5c5e\u884c,\u6536\u6b3e\u65b9\u94f6\u884c\u5361\u53f7,\u4ea4\u6613\u7c7b\u578b,\u4ea4\u6613\u65f6\u95f4,\u652f\u4ed8\u7c7b\u578b,\u501f\u8d37\u6807\u5fd7,\u5e01\u79cd,\u6d88\u8d39POS\u673a\u7f16\u53f7,\u6536\u6b3e\u65b9\u7684\u5546\u6237\u53f7,\u6536\u6b3e\u65b9\u7684\u5546\u6237\u540d\u79f0,\u4ea4\u6613\u8bbe\u5907\u53f7,\u94f6\u884c\u5916\u90e8\u6e20\u9053\u4ea4\u6613\u6d41\u6c34\u53f7,\u5907\u6ce8
 headers.economic-order-output=\u5e8f\u53f7,\u67e5\u8be2\u8d26\u53f7,\u652f\u4ed8\u673a\u6784\u5185\u90e8\u8ba2\u5355\u53f7,\u4ed8\u6b3e\u65b9\u652f\u4ed8\u5e10\u53f7,\u4ed8\u6b3e\u65b9\u94f6\u884c\u5361\u6240\u5c5e\u884c,\u4ed8\u6b3e\u65b9\u94f6\u884c\u5361\u53f7,\u4ea4\u6613\u91d1\u989d,\u4ea4\u6613\u4f59\u989d,\u6536\u6b3e\u65b9\u652f\u4ed8\u5e10\u53f7,\u6536\u6b3e\u65b9\u94f6\u884c\u5361\u6240\u5c5e\u884c,\u6536\u6b3e\u65b9\u94f6\u884c\u5361\u53f7,\u4ea4\u6613\u7c7b\u578b,\u4ea4\u6613\u65f6\u95f4,\u652f\u4ed8\u7c7b\u578b,\u501f\u8d37\u6807\u5fd7,\u5e01\u79cd,\u6d88\u8d39POS\u673a\u7f16\u53f7,\u6536\u6b3e\u65b9\u7684\u5546\u6237\u53f7,\u6536\u6b3e\u65b9\u7684\u5546\u6237\u540d\u79f0,\u4ea4\u6613\u8bbe\u5907\u53f7,\u94f6\u884c\u5916\u90e8\u6e20\u9053\u4ea4\u6613\u6d41\u6c34\u53f7,\u5907\u6ce8
+headers.static-user-all-output=
 #\u8F6C\u8D26\u5206\u6790-\u603B\u91D1\u989Ddesc
 #\u8D26\u6237\u900F\u89C6-\u4EA4\u6613\u603B\u989Ddesc