feat(order): 添加订单快递单号同步到发货单功能

- 在订单更新时检查并同步快递单号到发货单表
- 使用LambdaQueryWrapper查询相关发货单记录
- 支持新增发货单或更新现有发货单的快递单号
- 添加异常处理避免同步失败影响主流程
- 实现手动录入和无需物流两种配送方式的处理
- 添加日志记录同步失败的情况便于排查问题
This commit is contained in:
2026-02-06 02:27:56 +08:00
parent 804a5a7bef
commit 1536f1780b

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gxwebsoft.common.core.config.ConfigProperties; import com.gxwebsoft.common.core.config.ConfigProperties;
import com.gxwebsoft.common.core.config.CertificateProperties; import com.gxwebsoft.common.core.config.CertificateProperties;
import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.utils.RedisUtil;
@@ -320,6 +321,45 @@ public class ShopOrderController extends BaseController {
} }
if (shopOrderService.updateById(shopOrder)) { if (shopOrderService.updateById(shopOrder)) {
// 如果订单上带了快递单号(常见于后台手工修正/补录),同步到发货单表,避免发货单还是旧单号
if (StrUtil.isNotBlank(shopOrder.getExpressNo()) && shopOrder.getOrderId() != null) {
try {
List<ShopOrderDelivery> deliveryList = shopOrderDeliveryService.list(
new LambdaQueryWrapper<ShopOrderDelivery>()
.eq(ShopOrderDelivery::getOrderId, shopOrder.getOrderId())
);
if (deliveryList == null || deliveryList.isEmpty()) {
ShopOrderDelivery delivery = new ShopOrderDelivery();
delivery.setOrderId(shopOrder.getOrderId());
delivery.setTenantId(ObjectUtil.defaultIfNull(shopOrder.getTenantId(), shopOrderNow.getTenantId()));
delivery.setExpressId(ObjectUtil.defaultIfNull(shopOrder.getExpressId(), shopOrderNow.getExpressId()));
delivery.setExpressNo(shopOrder.getExpressNo());
// 10手动录入 / 20无需物流
if (delivery.getExpressId() == null || delivery.getExpressId() == 0) {
delivery.setDeliveryMethod(20);
} else {
delivery.setDeliveryMethod(10);
}
delivery.setSendName(ObjectUtil.defaultIfNull(shopOrder.getSendName(), shopOrderNow.getSendName()));
delivery.setSendPhone(ObjectUtil.defaultIfNull(shopOrder.getSendPhone(), shopOrderNow.getSendPhone()));
delivery.setSendAddress(ObjectUtil.defaultIfNull(shopOrder.getSendAddress(), shopOrderNow.getSendAddress()));
shopOrderDeliveryService.save(delivery);
} else {
for (ShopOrderDelivery d : deliveryList) {
if (d == null || d.getDeliveryId() == null) {
continue;
}
ShopOrderDelivery patch = new ShopOrderDelivery();
patch.setDeliveryId(d.getDeliveryId());
patch.setExpressNo(shopOrder.getExpressNo());
shopOrderDeliveryService.updateById(patch);
}
}
} catch (Exception e) {
logger.warn("同步更新发货单运单号失败 - orderId={}, expressNo={}",
shopOrder.getOrderId(), shopOrder.getExpressNo(), e);
}
}
return success("修改成功"); return success("修改成功");
} }
return fail("修改失败"); return fail("修改失败");