Forráskód Böngészése

feat:京东新增拉取京东仓已发货的订单(状态:WAIT_GOODS_RECEIVE_CONFIRM),淘宝新增美塔璞儿店铺订单拉取

xuyongjun 1 éve
szülő
commit
ded0aa3e65

+ 19 - 27
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java

@@ -36,21 +36,13 @@ import com.iamberry.rst.service.order.mapper.ProvincesLogisticsMapper;
 import com.iamberry.rst.service.product.mapper.ProductMapper;
 import com.iamberry.rst.service.sys.mapper.SysConfigMapper;
 import com.iamberry.rst.util.DouyinConfig;
-import com.iamberry.rst.util.JingdongConfig;
 import com.iamberry.rst.util.PageUtil;
 import com.iamberry.rst.util.TaobaoConfig;
 import com.iamberry.wechat.tools.DateTimeUtil;
 import com.iamberry.wechat.tools.HttpClient431Util;
 import com.iamberry.wechat.tools.payUtil.StringUtil;
-import com.jd.open.api.sdk.DefaultJdClient;
-import com.jd.open.api.sdk.JdClient;
 import com.jd.open.api.sdk.JdException;
-import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enGet.OrderSearchInfo;
 import com.jd.open.api.sdk.domain.order.OrderShipmentService.response.shipment.OperatorResult;
-import com.jd.open.api.sdk.internal.util.HttpUtil;
-import com.jd.open.api.sdk.request.order.OrderLogisticsSearchRequest;
-import com.jd.open.api.sdk.request.order.PopOrderShipmentRequest;
-import com.jd.open.api.sdk.response.order.PopOrderShipmentResponse;
 import com.taobao.api.ApiException;
 import com.taobao.api.DefaultTaobaoClient;
 import com.taobao.api.TaobaoClient;
@@ -58,12 +50,10 @@ import com.taobao.api.request.AlibabaAscpLogisticsOfflineSendRequest;
 import com.taobao.api.response.AlibabaAscpLogisticsOfflineSendResponse;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
