admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/job/order/pdd/UpdatePDDOrderJob.java
@@ -1,94 +1,123 @@
package com.yeshi.fanli.job.order.pdd;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.yeshi.fanli.dto.pdd.PDDOrderResult;
import com.yeshi.fanli.entity.pdd.PDDOrder;
import com.yeshi.fanli.exception.pdd.PDDOrderException;
import com.yeshi.fanli.service.inter.pdd.PDDOrderService;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.cmq.JDOrderCMQManager;
import com.yeshi.fanli.util.cmq.PDDOrderCMQManager;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
//从淘宝爬去订单更新
//@Component
public class UpdatePDDOrderJob {
   @Resource
   private PDDOrderService pddOrderService;
   @Resource
   private RedisManager redisManager;
   /**
    * 保存订单
    *
    * @param jdOrderList
    */
   public void savePDDOrders(List<PDDOrder> orderList) {
      for (PDDOrder order : orderList)
         try {
            pddOrderService.addOrder(order);
            /**
             * 做频率限制
             */
            String key = "pdd-order-" + order.getOrderSn();
            String result = redisManager.getCommonString(key);
//            if (!StringUtil.isNullOrEmpty(result))
//               continue;
            PDDOrderCMQManager.getInstance().addPDDOrder(order.getOrderSn() + "");
            redisManager.cacheCommonString(key, "1", 60 * 60 * 2);// 2小时内不再更新
         } catch (PDDOrderException e) {
            e.printStackTrace();
         }
   }
   /**
    * 快速订单更新(爬取本小时内的单,每分钟一次)
    */
   @Scheduled(cron = "0 0/1 * * * ? ")
   public void updateSoonOrder() {
//      if (!Constant.IS_TASK)
//         return;
      Date now = null;
      now = PinDuoDuoApiUtil.getSystemTime();
      if (now == null)
         now = new Date();
      long endTime = now.getTime();
      long startTime = endTime - 1000 * 60 * 60;// 最近一个小时
      PDDOrderResult result = PinDuoDuoApiUtil.getOrdersList(1, 50, startTime, endTime);
      if (result != null && result.getOrderList() != null)
         savePDDOrders(result.getOrderList());
   }
   /**
    * 爬取最近1天的订单(30分钟一次)
    */
   @Scheduled(cron = "0 0/30 * * * ? ")
   public void updateUpdateOrder() {
//      if (!Constant.IS_TASK)
//         return;
      long endTime = System.currentTimeMillis() - 1000 * 60 * 60L;
      long startTime = System.currentTimeMillis() - 1000 * 60 * 60 * 24L;
      int page = 1;
      List<PDDOrder> pddOrderList = new ArrayList<>();
      PDDOrderResult result = PinDuoDuoApiUtil.getOrdersList(page++, 50, startTime, endTime);
      pddOrderList.addAll(result.getOrderList());
      while (result != null && pddOrderList.size() < result.getTotalCount()) {
         result = PinDuoDuoApiUtil.getOrdersList(page++, 50, startTime, endTime);
         if (result != null)
            pddOrderList.addAll(result.getOrderList());
      }
      savePDDOrders(pddOrderList);
   }
}
package com.yeshi.fanli.job.order.pdd;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.fanli.dto.mq.order.body.CommonOrderMQMsg;
import com.yeshi.fanli.dto.pdd.PDDOrderResult;
import com.yeshi.fanli.entity.pdd.PDDOrder;
import com.yeshi.fanli.exception.pdd.PDDOrderException;
import com.yeshi.fanli.service.inter.order.pdd.PDDOrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.mq.cmq.order.OrdersCMQManager;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
//从淘宝爬去订单更新
@Component
public class UpdatePDDOrderJob {
   @Resource
   private PDDOrderService pddOrderService;
   @Resource
   private RedisManager redisManager;
   @Resource
   private OrdersCMQManager ordersCMQManager;
   /**
    * 保存订单
    *
    * @param orderList
    */
   public void savePDDOrders(List<PDDOrder> orderList) {
      //5分钟不更新就报警
      try {
         redisManager.cacheCommonString(RedisKeyEnum.monitor.getKey() + Constant.SOURCE_TYPE_PDD, "1", 60 * 5);
      } catch (Exception e) {
      }
      for (PDDOrder order : orderList) {
         if (order.getOrderStatus() == 2) {
            System.out.println(order);
         }
         try {
            pddOrderService.addOrder(order);
            /**
             * 做频率限制
             */
            String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.PDDOrder, order.getOrderSn() + "");
            String result = redisManager.getCommonString(key);
            // if (!StringUtil.isNullOrEmpty(result))
            // continue;
            ordersCMQManager.addOrder(new CommonOrderMQMsg(order.getOrderSn() + "",Constant.SOURCE_TYPE_PDD));
            redisManager.cacheCommonString(key, "1", 60 * 60 * 2);// 2小时内不再更新
         } catch (PDDOrderException e) {
            e.printStackTrace();
         }
      }
   }
   /**
    * 拼多多订单爬取
    */
   @XxlJob("updatePDDOrderHandler")
   public ReturnT<String> updatePDDOrder(String param) throws Exception {
      if ("1".equalsIgnoreCase(param)) {// 更新本小时内的单
         updateSoonOrder();
      } else if ("1day".equalsIgnoreCase(param)) {// 爬取最近1天的订单(30分钟一次)
         updateUpdateOrder();
      }
      return ReturnT.SUCCESS;
   }
   /**
    * 快速订单更新(爬取本小时内的单,每分钟一次)
    */
   // @Scheduled(cron = "0 0/1 * * * ? ")
   public void updateSoonOrder() {
      Date now = null;
      now = PinDuoDuoApiUtil.getSystemTime();
      if (now == null)
         now = new Date();
      long endTime = now.getTime();
      long startTime = endTime - 1000 * 60 * 60;// 最近一个小时
      PDDOrderResult result = PinDuoDuoApiUtil.getOrdersList(1, 50, startTime, endTime);
      if (result != null && result.getOrderList() != null)
         savePDDOrders(result.getOrderList());
   }
   /**
    * 爬取最近1天的订单(30分钟一次)
    */
   // @Scheduled(cron = "0 0/30 * * * ? ")
   public void updateUpdateOrder() {
      long endTime = System.currentTimeMillis() - 1000 * 60 * 60L;
      long startTime = System.currentTimeMillis() - 1000 * 60 * 60 * 24L ;
      updateUpdateOrder(startTime,endTime);
   }
   public void updateUpdateOrder(long startTime,long endTime) {
      int page = 1;
      List<PDDOrder> pddOrderList = new ArrayList<>();
      PDDOrderResult result = PinDuoDuoApiUtil.getOrdersList(page++, 50, startTime, endTime);
      pddOrderList.addAll(result.getOrderList());
      while (result != null && pddOrderList.size() < result.getTotalCount()) {
         result = PinDuoDuoApiUtil.getOrdersList(page++, 50, startTime, endTime);
         if (result != null)
            pddOrderList.addAll(result.getOrderList());
      }
      savePDDOrders(pddOrderList);
   }
}