Переглянути джерело

feat: 京东物流接口对接;

hanchaolong 1 тиждень тому
батько
коміт
c71d336045

+ 101 - 2
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/JDLogisticsService.java

@@ -7,11 +7,16 @@ import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreat
 import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreateOrderV1.CommonProductInfo;
 import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreateOrderV1.Contact;
 import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonCargoInfo;
+import com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonCancelOrderV1.CommonOrderCancelRequest;
 import com.lop.open.api.sdk.plugin.LopPlugin;
 import com.lop.open.api.sdk.plugin.factory.OAuth2PluginFactory;
+import com.lop.open.api.sdk.request.ECAP.EcapV1OrdersCancelLopRequest;
 import com.lop.open.api.sdk.request.ECAP.EcapV1OrdersCreateLopRequest;
+import com.lop.open.api.sdk.request.ECAP.EcapV1OrdersModifyLopRequest;
 import com.lop.open.api.sdk.request.ECAP.EcapV1OrdersPrecheckLopRequest;
+import com.lop.open.api.sdk.response.ECAP.EcapV1OrdersCancelLopResponse;
 import com.lop.open.api.sdk.response.ECAP.EcapV1OrdersCreateLopResponse;
+import com.lop.open.api.sdk.response.ECAP.EcapV1OrdersModifyLopResponse;
 import com.lop.open.api.sdk.response.ECAP.EcapV1OrdersPrecheckLopResponse;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.logistics.config.JDExpressConfig;
