diff --git a/src/main/java/cn/van/business/util/JDUtils.java b/src/main/java/cn/van/business/util/JDUtils.java index 7fbb58a..a83ee3d 100644 --- a/src/main/java/cn/van/business/util/JDUtils.java +++ b/src/main/java/cn/van/business/util/JDUtils.java @@ -9,15 +9,12 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.util.DateUtils; import com.jd.open.api.sdk.DefaultJdClient; import com.jd.open.api.sdk.JdClient; -import com.jd.open.api.sdk.domain.kplunion.GoodsService.request.query.BigFieldGoodsReq; import com.jd.open.api.sdk.domain.kplunion.OrderService.request.query.OrderRowReq; import com.jd.open.api.sdk.domain.kplunion.OrderService.response.query.GoodsInfo; import com.jd.open.api.sdk.domain.kplunion.OrderService.response.query.OrderRowResp; import com.jd.open.api.sdk.domain.kplunion.promotioncommon.PromotionService.request.get.PromotionCodeReq; -import com.jd.open.api.sdk.request.kplunion.UnionOpenGoodsBigfieldQueryRequest; import com.jd.open.api.sdk.request.kplunion.UnionOpenOrderRowQueryRequest; import com.jd.open.api.sdk.request.kplunion.UnionOpenPromotionCommonGetRequest; -import com.jd.open.api.sdk.response.kplunion.UnionOpenGoodsBigfieldQueryResponse; import com.jd.open.api.sdk.response.kplunion.UnionOpenOrderRowQueryResponse; import com.jd.open.api.sdk.response.kplunion.UnionOpenPromotionCommonGetResponse; import org.slf4j.Logger; @@ -184,7 +181,7 @@ public class JDUtils { LocalDateTime now = LocalDateTime.now(); LocalDateTime lastMinute = now.minusMinutes(10).withSecond(0).withNano(0); - UnionOpenOrderRowQueryResponse response = fetchOrdersForDateTime(lastMinute, true,1); // 真实代表实时订单 + UnionOpenOrderRowQueryResponse response = fetchOrdersForDateTime(lastMinute, true, 1); // 真实代表实时订单 if (response != null) { int code = response.getQueryResult().getCode(); @@ -228,41 +225,45 @@ public class JDUtils { */ @Scheduled(cron = "0 0 * * * ?") public void fetchHistoricalOrders() throws Exception { - // 从设定的开始日期到昨天的同一时间 System.out.println("开始拉取历史订单"); - // 拉最近两个月的订单 - // 获取当前时间,并调整为整点开始 - LocalDateTime startDate = LocalDateTime.now().minusMonths(2).truncatedTo(ChronoUnit.HOURS); + // 获取当前时间,并调整为整点开始 LocalDateTime now = LocalDateTime.now(); LocalDateTime lastHour = now.truncatedTo(ChronoUnit.HOURS); + LocalDateTime startDate = lastHour.minusMonths(2).truncatedTo(ChronoUnit.HOURS); - + // 循环从两个月前到现在最近的整点 while (!startDate.isEqual(lastHour)) { - startDate = startDate.plusHours(1); - UnionOpenOrderRowQueryResponse response = fetchOrdersForDateTime(startDate, false); // 假的代表历史订单 - if (response != null) { - int code = response.getQueryResult().getCode(); - if (code == 200) { - if (response.getQueryResult().getCode() == 200) { - OrderRowResp[] orderRowResps = response.getQueryResult().getData(); - if (orderRowResps == null) { - continue; - } + Integer pageIndex = 1; + Boolean hasMore = true; + + while (hasMore) { + UnionOpenOrderRowQueryResponse response = fetchOrdersForDateTime(startDate, false, pageIndex); // 假的代表历史订单 + + if (response != null && response.getQueryResult().getCode() == 200) { + OrderRowResp[] orderRowResps = response.getQueryResult().getData(); + + if (orderRowResps != null) { for (OrderRowResp orderRowResp : orderRowResps) { // 固化到数据库 OrderRow orderRow = createOrderRow(orderRowResp); // 订单号不存在就保存,存在就更新订单状态 orderRowRepository.save(orderRow); } - if (response.getQueryResult().getHasMore()){ - continue; - } } + + // 判断是否有更多页面 + hasMore = response.getQueryResult().getHasMore(); + if (hasMore) { + pageIndex++; + } + } else { + hasMore = false; } } - + // 每处理完一个小时的数据,递增到下一个小时 + startDate = startDate.plusHours(1); } } @@ -326,7 +327,7 @@ public class JDUtils { /** * 根据指定的日期时间拉取订单 */ - public UnionOpenOrderRowQueryResponse fetchOrdersForDateTime(LocalDateTime startTime, boolean isRealTime,Integer page) throws Exception { + public UnionOpenOrderRowQueryResponse fetchOrdersForDateTime(LocalDateTime startTime, boolean isRealTime, Integer page) throws Exception { LocalDateTime endTime = isRealTime ? startTime.plusMinutes(10) : startTime.plusHours(1); String key = startTime.format(DATE_TIME_FORMATTER); @@ -335,7 +336,7 @@ public class JDUtils { SetOperations setOps = redisTemplate.opsForSet(); // 调用 API 以拉取订单 - UnionOpenOrderRowQueryResponse unionOpenOrderRowQueryResponse = getUnionOpenOrderRowQueryResponse(startTime, endTime,page); + UnionOpenOrderRowQueryResponse unionOpenOrderRowQueryResponse = getUnionOpenOrderRowQueryResponse(startTime, endTime, page); // 标记已拉取 setOps.add(key, hourRange); @@ -694,7 +695,7 @@ public class JDUtils { * @return * @throws Exception */ - public UnionOpenOrderRowQueryResponse getUnionOpenOrderRowQueryResponse(LocalDateTime start, LocalDateTime end) throws Exception { + public UnionOpenOrderRowQueryResponse getUnionOpenOrderRowQueryResponse(LocalDateTime start, LocalDateTime end, Integer pageIndex) throws Exception { String startTime = start.format(DATE_TIME_FORMATTER); String endTime = end.format(DATE_TIME_FORMATTER); // 模拟 API 调用 @@ -704,7 +705,7 @@ public class JDUtils { JdClient client = new DefaultJdClient(SERVER_URL, ACCESS_TOKEN, APP_KEY, SECRET_KEY); UnionOpenOrderRowQueryRequest request = new UnionOpenOrderRowQueryRequest(); OrderRowReq orderReq = new OrderRowReq(); - orderReq.setPageIndex(1); + orderReq.setPageIndex(pageIndex); orderReq.setPageSize(200); orderReq.setStartTime(startTime); orderReq.setEndTime(endTime); @@ -723,7 +724,6 @@ public class JDUtils { return client.execute(request); } - /** * 转链 */