DataStaticAnalysis.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package ieven.server.webapp.service.datastatic;
  2. import com.mongodb.client.MongoCursor;
  3. import ieven.server.webapp.domain.alipay.HeaderProperties;
  4. import ieven.server.webapp.domain.data.AccountVO;
  5. import ieven.server.webapp.domain.data.DataMap;
  6. import ieven.server.webapp.domain.file.FileService;
  7. import ieven.server.webapp.service.Ops;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.apache.commons.collections4.CollectionUtils;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.bson.Document;
  12. import org.springframework.data.mongodb.core.MongoTemplate;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.concurrent.CountDownLatch;
  16. @Slf4j
  17. public class DataStaticAnalysis extends Ops implements Runnable {
  18. private HeaderProperties headerProperties;
  19. String modelId;
  20. MongoTemplate mongoTemplate;
  21. FileService fileService;
  22. CountDownLatch latch;
  23. public DataStaticAnalysis(
  24. HeaderProperties headerProperties,
  25. String modelId,
  26. MongoTemplate mongoTemplate,
  27. FileService fileService,
  28. CountDownLatch latch) {
  29. this.headerProperties = headerProperties;
  30. this.modelId = modelId;
  31. this.mongoTemplate = mongoTemplate;
  32. this.fileService = fileService;
  33. this.latch = latch;
  34. }
  35. @Override
  36. public void run() {
  37. log.info("数据统计-主体信息汇总明细开始");
  38. // 直接删除并创建表
  39. String newFileId = "";
  40. String dateFileIdcft = getFileId("财付通-交易明细", modelId, mongoTemplate);
  41. String dateFileIdfzza = getFileId("反诈治安-交易明细", modelId, mongoTemplate);
  42. String dateFileIdwld = getFileId("五联单-账户明细", modelId, mongoTemplate);
  43. if (StringUtils.isNotBlank(dateFileIdcft) || StringUtils.isNotBlank(dateFileIdfzza)) {
  44. newFileId = createLogicAndDeleteOld("数据分析-主体信息汇总明细", modelId, headerProperties.getUserAccountOutput(), mongoTemplate, fileService);
  45. }
  46. // 插入记录用户后续查询明细
  47. //财付通
  48. if (StringUtils.isNotBlank(dateFileIdcft)) {
  49. MongoCursor<Document> cursor = getCursor(dateFileIdcft, mongoTemplate);
  50. Document origin;
  51. List<DataMap> needToSave = new ArrayList<>(1000);
  52. while (cursor.hasNext()) {
  53. origin = cursor.next();
  54. DataMap dataMap = new DataMap();
  55. dataMap.put("fileId", newFileId);
  56. AccountVO accountVO = new AccountVO();
  57. assembleDataCft(origin, accountVO);
  58. insertDataWld(accountVO, dataMap);
  59. needToSave.add(dataMap);
  60. if (needToSave.size() >= 1000) {
  61. saveLines(new ArrayList<>(needToSave), mongoTemplate);
  62. needToSave.clear();
  63. }
  64. }
  65. if (CollectionUtils.isNotEmpty(needToSave)) {
  66. saveLines(needToSave, mongoTemplate);
  67. }
  68. }
  69. //反诈
  70. if (StringUtils.isNotBlank(dateFileIdfzza)) {
  71. MongoCursor<Document> cursor = getCursor(dateFileIdfzza, mongoTemplate);
  72. Document origin;
  73. List<DataMap> needToSave = new ArrayList<>(1000);
  74. while (cursor.hasNext()) {
  75. origin = cursor.next();
  76. DataMap dataMap = new DataMap();
  77. dataMap.put("fileId", newFileId);
  78. AccountVO accountVO = new AccountVO();
  79. assembleDatafzza(origin, accountVO);
  80. insertDataWld(accountVO, dataMap);
  81. needToSave.add(dataMap);
  82. if (needToSave.size() >= 1000) {
  83. saveLines(new ArrayList<>(needToSave), mongoTemplate);
  84. needToSave.clear();
  85. }
  86. }
  87. if (CollectionUtils.isNotEmpty(needToSave)) {
  88. saveLines(needToSave, mongoTemplate);
  89. }
  90. }
  91. //五联单
  92. if (StringUtils.isNotBlank(dateFileIdwld)) {
  93. MongoCursor<Document> cursor = getCursor(dateFileIdwld, mongoTemplate);
  94. Document origin;
  95. List<DataMap> needToSave = new ArrayList<>(1000);
  96. while (cursor.hasNext()) {
  97. origin = cursor.next();
  98. DataMap dataMap = new DataMap();
  99. dataMap.put("fileId", newFileId);
  100. AccountVO accountVO = new AccountVO();
  101. assembleDatawld(origin, accountVO);
  102. insertDataWld(accountVO, dataMap);
  103. needToSave.add(dataMap);
  104. if (needToSave.size() >= 1000) {
  105. saveLines(new ArrayList<>(needToSave), mongoTemplate);
  106. needToSave.clear();
  107. }
  108. }
  109. if (CollectionUtils.isNotEmpty(needToSave)) {
  110. saveLines(needToSave, mongoTemplate);
  111. }
  112. }
  113. latch.countDown();
  114. log.info("数据统计-主体信息汇总明细结束");
  115. }
  116. public void assembleDataCft(Document origin, AccountVO accountVO) {
  117. accountVO.setZfddh(origin.getString("交易单号"));
  118. accountVO.setJyztzh(origin.getString("交易主体账号"));
  119. accountVO.setJyztyhkh(origin.getString("交易主体银行卡号"));
  120. accountVO.setJyztyhmc(origin.getString("交易主体银行名称"));
  121. accountVO.setJyzthm(origin.getString("交易主体户名"));
  122. accountVO.setJylx(origin.getString("交易类型"));
  123. accountVO.setJysj(origin.getString("交易时间"));
  124. accountVO.setJyje(origin.getString("交易金额(元)"));
  125. accountVO.setJyye(origin.getString("账户余额(元)"));
  126. accountVO.setJydszh(origin.getString("交易对手账号"));
  127. accountVO.setJydsyhkh(origin.getString("交易对手银行卡号"));
  128. accountVO.setJydsyhkhmc(origin.getString("交易对手银行名称"));
  129. accountVO.setJydshm(origin.getString("交易对手户名"));
  130. accountVO.setJyztdcrzbz(origin.getString("借贷类型"));
  131. accountVO.setType("财付通");
  132. }
  133. public void assembleDatafzza(Document origin, AccountVO accountVO) {
  134. accountVO.setZfddh(origin.getString("支付订单号"));
  135. accountVO.setJylsh(origin.getString("交易流水号"));
  136. accountVO.setJyztzh(origin.getString("交易主体账号"));
  137. accountVO.setJyztdcrzbz(origin.getString("交易主体的出入账标识"));
  138. accountVO.setJylx(origin.getString("交易类型"));
  139. accountVO.setZflx(origin.getString("支付类型"));
  140. accountVO.setBz(origin.getString("币种"));
  141. accountVO.setJyje(origin.getString("交易金额"));
  142. accountVO.setJyye(origin.getString("账户余额"));
  143. accountVO.setXfposjbh(origin.getString("消费POS机编号"));
  144. accountVO.setJysblx(origin.getString("交易设备类型"));
  145. accountVO.setJyzfsbip(origin.getString("交易支付设备IP"));
  146. accountVO.setMacdz(origin.getString("交易支付设备IP"));
  147. accountVO.setJyddjd(origin.getString("交易地点经度"));
  148. accountVO.setJyddwd(origin.getString("交易地点纬度"));
  149. accountVO.setRemark(origin.getString("备注"));
  150. accountVO.setJyztyhkh(origin.getString("交易主体银行卡号"));
  151. accountVO.setJyztyhmc(origin.getString("交易主体银行名称"));
  152. accountVO.setJyzthm(origin.getString("交易主体户名"));
  153. accountVO.setJysj(origin.getString("交易时间"));
  154. accountVO.setJydszh(origin.getString("交易对手账号"));
  155. accountVO.setJydsyhkh(origin.getString("交易对手银行卡号"));
  156. accountVO.setJydsyhkhmc(origin.getString("交易对手银行名称"));
  157. accountVO.setJydshm(origin.getString("交易对手户名"));
  158. accountVO.setType("反诈");
  159. }
  160. public void assembleDatawld(Document origin, AccountVO accountVO) {
  161. accountVO.setZfddh(origin.getString("商户订单号"));
  162. accountVO.setJylx(origin.getString("类型"));
  163. accountVO.setJylsh(origin.getString("交易号"));
  164. accountVO.setJyztzh(origin.getString("支付宝用户ID"));
  165. accountVO.setJyzthm(origin.getString("支付宝户名"));
  166. accountVO.setJyztdcrzbz(origin.getString("收/支"));
  167. accountVO.setJysj(origin.getString("交易创建时间"));
  168. accountVO.setJyje(origin.getString("金额(元)"));
  169. accountVO.setJydszh(origin.getString("对手支付宝用户ID"));
  170. accountVO.setJydshm(origin.getString("对手支付宝户名"));
  171. accountVO.setXfmc(origin.getString("消费名称"));
  172. accountVO.setJylyd(origin.getString("交易来源地"));
  173. accountVO.setJyzt(origin.getString("交易状态"));
  174. accountVO.setRemark(origin.getString("备注"));
  175. accountVO.setType("五联单");
  176. }
  177. public void insertDataWld(AccountVO accountVO, DataMap dataMap) {
  178. dataMap.put("支付订单号", accountVO.getZfddh());
  179. dataMap.put("交易流水号", accountVO.getJylsh());
  180. dataMap.put("交易主体银行名称", accountVO.getJyztyhmc());
  181. dataMap.put("交易主体账号", accountVO.getJyztzh());
  182. dataMap.put("交易主体银行卡号", accountVO.getJyztyhkh());
  183. dataMap.put("交易主体户名", accountVO.getJyzthm());
  184. dataMap.put("交易类型", accountVO.getJylx());
  185. dataMap.put("支付类型", accountVO.getZflx());
  186. dataMap.put("借贷类型", getJtType(accountVO.getJyztdcrzbz()));
  187. dataMap.put("交易时间", accountVO.getJysj());
  188. dataMap.put("币种", accountVO.getBz());
  189. dataMap.put("交易金额", accountVO.getJyje());
  190. dataMap.put("交易余额", accountVO.getJyye());
  191. dataMap.put("交易对手账号", accountVO.getJydszh());
  192. dataMap.put("交易对手银行卡号", accountVO.getJydsyhkh());
  193. dataMap.put("交易对手银行名称", accountVO.getJydsyhkhmc());
  194. dataMap.put("交易对手户名", accountVO.getJydshm());
  195. dataMap.put("消费POS机编号", accountVO.getXfposjbh());
  196. dataMap.put("交易设备类型", accountVO.getJysblx());
  197. dataMap.put("交易支付设备IP", accountVO.getJyzfsbip());
  198. dataMap.put("MAC地址", accountVO.getMacdz());
  199. dataMap.put("交易地点经度", accountVO.getJyddjd());
  200. dataMap.put("交易地点纬度", accountVO.getJyddwd());
  201. dataMap.put("消费名称", accountVO.getXfmc());
  202. dataMap.put("交易来源地", accountVO.getJylyd());
  203. dataMap.put("交易状态", accountVO.getJyzt());
  204. dataMap.put("备注", accountVO.getRemark());
  205. dataMap.put("类型", accountVO.getType());
  206. }
  207. public String getJtType(String type){
  208. if(type.equals("借")||type.equals("出")||type.equals("支")||type.equals("出账")){
  209. return "借";
  210. }else if(type.equals("贷")||type.equals("入")||type.equals("支")||type.equals("入账")){
  211. return "贷";
  212. }
  213. return type;
  214. }
  215. }