-import org.apache.http.HttpEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
@@ -79,7 +69,7 @@ import java.util.*;
 @Service
 public class SalesOrderServiceImpl implements SalesOrderService {
 
-    private static Logger logger = LoggerFactory.getLogger(CustomerServiceImpl.class);
+    private static Logger logger = LoggerFactory.getLogger(SalesOrderServiceImpl.class);
 
     @Autowired
     private SalesOrderMapper salesOrderMapper;
@@ -2280,25 +2270,27 @@ public class SalesOrderServiceImpl implements SalesOrderService {
             //京东订单发货
             if (salesOrder.getSalesBatchId().startsWith("JT")) {
                 try {
-                    Map<String, String> params = new HashMap<>();
-                    params.put("orderId", salesOrder.getSalesOrderId());
-                    params.put("logiCoprId", logisticsInfoService.getLogisticsNameByRSTCode(salesOrder.getSalesPostFirm()).getLogisticsXytCode());
-                    params.put("logiNo", o.getSalesPostNum());
-                    params.put("code", AES.encrypt(salesOrder.getSalesOrderId()));
-                    String result = HttpClient431Util.doPost(params, jdOrderDomain + "/jingdong/orderShipment");
-                    if (StringUtil.isNotEmpty(result)) {
-                        OperatorResult operatorResult = com.alibaba.fastjson.JSONObject.parseObject(result, OperatorResult.class);
-                        if (operatorResult.getSuccess()) {
-                            logger.info("京东发货回传请求成功:result=SUCCESS:{}, MSG:{}", operatorResult.getSuccess(), operatorResult.getChineseErrCode());
+                    // 后台拆分的订单不处理(mainOrderId为null,说明是主单)
+                    if (salesOrder.getSalesMainOrderId() == null) {
+                        Map<String, String> params = new HashMap<>();
+                        params.put("orderId", salesOrder.getSalesOrderId());
+                        params.put("logiCoprId", logisticsInfoService.getLogisticsNameByRSTCode(salesOrder.getSalesPostFirm()).getLogisticsXytCode());
+                        params.put("logiNo", o.getSalesPostNum());
+                        params.put("code", AES.encrypt(salesOrder.getSalesOrderId()));
+                        String result = HttpClient431Util.doPost(params, jdOrderDomain + "/jingdong/orderShipment");
+                        if (StringUtil.isNotEmpty(result)) {
+                            OperatorResult operatorResult = com.alibaba.fastjson.JSONObject.parseObject(result, OperatorResult.class);
+                            if (operatorResult.getSuccess()) {
+                                logger.info("京东发货回传请求成功:result=SUCCESS:{}, MSG:{}", operatorResult.getSuccess(), operatorResult.getChineseErrCode());
+                            } else {
+                                logger.info("京东发货回传请求失败:订单号:{}, code:{}, error:{}, MSG:{}", salesOrder.getSalesOrderId(), operatorResult.getErrorCode(), operatorResult.getEnglishErrCode(), operatorResult.getChineseErrCode());
+                                throw new RuntimeException("京东发货回传请求失败:" + operatorResult.getErrorCode());
+                            }
                         } else {
-                            logger.info("京东发货回传请求失败:订单号:{}, code:{}, error:{}, MSG:{}", salesOrder.getSalesOrderId(), operatorResult.getErrorCode(), operatorResult.getEnglishErrCode(), operatorResult.getChineseErrCode());
-                            throw new RuntimeException("京东发货回传请求失败:" + operatorResult.getErrorCode());
+                            logger.info("京东发货回传请求错误:{}", result);
+                            throw new RuntimeException("京东发货回传请求失败");
                         }
-                    } else {
-                        logger.info("京东发货回传请求错误:{}", result);
-                        throw new RuntimeException("京东发货回传请求失败" );
                     }
-
                 } catch (JdException e) {
                     throw new RuntimeException(e);
                 } catch (Exception e) {

+ 14 - 7
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/JingdongTask.java

@@ -131,7 +131,7 @@ public class JingdongTask {
                     orderSearchRequest = new PopOrderEnSearchRequest();
                     orderSearchRequest.setStartDate(startTime);
                     orderSearchRequest.setEndDate(endTime);
-                    orderSearchRequest.setOrderState("WAIT_SELLER_STOCK_OUT,WAIT_SELLER_DELIVERY");//待出库和境外待发货, 一般仅存在前者
+                    orderSearchRequest.setOrderState("WAIT_SELLER_STOCK_OUT,WAIT_SELLER_DELIVERY,WAIT_GOODS_RECEIVE_CONFIRM");//待出库和境外待发货, 一般仅存在前者
                     orderSearchRequest.setOptionalFields(initOrderOptionalFields());
                     orderSearchRequest.setPage("" + pageNo);
                     orderSearchRequest.setPageSize("" + 40L);
@@ -329,6 +329,10 @@ public class JingdongTask {
      * @return
      */
     private SalesOrder packageOrder(OrderSearchInfo trade) {
+        logger.info("packageOrder orderState:" + trade.getOrderState());
+        // 处理京东仓自发货场景
+        boolean waitGoodsReceiveConfirm = "WAIT_GOODS_RECEIVE_CONFIRM".equals(trade.getOrderState()) || "等待确认收货".equals(trade.getOrderStateRemark());
+
         String tid = trade.getOrderId();
 
         SalesOrder order = new SalesOrder();
@@ -336,7 +340,7 @@ public class JingdongTask {
         order.setSalesDealCode(tid);
         order.setSalesExOrderId(tid);
         order.setSalesDiscountMoney(changeY2F(StringUtils.isEmpty(trade.getSellerDiscount()) ? "0" : trade.getSellerDiscount()));
-        order.setSalesDeliver(1);
+        order.setSalesDeliver(waitGoodsReceiveConfirm ? 2 : 1);
 
         //获取收货人手机号
         OrderPrivacyModel orderPrivacyModel = getMobile(trade.getOrderId());
@@ -347,16 +351,16 @@ public class JingdongTask {
         order.setSalesPledgeMoney(0);
         order.setSalesRemainDeposit(0);
         order.setSalesOrderStatus(1);
-        order.setSalesStatus(0);
-        order.setSalesShippingStatus(0);
+        order.setSalesStatus(waitGoodsReceiveConfirm ? 4 : 0);
+        order.setSalesShippingStatus(waitGoodsReceiveConfirm ? 1 :  0);
         order.setSalesPayStatus(2);
         order.setSalesProcessStatus(1);
-        order.setSalesIsSend(0);
+        order.setSalesIsSend(waitGoodsReceiveConfirm ? 1 : 0);
         order.setSalesIsLocked(0);
         order.setSalesIsSeparate(0);
         order.setSalesIsShip(1);
         order.setSalesProcessRefund(0);
-        order.setSalesSendType(2);
+        order.setSalesSendType(waitGoodsReceiveConfirm ? 3 : 2);
         order.setSalesSalesTime(DateTimeUtil.parse(trade.getOrderStartTime()));
         // 地址
         StringJoiner address = new StringJoiner(" ");
@@ -373,7 +377,6 @@ public class JingdongTask {
         if (!StringUtils.isEmpty(addrDetail)) {
             address.add(addrDetail);
         }
-//        order.setSalesAddressInfo(consigneeInfo.getFullAddress());
         order.setSalesAddressInfo(address.toString());
 
         //京东不返回邮编
@@ -401,6 +404,10 @@ public class JingdongTask {
         order.setSalesErrorState(1);
         order.setSalesQuality(1);
         order.setSalesPostFirm("jd");
+        // 保存物流单号
+        if (waitGoodsReceiveConfirm) {
+            order.setSalesPostNum(trade.getWaybill());
+        }
         order.setSalesOrderItemList(new ArrayList<>(trade.getItemInfoList().size()));
         // 订单项
         int warranty = 0;

+ 120 - 81
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/TaobaoTask.java

@@ -40,6 +40,7 @@ import org.springframework.stereotype.Component;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author root
@@ -48,6 +49,15 @@ import java.util.List;
 @Lazy(false)
 public class TaobaoTask {
 
+    /**
+     * 爱贝源淘宝店铺 rst id
+     */
+    public static final int STORE_ID_IAMBERRY = 86;
+    /**
+     * 美塔璞儿淘宝店铺 rst id
+     */
+    public static final int STORE_ID_METAPURE = 186;
+
     private static Logger logger = LoggerFactory.getLogger(TaobaoTask.class);
 
     /** 是否允许淘宝抓取订单,true表示允许,false表示不允许 */
@@ -93,90 +103,116 @@ public class TaobaoTask {
         if (endTime == null) {
             endTime = DateTimeUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
         }
-        // 批次号
-        String batchIdST = generateKeyUtil.getSalesBatchIdST();
-        // 循环抓取
-        boolean hasNext = true;
-        long pageNo = 1;
-        try {
-            int total = 0;
-            // 开始循环
-            while (hasNext) {
-                logger.info("【淘宝订单】抓取第{}页的数据......", pageNo);
-                // 抓取淘宝数据
-                TaobaoClient client = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
-                TradesSoldIncrementGetRequest req = new TradesSoldIncrementGetRequest();
-                req.setFields("tid,type,status,payment,orders,rx_audit_status");
-                req.setStartModified(StringUtils.parseDateTime(startTime));
-                req.setEndModified(StringUtils.parseDateTime(endTime));
-                req.setStatus("WAIT_SELLER_SEND_GOODS");
-                req.setPageNo(pageNo);
-                req.setPageSize(40L);
-                req.setUseHasNext(true);
-                TradesSoldIncrementGetResponse rsp = null;
-                try {
-                    rsp = client.execute(req, (String) AdminTaobaoAuthController.getToken().get("token"));
-                    logger.info("订单数据:{}, {}", rsp.getTotalResults(), rsp.getBody());
-                } catch (ApiException e) {
-                    logger.error("", e);
-                }
-                if (rsp == null) {
-                    logger.error("【淘宝订单】请求淘宝服务器失败!");
-                    return;
-                }
-                // 判断数据
-                List<Trade> trades1 = rsp.getTrades();
-                if (trades1 == null) {
-                    break;
+
+        // 同时拉取爱贝源和美塔璞儿的淘宝店铺
+        int[] storeIds = new int[]{STORE_ID_IAMBERRY, STORE_ID_METAPURE};
+        for (int storeId : storeIds) {
+            // 销售公司 tb_rst_sales_company
+            int salesCompanyId;
+            String token = null;
+            if (storeId == STORE_ID_IAMBERRY) {
+                salesCompanyId = 1;
+                Map<String, Object> iamberryTokenMap = AdminTaobaoAuthController.getToken();
+                if (iamberryTokenMap != null) {
+                    token = (String) iamberryTokenMap.get("token");
                 }
-                if (trades1.size() == 0) {
-                    logger.info("【淘宝订单】数据请求完毕");
-                    break;
+            } else {
+                salesCompanyId = 16;
+                Map<String, Object> metaureTokenMap = AdminTaobaoAuthController.getMetaureToken();
+                if (metaureTokenMap != null) {
+                    token = (String)metaureTokenMap.get("token");
                 }
-                for (Trade trade : trades1) {
-                    Trade details = getOrderDetails(trade.getTid());
-                    if (details == null) {
-                        logger.error("【淘宝订单】{}获取订单详细数据失败", trade.getTid());
-                        return;
+            }
+            if (StringUtils.isEmpty(token)) {
+                continue;
+            }
+
+            // 批次号
+            String batchIdST = generateKeyUtil.getSalesBatchIdST();
+            // 循环抓取
+            boolean hasNext = true;
+            long pageNo = 1;
+            try {
+                int total = 0;
+                // 开始循环
+                while (hasNext) {
+                    logger.info("【淘宝订单】抓取第{}页的数据......", pageNo);
+                    // 抓取淘宝数据
+                    TaobaoClient client = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
+                    TradesSoldIncrementGetRequest req = new TradesSoldIncrementGetRequest();
+                    req.setFields("tid,type,status,payment,orders,rx_audit_status");
+                    req.setStartModified(StringUtils.parseDateTime(startTime));
+                    req.setEndModified(StringUtils.parseDateTime(endTime));
+                    req.setStatus("WAIT_SELLER_SEND_GOODS");
+                    req.setPageNo(pageNo);
+                    req.setPageSize(40L);
+                    req.setUseHasNext(true);
+                    TradesSoldIncrementGetResponse rsp = null;
+                    try {
+                        rsp = client.execute(req, token);
+                        logger.info("订单数据:{}, {}", rsp.getTotalResults(), rsp.getBody());
+                    } catch (ApiException e) {
+                        logger.error("", e);
+                    }
+                    if (rsp == null) {
+                        logger.error("【淘宝订单】请求淘宝服务器失败!");
+                        break;
                     }
-                    // 组装数据
-                    SalesOrder salesOrder = packageOrder(details);
-                    if (salesOrder != null) {
-                        salesOrder.setSalesBatchId(batchIdST);
-                        salesOrderService.addOrder(salesOrder, "创建订单(淘宝拉取订单)");
-                        total ++;
+                    // 判断数据
+                    List<Trade> trades1 = rsp.getTrades();
+                    if (trades1 == null) {
+                        break;
                     }
+                    if (trades1.size() == 0) {
+                        logger.info("【淘宝订单】数据请求完毕");
+                        break;
+                    }
+                    for (Trade trade : trades1) {
+                        Trade details = getOrderDetails(trade.getTid(), token);
+                        if (details == null) {
+                            logger.error("【淘宝订单】{}获取订单详细数据失败", trade.getTid());
+                            return;
+                        }
+                        // 组装数据
+                        SalesOrder salesOrder = packageOrder(details, storeId, salesCompanyId);
+                        if (salesOrder != null) {
+                            salesOrder.setSalesBatchId(batchIdST);
+                            salesOrderService.addOrder(salesOrder, "创建订单(淘宝拉取订单)");
+                            total ++;
+                        }
+                    }
+                    // 迭代数据
+                    hasNext = rsp.getHasNext();
+                    pageNo ++;
                 }
-                // 迭代数据
-                hasNext = rsp.getHasNext();
-                pageNo ++;
-            }
 
-            OrderSyncLog orderSyncLog = new OrderSyncLog();
-            orderSyncLog.setSyncPlatId(1);
-            orderSyncLog.setSyncLogType(1);
-            orderSyncLog.setSyncLogMode(1);
-            orderSyncLog.setSyncLogRecentNum(total); //同步总数量
-            orderSyncLog.setSyncLogErrorNum(0); //同步失败数量
-            orderSyncLog.setSyncLogMsg("拉取天猫订单");   //备注
-            orderSyncLogMapper.save(orderSyncLog);
+                OrderSyncLog orderSyncLog = new OrderSyncLog();
+                orderSyncLog.setSyncPlatId(1);
+                orderSyncLog.setSyncLogType(1);
+                orderSyncLog.setSyncLogMode(1);
+                orderSyncLog.setSyncLogRecentNum(total); //同步总数量
+                orderSyncLog.setSyncLogErrorNum(0); //同步失败数量
+                orderSyncLog.setSyncLogMsg("拉取天猫订单:店铺id" + storeId);   //备注
+                orderSyncLogMapper.save(orderSyncLog);
 
-            RedisUtils.put("TAOBAO_SYNC_TIME", endTime);
-        } catch (Exception e) {
-            logger.error("", e);
-            OrderSyncLog orderSyncLog = new OrderSyncLog();
-            orderSyncLog.setSyncPlatId(1);
-            orderSyncLog.setSyncLogType(1);
-            orderSyncLog.setSyncLogMode(1);
-            orderSyncLog.setSyncLogRecentNum(1); //同步总数量
-            orderSyncLog.setSyncLogErrorNum(1); //同步失败数量
-            orderSyncLog.setSyncLogMsg("拉取天猫订单");   //备注
-            orderSyncLog.setSyncLogErrorMsg(e.getMessage());
-            orderSyncLogMapper.save(orderSyncLog);
+                RedisUtils.put("TAOBAO_SYNC_TIME", endTime);
+            } catch (Exception e) {
+                logger.error("", e);
+                OrderSyncLog orderSyncLog = new OrderSyncLog();
+                orderSyncLog.setSyncPlatId(1);
+                orderSyncLog.setSyncLogType(1);
+                orderSyncLog.setSyncLogMode(1);
+                orderSyncLog.setSyncLogRecentNum(1); //同步总数量
+                orderSyncLog.setSyncLogErrorNum(1); //同步失败数量
+                orderSyncLog.setSyncLogMsg("拉取天猫订单:店铺id" + storeId);   //备注
+                orderSyncLog.setSyncLogErrorMsg(e.getMessage());
+                orderSyncLogMapper.save(orderSyncLog);
+            }
         }
+
     }
 
-    public Trade getOrderDetails(Long tid) {
+    public Trade getOrderDetails(Long tid, String token) {
         try {
             Thread.sleep(1000);
         } catch (InterruptedException e) {
@@ -189,19 +225,19 @@ public class TaobaoTask {
         req.setIncludeOaid("true");
         TradeFullinfoGetResponse rsp = null;
         try {
-            rsp = detailsClient.execute(req, (String) AdminTaobaoAuthController.getToken().get("token"));
+            rsp = detailsClient.execute(req, token);
             logger.info("淘宝数据:{}", JSONObject.toJSONString(rsp));
             JSONObject body = JSONObject.parseObject(rsp.getBody());
             JSONObject resp = body.getJSONObject("trade_fullinfo_get_response");
             JSONObject trade = resp.getJSONObject("trade");
-            return convert(trade);
+            return convert(trade, token);
         } catch (Exception e) {
             e.printStackTrace();
         }
         return null;
     }
 
-    public static Trade convert(JSONObject data) {
+    public static Trade convert(JSONObject data, String token) {
         logger.info("转换数据:{}", data.toJSONString());
         Trade trade = new Trade();
         trade.setReceiverState(data.getString("receiver_state"));
@@ -278,7 +314,7 @@ public class TaobaoTask {
                 req.setQueryList(list2);
                 TopOaidDecryptResponse rsp = null;
                 try {
-                    rsp = client.execute(req, (String) AdminTaobaoAuthController.getToken().get("token"));
+                    rsp = client.execute(req, token);
                     logger.info("请求解密后的数据:{}", rsp.getBody());
                     JSONObject body = JSONObject.parseObject(rsp.getBody());
                     JSONObject topOaidDecryptResponse = body.getJSONObject("top_oaid_decrypt_response");
@@ -314,10 +350,13 @@ public class TaobaoTask {
 
     /**
      * 数据还需要完善地址库编码、成本价格
+     *
      * @param trade
+     * @param storeId
+     * @param salesCompanyId
      * @return
      */
-    private SalesOrder packageOrder(Trade trade) {
+    private SalesOrder packageOrder(Trade trade, int storeId, int salesCompanyId) {
         String tid = trade.getTid().toString();
         SalesOrder order = new SalesOrder();
         order.setSalesOrderId(tid);
@@ -380,8 +419,8 @@ public class TaobaoTask {
         order.setSalesCreateTime(trade.getCreated());
         order.setSalesAdminRemark(trade.getSellerMemo());
         order.setSalesUserRemark(trade.getBuyerMemo());
-        order.setSalesCompanyId(1);
-        order.setSalesStoreId(86);
+        order.setSalesCompanyId(salesCompanyId);
+        order.setSalesStoreId(storeId);
         order.setSalesType(1);
         order.setSalesAddType(4);
         order.setSalesAdminId(10135);

+ 44 - 3
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminTaobaoAuthController.java

@@ -14,6 +14,7 @@ import com.taobao.api.DefaultTaobaoClient;
 import com.taobao.api.TaobaoClient;
 import com.taobao.api.request.TopAuthTokenCreateRequest;
 import com.taobao.api.response.TopAuthTokenCreateResponse;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -66,13 +67,36 @@ public class AdminTaobaoAuthController {
         jingdongToken.put("name", "京东认证");
         jingdongToken.put("type", "2");
         reuslt.add(jingdongToken);
+
+        // 天猫美塔璞儿
+        Map<String, Object> taobaoMetapureToken = getMetaureToken();
+        if (taobaoMetapureToken == null || taobaoMetapureToken.size() == 0) {
+            taobaoMetapureToken = new HashMap<>();
+        }
+        taobaoMetapureToken.put("name", "淘宝美塔璞儿认证");
+        taobaoMetapureToken.put("type", "3");
+        reuslt.add(taobaoMetapureToken);
         return new ModelAndView("taobao/token").addObject("result", reuslt);
     }
 
+    /**
+     * 淘宝爱贝源
+     */
     public static Map<String, Object> getToken() {
+        return getToken("TAOBAO_SESSION");
+    }
 
+    /**
+     * 淘宝美塔璞儿
+     * @return
+     */
+    public static Map<String, Object> getMetaureToken() {
+        return getToken("TAOBAO_METAPURE_SESSION");
+    }
+    
+    public static Map<String, Object> getToken(String redisKey) {
         //淘宝授权token
-        String taobaoSession = RedisUtils.get("TAOBAO_SESSION");
+        String taobaoSession = RedisUtils.get(redisKey);
         // 判断数据
         if (taobaoSession == null) {
             return null;
@@ -131,7 +155,17 @@ public class AdminTaobaoAuthController {
             Map<String, Object> data = new HashMap<>(2);
             data.put("token", token);
             data.put("time", DateTimeUtil.addMinute(new Date(), (timeout/60)-30));
-            RedisUtils.put("TAOBAO_SESSION", JSONObject.toJSONString(data));
+
+            // type 1 爱贝源淘宝 3美塔璞儿淘宝
+            String type = HREF_CACHE.get(state + "_type");
+            if (StringUtils.isNotBlank(type)) {
+                if ("1".equals(type)) {
+                    RedisUtils.put("TAOBAO_SESSION", JSONObject.toJSONString(data));
+                } else if ("3".equals(type)) {
+                    RedisUtils.put("TAOBAO_METAPURE_SESSION", JSONObject.toJSONString(data));
+                }
+                HREF_CACHE.remove(state + "_type");
+            }
         } catch (ApiException e) {
             e.printStackTrace();
         }
@@ -145,11 +179,18 @@ public class AdminTaobaoAuthController {
         return new ModelAndView("taobao/redirect").addObject("url", url);
     }
 
+    /**
+     *
+     * @param href
+     * @param type 1 爱贝源淘宝 3美塔璞儿淘宝
+     * @return
+     */
     @RequestMapping("/auth")
-    public ModelAndView auth(@RequestParam("url") String href) {
+    public ModelAndView auth(@RequestParam("url") String href, @RequestParam("type") String type) {
         // 存储跳转前的URL
         int state = new Random(1_000_000).nextInt();
         HREF_CACHE.put(state + "", href);
+        HREF_CACHE.put(state + "_type", type);
         // 跳转
         String url = "https://oauth.taobao.com/authorize?response_type=code&client_id=" + TaobaoConfig.appkey + "&redirect_uri=https://rst.iamberry.com/taobao/token&state=" + state + "&view=web";
         return new ModelAndView("redirect:" + url);

+ 12 - 5
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -23,7 +23,6 @@ import com.iamberry.rst.core.fm.InventoryInfo;
 import com.iamberry.rst.core.fm.InventoryLog;
 import com.iamberry.rst.core.order.*;
 import com.iamberry.rst.core.page.PagedResult;
-import com.iamberry.rst.core.pts.PtsBatch;
 import com.iamberry.rst.core.sys.Admin;
 import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.cm.*;
@@ -42,7 +41,6 @@ import com.iamberry.wechat.tools.*;
 import com.iamberry.wechat.tools.payUtil.DatetimeUtil;
 import com.iamberry.wechat.tools.payUtil.StringUtil;
 import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enGet.OrderSearchInfo;
-import com.lowagie.text.html.HtmlParser;
 import com.taobao.api.ApiException;
 import com.taobao.api.DefaultTaobaoClient;
 import com.taobao.api.TaobaoClient;
@@ -60,7 +58,6 @@ import org.jsoup.select.Elements;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -72,7 +69,6 @@ import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
-import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -441,7 +437,18 @@ public class AwaitSendController {
     private void vaildTaobaoOrder(SalesOrder temp, List<SalesOrder> salesOrderList) {
         LOGGER.info("淘宝订单需要校验订单状态{}", temp.getSalesOrderId());
         String id = temp.getSalesExOrderId();
-        Trade details = taobaoTask.getOrderDetails(Long.parseLong(id));
+        // 判断是爱贝源还是美塔璞儿的店铺
+        Integer salesStoreId = temp.getSalesStoreId();
+        String token = null;
+        if (salesStoreId == TaobaoTask.STORE_ID_IAMBERRY) {
+            token = (String) AdminTaobaoAuthController.getToken().get("token");
+        } else if (salesStoreId == TaobaoTask.STORE_ID_METAPURE) {
+            token = (String) AdminTaobaoAuthController.getMetaureToken().get("token");
+        } else {
+            throw new RuntimeException("淘宝店铺未授权");
+        }
+
+        Trade details = taobaoTask.getOrderDetails(Long.parseLong(id), token);
         LOGGER.info("获取到的淘宝订单数据:{}", JSONObject.toJSONString(details));
         int stats = 0;
         for (Order order : details.getOrders()) {

+ 11 - 4
watero-rst-web/src/main/webapp/WEB-INF/views/taobao/token.ftl

@@ -31,7 +31,7 @@
                         <td>${(data.name)!}</td>
                         <td colspan="3">
                             <#if data.type == "1">
-                                <span onclick="re_auth()" style="color: red;font-size: 16px">
+                                <span onclick="re_auth(1)" style="color: red;font-size: 16px">
                                     重新授权
                                     <i class="Hui-iconfont">&#xe61d;</i>
                                 </span>
@@ -40,6 +40,11 @@
                                     重新授权
                                     <i class="Hui-iconfont">&#xe61d;</i>
                                 </span>
+                            <#elseif data.type == '3'>
+                                <span onclick="re_auth(3)" style="color: red;font-size: 16px">
+                                    重新授权
+                                    <i class="Hui-iconfont">&#xe61d;</i>
+                                </span>
                             </#if>
                         </td>
                     </tr>
@@ -50,9 +55,11 @@
                         <td>${(data.time?string("yyyy-MM-dd HH:mm:ss"))!}</td>
                         <td class="td-manage">
                             <#if data.type == "1">
-                                <a title="重新授权" href="javascript:re_auth()" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont">&#xe61d;</i></a>
+                                <a title="重新授权" href="javascript:re_auth(1)" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont">&#xe61d;</i></a>
                             <#elseif data.type == "2">
                                 <a title="重新授权" href="javascript:re_jd_auth()" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont">&#xe61d;</i></a>
+                            <#elseif data.type == "3">
+                                <a title="重新授权" href="javascript:re_auth(3)" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont">&#xe61d;</i></a>
                             </#if>
                         </td>
                     </tr>
@@ -65,10 +72,10 @@
 <script type="text/javascript">
 
     //淘宝认证
-    function re_auth() {
+    function re_auth(type) {
         // 保存当前url
         let href = window.location.href;
-        window.location.href = "${path}/taobao/auth?url=" + href;
+        window.location.href = "${path}/taobao/auth?type=" + type + "&url=" + href;
     }
 
     //京东认证

+ 59 - 0
watero-rst-web/src/test/java/junit/com/iamberry/rst/JdOrderTest.java

@@ -0,0 +1,59 @@
+package junit.com.iamberry.rst;
+
+import com.iamberry.rst.controllers.mq.TaobaoConfig;
+import com.iamberry.rst.core.sys.SysConfig;
+import com.jd.open.api.sdk.DefaultJdClient;
+import com.jd.open.api.sdk.JdClient;
+import com.jd.open.api.sdk.request.order.PopOrderEnSearchRequest;
+import com.jd.open.api.sdk.response.order.PopOrderEnSearchResponse;
+import org.junit.Test;
+
+import static com.iamberry.rst.controllers.mq.TaobaoConfig.DB_JD_TOKEN_ID;
+
+/**
+ * @author xuyongjun
+ * @since 2023-07-12
+ */
+public class JdOrderTest {
+
+    @Test
+    public void testGetOrder() {
+        JdClient client = null;
+        PopOrderEnSearchRequest orderSearchRequest = null;
+        PopOrderEnSearchResponse rsp = null;
+        try {
+            client = new DefaultJdClient(TaobaoConfig.JINGDONG_API_URL, "d30e60d307f940cfb77e59065cb19bd4mwzt", TaobaoConfig.jd_appkey, TaobaoConfig.jd_secret);
+            orderSearchRequest = new PopOrderEnSearchRequest();
+            orderSearchRequest.setStartDate("2023-07-11 16:14:39");
+            orderSearchRequest.setEndDate("2023-07-12 16:14:39");
+            orderSearchRequest.setOrderState("WAIT_SELLER_STOCK_OUT,WAIT_SELLER_DELIVERY,WAIT_GOODS_RECEIVE_CONFIRM ");//待出库和境外待发货, 一般仅存在前者
+            orderSearchRequest.setOptionalFields(initOrderOptionalFields());
+            orderSearchRequest.setPage("" + 1);
+            orderSearchRequest.setPageSize("" + 40L);
+            orderSearchRequest.setDateType(0);//按照最后修改时间查询
+            rsp = client.execute(orderSearchRequest);
+        } catch (Exception e) {
+            System.out.println("请求京东服务器异常");
+        }
+        if (rsp == null) {
+            System.out.println("【京东订单】请求京东服务器失败!)");
+            return;
+        }
+        System.out.println(rsp.getMsg());
+        System.out.println(rsp);
+    }
+
+    public String initOrderOptionalFields() {
+        return "orderId,venderId,orderType,payType,orderTotalPrice,orderSellerPrice,orderPayment,freightPrice,sellerDiscount,orderState,orderStateRemark,deliveryType," +
+                "invoiceEasyInfo," +
+                "invoiceCode,invoiceInfo,invoiceCode,orderRemark,orderStartTime,orderEndTime," +
+                "consigneeInfo," +
+                "itemInfoList," +
+                "couponDetailList," +
+                "venderRemark,balanceUsed,pin,returnOrder,paymentConfirmTime,waybill,logisticsId," +
+                "vatInfo," +
+                "modified,directParentOrderId,parentOrderId,customs,customsModel,orderSource,storeOrder,idSopShipmenttype,scDT,serviceFee," +
+                "pauseBizInfo," +
+                "taxFee,tuiHuoWuYou,orderSign,storeId,realPin,orderMarkDesc,open_id,xid,open_id_buyer,xid_buyer";
+    }
+}

+ 44 - 0
watero-rst-web/src/test/java/junit/com/iamberry/rst/TaobaoOrderTest.java

@@ -0,0 +1,44 @@
+package junit.com.iamberry.rst;
+
+import com.iamberry.rst.controllers.mq.TaobaoConfig;
+import com.taobao.api.ApiException;
+import com.taobao.api.DefaultTaobaoClient;
+import com.taobao.api.TaobaoClient;
+import com.taobao.api.domain.Trade;
+import com.taobao.api.internal.util.StringUtils;
+import com.taobao.api.request.TradesSoldIncrementGetRequest;
+import com.taobao.api.response.TradesSoldIncrementGetResponse;
+import org.junit.Test;
+
+import java.util.List;
+
+/**
+ * @author xuyongjun
+ * @since 2023-07-12
+ */
+public class TaobaoOrderTest {
+
+    @Test
+    public void testGetOrder() {
+        TaobaoClient client = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
+        TradesSoldIncrementGetRequest req = new TradesSoldIncrementGetRequest();
+        req.setFields("tid,type,status,payment,orders,rx_audit_status");
+        req.setStartModified(StringUtils.parseDateTime("2023-07-13 09:01:37"));
+        req.setEndModified(StringUtils.parseDateTime("2023-07-13 10:01:00"));
+//        req.setStatus("WAIT_SELLER_SEND_GOODS");
+        req.setPageNo(1L);
+        req.setPageSize(1L);
+        req.setUseHasNext(true);
+        TradesSoldIncrementGetResponse rsp = null;
+        try {
+            rsp = client.execute(req, "620181382ce599ff062e4ZZd8be0d5b680338c47a8fe4712216060710310");
+        } catch (ApiException e) {
+        }
+        if (rsp == null) {
+            return;
+        }
+        // 判断数据
+        List<Trade> trades1 = rsp.getTrades();
+        System.out.println(trades1);
+    }
+}