TenpayMobile.java 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package ieven.server.webapp.service.tenpay;
  2. import com.mongodb.client.MongoCursor;
  3. import ieven.server.webapp.domain.data.DataMap;
  4. import ieven.server.webapp.domain.data.Fields;
  5. import ieven.server.webapp.domain.file.FileService;
  6. import ieven.server.webapp.domain.tenpay.TenpayHeaders;
  7. import ieven.server.webapp.service.Ops;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.apache.commons.collections4.CollectionUtils;
  10. import org.bson.Document;
  11. import org.springframework.data.mongodb.core.MongoTemplate;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.concurrent.CountDownLatch;
  15. @Slf4j
  16. public class TenpayMobile extends Ops implements Runnable {
  17. List<Fields> originFields;
  18. String modelId;
  19. MongoTemplate mongoTemplate;
  20. FileService fileService;
  21. CountDownLatch latch;
  22. public TenpayMobile(
  23. List<Fields> originFields,
  24. String modelId,
  25. MongoTemplate mongoTemplate,
  26. FileService fileService,
  27. CountDownLatch latch) {
  28. this.originFields = originFields;
  29. this.modelId = modelId;
  30. this.mongoTemplate = mongoTemplate;
  31. this.fileService = fileService;
  32. this.latch = latch;
  33. }
  34. @Override
  35. public void run() {
  36. log.info("财付通-手机明细开始");
  37. List<String> headers = TenpayHeaders.getHeaders(4);
  38. // 直接删除旧表创建新表
  39. List<Fields> matched = matchHeaders(originFields, headers);
  40. if (CollectionUtils.isNotEmpty(matched)) {
  41. String newFileId =
  42. createLogicAndDeleteOld("财付通-手机明细", modelId, headers, mongoTemplate, fileService);
  43. for (Fields fields : matched) {
  44. String fileId = fields.getFileId();
  45. MongoCursor<Document> cursor = getCursor(fileId, mongoTemplate);
  46. Document originDoc;
  47. List<DataMap> needToSave = new ArrayList<>(1000);
  48. while (cursor.hasNext()) {
  49. originDoc = cursor.next();
  50. // 拷贝到新的
  51. DataMap newDoc = initWithOrigin(originDoc, newFileId);
  52. needToSave.add(newDoc);
  53. if (needToSave.size() >= 1000) {
  54. saveLines(new ArrayList<>(needToSave), mongoTemplate);
  55. needToSave.clear();
  56. }
  57. }
  58. if (CollectionUtils.isNotEmpty(needToSave)) {
  59. saveLines(needToSave, mongoTemplate);
  60. }
  61. }
  62. }
  63. latch.countDown();
  64. log.info("财付通-手机明细结束");
  65. }
  66. }