admin
2019-09-22 b9f8ef2c4737b6e6be4b12fc8f7bafb033bfcfe5
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeOrderApiUtil.java
@@ -8,6 +8,7 @@
import java.util.Map;
import com.yeshi.fanli.dto.order.OrderQuery;
import com.yeshi.fanli.dto.taobao.TaoBaoOrderResultDTO;
import com.yeshi.fanli.dto.taobao.WeiQuanOrderResult;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoPunishOrder;
@@ -31,164 +32,6 @@
   public static int TK_STATUS_SUCCESS = 14;
   public static int TK_STATUS_INVALID = 13;
   /**
    * 获取会员订单
    *
    * @param startTime-开始时间
    * @param page-页码
    * @param appKey
    * @param appSecret
    * @return
    */
   private static List<TaoBaoOrder> getTaoBaoSpecialOrder(String startTime, int span, int page, int tkStatus,
         String appKey, String appSecret) {
      OrderQuery orderQuery = new OrderQuery();
      orderQuery.startTime = startTime;
      orderQuery.tkStatus = tkStatus;
      orderQuery.orderScene = 3;
      orderQuery.pageNo = page;
      orderQuery.pageSize = 100;
      orderQuery.span = span;
      if (tkStatus == TK_STATUS_SETTLEMENT)
         orderQuery.orderQueryType = "settle_time";
      else
         orderQuery.orderQueryType = "create_time";
      return queryTaoBaoOrder(orderQuery, appKey, appSecret);
   }
   /**
    * 获取第三方会员订单
    *
    * @param startTime
    * @param page
    * @param appKey
    * @param appSecret
    * @return
    */
   private static List<TaoBaoOrder> getTaoBaoSpecialThirdOrder(String startTime, int span, int page, int tkStatus,
         String appKey, String appSecret) {
      OrderQuery orderQuery = new OrderQuery();
      orderQuery.startTime = startTime;
      orderQuery.tkStatus = tkStatus;
      if (tkStatus == TK_STATUS_SETTLEMENT)
         orderQuery.orderQueryType = "settle_time";
      else
         orderQuery.orderQueryType = "create_time";
      orderQuery.orderScene = 3;
      orderQuery.pageNo = page;
      orderQuery.pageSize = 100;
      orderQuery.span = span;
      orderQuery.orderCountType = 2;
      return queryTaoBaoOrder(orderQuery, appKey, appSecret);
   }
   /**
    * 获取渠道订单
    *
    * @param startTime
    * @param appKey
    * @param appSecret
    * @return
    */
   private static List<TaoBaoOrder> getTaoBaoRelationOrder(String startTime, int span, int page, int tkStatus,
         String appKey, String appSecret) {
      OrderQuery orderQuery = new OrderQuery();
      orderQuery.startTime = startTime;
      orderQuery.span = span;
      orderQuery.tkStatus = tkStatus;
      if (tkStatus == TK_STATUS_SETTLEMENT)
         orderQuery.orderQueryType = "settle_time";
      else
         orderQuery.orderQueryType = "create_time";
      orderQuery.orderScene = 2;
      orderQuery.pageNo = page;
      orderQuery.pageSize = 100;
      return queryTaoBaoOrder(orderQuery, appKey, appSecret);
   }
   /**
    * 第三方渠道订单
    *
    * @param startTime
    * @param page
    * @param appKey
    * @param appSecret
    * @return
    */
   private static List<TaoBaoOrder> getTaoBaoRelationThirdOrder(String startTime, int span, int page, int tkStatus,
         String appKey, String appSecret) {
      OrderQuery orderQuery = new OrderQuery();
      orderQuery.startTime = startTime;
      orderQuery.span = span;
      orderQuery.tkStatus = tkStatus;
      if (tkStatus == TK_STATUS_SETTLEMENT)
         orderQuery.orderQueryType = "settle_time";
      else
         orderQuery.orderQueryType = "create_time";
      orderQuery.orderScene = 2;
      orderQuery.pageNo = page;
      orderQuery.pageSize = 100;
      orderQuery.orderCountType = 2;
      return queryTaoBaoOrder(orderQuery, appKey, appSecret);
   }
   /**
    * 获取所有的订单(不带渠道信息与会员信息)
    *
    * @param startTime
    * @param appKey
    * @param appSecret
    * @return
    */
   public static List<TaoBaoOrder> getTaoBaoAllOrder(String startTime, String appKey, String appSecret, int tkStatus) {
      return getTaoBaoAllOrder(startTime, 1200, 1, tkStatus, appKey, appSecret);
   }
   public static List<TaoBaoOrder> getTaoBaoAllOrder(String startTime, int span, int page, int tkStatus, String appKey,
         String appSecret) {
      OrderQuery orderQuery = new OrderQuery();
      orderQuery.startTime = startTime;
      orderQuery.span = span;
      orderQuery.tkStatus = tkStatus;
      if (tkStatus == TK_STATUS_SETTLEMENT)
         orderQuery.orderQueryType = "settle_time";
      else
         orderQuery.orderQueryType = "create_time";
      orderQuery.orderScene = 1;
      orderQuery.pageNo = page;
      orderQuery.pageSize = 100;
      orderQuery.orderCountType = 1;
      return queryTaoBaoOrder(orderQuery, appKey, appSecret);
   }
   /**
    * 获取第三方订单
    *
    * @param startTime
    * @param span
    * @param page
    * @param appKey
    * @param appSecret
    * @return
    */
   public static List<TaoBaoOrder> getTaoBaoThirdAllOrder(String startTime, int span, int page, int tkStatus,
         String appKey, String appSecret) {
      OrderQuery orderQuery = new OrderQuery();
      orderQuery.startTime = startTime;
      orderQuery.span = span;
      orderQuery.tkStatus = tkStatus;
      if (tkStatus == TK_STATUS_SETTLEMENT)
         orderQuery.orderQueryType = "settle_time";
      else
         orderQuery.orderQueryType = "create_time";
      orderQuery.orderScene = 1;
      orderQuery.pageNo = page;
      orderQuery.pageSize = 100;
      orderQuery.orderCountType = 2;
      return queryTaoBaoOrder(orderQuery, appKey, appSecret);
   }
   private static TaoBaoPunishOrder parsePunishOrder(JSONObject data) {
      TaoBaoPunishOrder order = new TaoBaoPunishOrder();
@@ -259,6 +102,8 @@
      return resultList;
   }
   @Deprecated
   private static List<TaoBaoOrder> queryTaoBaoOrder(OrderQuery orderQuery, String appKey, String appSecret) {
      Map<String, String> map = new HashMap<>();
@@ -400,16 +245,22 @@
      return orderList;
   }
   private static List<TaoBaoOrder> parseTaoBaoOrderNew(String response) {
   private static TaoBaoOrderResultDTO parseTaoBaoOrderNew(String response) {
      TaoBaoOrderResultDTO dto=new TaoBaoOrderResultDTO(false, false, null, new ArrayList<>());
      List<TaoBaoOrder> orderList = new ArrayList<>();
      JSONArray array = null;
      JSONObject data = JSONObject.fromObject(response);
      try {
         array = data.optJSONObject("tbk_order_details_get_response").optJSONObject("data").optJSONObject("results")
         JSONObject rootData=data.optJSONObject("tbk_order_details_get_response").optJSONObject("data");
         array =rootData .optJSONObject("results")
               .optJSONArray("publisher_order_dto");
         dto.setHasPre(   rootData.optBoolean("has_pre"));
         dto.setPositionIndex(rootData.optString("position_index"));
         dto.setHasNext(rootData.optBoolean("has_next"));
      } catch (Exception e) {
         return orderList;
         return dto;
      }
      if (array != null)
@@ -491,252 +342,8 @@
               }
            }
         }
      return orderList;
   }
   private static List<TaoBaoOrder> getSpecialOrder(long startTime, int span, int tkStatus) {
      int page = 1;
      String startTimeStr = TimeUtil.getGernalTime(startTime, "yyyy-MM-dd HH:mm:ss");
      List<TaoBaoOrder> orderList = getTaoBaoSpecialOrder(startTimeStr, span, page, tkStatus,
            TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      while (orderList.size() == 100 * page) {
         page++;
         List<TaoBaoOrder> tempOrderList = getTaoBaoSpecialOrder(startTimeStr, span, page, tkStatus,
               TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
      }
      return orderList;
   }
   /**
    * 获取第三方普通订单
    *
    * @param startTime
    * @param span
    * @return
    */
   private static List<TaoBaoOrder> getThirdTSpecialOrder(long startTime, int span, int tkStatus) {
      int page = 1;
      String startTimeStr = TimeUtil.getGernalTime(startTime, "yyyy-MM-dd HH:mm:ss");
      List<TaoBaoOrder> orderList = getTaoBaoSpecialThirdOrder(startTimeStr, span, page, tkStatus,
            TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      while (orderList.size() == 100 * page) {
         page++;
         List<TaoBaoOrder> tempOrderList = getTaoBaoSpecialThirdOrder(startTimeStr, span, page, tkStatus,
               TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
      }
      return orderList;
   }
   private static List<TaoBaoOrder> getRelationOrder(long startTime, int span, int tkStatus) {
      int page = 1;
      String startTimeStr = TimeUtil.getGernalTime(startTime, "yyyy-MM-dd HH:mm:ss");
      List<TaoBaoOrder> orderList = getTaoBaoRelationOrder(startTimeStr, span, page, tkStatus,
            TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      while (orderList.size() == 100 * page) {
         page++;
         List<TaoBaoOrder> tempOrderList = getTaoBaoRelationOrder(startTimeStr, span, page, tkStatus,
               TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
      }
      return orderList;
   }
   private static List<TaoBaoOrder> getThirdRelationOrder(long startTime, int span, int tkStatus) {
      int page = 1;
      String startTimeStr = TimeUtil.getGernalTime(startTime, "yyyy-MM-dd HH:mm:ss");
      List<TaoBaoOrder> orderList = getTaoBaoRelationThirdOrder(startTimeStr, span, page, tkStatus,
            TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      while (orderList.size() == 100 * page) {
         page++;
         List<TaoBaoOrder> tempOrderList = getTaoBaoRelationThirdOrder(startTimeStr, span, page, tkStatus,
               TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
      }
      return orderList;
   }
   /**
    * 获取某个区间的会员订单
    *
    * @param startTime
    * @param endTime
    * @return
    */
   public static List<TaoBaoOrder> getSpecialOrder(long startTime, long endTime, int tkStatus) {
      List<TaoBaoOrder> orderList = new ArrayList<>();
      long span = (endTime - startTime) % 1000 == 0 ? (endTime - startTime) / 1000 : (endTime - startTime) / 1000 + 1;
      int count = (int) (span / 1200);
      if (span % 1200 != 0)
         count++;
      for (int i = 0; i < count; i++) {
         long startT = startTime + i * 1200 * 1000L;
         int s = 1200;
         if (endTime < startT + 1200 * 1000L) {
            s = (int) ((endTime - startT) / 1000) + 1;
            if (s < 60)
               s = 60;
         }
         List<TaoBaoOrder> tempOrderList = getSpecialOrder(startT, s, tkStatus);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
      }
      return orderList;
   }
   /**
    * 获取某个区间的第三方会员订单
    *
    * @param startTime
    * @param endTime
    * @return
    */
   public static List<TaoBaoOrder> getThirdSpecialOrder(long startTime, long endTime, int tkStatus) {
      List<TaoBaoOrder> orderList = new ArrayList<>();
      long span = (endTime - startTime) % 1000 == 0 ? (endTime - startTime) / 1000 : (endTime - startTime) / 1000 + 1;
      int count = (int) (span / 1200);
      if (span % 1200 != 0)
         count++;
      for (int i = 0; i < count; i++) {
         long startT = startTime + i * 1200 * 1000L;
         int s = 1200;
         if (endTime < startT + 1200 * 1000L) {
            s = (int) ((endTime - startT) / 1000) + 1;
            if (s < 60)
               s = 60;
         }
         List<TaoBaoOrder> tempOrderList = getThirdTSpecialOrder(startT, s, tkStatus);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
      }
      return orderList;
   }
   /**
    * 获取渠道订单
    *
    * @param startTime
    * @param endTime
    * @return
    */
   public static List<TaoBaoOrder> getRelationOrder(long startTime, long endTime, int tkStatus) {
      List<TaoBaoOrder> orderList = new ArrayList<>();
      long span = (endTime - startTime) % 1000 == 0 ? (endTime - startTime) / 1000 : (endTime - startTime) / 1000 + 1;
      int count = (int) (span / 1200);
      if (span % 1200 != 0)
         count++;
      for (int i = 0; i < count; i++) {
         long startT = startTime + i * 1200 * 1000L;
         int s = 1200;
         if (endTime < startT + 1200 * 1000L) {
            s = (int) ((endTime - startT) / 1000) + 1;
            if (s < 60)
               s = 60;
         }
         List<TaoBaoOrder> tempOrderList = getRelationOrder(startT, s, tkStatus);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
      }
      return orderList;
   }
   /**
    * 获取某个区间的第三方渠道订单
    *
    * @param startTime
    * @param endTime
    * @return
    */
   public static List<TaoBaoOrder> getThirdRelationOrder(long startTime, long endTime, int tkStatus) {
      List<TaoBaoOrder> orderList = new ArrayList<>();
      long span = (endTime - startTime) % 1000 == 0 ? (endTime - startTime) / 1000 : (endTime - startTime) / 1000 + 1;
      int count = (int) (span / 1200);
      if (span % 1200 != 0)
         count++;
      for (int i = 0; i < count; i++) {
         long startT = startTime + i * 1200 * 1000L;
         int s = 1200;
         if (endTime < startT + 1200 * 1000L) {
            s = (int) ((endTime - startT) / 1000) + 1;
            if (s < 60)
               s = 60;
         }
         List<TaoBaoOrder> tempOrderList = getThirdRelationOrder(startT, s, tkStatus);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
      }
      return orderList;
   }
   private static List<TaoBaoOrder> getTaoBaoSettleOrders(long startTime, int span, boolean third) {
      OrderQuery orderQuery = new OrderQuery();
      orderQuery.span = span;
      orderQuery.orderQueryType = "settle_time";
      orderQuery.orderScene = 1;
      orderQuery.pageSize = 100;
      orderQuery.tkStatus = TK_STATUS_SETTLEMENT;
      int page = 1;
      orderQuery.pageNo = page;
      if (third)
         orderQuery.orderCountType = 2;
      else
         orderQuery.orderCountType = 1;
      String startTimeStr = TimeUtil.getGernalTime(startTime, "yyyy-MM-dd HH:mm:ss");
      orderQuery.startTime = startTimeStr;
      List<TaoBaoOrder> orderList = queryTaoBaoOrder(orderQuery, TaoBaoConstant.TAOBAO_AUTH_APPKEY,
            TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      while (orderList.size() == 100 * page) {
         page++;
         orderQuery.pageNo = page;
         List<TaoBaoOrder> tempOrderList = queryTaoBaoOrder(orderQuery, TaoBaoConstant.TAOBAO_AUTH_APPKEY,
               TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
      }
      return orderList;
   }
   /**
    * 获取结算订单
    *
    * @param startTime
    * @param endTime
    * @param third
    *            -是否为第三方订单
    * @return
    */
   public static List<TaoBaoOrder> getTaoBaoSettleOrders(long startTime, long endTime, boolean third) {
      List<TaoBaoOrder> orderList = new ArrayList<>();
      long span = (endTime - startTime) % 1000 == 0 ? (endTime - startTime) / 1000 : (endTime - startTime) / 1000 + 1;
      int count = (int) (span / 1200);
      if (span % 1200 != 0)
         count++;
      for (int i = 0; i < count; i++) {
         long startT = startTime + i * 1200 * 1000L;
         int s = 1200;
         if (endTime < startT + 1200 * 1000L) {
            s = (int) ((endTime - startT) / 1000) + 1;
            if (s < 60)
               s = 60;
         }
         List<TaoBaoOrder> tempOrderList = getTaoBaoSettleOrders(startT, s, third);
         if (tempOrderList != null && tempOrderList.size() > 0)
            orderList.addAll(tempOrderList);
         try {
            Thread.sleep(1000 * 10);// 加个延时,防止API请求频率限制
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }
      return orderList;
      dto.setOrderList(orderList);
      return dto;
   }
   public static WeiQuanOrderResult getTaoBaoRelationWeiQuanOrderList(Date startTime, int searchType, int page,
@@ -833,6 +440,10 @@
      return finalResult;
   }
   /**
    * 新版本淘宝订单
    */
   /**
    * 获取淘宝会员运营订单
@@ -842,46 +453,48 @@
    * @return
    */
   public static List<TaoBaoOrder> getTaoBaoSpecialOrderList(long startTime, long endTime, int queryType) {
      List<TaoBaoOrder> orderList = new ArrayList<>();
      // 间隔3小时
      long jianGe = endTime - startTime;
      long page = jianGe / (1000 * 60 * 60 * 3L);
      if (page == 0)
         page = 1;
      for (int i = 1; i <= page; i++) {
         long start = startTime + (i - 1) * (1000 * 60 * 60 * 3L);
         long end = start + (1000 * 60 * 60 * 3L);
         if (end > endTime)
            end = endTime;
         List<TaoBaoOrder> tempOrderList = queryNewOrder(TimeUtil.getGernalTime(start, "yyyy-MM-dd HH:mm:ss"),
               TimeUtil.getGernalTime(end, "yyyy-MM-dd HH:mm:ss"), queryType, 3);
         if (tempOrderList != null)
            orderList.addAll(tempOrderList);
      }
      return orderList;
      return getTaoBaoOrderList(startTime, endTime, queryType, 3);
   }
   public static List<TaoBaoOrder> getTaoBaoRelationOrderList(long startTime, long endTime, int queryType) {
      return getTaoBaoOrderList(startTime, endTime, queryType, 2);
   }
   public static List<TaoBaoOrder> getTaoBaoCommonOrderList(long startTime, long endTime, int queryType) {
      return getTaoBaoOrderList(startTime, endTime, queryType, 1);
   }
   public static List<TaoBaoOrder> getTaoBaoOrderList(long startTime, long endTime, int queryType,int orderScene) {
      List<TaoBaoOrder> orderList = new ArrayList<>();
      // 间隔3小时
      // 跨度20分钟
      long span=(1000 * 60 * 20L);
      long jianGe = endTime - startTime;
      long page = jianGe / (1000 * 60 * 60 * 3L);
      long page = jianGe %span==0?jianGe/span:jianGe /span+1 ;
      if (page == 0)
         page = 1;
      for (int i = 1; i <= page; i++) {
         long start = startTime + (i - 1) * (1000 * 60 * 60 * 3L);
         long end = start + (1000 * 60 * 60 * 3L);
         long start = startTime + (i - 1) * span;
         long end = start + span;
         if (end > endTime)
            end = endTime;
         List<TaoBaoOrder> tempOrderList = queryNewOrder(TimeUtil.getGernalTime(start, "yyyy-MM-dd HH:mm:ss"),
               TimeUtil.getGernalTime(end, "yyyy-MM-dd HH:mm:ss"), queryType, 2);
         if (tempOrderList != null)
            orderList.addAll(tempOrderList);
         TaoBaoOrderResultDTO dto = queryNewOrder(TimeUtil.getGernalTime(start, "yyyy-MM-dd HH:mm:ss"),
               TimeUtil.getGernalTime(end, "yyyy-MM-dd HH:mm:ss"),null, queryType, orderScene);
         if (dto != null)
            orderList.addAll(dto.getOrderList());
         while(dto.isHasNext())
         {
            dto=queryNewOrder(TimeUtil.getGernalTime(start, "yyyy-MM-dd HH:mm:ss"),
                  TimeUtil.getGernalTime(end, "yyyy-MM-dd HH:mm:ss"),dto.getPositionIndex(), queryType, orderScene);
            if (dto != null)
               orderList.addAll(dto.getOrderList());
         }
      }
      return orderList;
   }
   public static List<TaoBaoOrder> queryNewOrder(String startTime, String endTime, int queryType, int orderScene) {
   private static TaoBaoOrderResultDTO queryNewOrder(String startTime, String endTime,String positionIndex, int queryType, int orderScene) {
      Map<String, String> params = new HashMap<>();
      params.put("query_type", queryType + "");
      params.put("page_size", "100");
@@ -889,17 +502,18 @@
      params.put("end_time", endTime);
      params.put("page_no", "1");
      params.put("order_scene", orderScene + "");
      if(!StringUtil.isNullOrEmpty(positionIndex))
         params.put("position_index", positionIndex + "");
      params.put("method", "taobao.tbk.order.details.get");
      TaoKeAppInfo app = new TaoKeAppInfo();
      app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
      app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      try {
         JSONObject json = TaoKeBaseUtil.baseRequest(params, app);
         List<TaoBaoOrder> orderList = parseTaoBaoOrderNew(json.toString());
         return orderList;
         return parseTaoBaoOrderNew(json.toString());
      } catch (TaoKeApiException e) {
         e.printStackTrace();
      }
      return new ArrayList<>();
      return null;
   }
}