Просмотр исходного кода

京东自动拉取订单,并解密

hexiugang 9 месяцев назад
Родитель
Сommit
fb859bb460

+ 60 - 10
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/JingdongTask.java

@@ -2,6 +2,7 @@ package com.iamberry.rst.controllers.mq;
 
 //import com.iamberry.redis.RedisUtils;
 
+import com.alibaba.fastjson.JSONObject;
 import com.iamberry.rst.core.cm.SalesOrder;
 import com.iamberry.rst.core.cm.SalesOrderItem;
 import com.iamberry.rst.core.order.OrderSyncLog;
@@ -27,14 +28,15 @@ import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enSearch.O
 import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enSearch.OrderSearchInfo;
 import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enSearch.UserInfo;
 import com.jd.open.api.sdk.domain.order.OrderShipmentService.response.shipment.OperatorResult;
-import com.jd.open.api.sdk.request.order.PopOrderEnGetRequest;
-import com.jd.open.api.sdk.request.order.PopOrderEnSearchRequest;
-import com.jd.open.api.sdk.request.order.PopOrderGetmobilelistRequest;
-import com.jd.open.api.sdk.request.order.PopOrderShipmentRequest;
-import com.jd.open.api.sdk.response.order.PopOrderEnGetResponse;
-import com.jd.open.api.sdk.response.order.PopOrderEnSearchResponse;
-import com.jd.open.api.sdk.response.order.PopOrderGetmobilelistResponse;
-import com.jd.open.api.sdk.response.order.PopOrderShipmentResponse;
+import com.jd.open.api.sdk.domain.sku.IOaidService.request.decrypt.GetReceiverInfoListReqVO;
+import com.jd.open.api.sdk.domain.sku.IOaidService.request.decrypt.OrderInfoReqVO;
+import com.jd.open.api.sdk.domain.sku.IOaidService.response.decrypt.OrderReceiverInfoModel;
+import com.jd.open.api.sdk.request.order.*;
+import com.jd.open.api.sdk.request.sku.JosOrderOaidDecryptRequest;
+import com.jd.open.api.sdk.response.order.*;
+import com.jd.open.api.sdk.response.sku.JosOrderOaidDecryptResponse;
+import com.jd.security.tdeclient.SecretJdClient;
+import com.jd.security.tdeclient.TDEClient;
 import com.taobao.api.internal.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -139,8 +141,9 @@ public class JingdongTask {
                     JdClient client = null;
                     PopOrderEnSearchRequest orderSearchRequest = null;
                     PopOrderEnSearchResponse rsp = null;
+                    SysConfig sysConfig = null;
                     try {
-                        SysConfig sysConfig = sysConfigService.getSysConfigAll(configId);
+                        sysConfig = sysConfigService.getSysConfigAll(configId);
                         if (org.apache.commons.lang3.StringUtils.isBlank(sysConfig.getConfigParameter())) {
                             break;
                         }
@@ -185,9 +188,43 @@ public class JingdongTask {
 //                        logger.error("【京东订单】{}获取订单详细数据失败", trade.getTid());
 //                        return;
 //                    }
+                        PopOrderGetRequest popOrderGetRequest=new PopOrderGetRequest();
+                        popOrderGetRequest.setOrderState("WAIT_SELLER_STOCK_OUT,WAIT_SELLER_DELIVERY,WAIT_GOODS_RECEIVE_CONFIRM");
+                        popOrderGetRequest.setOptionalFields("fullname,orderId,fullAddress,oaid,consigneeInfo,orderState");
+                        popOrderGetRequest.setOrderId(Long.parseLong(orderSearchInfo.getOrderId()));
+                        logger.info("【京东订单】请求订单详情:{}", JSONObject.toJSONString(popOrderGetRequest));
+                        PopOrderGetResponse popOrderGetResponse=client.execute(popOrderGetRequest);
+                        logger.info("【京东订单】返回订单详情:{}", JSONObject.toJSONString(popOrderGetResponse));
+                        if (popOrderGetResponse == null || popOrderGetResponse.getOrderDetailInfo() == null || popOrderGetResponse.getOrderDetailInfo().getOrderInfo() == null) {
+                            logger.info("【京东订单】请求数据失败{}", orderSearchInfo.getOrderId());
+                            continue;
+                        }
+
                         /**
                          * 解密数据
                          */
+                        JosOrderOaidDecryptRequest request = new JosOrderOaidDecryptRequest();
+                        GetReceiverInfoListReqVO getReceiverInfoListReqVO = new GetReceiverInfoListReqVO();
+                        getReceiverInfoListReqVO.setOrderType("POP");
+                        getReceiverInfoListReqVO.setAppName("爱贝源官方旗航店");
+                        getReceiverInfoListReqVO.setScenesType(new Random().nextBoolean() ? "1003" : "1002");
+                        // 订单信息
+                        Set<OrderInfoReqVO> orderInfoReqVOSet = new HashSet<>(1);
+                        OrderInfoReqVO orderInfoReqVO = new OrderInfoReqVO();
+                        orderInfoReqVO.setOrderId(Long.parseLong(orderSearchInfo.getOrderId()));
+                        orderInfoReqVO.setOaid(popOrderGetResponse.getOrderDetailInfo().getOrderInfo().getConsigneeInfo().getOaid());
+                        orderInfoReqVOSet.add(orderInfoReqVO);
+                        // 请求
+                        getReceiverInfoListReqVO.setOrderInfos(orderInfoReqVOSet);
+                        request.setGetReceiverInfoListReqVO(getReceiverInfoListReqVO);
+                        logger.info("组装数据:{}", JSONObject.toJSONString(getReceiverInfoListReqVO));
+                        JosOrderOaidDecryptResponse josOrderOaidDecryptResponse = client.execute(request);
+                        logger.info("返回数据:{}", JSONObject.toJSONString(josOrderOaidDecryptResponse));
+                        OrderReceiverInfoModel orderReceiverInfoModel = josOrderOaidDecryptResponse.getReturnType().getData().get(0);
+                        // 替换数据
+                        orderSearchInfo.getConsigneeInfo().setFullname(orderReceiverInfoModel.getCustomerName());
+                        orderSearchInfo.getConsigneeInfo().setMobile(orderReceiverInfoModel.getConsMobilePhone());
+                        orderSearchInfo.getConsigneeInfo().setFullAddress(orderReceiverInfoModel.getAddress());
 
                         // 组装数据
                         SalesOrder salesOrder = packageOrder(orderSearchInfo, storeId, salesCompanyId);
@@ -234,6 +271,18 @@ public class JingdongTask {
         }
 
     }
+    /**
+     *
+     * 请求宙斯网关获取凭证和密钥
+     * 1、凭证和密钥缓存本地(用于数据加解密)
+     * 2、数据来源于请求宙斯网关API敏感字段值
+     * 3、数据加解密案例如下
+     *
+     */
+    public static String dataEncryptOrDecrypt(String token, String plaintext) throws Exception {
+        TDEClient tdeClient = SecretJdClient.getInstance(TaobaoConfig.JINGDONG_API_URL, token, TaobaoConfig.jd_appkey, TaobaoConfig.jd_secret);
+        return tdeClient.decryptString(plaintext);
+    }
 
 
     public com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enGet.OrderSearchInfo getOrderDetails(Long tid, Integer storeId) {
@@ -382,7 +431,8 @@ public class JingdongTask {
         order.setSalesDeliver(waitGoodsReceiveConfirm ? 2 : 1);
 
         //获取收货人手机号
-        OrderPrivacyModel orderPrivacyModel = getMobile(trade.getOrderId(), storeId);
+        // OrderPrivacyModel orderPrivacyModel = getMobile(trade.getOrderId(), storeId);
+        OrderPrivacyModel orderPrivacyModel = null;
 
         //收货人信息
         UserInfo consigneeInfo = trade.getConsigneeInfo();