引言 WMS与TMS的集成是仓储与运输协同的关键,直接影响配送效率和客户体验。本文将探讨WMS-TMS集成的技术方案。
1. 集成场景 1.1 发货场景 WMS出库完成 → 推送发货信息到TMS → TMS创建运单 → 承运商揽货 1.2 签收场景 TMS配送完成 → 推送签收信息到WMS → WMS更新出库单状态 2. 接口设计 2.1 发货信息推送 请求体:
{ "orderNo": "OMS202511220001", "waybillNo": "SF1234567890", "shipperAddress": "北京市大兴区XX仓库", "consigneeAddress": "北京市朝阳区XX街道XX号", "consignee": { "name": "张三", "phone": "13800138000" }, "cargoInfo": { "weight": 5.0, "volume": 0.02, "quantity": 2, "value": 198.00 }, "timeRequirement": "STANDARD" } 2.2 配送状态回调 { "waybillNo": "SF1234567890", "status": "DELIVERED", "deliveredTime": "2025-11-23T15:00:00", "signer": "张三", "signImage": "https://xxx.com/sign.jpg" } 3. 运费结算 3.1 运费记录 @Service public class FreightRecordService { public void recordFreight(String waybillNo, BigDecimal freight) { FreightRecord record = new FreightRecord(); record.setWaybillNo(waybillNo); record.setFreight(freight); record.setStatus("PENDING"); freightRecordMapper.insert(record); } } 3.2 定期对账 @Component public class FreightReconciliationTask { @Scheduled(cron = "0 0 2 1 * ?") // 每月1日凌晨2点 public void reconcile() { LocalDate lastMonth = LocalDate.now().minusMonths(1); List<FreightRecord> records = freightRecordMapper .selectByMonth(lastMonth); // 生成对账单 FreightBill bill = new FreightBill(); bill.setBillNo("BILL" + lastMonth.format(DateTimeFormatter.ofPattern("yyyyMM"))); bill.setRecords(records); bill.setTotalFreight(records.stream() .map(FreightRecord::getFreight) .reduce(BigDecimal.ZERO, BigDecimal::add) ); freightBillService.create(bill); } } 4. 异常处理 4.1 拒收处理 public void handleReject(String waybillNo, String reason) { // 1. 更新运单状态 Waybill waybill = waybillMapper.selectByNo(waybillNo); waybill.setStatus("REJECTED"); waybill.setRejectReason(reason); waybillMapper.updateById(waybill); // 2. 通知WMS创建退货入库单 wmsService.createReturnInbound(waybillNo); // 3. 通知OMS更新订单状态 omsService.updateOrderStatus(waybill.getOrderNo(), "REJECTED"); } 5. 实战案例:顺丰的WMS-TMS集成 技术方案:
...