feat: 物流
parent
188c12ab69
commit
fb9b58049c
|
|
@ -0,0 +1,19 @@
|
|||
package com.ruoyi.xkt.dto.express;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-04-29 17:57
|
||||
*/
|
||||
@Data
|
||||
public class ExpressCancelReqDTO {
|
||||
/**
|
||||
* 请求号
|
||||
*/
|
||||
private String expressReqNo;
|
||||
/**
|
||||
* 运单号
|
||||
*/
|
||||
private String expressWaybillNo;
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package com.ruoyi.xkt.manager;
|
||||
|
||||
import com.ruoyi.xkt.dto.express.ExpressCancelReqDTO;
|
||||
import com.ruoyi.xkt.dto.express.ExpressPrintDTO;
|
||||
import com.ruoyi.xkt.dto.express.ExpressShipReqDTO;
|
||||
import com.ruoyi.xkt.enums.EExpressChannel;
|
||||
|
|
@ -27,6 +28,14 @@ public interface ExpressManager {
|
|||
*/
|
||||
String shipStoreOrder(ExpressShipReqDTO shipReqDTO);
|
||||
|
||||
/**
|
||||
* 取消发货
|
||||
*
|
||||
* @param cancelReqDTO
|
||||
* @return
|
||||
*/
|
||||
boolean cancelShipOrder(ExpressCancelReqDTO cancelReqDTO);
|
||||
|
||||
/**
|
||||
* 打印面单
|
||||
*
|
||||
|
|
|
|||
|
|
@ -6,14 +6,12 @@ import cn.hutool.http.HttpUtil;
|
|||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.xkt.dto.express.ExpressCancelReqDTO;
|
||||
import com.ruoyi.xkt.dto.express.ExpressPrintDTO;
|
||||
import com.ruoyi.xkt.dto.express.ExpressShipReqDTO;
|
||||
import com.ruoyi.xkt.enums.EExpressChannel;
|
||||
import com.ruoyi.xkt.manager.ExpressManager;
|
||||
import com.ruoyi.xkt.thirdpart.yto.YtoCreateOrderParam;
|
||||
import com.ruoyi.xkt.thirdpart.yto.YtoPrintOrderParam;
|
||||
import com.ruoyi.xkt.thirdpart.yto.YtoPublicRequest;
|
||||
import com.ruoyi.xkt.thirdpart.yto.YtoSignUtil;
|
||||
import com.ruoyi.xkt.thirdpart.yto.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
|
@ -75,6 +73,37 @@ public class YtoExpressManagerImpl implements ExpressManager {
|
|||
throw new ServiceException("圆通订单创建失败");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cancelShipOrder(ExpressCancelReqDTO cancelReqDTO) {
|
||||
Assert.notNull(cancelReqDTO);
|
||||
Assert.notEmpty(cancelReqDTO.getExpressReqNo());
|
||||
YtoCancelOrderParam cancelOrderParam = new YtoCancelOrderParam();
|
||||
cancelOrderParam.setLogisticsNo(cancelReqDTO.getExpressReqNo());
|
||||
cancelOrderParam.setCancelDesc("订单取消");
|
||||
try {
|
||||
String param = JSONUtil.toJsonStr(cancelOrderParam);
|
||||
String sign = YtoSignUtil.sign("korder_cancel_adapter", "v1", param, appSecret);
|
||||
YtoPublicRequest request = YtoPublicRequest.builder()
|
||||
.timestamp(System.currentTimeMillis())
|
||||
.param(param)
|
||||
.format(YtoPublicRequest.EFormat.JSON)
|
||||
.sign(sign).build();
|
||||
String rtnStr = HttpUtil.post(gatewayUrl + "open/korder_cancel_adapter/v1/N364gM/" + appKey,
|
||||
JSONUtil.toJsonStr(request));
|
||||
log.info("圆通订单取消返回信息: {}", rtnStr);
|
||||
JSONObject rtnJson = JSONUtil.parseObj(rtnStr);
|
||||
String logisticsNo = rtnJson.getStr("logisticsNo");
|
||||
if (StrUtil.isNotEmpty(logisticsNo)
|
||||
&& logisticsNo.equals(cancelOrderParam.getLogisticsNo())) {
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("圆通订单取消异常", e);
|
||||
}
|
||||
log.warn("圆通订单取消失败: {}", cancelReqDTO);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ExpressPrintDTO> printOrder(Collection<String> waybillNos) {
|
||||
Assert.notEmpty(waybillNos);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import cn.hutool.json.JSONObject;
|
|||
import cn.hutool.json.JSONUtil;
|
||||
import com.ruoyi.common.core.redis.RedisCache;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.xkt.dto.express.ExpressCancelReqDTO;
|
||||
import com.ruoyi.xkt.dto.express.ExpressPrintDTO;
|
||||
import com.ruoyi.xkt.dto.express.ExpressShipReqDTO;
|
||||
import com.ruoyi.xkt.enums.EExpressChannel;
|
||||
|
|
@ -33,6 +34,8 @@ public class ZtoExpressManagerImpl implements ExpressManager, InitializingBean {
|
|||
|
||||
private static final String CREATE_ORDER_URI = "zto.open.createOrder";
|
||||
|
||||
private static final String CANCEL_ORDER_URI = "zto.open.cancelPreOrder";
|
||||
|
||||
private static final String STRUCTURE_ADDRESS_URI = "zto.innovate.structureNamePhoneAddress";
|
||||
|
||||
public static final String ORDER_PRINT_URI = "zto.open.order.print";
|
||||
|
|
@ -86,6 +89,32 @@ public class ZtoExpressManagerImpl implements ExpressManager, InitializingBean {
|
|||
throw new ServiceException("中通订单创建失败");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cancelShipOrder(ExpressCancelReqDTO cancelReqDTO) {
|
||||
Assert.notNull(cancelReqDTO);
|
||||
Assert.notEmpty(cancelReqDTO.getExpressWaybillNo());
|
||||
ZtoCancelOrderParam cancelOrderParam = new ZtoCancelOrderParam();
|
||||
cancelOrderParam.setBillCode(cancelReqDTO.getExpressWaybillNo());
|
||||
cancelOrderParam.setCancelType("1");
|
||||
ZopPublicRequest request = new ZopPublicRequest();
|
||||
request.setBody(JSONUtil.toJsonStr(cancelOrderParam));
|
||||
request.setUrl(gatewayUrl + CANCEL_ORDER_URI);
|
||||
request.setEncryptionType(EncryptionType.MD5);
|
||||
try {
|
||||
String bodyStr = client.execute(request);
|
||||
log.info("中通订单取消返回信息: {}", bodyStr);
|
||||
JSONObject bodyJson = JSONUtil.parseObj(bodyStr);
|
||||
boolean success = bodyJson.getBool("status");
|
||||
if (success) {
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("中通订单取消异常", e);
|
||||
}
|
||||
log.warn("中通订单取消失败: {}", cancelReqDTO);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ExpressPrintDTO> printOrder(Collection<String> waybillNos) {
|
||||
Assert.notEmpty(waybillNos);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
package com.ruoyi.xkt.thirdpart.yto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-04-29 18:13
|
||||
*/
|
||||
@Data
|
||||
public class YtoCancelOrderParam {
|
||||
/**
|
||||
* 物流单号,打印拉取运单号前,物流单号和渠道唯一确定一笔快递物流订单。
|
||||
*/
|
||||
private String logisticsNo;
|
||||
/**
|
||||
* 取消原因
|
||||
*/
|
||||
private String cancelDesc;
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package com.ruoyi.xkt.thirdpart.zto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-04-29 18:11
|
||||
*/
|
||||
@Data
|
||||
public class ZtoCancelOrderParam {
|
||||
/**
|
||||
* 取消类型 1不想寄了,2下错单,3重复下单,4运费太贵,5无人联系,6取件太慢,7态度差
|
||||
*/
|
||||
private String cancelType;
|
||||
/**
|
||||
* 预约件订单号(orderCode与billCode必传其一)
|
||||
*/
|
||||
private String orderCode;
|
||||
/**
|
||||
* 运单号(orderCode与billCode必传其一)
|
||||
*/
|
||||
private String billCode;
|
||||
}
|
||||
Loading…
Reference in New Issue