| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package com.adx.tencent.httpapi;
- import com.adx.tencent.baidu.ConversionClient;
- import com.adx.tencent.baidu.model.ConversionQuery;
- import com.adx.tencent.conversionsync.ConversionSyncRunner;
- import com.adx.tencent.conversionsync.ConversionSyncService;
- import com.adx.tencent.conversionsync.RetryService;
- import org.springframework.http.HttpStatus;
- import org.springframework.lang.Nullable;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.server.ResponseStatusException;
- import java.util.List;
- import java.util.Map;
- /**
- * 管理接口:手动触发转化同步和回调重试。
- */
- @RestController
- @RequestMapping("/admin")
- public class AdminController {
- private final ConversionClient conversionClient;
- private final ConversionSyncRunner conversionSyncRunner;
- private final ConversionSyncService conversionSyncer;
- private final RetryService retryService;
- public AdminController(ConversionClient conversionClient,
- @Nullable ConversionSyncRunner conversionSyncRunner,
- @Nullable ConversionSyncService conversionSyncer,
- @Nullable RetryService retryService) {
- this.conversionClient = conversionClient;
- this.conversionSyncRunner = conversionSyncRunner;
- this.conversionSyncer = conversionSyncer;
- this.retryService = retryService;
- }
- @PostMapping("/conversions/query")
- public Object queryConversions(@RequestBody ConversionQuery query) throws Exception {
- return conversionClient.queryPayments(query);
- }
- @PostMapping("/conversions/sync")
- public Object syncConversions(@RequestBody ConversionQuery query) throws Exception {
- if (conversionSyncer == null) {
- throw new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE,
- "conversion syncer is not configured");
- }
- return conversionSyncer.syncTencentConversions(query);
- }
- @PostMapping("/conversions/backfill")
- public Object backfillConversions(@RequestBody(required = false) Map<String, Object> body) throws Exception {
- if (conversionSyncRunner == null) {
- throw new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE,
- "conversion sync runner is not configured");
- }
- List<Integer> offsets = parseOffsets(body);
- return conversionSyncRunner.runForOffsets(offsets);
- }
- @PostMapping("/callbacks/retry")
- public Object retryCallbacks(@RequestBody Map<String, Object> body) {
- if (retryService == null) {
- throw new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE,
- "callback retryer is not configured");
- }
- int limit = toInt(body.get("limit"));
- return retryService.retryTencentCallbacks(limit);
- }
- private static int toInt(Object v) {
- if (v == null) return 0;
- if (v instanceof Number n) return n.intValue();
- try { return Integer.parseInt(v.toString()); } catch (NumberFormatException e) { return 0; }
- }
- private static List<Integer> parseOffsets(Map<String, Object> body) {
- if (body == null || body.isEmpty()) {
- return defaultBackfillOffsets();
- }
- Object raw = body.get("offsets");
- if (!(raw instanceof Iterable<?> iterable)) {
- return defaultBackfillOffsets();
- }
- List<Integer> offsets = new java.util.ArrayList<>();
- for (Object item : iterable) {
- offsets.add(toInt(item));
- }
- return offsets.isEmpty() ? defaultBackfillOffsets() : offsets;
- }
- private static List<Integer> defaultBackfillOffsets() {
- return List.of(-1, -2, -3, -4, -5, -6, -7);
- }
- }
|