Explorar o código

feat: 京东物流月结二维码获取;

hanchaolong hai 2 días
pai
achega
51184c51de

+ 22 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/controller/MonthQRCodeController.java

@@ -0,0 +1,22 @@
+package com.ruoyi.front.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.logistics.service.LogisticsOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/callback/qrcode")
+public class MonthQRCodeController {
+
+    @Autowired
+    private LogisticsOrderService logisticsOrderService;
+
+    public AjaxResult qrcode(@RequestParam String channelCode) {
+        JSONObject jd = logisticsOrderService.getQRCode(channelCode);
+        return AjaxResult.success(jd);
+    }
+}

+ 7 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsOrderService.java

@@ -39,6 +39,13 @@ public class LogisticsOrderService {
         return cancelOrder;
     }
 
+    public JSONObject getQRCode(String channelCode) {
+        // 根据订单中的物流公司类型获取对应服务
+        LogisticsService logisticsService = logisticsFactory.getLogisticsService(channelCode);
+        JSONObject qrCode = logisticsService.getMonthQRCode();
+        return qrCode;
+    }
+
 
 }
 

+ 7 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsService.java

@@ -41,4 +41,11 @@ public interface LogisticsService {
      * @date 2026-02-02
      */
     JSONObject modifyOrder(BizWaybillOrder bizWaybillOrder) ;
+
+    /**
+     * 获取月结二维码
+     */
+    JSONObject getMonthQRCode();
+
+
 }

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.lop.open.api.sdk.DefaultDomainApiClient;
 import com.lop.open.api.sdk.LopException;
+import com.lop.open.api.sdk.domain.ECAP.CommonBusinessApi.commonGetQRCodeV1.CommonBusinessGetQRCodeRequest;
 import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreateOrderV1.CommonCreateOrderRequest;
 import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreateOrderV1.CommonProductInfo;
 import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreateOrderV1.Contact;
@@ -11,14 +12,8 @@ import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1
 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.lop.open.api.sdk.request.ECAP.*;
+import com.lop.open.api.sdk.response.ECAP.*;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -499,4 +494,49 @@ public class JDLogisticsService  implements LogisticsService {
         
         return productAttrs;
     }
+
+    @Override
+    public JSONObject getMonthQRCode() {
+        JSONObject result = new JSONObject();
+        try {
+            //设置接口域名(有的对接方案同时支持生产和沙箱环境,有的仅支持生产,具体以对接方案中的【API文档-请求地址】为准),生产域名:https://api.jdl.com 预发环境域名:https://uat-api.jdl.com
+            //DefaultDomainApiClient对象全局只需要创建一次
+            DefaultDomainApiClient client = new DefaultDomainApiClient(jdExpressConfig.getServerUrl(),500,15000);
+
+            //入参对象
+            EcapV1BusinessQrcodeLopRequest request = new EcapV1BusinessQrcodeLopRequest();
+
+            //取消订单入参对象
+            CommonBusinessGetQRCodeRequest requestDTO = new CommonBusinessGetQRCodeRequest();
+            requestDTO.setCustomerCode(sysConfigService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_CUSTOMERCODE));
+
+            request.setRequest(requestDTO);
+
+            //设置插件,必须的操作,不同类型的应用入参不同,请看入参注释,公共参数按顺序分别为AppKey、AppSecret、AccessToken
+            //使用开放平台ISV/自研商家应用调用接口
+            LopPlugin lopPlugin = OAuth2PluginFactory.produceLopPlugin(jdExpressConfig.getAppKey(), jdExpressConfig.getAppSecret(), jdExpressConfig.getAccessToken());
+            request.addLopPlugin(lopPlugin);
+
+            log.info("京东开放平台获取商家二维码接口,请求参数:{}", JSON.toJSONString(request));
+            EcapV1BusinessQrcodeLopResponse response = client.execute(request);
+            log.info("京东开放平台获取商家二维码接口,响应结果:{}", JSON.toJSONString(response));
+
+            if (response.getCode().equals("0")) {
+                if (response.getResponse().getCode() == 0) {
+                    result.put("success", true);
+                    result.put("msg", "");
+                } else {
+                    result.put("success", false);
+                    result.put("msg", "京东开放平台获取商家二维码!失败原因:" + response.getResponse().getMsg());
+                }
+            } else {
+                result.put("success", false);
+                result.put("msg", "京东开放平台获取商家二维码!失败原因:" + response.getMsg());
+            }
+        } catch (LopException e) {
+            log.error("京东开放平台获取商家二维码接口异常:{}", e);
+            throw new ServiceException("京东开放平台获取商家二维码接口异常");
+        }
+        return result;
+    }
 }

+ 5 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/SFLogisticsService.java

@@ -339,4 +339,9 @@ public class SFLogisticsService implements LogisticsService {
         String result= sfExpressHttpUtil.sendRequest(serviceCode,msgData.toJSONString());
         return AjaxResult.success(result);
     }*/
+
+    @Override
+    public JSONObject getMonthQRCode() {
+        return null;
+    }
 }