package ieven.server.webapp.service.datastatic; import com.mongodb.client.MongoCursor; import ieven.server.webapp.domain.alipay.HeaderProperties; import ieven.server.webapp.domain.data.AccountVO; 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.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; @Slf4j public class DataStaticAnalysis extends Ops implements Runnable { private HeaderProperties headerProperties; String modelId; MongoTemplate mongoTemplate; FileService fileService; CountDownLatch latch; public DataStaticAnalysis( 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 dateFileIdcft = getFileId("财付通-交易明细", modelId, mongoTemplate); String dateFileIdfzza = getFileId("反诈治安-交易明细", modelId, mongoTemplate); String dateFileIdwld = getFileId("五联单-账户明细", modelId, mongoTemplate); if (StringUtils.isNotBlank(dateFileIdcft) || StringUtils.isNotBlank(dateFileIdfzza)) { newFileId = createLogicAndDeleteOld("数据分析-主体信息汇总明细", modelId, headerProperties.getUserAccountOutput(), mongoTemplate, fileService); } // 插入记录用户后续查询明细 //财付通 if (StringUtils.isNotBlank(dateFileIdcft)) { MongoCursor cursor = getCursor(dateFileIdcft, mongoTemplate); Document origin; List needToSave = new ArrayList<>(1000); while (cursor.hasNext()) { origin = cursor.next(); DataMap dataMap = new DataMap(); dataMap.put("fileId", newFileId); AccountVO accountVO = new AccountVO(); assembleDataCft(origin, accountVO); insertDataWld(accountVO, dataMap); needToSave.add(dataMap); if (needToSave.size() >= 1000) { saveLines(new ArrayList<>(needToSave), mongoTemplate); needToSave.clear(); } } if (CollectionUtils.isNotEmpty(needToSave)) { saveLines(needToSave, mongoTemplate); } } //反诈 if (StringUtils.isNotBlank(dateFileIdfzza)) { MongoCursor cursor = getCursor(dateFileIdfzza, mongoTemplate); Document origin; List needToSave = new ArrayList<>(1000); while (cursor.hasNext()) { origin = cursor.next(); DataMap dataMap = new DataMap(); dataMap.put("fileId", newFileId); AccountVO accountVO = new AccountVO(); assembleDatafzza(origin, accountVO); insertDataWld(accountVO, dataMap); needToSave.add(dataMap); if (needToSave.size() >= 1000) { saveLines(new ArrayList<>(needToSave), mongoTemplate); needToSave.clear(); } } if (CollectionUtils.isNotEmpty(needToSave)) { saveLines(needToSave, mongoTemplate); } } //五联单 if (StringUtils.isNotBlank(dateFileIdwld)) { MongoCursor cursor = getCursor(dateFileIdwld, mongoTemplate); Document origin; List needToSave = new ArrayList<>(1000); while (cursor.hasNext()) { origin = cursor.next(); DataMap dataMap = new DataMap(); dataMap.put("fileId", newFileId); AccountVO accountVO = new AccountVO(); assembleDatawld(origin, accountVO); insertDataWld(accountVO, dataMap); needToSave.add(dataMap); if (needToSave.size() >= 1000) { saveLines(new ArrayList<>(needToSave), mongoTemplate); needToSave.clear(); } } if (CollectionUtils.isNotEmpty(needToSave)) { saveLines(needToSave, mongoTemplate); } } latch.countDown(); log.info("数据统计-主体信息汇总明细结束"); } public void assembleDataCft(Document origin, AccountVO accountVO) { accountVO.setZfddh(origin.getString("交易单号")); accountVO.setJyztzh(origin.getString("交易主体账号")); accountVO.setJyztyhkh(origin.getString("交易主体银行卡号")); accountVO.setJyztyhmc(origin.getString("交易主体银行名称")); accountVO.setJyzthm(origin.getString("交易主体户名")); accountVO.setJylx(origin.getString("交易类型")); accountVO.setJysj(origin.getString("交易时间")); accountVO.setJyje(origin.getString("交易金额(元)")); accountVO.setJyye(origin.getString("账户余额(元)")); accountVO.setJydszh(origin.getString("交易对手账号")); accountVO.setJydsyhkh(origin.getString("交易对手银行卡号")); accountVO.setJydsyhkhmc(origin.getString("交易对手银行名称")); accountVO.setJydshm(origin.getString("交易对手户名")); accountVO.setJyztdcrzbz(origin.getString("借贷类型")); accountVO.setType("财付通"); } public void assembleDatafzza(Document origin, AccountVO accountVO) { accountVO.setZfddh(origin.getString("支付订单号")); accountVO.setJylsh(origin.getString("交易流水号")); accountVO.setJyztzh(origin.getString("交易主体账号")); accountVO.setJyztdcrzbz(origin.getString("交易主体的出入账标识")); accountVO.setJylx(origin.getString("交易类型")); accountVO.setZflx(origin.getString("支付类型")); accountVO.setBz(origin.getString("币种")); accountVO.setJyje(origin.getString("交易金额")); accountVO.setJyye(origin.getString("账户余额")); accountVO.setXfposjbh(origin.getString("消费POS机编号")); accountVO.setJysblx(origin.getString("交易设备类型")); accountVO.setJyzfsbip(origin.getString("交易支付设备IP")); accountVO.setMacdz(origin.getString("交易支付设备IP")); accountVO.setJyddjd(origin.getString("交易地点经度")); accountVO.setJyddwd(origin.getString("交易地点纬度")); accountVO.setRemark(origin.getString("备注")); accountVO.setJyztyhkh(origin.getString("交易主体银行卡号")); accountVO.setJyztyhmc(origin.getString("交易主体银行名称")); accountVO.setJyzthm(origin.getString("交易主体户名")); accountVO.setJysj(origin.getString("交易时间")); accountVO.setJydszh(origin.getString("交易对手账号")); accountVO.setJydsyhkh(origin.getString("交易对手银行卡号")); accountVO.setJydsyhkhmc(origin.getString("交易对手银行名称")); accountVO.setJydshm(origin.getString("交易对手户名")); accountVO.setType("反诈"); } public void assembleDatawld(Document origin, AccountVO accountVO) { accountVO.setZfddh(origin.getString("商户订单号")); accountVO.setJylx(origin.getString("类型")); accountVO.setJylsh(origin.getString("交易号")); accountVO.setJyztzh(origin.getString("支付宝用户ID")); accountVO.setJyzthm(origin.getString("支付宝户名")); accountVO.setJyztdcrzbz(origin.getString("收/支")); accountVO.setJysj(origin.getString("交易创建时间")); accountVO.setJyje(origin.getString("金额(元)")); accountVO.setJydszh(origin.getString("对手支付宝用户ID")); accountVO.setJydshm(origin.getString("对手支付宝户名")); accountVO.setXfmc(origin.getString("消费名称")); accountVO.setJylyd(origin.getString("交易来源地")); accountVO.setJyzt(origin.getString("交易状态")); accountVO.setRemark(origin.getString("备注")); accountVO.setType("五联单"); } public void insertDataWld(AccountVO accountVO, DataMap dataMap) { dataMap.put("支付订单号", accountVO.getZfddh()); dataMap.put("交易流水号", accountVO.getJylsh()); dataMap.put("交易主体银行名称", accountVO.getJyztyhmc()); dataMap.put("交易主体账号", accountVO.getJyztzh()); dataMap.put("交易主体银行卡号", accountVO.getJyztyhkh()); dataMap.put("交易主体户名", accountVO.getJyzthm()); dataMap.put("交易类型", accountVO.getJylx()); dataMap.put("支付类型", accountVO.getZflx()); dataMap.put("借贷类型", getJtType(accountVO.getJyztdcrzbz())); dataMap.put("交易时间", accountVO.getJysj()); dataMap.put("币种", accountVO.getBz()); dataMap.put("交易金额", accountVO.getJyje()); dataMap.put("交易余额", accountVO.getJyye()); dataMap.put("交易对手账号", accountVO.getJydszh()); dataMap.put("交易对手银行卡号", accountVO.getJydsyhkh()); dataMap.put("交易对手银行名称", accountVO.getJydsyhkhmc()); dataMap.put("交易对手户名", accountVO.getJydshm()); dataMap.put("消费POS机编号", accountVO.getXfposjbh()); dataMap.put("交易设备类型", accountVO.getJysblx()); dataMap.put("交易支付设备IP", accountVO.getJyzfsbip()); dataMap.put("MAC地址", accountVO.getMacdz()); dataMap.put("交易地点经度", accountVO.getJyddjd()); dataMap.put("交易地点纬度", accountVO.getJyddwd()); dataMap.put("消费名称", accountVO.getXfmc()); dataMap.put("交易来源地", accountVO.getJylyd()); dataMap.put("交易状态", accountVO.getJyzt()); dataMap.put("备注", accountVO.getRemark()); dataMap.put("类型", accountVO.getType()); } public String getJtType(String type){ if(type.equals("借")||type.equals("出")||type.equals("支")||type.equals("出账")){ return "借"; }else if(type.equals("贷")||type.equals("入")||type.equals("支")||type.equals("入账")){ return "贷"; } return type; } }