This commit is contained in:
雷欧(林平凡)
2025-01-07 13:40:21 +08:00
parent 4fddc08818
commit 9d63f6e180
3 changed files with 50 additions and 42 deletions

View File

@@ -33,7 +33,7 @@ public class OrderController {
@ResponseBody
public String refreshHistory(String token) throws Exception {
if (checkToken(token)) {
jdUtils.fetchHistoricalOrders3060();
jdUtils.fetchHistoricalOrders3090();
}
return "OK";
}

View File

@@ -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<OrderRow, String> {
List<OrderRow> 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<OrderRow> 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<OrderRow> findByValidCodeNotInAndOrderTimeGreaterThanOrderByOrderTimeDesc(
int[] validCodes,
@DateTimeFormat(pattern = "yyyy-MM-dd") Date threeMonthsAgo
);
}

View File

@@ -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<OrderRow> orderRows = orderRowRepository.findByValidCodeNotInOrderByOrderTimeDesc(parm);
int[] validCodes = {-1};
// 只要三个月的,更多的也刷新不出来的
Date threeMonthsAgo = Date.from(LocalDateTime.now().minusMonths(3).atZone(ZoneId.systemDefault()).toInstant());
List<OrderRow> 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<OrderRow> 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<String, Long> skuIdViolationCountMap = filterOrdersByDays.stream()
.filter(orderRow -> orderRow.getValidCode() == 27 || orderRow.getValidCode() == 28)
.filter(orderRow -> orderRow.getSkuName() != null)
.collect(Collectors.groupingBy(OrderRow::getSkuName, Collectors.counting()));
Map<String, Long> skuIdViolationCountMap = filterOrdersByDays.stream().filter(orderRow -> orderRow.getValidCode() == 27 || orderRow.getValidCode() == 28).filter(orderRow -> orderRow.getSkuName() != null).collect(Collectors.groupingBy(OrderRow::getSkuName, Collectors.counting()));
Map<String, List<OrderInfo>> 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<String, List<OrderInfo>> 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<Map.Entry<String, Long>> sortedViolationCounts = skuIdViolationCountMap.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).collect(Collectors.toList());
List<Map.Entry<String, Long>> sortedViolationCounts = skuIdViolationCountMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).collect(Collectors.toList());
Integer num = 0;
for (Map.Entry<String, Long> 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);