diff --git a/yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java index c0cf455..d185339 100644 --- a/yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java +++ b/yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java @@ -39,6 +39,8 @@ public interface ErrorCodeConstants { ErrorCode ORDER_PICK_UP_FAIL_NOT_VERIFY_USER = new ErrorCode(1_011_000_034, "交易订单自提失败,原因:你没有核销该门店订单的权限"); ErrorCode ORDER_CREATE_FAIL_INSUFFICIENT_USER_POINTS = new ErrorCode(1_011_000_035, "交易订单创建失败,原因:用户积分不足"); ErrorCode OMS_EXPRESS_ORDER_CREATE_ERROR = new ErrorCode(1_011_000_036, "快递订单创建失败,原因:{}"); + ErrorCode ORDER_DELIVERY_FAIL_STATUS_NOT_DELIVERED = new ErrorCode(1_011_000_037, "交易订单取消发货失败,订单不是【已发货】状态"); + ErrorCode OMS_EXPRESS_ORDER_CANCEL_ERROR = new ErrorCode(1_011_000_036, "快递订单取消失败,原因:{}"); // ========== After Sale 模块 1-011-000-100 ========== ErrorCode AFTER_SALE_NOT_FOUND = new ErrorCode(1_011_000_100, "售后单不存在"); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.http b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.http index 363a1c3..1ebe27e 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.http +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.http @@ -23,3 +23,8 @@ tenant-id: {{adminTenantId}} PUT {{baseUrl}}/trade/order/delivery-kuaidi100?id=14 Authorization: Bearer {{token}} tenant-id: {{adminTenantId}} + +### 快递100订单取消 +PUT {{baseUrl}}/trade/order/cancel-kuaidi100?id=14 +Authorization: Bearer {{token}} +tenant-id: {{adminTenantId}} diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.java index 96aa5d5..6a4d449 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.java @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderLogDO; import cn.iocoder.yudao.module.trade.service.order.TradeOrderLogService; import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; +import com.kuaidi100.sdk.response.PrintBaseResp; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -130,6 +131,13 @@ public class TradeOrderController { return success(tradeOrderUpdateService.deliveryKuaidi100(id)); } + @PutMapping("/cancel-kuaidi100") + @Operation(summary = "申通快递(快递100)面单取消") + @PreAuthorize("@ss.hasPermission('trade:order:update')") + public CommonResult cancelKuaidi100(@RequestParam("id") Long id) { + return success(tradeOrderUpdateService.cancelKuaidi100(id)); + } + @PutMapping("/update-remark") @Operation(summary = "订单备注") @PreAuthorize("@ss.hasPermission('trade:order:update')") diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java index 1297efd..bd1cc11 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettle import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettlementRespVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; +import com.kuaidi100.sdk.response.PrintBaseResp; import javax.validation.constraints.NotNull; import java.util.List; @@ -221,4 +222,6 @@ public interface TradeOrderUpdateService { void deliverySto(Long id); String deliveryKuaidi100(Long id); + + String cancelKuaidi100(Long id); } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java index f9cb906..7811fb4 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java @@ -71,6 +71,7 @@ import com.kuaidi100.sdk.contant.CompanyConstant; import com.kuaidi100.sdk.contant.PrintType; import com.kuaidi100.sdk.core.IBaseClient; import com.kuaidi100.sdk.pojo.HttpResult; +import com.kuaidi100.sdk.request.LabelCancelParam; import com.kuaidi100.sdk.request.ManInfo; import com.kuaidi100.sdk.request.PrintReq; import com.kuaidi100.sdk.request.labelV2.OrderReq; @@ -149,6 +150,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @Resource private TradeOrderProperties tradeOrderProperties; + private static final String key = "moaqEZhD6889"; + private static final String secret = "f46d0c0071be4841818482c5ed8c27b5"; + // =================== Order =================== @Value("${sto.api_url}") @@ -600,8 +604,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { } //授权码 - String key = "moaqEZhD6889"; - String secret = "f46d0c0071be4841818482c5ed8c27b5"; +// String key = "moaqEZhD6889"; +// String secret = "f46d0c0071be4841818482c5ed8c27b5"; ManInfo recManInfo = new ManInfo(); recManInfo.setName(order.getReceiverName()); @@ -691,6 +695,56 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { } + @Override + public String cancelKuaidi100(Long id) { + // 1.1 校验并获得交易订单(可发货) + TradeOrderDO order = validateOrderDeliverable(id); + // 1.2 校验 deliveryType 是否为快递,是快递才可以发货 + if (ObjectUtil.notEqual(order.getDeliveryType(), DeliveryTypeEnum.EXPRESS.getType())) { + throw exception(ORDER_DELIVERY_FAIL_DELIVERY_TYPE_NOT_EXPRESS); + } + if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.DELIVERED.getStatus())) { + throw exception(ORDER_DELIVERY_FAIL_STATUS_NOT_DELIVERED); + } + LabelCancelParam labelCancelParam = new LabelCancelParam(); + labelCancelParam.setPartnerId("314056015875"); + labelCancelParam.setPartnerKey("123456"); + labelCancelParam.setNet("314056"); + labelCancelParam.setCode("44"); + labelCancelParam.setKuaidicom(CompanyConstant.ST); + labelCancelParam.setKuaidinum(order.getLogisticsNo()); + //快递公司订单号(对应下单时返回的kdComOrderNum,如果没有可以不传,否则必传) + labelCancelParam.setOrderId("01639366271685GNkZEX"); + //业务员编码,部分快递公司必填 +// labelCancelParam.setCheckMan("123"); + //产品业务类型,部分快递公司必填 + labelCancelParam.setExpType("标准快递"); + + labelCancelParam.setReason("暂时不寄了"); + String param = new Gson().toJson(labelCancelParam); + String t = System.currentTimeMillis() + ""; + + PrintReq printReq = new PrintReq(); + printReq.setT(t); + printReq.setKey(key); + printReq.setMethod(ApiInfoConstant.CANCEL_METHOD); + printReq.setSign(SignUtils.printSign(param,t,key,secret)); + printReq.setParam(param); + + IBaseClient baseClient = new LabelV2(); + try { + HttpResult httpResult = baseClient.execute(printReq); + System.out.println(httpResult); + if (httpResult.getStatus() == org.apache.http.HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){ + return httpResult.getBody(); + }else { + throw exception(OMS_EXPRESS_ORDER_CANCEL_ERROR, "接口无返回内容"); + } + } catch (Exception e) { + throw exception(OMS_EXPRESS_ORDER_CANCEL_ERROR, e.getMessage()); + } + } + @Async public void sendDeliveryOrderMessage(TradeOrderDO order, TradeOrderDeliveryReqVO deliveryReqVO) { // 构建并发送模版消息