123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- package ieven.server.webapp.service.datastatic;
- import com.mongodb.client.MongoCursor;
- import ieven.server.webapp.domain.alipay.HeaderProperties;
- import ieven.server.webapp.domain.data.DataMap;
- import ieven.server.webapp.domain.file.FileService;
- import ieven.server.webapp.service.Ops;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.collections4.CollectionUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.bson.Document;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import java.math.BigDecimal;
- import java.util.*;
- import java.util.concurrent.CountDownLatch;
- @Slf4j
- public class DataStaticAnalysisDs extends Ops implements Runnable {
- private HeaderProperties headerProperties;
- String modelId;
- MongoTemplate mongoTemplate;
- FileService fileService;
- CountDownLatch latch;
- public DataStaticAnalysisDs(
- HeaderProperties headerProperties,
- String modelId,
- MongoTemplate mongoTemplate,
- FileService fileService,
- CountDownLatch latch) {
- this.headerProperties = headerProperties;
- this.modelId = modelId;
- this.mongoTemplate = mongoTemplate;
- this.fileService = fileService;
- this.latch = latch;
- }
- @Override
- public void run() {
- log.info("数据分析-对手透视");
- // 直接删除并创建表
- String newFileId = "";
- String dateFileIdwld = getFileId("五联单-账户明细", modelId, mongoTemplate);
- String dateFileIdfa = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
- String dateFileIdcft = getFileId("财付通-交易明细", modelId, mongoTemplate);
- // 插入记录用户后续查询明细
- if (StringUtils.isNotBlank(dateFileIdwld) || StringUtils.isNotBlank(dateFileIdfa) || StringUtils.isNotBlank(dateFileIdcft)) {
- newFileId = createLogicAndDeleteOld("数据分析-对手透视", modelId, headerProperties.getAntiSecurityTradeEndAnalysisOutput(), mongoTemplate, fileService);
- }
- // 插入记录用户后续查询明细
- if (StringUtils.isNotBlank(dateFileIdcft)) {
- MongoCursor<Document> cursor = getCursor(dateFileIdcft, mongoTemplate);
- if (cursor.hasNext()) {
- insertFromTo(dateFileIdcft, newFileId, modelId, mongoTemplate);
- }
- Set<String> alipayIds = new HashSet<>();
- Map<String, DataMap> idToData = new HashMap<>();
- Map<String, Set<String>> idToMainIds = new HashMap<>();
- Map<String, Set<String>> idToNames = new HashMap<>();
- Map<String, Set<String>> hm = new HashMap<>();
- Document origin;
- while (cursor.hasNext()) {
- try {
- origin = cursor.next();
- String alipayId = origin.getString("交易对手账号");
- DataMap dataMap;
- if (alipayIds.contains(alipayId)) {
- dataMap = idToData.get(alipayId);
- } else {
- alipayIds.add(alipayId);
- dataMap = new DataMap();
- dataMap.put("fileId", newFileId);
- dataMap.put("交易对手账号", alipayId);
- dataMap.put("交易对手户名", "");
- dataMap.put("交易总额", new BigDecimal("0.00"));
- dataMap.put("交易主体收入金额", new BigDecimal("0.00"));
- dataMap.put("交易主体支出金额", new BigDecimal("0.00"));
- dataMap.put("交易主体收入笔数", 0);
- dataMap.put("交易主体支出笔数", 0);
- dataMap.put("总笔数", 0);
- dataMap.put("共同交易主体数", 0);
- dataMap.put("共同交易主体账号汇总", "");
- dataMap.put("来源", "财付通");
- dataMap.put("共同交易主体户名汇总", 0);
- idToData.put(alipayId, dataMap);
- }
- String alipayUsername = origin.getString("交易对手户名");
- if (StringUtils.isNotBlank(alipayUsername)
- && !"_".equals(alipayUsername)
- && !"-".equals(alipayUsername) && !"null".equals(alipayUsername)) {
- if (idToNames.containsKey(alipayId)) {
- Set<String> names = idToNames.get(alipayId);
- names.add(alipayUsername);
- } else {
- Set<String> names = new HashSet<>();
- names.add(alipayUsername);
- idToNames.put(alipayId, names);
- }
- }
- String flag = "借贷类型";
- String flagValue = origin.getString(flag);
- String money = (String) origin.get("交易金额(元)");
- if (StringUtils.isBlank(money)) {
- money = "0";
- }
- if ("入".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体收入金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易主体收入金额", oMoney);
- int oCount = (int) dataMap.get("交易主体收入笔数");
- oCount++;
- dataMap.put("交易主体收入笔数", oCount);
- } else if ("出".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体支出金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易主体支出金额", oMoney);
- int oCount = (int) dataMap.get("交易主体支出笔数");
- oCount++;
- dataMap.put("交易主体支出笔数", oCount);
- }
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易总额", oMoney);
- int oCount = (int) dataMap.get("总笔数");
- oCount++;
- dataMap.put("总笔数", oCount);
- String mainId = (String) origin.get("交易主体账号");
- String mainIdhm = (String) origin.get("交易主体户名");
- if(StringUtils.isNotBlank(mainId)&&StringUtils.isNotBlank(mainIdhm)){
- if (hm.containsKey(mainId)) {
- Set<String> hmnew = hm.get(mainId);
- hmnew.add(mainIdhm);
- hm.put(mainId,hmnew);
- } else {
- Set<String> mainIds = new HashSet<>();
- mainIds.add(mainIdhm);
- hm.put(mainId, mainIds);
- }
- }
- if (idToMainIds.containsKey(alipayId)) {
- Set<String> mainIds = idToMainIds.get(alipayId);
- mainIds.add(mainId);
- } else {
- Set<String> mainIds = new HashSet<>();
- mainIds.add(mainId);
- idToMainIds.put(alipayId, mainIds);
- }
- } catch (Exception exception) {
- log.error(exception.getMessage(), exception);
- }
- }
- if (CollectionUtils.isNotEmpty(idToData.values())) {
- for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
- String key = entry.getKey();
- DataMap value = entry.getValue();
- Set<String> mainIds = idToMainIds.get(key);
- Set<String> names = idToNames.get(key);
- if (CollectionUtils.isNotEmpty(names)) {
- value.put("交易对手户名", StringUtils.join(names, ";"));
- }
- if (CollectionUtils.isNotEmpty(mainIds)) {
- value.put("共同交易主体数", mainIds.size());
- String str="";
- Set<String>jyzthm = new HashSet<>();
- for (String mainId : mainIds) {
- Set<String> strings = hm.get(mainId);
- if(CollectionUtils.isNotEmpty(strings)){
- jyzthm.addAll(strings);
- }
- str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
- }
- value.put("共同交易主体账号汇总", str);
- value.put("共同交易主体户名汇总", Math.min(mainIds.size(),jyzthm.size()));
- }
- DataMap dataMap = entry.getValue();
- BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
- dataMap.put("交易总额", money1.doubleValue());
- BigDecimal money2 = (BigDecimal) dataMap.get("交易主体收入金额");
- dataMap.put("交易主体收入金额", money2.doubleValue());
- BigDecimal money3 = (BigDecimal) dataMap.get("交易主体支出金额");
- dataMap.put("交易主体支出金额", money3.doubleValue());
- }
- saveLines(idToData.values(), "共同交易主体数", mongoTemplate);
- }
- }
- if (StringUtils.isNotBlank(dateFileIdfa)) {
- MongoCursor<Document> cursor = getCursor(dateFileIdfa, mongoTemplate);
- if (cursor.hasNext()) {
- insertFromTo(dateFileIdfa, newFileId, modelId, mongoTemplate);
- }
- Set<String> alipayIds = new HashSet<>();
- Map<String, DataMap> idToData = new HashMap<>();
- Map<String, Set<String>> idToMainIds = new HashMap<>();
- Map<String, Set<String>> idToNames = new HashMap<>();
- Document origin;
- Map<String, Set<String>> hm = new HashMap<>();
- while (cursor.hasNext()) {
- try {
- origin = cursor.next();
- String alipayId = origin.getString("交易对手账号");
- DataMap dataMap;
- if (alipayIds.contains(alipayId)) {
- dataMap = idToData.get(alipayId);
- } else {
- alipayIds.add(alipayId);
- dataMap = new DataMap();
- dataMap.put("fileId", newFileId);
- dataMap.put("交易对手账号", alipayId);
- dataMap.put("交易对手户名", "");
- dataMap.put("交易总额", new BigDecimal("0.00"));
- dataMap.put("交易主体收入金额", new BigDecimal("0.00"));
- dataMap.put("交易主体支出金额", new BigDecimal("0.00"));
- dataMap.put("交易主体收入笔数", 0);
- dataMap.put("交易主体支出笔数", 0);
- dataMap.put("总笔数", 0);
- dataMap.put("共同交易主体数", 0);
- dataMap.put("共同交易主体户名汇总", 0);
- dataMap.put("来源", "反诈");
- idToData.put(alipayId, dataMap);
- }
- String alipayUsername = origin.getString("交易对手户名");
- if (StringUtils.isNotBlank(alipayUsername)
- && !"_".equals(alipayUsername)
- && !"-".equals(alipayUsername)&& !"null".equals(alipayUsername)) {
- if (idToNames.containsKey(alipayId)) {
- Set<String> names = idToNames.get(alipayId);
- names.add(alipayUsername);
- } else {
- Set<String> names = new HashSet<>();
- names.add(alipayUsername);
- idToNames.put(alipayId, names);
- }
- }
- String flag = "交易主体的出入账标识";
- String flagValue = origin.getString(flag);
- String money = (String) origin.get("交易金额");
- if ("入账".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体收入金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易主体收入金额", oMoney);
- int oCount = (int) dataMap.get("交易主体收入笔数");
- oCount++;
- dataMap.put("交易主体收入笔数", oCount);
- } else if ("出账".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体支出金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易主体支出金额", oMoney);
- int oCount = (int) dataMap.get("交易主体支出笔数");
- oCount++;
- dataMap.put("交易主体支出笔数", oCount);
- }
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易总额", oMoney);
- int oCount = (int) dataMap.get("总笔数");
- oCount++;
- dataMap.put("总笔数", oCount);
- String mainId = (String) origin.get("交易主体账号");
- String mainIdhm = (String) origin.get("交易主体户名");
- if(StringUtils.isNotBlank(mainId)&&StringUtils.isNotBlank(mainIdhm)){
- if (hm.containsKey(mainId)) {
- Set<String> hmnew = hm.get(mainId);
- hmnew.add(mainIdhm);
- hm.put(mainId,hmnew);
- } else {
- Set<String> mainIds = new HashSet<>();
- mainIds.add(mainIdhm);
- hm.put(mainId, mainIds);
- }
- }
- if (idToMainIds.containsKey(alipayId)) {
- Set<String> mainIds = idToMainIds.get(alipayId);
- mainIds.add(mainId);
- } else {
- Set<String> mainIds = new HashSet<>();
- mainIds.add(mainId);
- //mainIds.add(mainId+(StringUtils.isBlank(mainName)||"null".equals(mainName)?"":"("+mainName+")"));
- idToMainIds.put(alipayId, mainIds);
- }
- } catch (Exception exception) {
- log.error(exception.getMessage(), exception);
- }
- }
- if (CollectionUtils.isNotEmpty(idToData.values())) {
- for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
- String key = entry.getKey();
- DataMap value = entry.getValue();
- Set<String> names = idToNames.get(key);
- if (CollectionUtils.isNotEmpty(names)) {
- value.put("交易对手户名", StringUtils.join(names, ";"));
- }
- Set<String> mainIds = idToMainIds.get(key);
- if (CollectionUtils.isNotEmpty(mainIds)) {
- value.put("共同交易主体数", mainIds.size());
- String str="";
- Set<String>jyzthm = new HashSet<>();
- for (String mainId : mainIds) {
- Set<String> strings = hm.get(mainId);
- if(CollectionUtils.isNotEmpty(strings)){
- jyzthm.addAll(strings);
- }
- str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
- }
- value.put("共同交易主体账号汇总", str);
- value.put("共同交易主体户名汇总", Math.min(mainIds.size(),jyzthm.size()));
- }
- DataMap dataMap = entry.getValue();
- BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
- dataMap.put("交易总额", money1.doubleValue());
- BigDecimal money2 = (BigDecimal) dataMap.get("交易主体收入金额");
- dataMap.put("交易主体收入金额", money2.doubleValue());
- BigDecimal money3 = (BigDecimal) dataMap.get("交易主体支出金额");
- dataMap.put("交易主体支出金额", money3.doubleValue());
- }
- saveLines(idToData.values(), "共同交易主体数", mongoTemplate);
- }
- }
- if (StringUtils.isNotBlank(dateFileIdwld)) {
- MongoCursor<Document> cursor = getCursor(dateFileIdwld, mongoTemplate);
- if (cursor.hasNext()) {
- insertFromTo(dateFileIdwld, newFileId, modelId, mongoTemplate);
- }
- Set<String> alipayIds = new HashSet<>();
- Map<String, DataMap> idToData = new HashMap<>();
- Map<String, Set<String>> idToMainIds = new HashMap<>();
- Map<String, Set<String>> idToNames = new HashMap<>();
- Map<String, Set<String>> hm = new HashMap<>();
- Document origin;
- while (cursor.hasNext()) {
- try {
- origin = cursor.next();
- String alipayId = origin.getString("对手支付宝用户ID");
- DataMap dataMap;
- if (alipayIds.contains(alipayId)) {
- dataMap = idToData.get(alipayId);
- } else {
- alipayIds.add(alipayId);
- dataMap = new DataMap();
- dataMap.put("fileId", newFileId);
- dataMap.put("交易对手账号", alipayId);
- dataMap.put("交易对手户名", "");
- dataMap.put("交易总额", new BigDecimal("0.00"));
- dataMap.put("交易主体收入金额", new BigDecimal("0.00"));
- dataMap.put("交易主体支出金额", new BigDecimal("0.00"));
- dataMap.put("交易主体收入笔数", 0);
- dataMap.put("交易主体支出笔数", 0);
- dataMap.put("总笔数", 0);
- dataMap.put("共同交易主体数", 0);
- dataMap.put("共同交易主体账号汇总", "");
- dataMap.put("共同交易主体户名汇总", 0);
- dataMap.put("来源", "五联单");
- idToData.put(alipayId, dataMap);
- }
- String alipayUsername = origin.getString("对手支付宝户名");
- if (StringUtils.isNotBlank(alipayUsername)
- && !"_".equals(alipayUsername)
- && !"-".equals(alipayUsername)&& !"null".equals(alipayUsername)) {
- if (idToNames.containsKey(alipayId)) {
- Set<String> names = idToNames.get(alipayId);
- names.add(alipayUsername);
- } else {
- Set<String> names = new HashSet<>();
- names.add(alipayUsername);
- idToNames.put(alipayId, names);
- }
- }
- String flag = "收/支";
- String flagValue = origin.getString(flag);
- String money = (String) origin.get("金额(元)");
- if ("收入".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体收入金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易主体收入金额", oMoney);
- int oCount = (int) dataMap.get("交易主体收入笔数");
- oCount++;
- dataMap.put("交易主体收入笔数", oCount);
- } else if ("支出".equals(flagValue)) {
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易主体支出金额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易主体支出金额", oMoney);
- int oCount = (int) dataMap.get("交易主体支出笔数");
- oCount++;
- dataMap.put("交易主体支出笔数", oCount);
- }
- BigDecimal oMoney = (BigDecimal) dataMap.get("交易总额");
- oMoney = oMoney.add(new BigDecimal(money));
- dataMap.put("交易总额", oMoney);
- int oCount = (int) dataMap.get("总笔数");
- oCount++;
- dataMap.put("总笔数", oCount);
- String mainId = (String) origin.get("支付宝用户ID");
- String mainIdhm = (String) origin.get("支付宝户名");
- if (StringUtils.isNotBlank(mainId) && StringUtils.isNotBlank(mainIdhm)) {
- if (hm.containsKey(mainId)) {
- Set<String> hmnew = hm.get(mainId);
- hmnew.add(mainIdhm);
- hm.put(mainId, hmnew);
- } else {
- Set<String> mainIds = new HashSet<>();
- mainIds.add(mainIdhm);
- hm.put(mainId, mainIds);
- }
- }
- if (idToMainIds.containsKey(alipayId)) {
- Set<String> mainIds = idToMainIds.get(alipayId);
- mainIds.add(mainId);
- } else {
- Set<String> mainIds = new HashSet<>();
- mainIds.add(mainId);
- idToMainIds.put(alipayId, mainIds);
- }
- } catch (Exception exception) {
- log.error(exception.getMessage(), exception);
- }
- }
- if (CollectionUtils.isNotEmpty(idToData.values())) {
- for (Map.Entry<String, DataMap> entry : idToData.entrySet()) {
- String key = entry.getKey();
- DataMap value = entry.getValue();
- Set<String> mainIds = idToMainIds.get(key);
- Set<String> names = idToNames.get(key);
- if (CollectionUtils.isNotEmpty(names)) {
- value.put("交易对手户名", StringUtils.join(names, ";"));
- }
- if (CollectionUtils.isNotEmpty(mainIds)) {
- value.put("共同交易主体数", mainIds.size());
- String str="";
- Set<String>jyzthm = new HashSet<>();
- int count=0;
- for (String mainId : mainIds) {
- Set<String> strings = hm.get(mainId);
- if(CollectionUtils.isNotEmpty(strings)){
- count++;
- }
- str+=CollectionUtils.isEmpty(strings)?mainId+";":mainId+"("+StringUtils.join(strings, ",")+");";
- }
- value.put("共同交易主体账号汇总", str);
- value.put("共同交易主体户名汇总", Math.min(mainIds.size(),count));
- }
- DataMap dataMap = entry.getValue();
- BigDecimal money1 = (BigDecimal) dataMap.get("交易总额");
- dataMap.put("交易总额", money1.doubleValue());
- BigDecimal money2 = (BigDecimal) dataMap.get("交易主体收入金额");
- dataMap.put("交易主体收入金额", money2.doubleValue());
- BigDecimal money3 = (BigDecimal) dataMap.get("交易主体支出金额");
- dataMap.put("交易主体支出金额", money3.doubleValue());
- }
- saveLines(idToData.values(), "共同交易主体数", mongoTemplate);
- }
- }
- latch.countDown();
- log.info("数据分析-对手透视");
- }
- }
|