ConversionSyncRunner.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.adx.tracking.conversionsync;
  2. import com.adx.tracking.baidu.model.ConversionQuery;
  3. import com.adx.tracking.storage.TiDBColdStore;
  4. import com.adx.tracking.storage.model.MediaCallbackRecord;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import java.time.Instant;
  8. import java.time.LocalDate;
  9. import java.time.format.DateTimeFormatter;
  10. import java.util.List;
  11. /**
  12. * 对应 Go internal/conversionsync/runner.go 的 Runner。
  13. * 定期调用 ConversionSyncService.syncKuaishouConversions()。
  14. * 在 Spring 中通过 @Scheduled 触发(见 AppScheduler)。
  15. */
  16. public class ConversionSyncRunner {
  17. private static final Logger log = LoggerFactory.getLogger(ConversionSyncRunner.class);
  18. private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("yyyyMMdd");
  19. private final ConversionSyncService syncer;
  20. private final int dateOffsetDays;
  21. private final int pageSize;
  22. private final List<Integer> acts;
  23. public ConversionSyncRunner(ConversionSyncService syncer,
  24. int dateOffsetDays, int pageSize, List<Integer> acts) {
  25. this.syncer = syncer;
  26. this.dateOffsetDays = dateOffsetDays;
  27. this.pageSize = pageSize > 0 ? pageSize : 1;
  28. this.acts = acts;
  29. }
  30. /**
  31. * 对应 Go Runner.RunOnce()。
  32. */
  33. public ConversionSyncService.SyncResult runOnce() throws Exception {
  34. String date = LocalDate.now().plusDays(dateOffsetDays).format(DATE_FMT);
  35. ConversionQuery query = new ConversionQuery();
  36. query.setDate(date);
  37. query.setPageSize(pageSize);
  38. query.setActs(acts);
  39. return syncer.syncKuaishouConversions(query);
  40. }
  41. }
  42. // ─── RetryService ─────────────────────────────────────────────────────────────
  43. // 单独的 RetryService 类,和 Go internal/conversionsync/retry.go 对应:
  44. // 从 TiDB 查出未成功的 Kuaishou 回调,逐条重试。