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.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 TenpayMobile extends Ops implements Runnable { List originFields; String modelId; MongoTemplate mongoTemplate; FileService fileService; CountDownLatch latch; public TenpayMobile( List originFields, String modelId, MongoTemplate mongoTemplate, FileService fileService, CountDownLatch latch) { this.originFields = originFields; this.modelId = modelId; this.mongoTemplate = mongoTemplate; this.fileService = fileService; this.latch = latch; } @Override public void run() { log.info("财付通-手机明细开始"); List headers = TenpayHeaders.getHeaders(4); // 直接删除旧表创建新表 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); while (cursor.hasNext()) { originDoc = cursor.next(); // 拷贝到新的 DataMap newDoc = initWithOrigin(originDoc, newFileId); 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("财付通-手机明细结束"); } }