package ieven.server.webapp.service.tenpay; import com.mongodb.client.MongoCursor; import ieven.server.webapp.domain.data.DataMap; import ieven.server.webapp.domain.data.Fields; import ieven.server.webapp.domain.file.FileService; import ieven.server.webapp.domain.tenpay.TenpayHeaders; 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.Map; import java.util.concurrent.CountDownLatch; @Slf4j public class TenpayAccount extends Ops implements Runnable { List originFields; String modelId; MongoTemplate mongoTemplate; FileService fileService; Map accountToName; CountDownLatch latch; public TenpayAccount( List originFields, String modelId, MongoTemplate mongoTemplate, FileService fileService, Map accountToName, CountDownLatch latch) { this.originFields = originFields; this.modelId = modelId; this.mongoTemplate = mongoTemplate; this.fileService = fileService; this.accountToName = accountToName; this.latch = latch; } @Override public void run() { log.info("财付通-开户信息开始"); List headers = TenpayHeaders.getHeaders(3); // 直接删除旧表创建新表 List matched = matchHeaders(originFields, headers); if (CollectionUtils.isNotEmpty(matched)) { String newFileId = createLogicAndDeleteOld("财付通-注册信息", modelId, headers, mongoTemplate, fileService); for (Fields fields : matched) { String fileId = fields.getFileId(); MongoCursor cursor = getCursor(fileId, mongoTemplate); Document originDoc; List needToSave = new ArrayList<>(1000); String string1 = ""; String string2 = ""; String string3 = ""; String string4 = ""; String string5 = ""; String string6 = ""; while (cursor.hasNext()) { originDoc = cursor.next(); // 拷贝到新的 DataMap newDoc = initWithOrigin(originDoc, newFileId); deleteKey(newDoc, "FILEID"); String s1 = (String) newDoc.get("账户状态"); String s2 = (String) newDoc.get("账号"); String s3 = (String) newDoc.get("注册姓名"); String s4 = (String) newDoc.get("注册时间"); String s5 = (String) newDoc.get("注册身份证号"); String s6 = (String) newDoc.get("绑定手机"); if (StringUtils.isNotBlank(s1) && StringUtils.isBlank(string1)) { string1 = s1; } else { newDoc.put("账户状态", string1); } if (StringUtils.isNotBlank(s2) && StringUtils.isBlank(string2)) { string2 = s2; } else { newDoc.put("账号", string2); } if (StringUtils.isNotBlank(s3) && StringUtils.isBlank(string3)) { string3 = s3; } else { newDoc.put("注册姓名", string3); } if (StringUtils.isNotBlank(s4) && StringUtils.isBlank(string4)) { string4 = s4; } else { newDoc.put("注册时间", string4); } if (StringUtils.isNotBlank(s5) && StringUtils.isBlank(string5)) { string5 = s5; } else { newDoc.put("注册身份证号", string5); } if (StringUtils.isNotBlank(s6) && StringUtils.isBlank(string6)) { string6 = s6; } else { newDoc.put("绑定手机", string6); } String name = originDoc.getString("注册姓名"); String account = originDoc.getString("账号"); this.accountToName.putIfAbsent(account, name); needToSave.add(newDoc); if (needToSave.size() >= 1000) { saveLines(new ArrayList<>(needToSave), mongoTemplate); needToSave.clear(); } } if (CollectionUtils.isNotEmpty(needToSave)) { saveLines(needToSave, mongoTemplate); } } } latch.countDown(); log.info("财付通-开户信息结束"); } }