Browse Source

打单配置

24282 1 year ago
parent
commit
8baed43a5f

+ 6 - 0
pom.xml

@@ -61,6 +61,12 @@
                 <version>${sd.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>com.sd</groupId>
+                <artifactId>sd-cainiao</artifactId>
+                <version>${sd.version}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 

+ 30 - 0
sd-cainiao/src/main/java/com/sd/cainiao/config/BasicKeyConfig.java

@@ -0,0 +1,30 @@
+package com.sd.cainiao.config;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.sd.cainiao.constant.BasicKeyConstant;
+import com.sd.cainiao.entity.bo.BasicKeyBo;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+@Component
+public class BasicKeyConfig {
+
+    @Bean
+    public BasicKeyBo basicKeyBo() {
+        String activeProfile = SpringUtil.getActiveProfile();
+        BasicKeyBo basicKeyBo = new BasicKeyBo();
+        if (activeProfile.equals("prod")) {
+            basicKeyBo.setUrl(BasicKeyConstant.PROD_URL);
+            basicKeyBo.setAppKey(BasicKeyConstant.PROD_APP_KEY);
+            basicKeyBo.setSecretKey(BasicKeyConstant.PROD_SECRET_KEY);
+            basicKeyBo.setToken(BasicKeyConstant.PROD_TOKEN);
+        } else {
+            basicKeyBo.setUrl(BasicKeyConstant.DEV_URL);
+            basicKeyBo.setAppKey(BasicKeyConstant.DEV_APP_KEY);
+            basicKeyBo.setSecretKey(BasicKeyConstant.DEV_SECRET_KEY);
+            basicKeyBo.setToken(BasicKeyConstant.DEV_TOKEN);
+        }
+        return basicKeyBo;
+    }
+
+}

+ 39 - 0
sd-cainiao/src/main/java/com/sd/cainiao/constant/BasicKeyConstant.java

@@ -0,0 +1,39 @@
+package com.sd.cainiao.constant;
+
+public class BasicKeyConstant {
+
+    /**
+     * 测试环境请求url
+     */
+    public final static String DEV_URL = "https://linkdaily.tbsandbox.com/gateway/pac_message_receiver.do";
+    /**
+     * 测试环境appKey
+     */
+    public final static String DEV_APP_KEY = "618887";
+    /**
+     * 测试环境secretKey
+     */
+    public final static String DEV_SECRET_KEY = "v7350617cO0yg2h1931092o74dB42707";
+    /**
+     * 测试环境token,token是商家在物流云平台授权ISV后生成的授权码,目前需要商家配置在ISV的软件中
+     */
+    public final static String DEV_TOKEN = "Vk95a2orSXFRQkp6YWp5SVZ2RW5IeitxRTV6TU13TTk3aTJaRUdjWWVwOGlrMW1hdWpXUTVXVjA4RVRSYjc5Mw==";
+
+    /**
+     * 线上环境请求url
+     */
+    public final static String PROD_URL = "http://link.cainiao.com/gateway/link.do";
+    /**
+     * 线上环境appKey,物流云控制台查看
+     */
+    public final static String PROD_APP_KEY = "074351";
+    /**
+     * 线上环境secretKey,物流云控制台查看
+     */
+    public final static String PROD_SECRET_KEY = "OFHYq8l97KP128g7lM271C084KPWCB62";
+    /**
+     * 线上环境token,token是商家在物流云平台授权ISV后生成的授权码,目前需要商家配置在ISV的软件中
+     */
+    public final static String PROD_TOKEN = "N1lUUEFtWSt3S0k0ZU8wZlZhQmFYRDZXallBY01hb0E0NHk3WE0zWExYZUxKbi9ocXhGZ0E3UHN5d1FZYitWNQ==";
+
+}

+ 13 - 0
sd-cainiao/src/main/java/com/sd/cainiao/entity/bo/BasicKeyBo.java

@@ -0,0 +1,13 @@
+package com.sd.cainiao.entity.bo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class BasicKeyBo {
+    private String url;
+    private String appKey;
+    private String secretKey;
+    private String token;
+}

+ 122 - 6
sd-cainiao/src/main/java/com/sd/cainiao/service/impl/IsticeServiceImpl.java

@@ -1,16 +1,31 @@
 package com.sd.cainiao.service.impl;
 
+import com.ruoyi.common.exception.ServiceException;
+import com.sd.cainiao.entity.bo.BasicKeyBo;
 import com.sd.cainiao.entity.dto.TakeNumParamDto;
 import com.sd.cainiao.service.IsticeService;
+import com.taobao.pac.sdk.cp.PacClient;
+import com.taobao.pac.sdk.cp.SendSysParams;
+import com.taobao.pac.sdk.cp.dataobject.request.TMS_WAYBILL_GET.*;
+import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_GET.TmsWaybillGetResponse;
+import com.taobao.pac.sdk.cp.dataobject.response.TMS_WAYBILL_GET.WaybillCloudPrintResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
+@Service
 public class IsticeServiceImpl implements IsticeService {
 
+    @Autowired
+    private BasicKeyBo basicKeyBo;
+
     @Override
     public List<Map<String, Object>> takeNumBatch(List<TakeNumParamDto> dto) {
-        //
+
         // List<Map<String, Object>> resultList = new ArrayList<>();
         //
         // for (TakeNumParamDto takeNumParam : dto) {
@@ -72,16 +87,11 @@ public class IsticeServiceImpl implements IsticeService {
         //                 takeNumParam.setItems(itemParamList);
         //             }
         //
-        //
-        //
         //             TmsWaybillGetResponse response = this.takeNum(takeNumParam);
         //             WaybillCloudPrintResponse printResponse = response.getWaybillCloudPrintResponseList().get(0);
         //             String re = printResponse.getPrintData();
         //             JSONObject jsonObject = JSONObject.parseObject(re);
         //
-        //
-        //
-        //
         //             // 赋值订单号
         //             List<String> stringList = new ArrayList<>();
         //             ExpressPacking dataPack = iExpressPackingService.getById(e.getId());
@@ -106,4 +116,110 @@ public class IsticeServiceImpl implements IsticeService {
         return null;
     }
 
+    public List<WaybillCloudPrintResponse> takeNum(TakeNumParamDto dto) {
+        PacClient client = new PacClient(basicKeyBo.getAppKey(), basicKeyBo.getSecretKey(), basicKeyBo.getUrl());
+
+        SendSysParams params = new SendSysParams();
+        params.setFromCode(basicKeyBo.getToken());
+
+        TmsWaybillGetRequest request = new TmsWaybillGetRequest();
+        // 配送公司编码
+        request.setCpCode(dto.getCpCode());
+        // 发件人信息
+        request.setSender(getSender(dto));
+        // 交易订单信息
+        request.setTradeOrderInfoDtos(getTradeOrderInfoDtoList(dto));
+
+        TmsWaybillGetResponse response = client.send(request, params);
+        if (response.isSuccess()) {
+            return response.getWaybillCloudPrintResponseList();
+        }
+
+        throw new ServiceException(response.getErrorMsg());
+    }
+
+    /**
+     * 获取交易订单信息
+     */
+    private List<TradeOrderInfoDto> getTradeOrderInfoDtoList(TakeNumParamDto dto) {
+        List<TradeOrderInfoDto> tradeOrderInfoDtoList = new ArrayList<>();
+
+        // 收件信息
+        TradeOrderInfoDto tradeOrderInfoDto = new TradeOrderInfoDto();
+        tradeOrderInfoDto.setObjectId(dto.getObjectId());
+        tradeOrderInfoDto.setTemplateUrl(dto.getEmsTemplateUrl());
+        tradeOrderInfoDto.setOrderInfo(getOrderInfoDto(dto));
+        tradeOrderInfoDto.setPackageInfo(getPackageInfo(dto));
+        tradeOrderInfoDto.setRecipient(getRecipient(dto));
+        tradeOrderInfoDtoList.add(tradeOrderInfoDto);
+
+        return tradeOrderInfoDtoList;
+    }
+
+    private OrderInfoDto getOrderInfoDto(TakeNumParamDto dto) {
+
+        List<String> orderList = new ArrayList<>();
+        // 订单列表,这里的场景是一个订单获取一个面单号
+        orderList.add(dto.getOrderNum());
+
+        OrderInfoDto orderInfoDto = new OrderInfoDto();
+        orderInfoDto.setOrderChannelsType("OTHERS");
+        orderInfoDto.setTradeOrderList(orderList);
+
+        return orderInfoDto;
+    }
+
+    private PackageInfoDto getPackageInfo(TakeNumParamDto dto) {
+        PackageInfoDto packageInfoDto = new PackageInfoDto();
+        packageInfoDto.setWeight(dto.getWeight());
+        packageInfoDto.setVolume(dto.getVolume());
+        packageInfoDto.setItems(getItems(dto));
+        return packageInfoDto;
+    }
+
+    private List<Item> getItems(TakeNumParamDto dto) {
+        return dto.getItems().stream().map(itemParamDto -> {
+            Item item = new Item();
+            item.setName(itemParamDto.getItemName());
+            item.setCount(itemParamDto.getItemCount());
+            return item;
+        }).collect(Collectors.toList());
+    }
+
+    /**
+     * 获取发件人发件地址
+     */
+    private UserInfoDto getSender(TakeNumParamDto dto) {
+        // 寄件地址,这里的地址需要是卖家订购电子面单服务时使用的订购地址,具体可以通过TMS_WAYBILL_SUBSCRIPTION_QUERY接口获取
+        AddressDto sendAddress = new AddressDto();
+        sendAddress.setProvince(dto.getProvince());
+        sendAddress.setCity(dto.getCity());
+        sendAddress.setDistrict(dto.getDistrict());
+        sendAddress.setDetail(dto.getDetail());
+
+        UserInfoDto sender = new UserInfoDto();
+        sender.setName(dto.getName());
+        sender.setPhone(dto.getPhone());
+        sender.setMobile(dto.getMobile());
+        sender.setAddress(sendAddress);
+        return sender;
+    }
+
+    /**
+     * 获取收件人收件地址
+     */
+    private UserInfoDto getRecipient(TakeNumParamDto dto) {
+        AddressDto receiveAddress = new AddressDto();
+        receiveAddress.setProvince(dto.getReceiveProvince());
+        receiveAddress.setCity(dto.getReceiveCity());
+        receiveAddress.setDistrict(dto.getReceiveDistrict());
+        receiveAddress.setDetail(dto.getReceiveDetail());
+
+        UserInfoDto receiver = new UserInfoDto();
+        receiver.setName(dto.getReceiveName());
+        receiver.setMobile(dto.getReceiveMobile());
+        receiver.setAddress(receiveAddress);
+        return receiver;
+    }
+
 }

+ 5 - 0
sd-starter/pom.xml

@@ -30,6 +30,11 @@
         </dependency>
 
         <dependency>
+            <groupId>com.sd</groupId>
+            <artifactId>sd-cainiao</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>