@@ -155,11 +160,105 @@ public class JDLogisticsService  implements LogisticsService {
 
     @Override
     public JSONObject cancelOrder(BizWaybillOrder bizWaybillOrder) {
-        return null;
+        log.info("京东开放平台取消订单接口,入参:{}", bizWaybillOrder);
+        JSONObject result = new JSONObject();
+        try {
+            //设置接口域名(有的对接方案同时支持生产和沙箱环境,有的仅支持生产,具体以对接方案中的【API文档-请求地址】为准),生产域名:https://api.jdl.com 预发环境域名:https://uat-api.jdl.com
+            //DefaultDomainApiClient对象全局只需要创建一次
+            DefaultDomainApiClient client = new DefaultDomainApiClient(jdExpressConfig.getServerUrl(),500,15000);
+
+            //入参对象
+            EcapV1OrdersCancelLopRequest request = new EcapV1OrdersCancelLopRequest();
+
+            //取消订单入参对象
+            CommonOrderCancelRequest commonOrderCancelRequest = new CommonOrderCancelRequest();
+            commonOrderCancelRequest.setWaybillCode(bizWaybillOrder.getExternalWaybillNo());
+            commonOrderCancelRequest.setCustomerOrderId(bizWaybillOrder.getWaybillNo());
+            commonOrderCancelRequest.setOrderOrigin(1);
+            commonOrderCancelRequest.setCustomerCode(sysConfigService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_CUSTOMERCODE));
+            commonOrderCancelRequest.setCancelReason("取消原因");
+            commonOrderCancelRequest.setCancelReasonCode("1");
+            commonOrderCancelRequest.setCancelType(1);
+
+            request.setRequest(commonOrderCancelRequest);
+
+            //设置插件,必须的操作,不同类型的应用入参不同,请看入参注释,公共参数按顺序分别为AppKey、AppSecret、AccessToken
+            //使用开放平台ISV/自研商家应用调用接口
+            LopPlugin lopPlugin = OAuth2PluginFactory.produceLopPlugin(jdExpressConfig.getAppKey(), jdExpressConfig.getAppSecret(), jdExpressConfig.getAccessToken());
+            request.addLopPlugin(lopPlugin);
+
+            log.info("京东开放平台取消订单接口,请求参数:{}", request);
+            EcapV1OrdersCancelLopResponse response = client.execute(request);
+            log.info("京东开放平台取消订单接口,响应结果:{}", response);
+        } catch (LopException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
     }
 
     @Override
     public JSONObject modifyOrder(BizWaybillOrder bizWaybillOrder) {
-        return null;
+        log.info("京东开放平台修改订单接口,入参:{}", bizWaybillOrder);
+        JSONObject result = new JSONObject();
+        try {
+            //设置接口域名(有的对接方案同时支持生产和沙箱环境,有的仅支持生产,具体以对接方案中的【API文档-请求地址】为准),生产域名:https://api.jdl.com 预发环境域名:https://uat-api.jdl.com
+            //DefaultDomainApiClient对象全局只需要创建一次
+            DefaultDomainApiClient client = new DefaultDomainApiClient(jdExpressConfig.getServerUrl(),500,15000);
+
+            //入参对象
+            EcapV1OrdersModifyLopRequest request = new EcapV1OrdersModifyLopRequest();
+
+            //发货人
+            com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.Contact senderContact  = new com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.Contact();
+            senderContact.setFullAddress(bizWaybillOrder.getSenderProvince() + bizWaybillOrder.getSenderCity() + bizWaybillOrder.getSenderCounty() + bizWaybillOrder.getSenderAddress());
+
+            //收货人
+            com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.Contact receiverContact = new com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.Contact();
+            receiverContact.setFullAddress(bizWaybillOrder.getReceiverProvince() + bizWaybillOrder.getReceiverCity() + bizWaybillOrder.getReceiverCounty() + bizWaybillOrder.getReceiverAddress());
+
+            //订单信息
+            com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.CommonModifyCancelOrderRequest requestDTO = new  com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.CommonModifyCancelOrderRequest();
+            requestDTO.setOrderId(bizWaybillOrder.getWaybillNo());
+            requestDTO.setOrderOrigin(1);
+            requestDTO.setCustomerCode(sysConfigService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_CUSTOMERCODE));
+            requestDTO.setSettleType(3);
+            requestDTO.setPickupStartTime(bizWaybillOrder.getPickupTime().getTime());
+            requestDTO.setPickupEndTime(DateUtils.addHours(bizWaybillOrder.getPickupTime(), 1).getTime());
+
+            //产品信息
+            com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.CommonProductInfoRequest productInfo = new com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.CommonProductInfoRequest();
+            productInfo.setProductCode(bizWaybillOrder.getProductCode());
+
+            //货物信息
+            List<com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.CommonCargoInfo> cargoes = new ArrayList<>();
+            com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.CommonCargoInfo cargoInfo = new com.lop.open.api.sdk.domain.ECAP.CommonModifyCancelOrderApi.commonModifyOrderV1.CommonCargoInfo();
+            cargoInfo.setName(bizWaybillOrder.getGoodsName());
+            cargoInfo.setQuantity(bizWaybillOrder.getGoodsQty().intValue());
+            cargoInfo.setWeight(bizWaybillOrder.getGoodsWeight());
+            cargoInfo.setVolume(bizWaybillOrder.getGoodsVolume());
+            cargoes.add(cargoInfo);
+
+            requestDTO.setCargoes(cargoes);
+            requestDTO.setProductsReq(productInfo);
+            requestDTO.setReceiverContact(receiverContact);
+            requestDTO.setSenderContact(senderContact);
+            request.setRequest(requestDTO);
+
+            //设置插件,必须的操作,不同类型的应用入参不同,请看入参注释,公共参数按顺序分别为AppKey、AppSecret、AccessToken
+            //使用开放平台ISV/自研商家应用调用接口
+            LopPlugin lopPlugin = OAuth2PluginFactory.produceLopPlugin(jdExpressConfig.getAppKey(), jdExpressConfig.getAppSecret(), jdExpressConfig.getAccessToken());
+            request.addLopPlugin(lopPlugin);
+
+            log.info("京东开放平台修改订单接口,请求参数:{}", request);
+            EcapV1OrdersModifyLopResponse response = client.execute(request);
+            log.info("京东开放平台修改订单接口,响应结果:{}", response);
+        } catch (LopException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
     }
 }