From 9d63f6e1807d98ccb7cb5e84f530ffce69f43435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E6=AC=A7=EF=BC=88=E6=9E=97=E5=B9=B3=E5=87=A1?= =?UTF-8?q?=EF=BC=89?= Date: Tue, 7 Jan 2025 13:40:21 +0800 Subject: [PATCH] 1 --- .../controller/jd/OrderController.java | 2 +- .../repository/OrderRowRepository.java | 9 +++ .../java/cn/van/business/util/JDUtils.java | 81 +++++++++---------- 3 files changed, 50 insertions(+), 42 deletions(-) diff --git a/src/main/java/cn/van/business/controller/jd/OrderController.java b/src/main/java/cn/van/business/controller/jd/OrderController.java index 3af3b42..d109da2 100644 --- a/src/main/java/cn/van/business/controller/jd/OrderController.java +++ b/src/main/java/cn/van/business/controller/jd/OrderController.java @@ -33,7 +33,7 @@ public class OrderController { @ResponseBody public String refreshHistory(String token) throws Exception { if (checkToken(token)) { - jdUtils.fetchHistoricalOrders3060(); + jdUtils.fetchHistoricalOrders3090(); } return "OK"; } diff --git a/src/main/java/cn/van/business/repository/OrderRowRepository.java b/src/main/java/cn/van/business/repository/OrderRowRepository.java index 3d9f887..c98166c 100644 --- a/src/main/java/cn/van/business/repository/OrderRowRepository.java +++ b/src/main/java/cn/van/business/repository/OrderRowRepository.java @@ -9,8 +9,11 @@ package cn.van.business.repository; import cn.van.business.model.jd.OrderRow; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Repository; +import java.util.Date; import java.util.List; @Repository @@ -27,6 +30,12 @@ public interface OrderRowRepository extends JpaRepository { List findByValidCode(int validCode); // 查找 validCode != 15 或者 !=-1 的订单行 ,并且按orderTime 降序 + @Query("select o from OrderRow o where o.validCode not in ?1 order by o.orderTime DESC") List findByValidCodeNotInOrderByOrderTimeDesc(int[] validCodes); + @Query("select o from OrderRow o where o.validCode not in ?1 and o.orderTime >= ?2 order by o.orderTime DESC") + List findByValidCodeNotInAndOrderTimeGreaterThanOrderByOrderTimeDesc( + int[] validCodes, + @DateTimeFormat(pattern = "yyyy-MM-dd") Date threeMonthsAgo + ); } diff --git a/src/main/java/cn/van/business/util/JDUtils.java b/src/main/java/cn/van/business/util/JDUtils.java index bf2f8de..b0f72c8 100644 --- a/src/main/java/cn/van/business/util/JDUtils.java +++ b/src/main/java/cn/van/business/util/JDUtils.java @@ -1,21 +1,15 @@ package cn.van.business.util; -import cn.van.business.model.jd.GoodsInfoVO; import cn.van.business.model.jd.OrderRow; import cn.van.business.repository.OrderRowRepository; -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.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.promotionbysubunioni.PromotionService.request.get.PromotionCodeReq; import com.jd.open.api.sdk.request.kplunion.UnionOpenOrderRowQueryRequest; -import com.jd.open.api.sdk.request.kplunion.UnionOpenPromotionBysubunionidGetRequest; import com.jd.open.api.sdk.response.kplunion.UnionOpenOrderRowQueryResponse; -import com.jd.open.api.sdk.response.kplunion.UnionOpenPromotionCommonGetResponse; import lombok.Getter; import lombok.Setter; import org.slf4j.Logger; @@ -47,15 +41,27 @@ import java.util.stream.Stream; */ @Component public class JDUtils { - private static final String SERVER_URL = "https://api.jd.com/routerjson"; + /** + * 密钥配置 + */ + // van论坛 - private static final String APP_KEY_WZ = "98e21c89ae5610240ec3f5f575f86a59"; - private static final String SECRET_KEY_WZ = "3dcb6b23a1104639ac433fd07adb6dfb"; + private static final String LPF_APP_KEY_WZ = "98e21c89ae5610240ec3f5f575f86a59"; + private static final String LPF_SECRET_KEY_WZ = "3dcb6b23a1104639ac433fd07adb6dfb"; + // 导购的 + private static final String LPF_APP_KEY_DG = "faf410cb9587dc80dc7b31e321d7d322"; + private static final String LPF_SECRET_KEY_DG = "a4fb15d7bedd4316b97b4e96e4effc1c"; + + private static final String LL_APP_KEY_DG = "9c2011409f0fc906b73432dd3687599d"; + private static final String LL_SECRET_KEY_DG = "3ceddff403e544a8a2eacc727cf05dab"; + + + /** + * 实际业务处理 + */ // 标记是否拉取过小时的订单,空订单会set 一个 tag,避免重复拉取 private static final String JD_REFRESH_TAG = "jd:refresh:tag:"; - // 导购的 - private static final String APP_KEY_DG = "faf410cb9587dc80dc7b31e321d7d322"; - private static final String SECRET_KEY_DG = "a4fb15d7bedd4316b97b4e96e4effc1c"; + private static final String SERVER_URL = "https://api.jd.com/routerjson"; //accessToken private static final String ACCESS_TOKEN = ""; @@ -204,8 +210,10 @@ public class JDUtils { @Scheduled(cron = "*/10 * * * * ?") public void sendOrderToWx() { //long start = System.currentTimeMillis(); - int[] parm = {-1}; - List orderRows = orderRowRepository.findByValidCodeNotInOrderByOrderTimeDesc(parm); + int[] validCodes = {-1}; + // 只要三个月的,更多的也刷新不出来的 + Date threeMonthsAgo = Date.from(LocalDateTime.now().minusMonths(3).atZone(ZoneId.systemDefault()).toInstant()); + List orderRows = orderRowRepository.findByValidCodeNotInAndOrderTimeGreaterThanOrderByOrderTimeDesc(validCodes, threeMonthsAgo); for (OrderRow orderRow : orderRows) { @@ -221,19 +229,19 @@ public class JDUtils { * 一天拉取三次 30天到60天前的订单 */ @Scheduled(cron = "0 0 */4 * * ?") - public void fetchHistoricalOrders3060() { + public void fetchHistoricalOrders3090() { - fetchHistoricalOrders3060Do(); + fetchHistoricalOrders3090Do(); } - private int fetchHistoricalOrders3060Do() { + private int fetchHistoricalOrders3090Do() { int count = 0; LocalDateTime now = LocalDateTime.now(); //logger.info("拉取历史订单---> , {} 点,{} 分", now.getHour(), now.getMinute()); LocalDateTime lastHour = now.truncatedTo(ChronoUnit.HOURS).minusMonths(1); - LocalDateTime startDate = lastHour.minusMonths(2).truncatedTo(ChronoUnit.HOURS); + LocalDateTime startDate = lastHour.minusMonths(3).truncatedTo(ChronoUnit.HOURS); while (!startDate.isEqual(lastHour)) { Integer pageIndex = 1; @@ -484,7 +492,7 @@ public class JDUtils { /** * 接收京粉指令指令 */ - public void sendOrderToWxByOrderJD(String order) throws Exception { + public void sendOrderToWxByOrderJD(String order) { int[] param = {-1}; List orderRows = orderRowRepository.findByValidCodeNotInOrderByOrderTimeDesc(param); /** @@ -512,7 +520,7 @@ public class JDUtils { content.append("今日订单\r"); content.append("昨日订单\r"); content.append("刷新7天\r"); - content.append("刷新3060\r"); + content.append("刷新3090\r"); content.append("刷新1430\r"); content.append("刷新0714\r"); @@ -748,9 +756,9 @@ public class JDUtils { break; } - case "刷新3060": { + case "刷新3090": { long start = System.currentTimeMillis(); - int count = fetchHistoricalOrders3060Do(); + int count = fetchHistoricalOrders3090Do(); long time = System.currentTimeMillis() - start; content.append("订单行:").append(count).append(",耗时: ").append(time).append("ms, ").append((time) / 1000).append(" s\r"); break; @@ -772,7 +780,6 @@ public class JDUtils { break; } - default: sendOrderToWxByOrderJDAdvanced(order); } @@ -805,25 +812,17 @@ public class JDUtils { content.append(daysInt).append("天").append("\r\n"); - Map skuIdViolationCountMap = filterOrdersByDays.stream() - .filter(orderRow -> orderRow.getValidCode() == 27 || orderRow.getValidCode() == 28) - .filter(orderRow -> orderRow.getSkuName() != null) - .collect(Collectors.groupingBy(OrderRow::getSkuName, Collectors.counting())); + Map skuIdViolationCountMap = filterOrdersByDays.stream().filter(orderRow -> orderRow.getValidCode() == 27 || orderRow.getValidCode() == 28).filter(orderRow -> orderRow.getSkuName() != null).collect(Collectors.groupingBy(OrderRow::getSkuName, Collectors.counting())); - Map> orderInfoMap = filterOrdersByDays.stream() - .filter(orderRow -> orderRow.getValidCode() == 27 || orderRow.getValidCode() == 28) - .filter(orderRow -> orderRow.getSkuName() != null) - .map(orderRow -> { - OrderInfo info = new OrderInfo(); - info.setSkuName(orderRow.getSkuName()); - info.setOrderId(orderRow.getOrderId()); - info.setOrderDate(orderRow.getOrderTime()); - return info; - }) - .collect(Collectors.groupingBy(OrderInfo::getSkuName)); + Map> orderInfoMap = filterOrdersByDays.stream().filter(orderRow -> orderRow.getValidCode() == 27 || orderRow.getValidCode() == 28).filter(orderRow -> orderRow.getSkuName() != null).map(orderRow -> { + OrderInfo info = new OrderInfo(); + info.setSkuName(orderRow.getSkuName()); + info.setOrderId(orderRow.getOrderId()); + info.setOrderDate(orderRow.getOrderTime()); + return info; + }).collect(Collectors.groupingBy(OrderInfo::getSkuName)); - List> sortedViolationCounts = skuIdViolationCountMap.entrySet().stream() - .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).collect(Collectors.toList()); + List> sortedViolationCounts = skuIdViolationCountMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).collect(Collectors.toList()); Integer num = 0; for (Map.Entry entry : sortedViolationCounts) { @@ -919,7 +918,7 @@ public class JDUtils { //System.out.println("调用API - 从 " + startTime // + " 到 " + endTime); // 实际的 API 调用逻辑应在这里进行 - JdClient client = new DefaultJdClient(SERVER_URL, ACCESS_TOKEN, APP_KEY_WZ, SECRET_KEY_WZ); + JdClient client = new DefaultJdClient(SERVER_URL, ACCESS_TOKEN, LPF_APP_KEY_WZ, LPF_SECRET_KEY_WZ); UnionOpenOrderRowQueryRequest request = new UnionOpenOrderRowQueryRequest(); OrderRowReq orderReq = new OrderRowReq(); orderReq.setPageIndex(pageIndex);