yujian
2020-05-23 28cf328a098334b51a3e9d2d56f983fb8c862211
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeOrderApiUtil.java
@@ -7,15 +7,16 @@
import java.util.List;
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.TaoBaoOrderGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoPunishOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.TimeUtil;
@@ -31,7 +32,6 @@
   public static int TK_STATUS_PAY = 12;
   public static int TK_STATUS_SUCCESS = 14;
   public static int TK_STATUS_INVALID = 13;
   private static TaoBaoPunishOrder parsePunishOrder(JSONObject data) {
      TaoBaoPunishOrder order = new TaoBaoPunishOrder();
@@ -102,161 +102,17 @@
      return resultList;
   }
   @Deprecated
   private static List<TaoBaoOrder> queryTaoBaoOrder(OrderQuery orderQuery, String appKey, String appSecret) {
      Map<String, String> map = new HashMap<>();
      map.put("method", "taobao.tbk.order.get");
      map.put("fields",
            "tb_trade_parent_id,tb_trade_id,num_iid,item_title,item_num,price,pay_price,seller_nick,seller_shop_title,commission,commission_rate,unid,create_time,earning_time,tk_status,tk3rd_pub_id,tk3rd_site_id,tk3rd_adzone_id,relation_id,tb_trade_parent_id,tb_trade_id,num_iid,item_title,item_num,price,pay_price,seller_nick,seller_shop_title,commission,commission_rate,unid,create_time,earning_time,tk3rd_pub_id,tk3rd_site_id,tk3rd_adzone_id,special_id,click_time,relation_id,special_id");
      if (orderQuery.startTime != null)
         map.put("start_time", orderQuery.startTime);
      if (orderQuery.span != null)
         map.put("span", orderQuery.span + "");
      map.put("page_no", orderQuery.pageNo + "");
      map.put("page_size", orderQuery.pageSize + "");
      if (orderQuery.tkStatus != null)
         map.put("tk_status", orderQuery.tkStatus + "");
      if (orderQuery.orderQueryType != null)
         map.put("order_query_type", orderQuery.orderQueryType);
      if (orderQuery.orderScene != null)
         map.put("order_scene", orderQuery.orderScene + "");
      if (orderQuery.orderCountType != null)
         map.put("order_count_type", orderQuery.orderCountType + "");
      TaoKeAppInfo app = new TaoKeAppInfo();
      app.setAppKey(appKey);
      app.setAppSecret(appSecret);
      try {
         JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
         return parseTaoBaoOrder(json.toString());
      } catch (TaoKeApiException e) {
         e.printStackTrace();
      }
      try {
         Thread.sleep(1000);
      } catch (InterruptedException e) {
         e.printStackTrace();
      }
      return null;
   }
   private static List<TaoBaoOrder> parseTaoBaoOrder(String response) {
      List<TaoBaoOrder> orderList = new ArrayList<>();
      JSONObject data = JSONObject.fromObject(response);
      if (data.optJSONObject("tbk_order_get_response") == null)
         return orderList;
      if (data.optJSONObject("tbk_order_get_response").optJSONObject("results") == null)
         return orderList;
      if (data.optJSONObject("tbk_order_get_response").optJSONObject("results").optJSONArray("n_tbk_order") == null)
         return orderList;
      JSONArray array = data.optJSONObject("tbk_order_get_response").optJSONObject("results")
            .optJSONArray("n_tbk_order");
      for (int i = 0; i < array.size(); i++) {
         JSONObject item = array.optJSONObject(i);
         try {
            TaoBaoOrder taoBaoOrder = new TaoBaoOrder();
            taoBaoOrder.setAdPositionId(item.optString("adzone_id"));
            taoBaoOrder.setAdPositionName(item.optString("adzone_name"));
            taoBaoOrder.setAuctionId(item.optLong("num_iid"));
            taoBaoOrder.setClassName(item.optString("auction_category"));
            taoBaoOrder.setClickTime(item.optString("click_time"));
            taoBaoOrder.setCount(item.optInt("item_num"));
            taoBaoOrder.setCreateTime(item.optString("create_time"));
            if (!StringUtil.isNullOrEmpty(item.optString("total_commission_fee")))
               taoBaoOrder.seteIncome(new BigDecimal(item.optString("total_commission_fee")));
            else
               taoBaoOrder.seteIncome(new BigDecimal(0));
            if (!StringUtil.isNullOrEmpty(item.optString("pub_share_pre_fee")))
               taoBaoOrder.setEstimate(new BigDecimal(item.optString("pub_share_pre_fee")));
            else
               taoBaoOrder.setEstimate(new BigDecimal(0));
            taoBaoOrder.setiRatio(new BigDecimal(item.optString("income_rate")).multiply(new BigDecimal(100)));
            taoBaoOrder.setLatestUpdateTime(null);
            taoBaoOrder.setManagerWangWang(null);
            taoBaoOrder.setOrderBy(null);
            taoBaoOrder.setOrderId(item.optString("trade_parent_id"));
            if (item.optInt("tk_status") == 12)
               taoBaoOrder.setOrderState("订单付款");
            else if (item.optInt("tk_status") == 3)
               taoBaoOrder.setOrderState("订单结算");
            else if (item.optInt("tk_status") == 13)
               taoBaoOrder.setOrderState("订单失效");
            else if (item.optInt("tk_status") == 14)
               taoBaoOrder.setOrderState("订单成功");
            taoBaoOrder.setOrderType(item.optString("order_type"));
            if (!StringUtil.isNullOrEmpty(item.optString("alipay_total_price")))
               taoBaoOrder.setPayment(new BigDecimal(item.optString("alipay_total_price")));
            else
               taoBaoOrder.setPayment(new BigDecimal(0));
            taoBaoOrder.setPrice(new BigDecimal(item.optString("price")));
            if (!StringUtil.isNullOrEmpty(item.optString("pay_price")))
               taoBaoOrder.setSettlement(new BigDecimal(item.optString("pay_price")));
            else
               taoBaoOrder.setSettlement(new BigDecimal(0));
            taoBaoOrder.setSettlementTime(item.optString("earning_time"));
            taoBaoOrder.setShop(item.optString("seller_shop_title"));
            taoBaoOrder.setSourceMediaId(item.optString("site_id"));
            taoBaoOrder.setSourceMediaName(item.optString("site_name"));
            taoBaoOrder.setsRatio(null);
            if (!StringUtil.isNullOrEmpty(item.optString("subsidy_fee")))// 补贴金额
               taoBaoOrder.setSubsidy(new BigDecimal(item.optString("subsidy_fee")));
            if (!StringUtil.isNullOrEmpty(item.optString("subsidy_rate")))
               taoBaoOrder.setSubsidyRatio(
                     new BigDecimal(item.optString("subsidy_rate")).multiply(new BigDecimal(100)));
            taoBaoOrder.setSubsidyType(item.optString("subsidy_type"));
            taoBaoOrder.setTechnologySupportPercent(null);
            taoBaoOrder.setThirdService(null);
            taoBaoOrder.setTitle(item.optString("item_title"));
            if (!StringUtil.isNullOrEmpty(item.optString("total_commission_fee")))
               taoBaoOrder.setTkMoney(new BigDecimal(item.optString("total_commission_fee")));
            else
               taoBaoOrder.setTkMoney(new BigDecimal(0));
            if (!StringUtil.isNullOrEmpty(item.optString("commission_rate")))
               taoBaoOrder
                     .setTkRate(new BigDecimal(item.optString("commission_rate")).multiply(new BigDecimal(100)));
            else if (!StringUtil.isNullOrEmpty(item.optString("total_commission_rate")))
               taoBaoOrder.setTkRate(
                     new BigDecimal(item.optString("total_commission_rate")).multiply(new BigDecimal(100)));
            taoBaoOrder.setTransactionPlatform(item.optString("terminal_type"));
            taoBaoOrder.setRelationId(item.optString("relation_id"));
            taoBaoOrder.setSpecialId(item.optString("special_id"));
            taoBaoOrder.setTradeId(item.optString("trade_id"));
            orderList.add(taoBaoOrder);
         } catch (Exception e) {
            try {
               LogHelper.errorDetailInfo(e, "订单号信息:" + item.toString(), "订单解析出错");
            } catch (Exception e1) {
            }
         }
      }
      return orderList;
   }
   private static TaoBaoOrderResultDTO parseTaoBaoOrderNew(String response) {
      TaoBaoOrderResultDTO dto=new TaoBaoOrderResultDTO(false, false, null, new ArrayList<>());
      TaoBaoOrderResultDTO dto = new TaoBaoOrderResultDTO(false, false, null, new ArrayList<>());
      List<TaoBaoOrder> orderList = new ArrayList<>();
      JSONArray array = null;
      JSONObject data = JSONObject.fromObject(response);
      try {
         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"));
         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) {
@@ -305,11 +161,14 @@
                  taoBaoOrder.setPayment(new BigDecimal(item.optString("alipay_total_price")));
               else
                  taoBaoOrder.setPayment(new BigDecimal(0));
               taoBaoOrder.setPrice(new BigDecimal(item.optString("item_price")));
               if (StringUtil.isNullOrEmpty(item.optString("item_price")))
                  taoBaoOrder.setPrice(new BigDecimal(0));
               else
                  taoBaoOrder.setPrice(new BigDecimal(item.optString("item_price")));
               if (!StringUtil.isNullOrEmpty(item.optString("pay_price")))
                  taoBaoOrder.setSettlement(new BigDecimal(item.optString("pay_price")));
               else
                  taoBaoOrder.setSettlement(new BigDecimal(0));
                  taoBaoOrder.setSettlement(taoBaoOrder.getPayment());
               taoBaoOrder.setSettlementTime(item.optString("tk_earning_time"));
               taoBaoOrder.setShop(item.optString("seller_shop_title"));
               taoBaoOrder.setSourceMediaId(item.optString("site_id"));
@@ -335,6 +194,21 @@
               taoBaoOrder.setRelationId(item.optString("relation_id"));
               taoBaoOrder.setSpecialId(item.optString("special_id"));
               taoBaoOrder.setTradeId(item.optString("trade_id"));
               // 解析商品信息
               TaoBaoOrderGoods goods = new TaoBaoOrderGoods();
               goods.setCategoryName(item.optString("item_category_name"));
               goods.setCreateTime(new Date());
               goods.setGoodsId(item.optLong("item_id"));
               goods.setImg(item.optString("item_img"));
               goods.setLink(item.optString("item_link"));
               goods.setPrice(item.optString("item_price"));
               goods.setTitle(item.optString("item_title"));
               goods.setTradeId(item.optString("trade_id"));
               if (goods.getImg() != null && !goods.getImg().startsWith("http")) {
                  goods.setImg("http:" + goods.getImg());
               }
               taoBaoOrder.setGoods(goods);
               orderList.add(taoBaoOrder);
            } catch (Exception e) {
               try {
@@ -441,7 +315,7 @@
      return finalResult;
   }
   /**
    * 新版本淘宝订单
    */
@@ -457,21 +331,28 @@
      return getTaoBaoOrderList(startTime, endTime, queryType, 3);
   }
   /**
    * 淘宝渠道订单
    *
    * @param startTime
    * @param endTime
    * @param queryType
    * @return
    */
   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) {
   public static List<TaoBaoOrder> getTaoBaoOrderList(long startTime, long endTime, int queryType, int orderScene) {
      List<TaoBaoOrder> orderList = new ArrayList<>();
      // 跨度20分钟
      long span=(1000 * 60 * 20L);
      long span = (1000 * 60 * 20L);
      long jianGe = endTime - startTime;
      long page = jianGe %span==0?jianGe/span:jianGe /span+1 ;
      long page = jianGe % span == 0 ? jianGe / span : jianGe / span + 1;
      if (page == 0)
         page = 1;
      for (int i = 1; i <= page; i++) {
@@ -480,22 +361,33 @@
         if (end > endTime)
            end = endTime;
         TaoBaoOrderResultDTO dto = queryNewOrder(TimeUtil.getGernalTime(start, "yyyy-MM-dd HH:mm:ss"),
               TimeUtil.getGernalTime(end, "yyyy-MM-dd HH:mm:ss"),null, queryType, orderScene);
               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);
         while (dto!=null&&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;
   }
   private static TaoBaoOrderResultDTO queryNewOrder(String startTime, String endTime,String positionIndex, int queryType, int orderScene) {
   /**
    * 淘宝订单查询
    *
    * @param startTime
    * @param endTime
    * @param positionIndex
    * @param queryType
    *            1:按照订单淘客创建时间查询,2:按照订单淘客付款时间查询,3:按照订单淘客结算时间查询
    * @param orderScene
    * @return
    */
   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");
@@ -503,7 +395,7 @@
      params.put("end_time", endTime);
      params.put("page_no", "1");
      params.put("order_scene", orderScene + "");
      if(!StringUtil.isNullOrEmpty(positionIndex))
      if (!StringUtil.isNullOrEmpty(positionIndex))
         params.put("position_index", positionIndex + "");
      params.put("method", "taobao.tbk.order.details.get");
      TaoKeAppInfo app = new TaoKeAppInfo();
@@ -511,8 +403,10 @@
      app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      try {
         JSONObject json = TaoKeBaseUtil.baseRequest(params, app);
         if (Constant.IS_TEST)
            System.out.println(json);
         return parseTaoBaoOrderNew(json.toString());
      } catch (TaoKeApiException e) {
      } catch (Exception e) {
         e.printStackTrace();
      }
      return null;