Compare commits

...

5 Commits

Author SHA1 Message Date
d322fe830e 远程调用逻辑修改 2026-02-13 09:47:57 +08:00
c67f458c84 修改bug 2026-02-05 11:14:24 +08:00
fbe32b6e65 修改bug 2026-02-05 10:44:14 +08:00
d048f3fcf1 修改bug 2026-02-05 10:39:39 +08:00
bc690863c6 配送页面字段内容调整 2026-02-05 09:43:19 +08:00
8 changed files with 282 additions and 216 deletions

View File

@@ -113,8 +113,8 @@ public class DeliveryOrderController extends BaseController {
@PreAuthorize("@ss.hasPermi('document:order:add')") @PreAuthorize("@ss.hasPermi('document:order:add')")
@Log(title = "配送单据主-保存(含附件)", businessType = BusinessType.INSERT) @Log(title = "配送单据主-保存(含附件)", businessType = BusinessType.INSERT)
@PostMapping("/save") @PostMapping("/save")
public AjaxResult save(@RequestBody DeliveryOrderSaveDTO dto) { public AjaxResult save(@RequestBody DeliveryOrderSaveDTO dto) {;
String username = "大爷的!"; String username = getUsername();
int rows = deliveryOrderService.saveOrderWithAttachments(dto, username); int rows = deliveryOrderService.saveOrderWithAttachments(dto, username);
return toAjax(rows); return toAjax(rows);
} }
@@ -148,8 +148,8 @@ public class DeliveryOrderController extends BaseController {
* 从智慧实物系统拉取待配送出库单据列表 * 从智慧实物系统拉取待配送出库单据列表
*/ */
@GetMapping("/wisdom/rk/list") @GetMapping("/wisdom/rk/list")
public AjaxResult listRkFromWisdom(String billNoCk) { public AjaxResult listRkFromWisdom(String billNo) {
List<DeliveryBillVO> list = deliveryOrderService.listWisdomRkForDelivery(billNoCk); List<DeliveryBillVO> list = deliveryOrderService.listWisdomRkForDelivery(billNo);
return AjaxResult.success(list); return AjaxResult.success(list);
} }

View File

@@ -186,6 +186,9 @@ public class DeliveryOrder extends BaseEntity {
@Excel(name = "总公里数") @Excel(name = "总公里数")
private BigDecimal totalKm; private BigDecimal totalKm;
@Excel(name = "主键ID")
private Long rkInfoId;
// ===================== Getter & Setter ===================== // ===================== Getter & Setter =====================
public Long getId() { return id; } public Long getId() { return id; }
@@ -208,6 +211,9 @@ public class DeliveryOrder extends BaseEntity {
this.makerUserName = makerUserName; this.makerUserName = makerUserName;
} }
public Long getRkInfoId() { return rkInfoId; }
public void setRkInfoId(Long rkInfoId) { this.rkInfoId = rkInfoId; }
public Long getMakerId() { return makerId; } public Long getMakerId() { return makerId; }
public void setMakerId(Long makerId) { this.makerId = makerId; } public void setMakerId(Long makerId) { this.makerId = makerId; }
@@ -332,7 +338,6 @@ public class DeliveryOrder extends BaseEntity {
public BigDecimal getTotalKm() { return totalKm; } public BigDecimal getTotalKm() { return totalKm; }
public void setTotalKm(BigDecimal totalKm) { this.totalKm = totalKm; } public void setTotalKm(BigDecimal totalKm) { this.totalKm = totalKm; }
// ===================== toString ===================== // ===================== toString =====================
@Override @Override

View File

@@ -27,7 +27,7 @@ public class DeliveryOrderGroupVO {
/** 配送单号 */ /** 配送单号 */
private String orderNo; private String orderNo;
/** 出库单据号 */ /** 出库单据号 */
private String billNoCk; private String billNo;
/** 配送日期格式yyyy-MM-dd */ /** 配送日期格式yyyy-MM-dd */
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
private Date deliveryDate; private Date deliveryDate;

View File

@@ -19,7 +19,7 @@ public class DeliveryOrderVo {
private String orderNo; private String orderNo;
/** 出库单据号 */ /** 出库单据号 */
private String billNoCk; private String billNo;
/** 起始地点名称 */ /** 起始地点名称 */
private String originName; private String originName;

View File

@@ -37,8 +37,8 @@ public interface IDeliveryOrderService {
/** 详情:按单号查行 */ /** 详情:按单号查行 */
List<DeliveryOrderDetailVO> listByOrderNo(String orderNo); List<DeliveryOrderDetailVO> listByOrderNo(String orderNo);
/** 从智慧实物系统查询待配送出库单据(可按出库单号 billNoCk 过滤) */ /** 从智慧实物系统查询待配送出库单据(可按出库单号 billNo 过滤) */
List<DeliveryBillVO> listWisdomRkForDelivery(String billNoCk); List<DeliveryBillVO> listWisdomRkForDelivery(String billNo);
// ======================== 统计 ======================== // ======================== 统计 ========================

View File

@@ -141,43 +141,47 @@ public class DeliveryAttachmentServiceImpl implements IDeliveryAttachmentService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int executeBind(DeliveryExecuteBindDTO dto) { public int executeBind(DeliveryExecuteBindDTO dto) {
// 0) 基础校验 // ====================== 0. 基础校验 ======================
if (dto == null || StringUtils.isBlank(dto.getOrderNo())) { if (dto == null || StringUtils.isBlank(dto.getOrderNo())) {
throw new ServiceException("订单号不能为空"); throw new ServiceException("订单号不能为空");
} }
// 1) 校验订单存在(一个单号多行) // ====================== 1. 校验配送单是否存在 ======================
List<DeliveryOrder> existList = deliveryOrderMapper.selectDeliveryOrderByOrderNo(dto.getOrderNo()); List<DeliveryOrder> existList =
deliveryOrderMapper.selectDeliveryOrderByOrderNo(dto.getOrderNo());
if (existList == null || existList.isEmpty()) { if (existList == null || existList.isEmpty()) {
throw new ServiceException("配送单不存在:" + dto.getOrderNo()); throw new ServiceException("配送单不存在:" + dto.getOrderNo());
} }
// ====== 从配送单中拿到所有 rk_info_id 列表(允许为空:手工配送单场景) ====== // ====================== 2. 收集 rk_record_id ======================
List<Long> rkInfoIdList = existList.stream() List<Long> rkRecordIdList = existList.stream()
.map(DeliveryOrder::getRkRecordId) .map(DeliveryOrder::getRkRecordId)
.filter(Objects::nonNull) .filter(Objects::nonNull)
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
if (rkInfoIdList.isEmpty()) { if (rkRecordIdList.isEmpty()) {
// 手工创建的配送单可能没有绑定 rk_info_id允许为空后续只跳过 WMS 回写 log.warn("配送单未绑定 rk_record_id将跳过 WMS 回写。orderNo={}",
log.warn("配送单未绑定 rk_info_id将跳过 WMS 库存状态回写。orderNo={}", dto.getOrderNo()); dto.getOrderNo());
} }
// ======================================================================
// ====================== 3. 附件校验 ======================
if (dto.getAttachments() == null || dto.getAttachments().isEmpty()) { if (dto.getAttachments() == null || dto.getAttachments().isEmpty()) {
throw new ServiceException("附件列表不能为空"); throw new ServiceException("附件列表不能为空");
} }
// 2) 批量插入附件(只传 URL // ====================== 4. 批量插入附件 ======================
List<DeliveryAttachment> list = new ArrayList<>(); List<DeliveryAttachment> list = new ArrayList<>();
String username = getUsername(); String username = getUsername();
for (DeliveryAttachItemDTO it : dto.getAttachments()) { for (DeliveryAttachItemDTO it : dto.getAttachments()) {
if (it == null) {
continue; if (it == null) continue;
}
if (it.getScene() == null || it.getBizType() == null || it.getUrl() == null) { if (it.getScene() == null ||
it.getBizType() == null ||
it.getUrl() == null) {
continue; continue;
} }
@@ -188,38 +192,72 @@ public class DeliveryAttachmentServiceImpl implements IDeliveryAttachmentService
a.setUrl(it.getUrl()); a.setUrl(it.getUrl());
a.setSortNo(it.getSortNo()); a.setSortNo(it.getSortNo());
a.setRemark(it.getRemark()); a.setRemark(it.getRemark());
a.setStatus("1"); // 已绑定 a.setStatus("1"); // 已绑定
a.setIsDelete("0"); a.setIsDelete("0");
a.setCreateBy(username); a.setCreateBy(username);
a.setCreateTime(DateUtils.getNowDate()); a.setCreateTime(DateUtils.getNowDate());
list.add(a); list.add(a);
} }
if (list.isEmpty()) { if (list.isEmpty()) {
throw new ServiceException("有效附件条目为空"); throw new ServiceException("有效附件条目为空");
} }
deliveryAttachmentMapper.batchInsert(list); deliveryAttachmentMapper.batchInsert(list);
// 3) 回写配送单(仅填需要更新的字段),交给已有 updateDeliveryOrder(按 order_no 更新) // ====================== 5. 回写配送单 ======================
DeliveryOrder patch = new DeliveryOrder(); DeliveryOrder patch = new DeliveryOrder();
patch.setOrderNo(dto.getOrderNo()); patch.setOrderNo(dto.getOrderNo());
String scene = dto.getScene() == null ? "" : dto.getScene().toUpperCase(Locale.ROOT); String scene = dto.getScene() == null
? ""
: dto.getScene().toUpperCase(Locale.ROOT);
// ====================== ORIGIN开始配送 ======================
if ("ORIGIN".equals(scene)) { if ("ORIGIN".equals(scene)) {
// 起点:司机信息 + 起点经纬度 + 状态=2起运/配送中)
if (dto.getDriverName() != null) patch.setDriverName(dto.getDriverName()); if (dto.getDriverName() != null)
if (dto.getDriverPhone() != null) patch.setDriverPhone(dto.getDriverPhone()); patch.setDriverName(dto.getDriverName());
if (dto.getPlateNo() != null) patch.setPlateNo(dto.getPlateNo());
if (dto.getLng() != null) patch.setOriginLng(BigDecimal.valueOf(dto.getLng())); if (dto.getDriverPhone() != null)
if (dto.getLat() != null) patch.setOriginLat(BigDecimal.valueOf(dto.getLat())); patch.setDriverPhone(dto.getDriverPhone());
if (dto.getPlateNo() != null)
patch.setPlateNo(dto.getPlateNo());
if (dto.getLng() != null)
patch.setOriginLng(BigDecimal.valueOf(dto.getLng()));
if (dto.getLat() != null)
patch.setOriginLat(BigDecimal.valueOf(dto.getLat()));
// 本系统状态:配送中
patch.setOrderStatus("2"); patch.setOrderStatus("2");
} else if ("DEST".equals(scene)) { // 🔥 回写 WMS3 = 配送中
// 终点:终点经纬度 + 费用 + 状态=3已完成 if (rkRecordIdList != null && !rkRecordIdList.isEmpty()) {
if (dto.getLng() != null) patch.setDestLng(BigDecimal.valueOf(dto.getLng()));
if (dto.getLat() != null) patch.setDestLat(BigDecimal.valueOf(dto.getLat()));
boolean ok = updateWmsRecordIsDeliveryByIds(rkRecordIdList, 3);
if (!ok) {
throw new ServiceException(
"回写 WMS 为【配送中】失败rk_record_id=" + rkRecordIdList);
}
}
}
// ====================== DEST完成配送 ======================
else if ("DEST".equals(scene)) {
if (dto.getLng() != null)
patch.setDestLng(BigDecimal.valueOf(dto.getLng()));
if (dto.getLat() != null)
patch.setDestLat(BigDecimal.valueOf(dto.getLat()));
// 费用校验
if (dto.getActualFee() != null) { if (dto.getActualFee() != null) {
if (dto.getActualFee().compareTo(BigDecimal.ZERO) < 0) { if (dto.getActualFee().compareTo(BigDecimal.ZERO) < 0) {
throw new ServiceException("实际费用不能为负数"); throw new ServiceException("实际费用不能为负数");
@@ -234,73 +272,72 @@ public class DeliveryAttachmentServiceImpl implements IDeliveryAttachmentService
patch.setTollFee(dto.getTollFee()); patch.setTollFee(dto.getTollFee());
} }
// 接收状态校验
Integer receiveStatus = dto.getReceiveStatus(); Integer receiveStatus = dto.getReceiveStatus();
if (receiveStatus == null) { if (receiveStatus == null) {
throw new ServiceException("完成配送时必须选择接收物资状态"); throw new ServiceException("完成配送时必须选择接收物资状态");
} }
if (receiveStatus != 0 && receiveStatus != 1 && receiveStatus != 2) {
if (receiveStatus != 0 &&
receiveStatus != 1 &&
receiveStatus != 2) {
throw new ServiceException("接收物资状态不合法"); throw new ServiceException("接收物资状态不合法");
} }
patch.setReceiveStatus(receiveStatus); patch.setReceiveStatus(receiveStatus);
if (receiveStatus == 2) { if (receiveStatus == 2 &&
// 有问题必须写说明 StringUtils.isBlank(dto.getReceiveProblem())) {
if (StringUtils.isBlank(dto.getReceiveProblem())) {
throw new ServiceException("存在问题时必须填写问题描述"); throw new ServiceException("存在问题时必须填写问题描述");
} }
patch.setReceiveProblem(dto.getReceiveProblem()); patch.setReceiveProblem(dto.getReceiveProblem());
// 本系统状态:已完成
patch.setOrderStatus("3");
// 🔥 回写 WMS4 = 配送完成
if (rkRecordIdList != null && !rkRecordIdList.isEmpty()) {
boolean ok = updateWmsRecordIsDeliveryByIds(rkRecordIdList, 4);
if (!ok) {
throw new ServiceException(
"回写 WMS 为【配送完成】失败rk_record_id=" + rkRecordIdList);
}
} }
patch.setOrderStatus("3"); // 已完成
} else { } else {
// scene 既不是 ORIGIN 也不是 DEST不强制报错避免影响“仅绑定附件”的场景 log.warn("未识别 scene={},仅绑定附件", scene);
// 如果你希望严格校验,可以改为 throw new ServiceException("scene 不合法");
log.warn("executeBind 未识别的 scene={}将仅绑定附件并更新已有字段如有。orderNo={}", scene, dto.getOrderNo());
} }
deliveryOrderMapper.updateDeliveryOrder(patch); deliveryOrderMapper.updateDeliveryOrder(patch);
// 4) ⭐ 仅当 DEST 场景且存在 rk_info_id 绑定时,才远程调用 WMS 回写 is_delivery=3
if ("DEST".equals(scene)) {
if (rkInfoIdList != null && !rkInfoIdList.isEmpty()) {
boolean ok = updateWmsIsDeliveryByIds(rkInfoIdList, 3);
if (!ok) {
// 让整个事务回滚,附件 + 配送单状态都撤回
throw new ServiceException("回写 WMS 配送状态失败rk_info_id 列表:" + rkInfoIdList);
}
} else {
// 手工配送单:不回写 WMS
log.info("DEST 场景下配送单无 rk_info_id 绑定,跳过 WMS 回写。orderNo={}", dto.getOrderNo());
}
}
return list.size(); return list.size();
} }
/** /**
* 远程调用智慧实物管理系统,按 rk_info 主键ID列表更新 is_delivery 状态 * 远程调用智慧实物管理系统
* 约定请求体结构: * 更新 rk_record.is_delivery
* { *
* "ids": [1, 2, 3], * 0=不需要1=需要2=已接单3=配送中4=配送完成
* "isDelivery": 3
* }
*/ */
private boolean updateWmsIsDeliveryByIds(List<Long> rkInfoIdList, int isDelivery) { private boolean updateWmsRecordIsDeliveryByIds(List<Long> rkRecordIds, int isDelivery) {
String url = wisdomBaseUrl + "/wisdom/stock/updateDeliveryStatus"; String url = wisdomBaseUrl + "/wisdom/record/updateDeliveryStatus";
Map<String, Object> body = new HashMap<>(); Map<String, Object> body = new HashMap<>();
body.put("ids", rkInfoIdList); body.put("ids", rkRecordIds);
body.put("isDelivery", isDelivery); body.put("isDelivery", isDelivery);
String json = JSON.toJSONString(body); String json = JSON.toJSONString(body);
try { try {
String resp = HttpUtils.sendPost(url, json, MediaType.APPLICATION_JSON_VALUE); String resp = HttpUtils.sendJsonPost(url, json);
if (StringUtils.isBlank(resp)) { if (StringUtils.isBlank(resp)) {
log.error("WMS 更新失败,响应为空,url={} rkInfoIdList={}", url, rkInfoIdList); log.error("WMS 更新失败,响应为空,ids={}", rkRecordIds);
return false; return false;
} }
@@ -309,20 +346,23 @@ public class DeliveryAttachmentServiceImpl implements IDeliveryAttachmentService
if (result != null && result.isSuccess()) { if (result != null && result.isSuccess()) {
return true; return true;
} else { } else {
String msg = (result == null) String msg = result == null
? "响应为空" ? "响应为空"
: String.valueOf(result.get(AjaxResult.MSG_TAG)); : String.valueOf(result.get(AjaxResult.MSG_TAG));
log.error("WMS 更新失败rkInfoIdList={},原因={}", rkInfoIdList, msg);
log.error("WMS 更新失败ids={},原因={}", rkRecordIds, msg);
return false; return false;
} }
} catch (Exception e) { } catch (Exception e) {
log.error("调用 WMS 接口异常,rkInfoIdList={}error={}", rkInfoIdList, e.getMessage(), e); log.error("调用 WMS 接口异常,ids={}error={}",
rkRecordIds, e.getMessage(), e);
return false; return false;
} }
} }
// 保存目录 D:\delivery // 保存目录 D:\delivery
private static final String BASE_PATH = "D:/delivery"; private static final String BASE_PATH = "D:/delivery";

View File

@@ -182,62 +182,47 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String createOrder(DeliveryOrderCreateDTO dto) { public String createOrder(DeliveryOrderCreateDTO dto) {
// ========== 0. 参数校验 ==========
if (dto == null || dto.getItems() == null || dto.getItems().isEmpty()) { if (dto == null || dto.getItems() == null || dto.getItems().isEmpty()) {
throw new ServiceException("物料明细不能为空"); throw new ServiceException("物料明细不能为空");
} }
// 取第一条 billNo判断是否来自 WMS有 billNo = 出库单生成)
String billNo = dto.getItems().get(0).getBillNo(); String billNo = dto.getItems().get(0).getBillNo();
boolean fromWms = StringUtils.isNotBlank(billNo); boolean fromWms = StringUtils.isNotBlank(billNo);
// 收集 rk_record 主键 id用于回写 WMS
List<Long> rkRecordIds = dto.getItems().stream() List<Long> rkRecordIds = dto.getItems().stream()
.map(DeliveryOrderLineDTO::getRkRecordId) .map(DeliveryOrderLineDTO::getRkRecordId)
.filter(Objects::nonNull) .filter(Objects::nonNull)
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
// 出库单生成场景必须有 rkRecordId
if (fromWms && rkRecordIds.isEmpty()) { if (fromWms && rkRecordIds.isEmpty()) {
throw new ServiceException("明细行缺少 rk_record 主键 id,无法回写配送状态"); throw new ServiceException("明细行缺少 rk_record 主键 id");
} }
// ========== 1. 生成配送单号 ==========
String orderNo = StringUtils.isBlank(dto.getOrderNo()) String orderNo = StringUtils.isBlank(dto.getOrderNo())
? "DO" + DateUtils.dateTimeNow("yyyyMMddHHmmssSSS") ? "DO" + DateUtils.dateTimeNow("yyyyMMddHHmmssSSS")
: dto.getOrderNo().trim(); : dto.getOrderNo().trim();
Date now = DateUtils.getNowDate(); Date now = DateUtils.getNowDate();
String username = SecurityUtils.getUsername(); String username = SecurityUtils.getUsername();
Long currentUserId = SecurityUtils.getUserId();
Long currentUserId;
try {
currentUserId = SecurityUtils.getUserId();
} catch (Exception e) {
throw new ServiceException("无法获取当前登录用户ID请重新登录后重试");
}
Long makerId = dto.getMakerId() != null ? dto.getMakerId() : currentUserId; Long makerId = dto.getMakerId() != null ? dto.getMakerId() : currentUserId;
List<DeliveryOrder> rows = new ArrayList<>(); List<DeliveryOrder> rows = new ArrayList<>();
// ========== 2. 组装行记录 ==========
for (DeliveryOrderLineDTO it : dto.getItems()) { for (DeliveryOrderLineDTO it : dto.getItems()) {
// ===== WMS 生成场景校验 =====
if (fromWms) { if (fromWms) {
if (!billNo.equals(it.getBillNo())) { if (!billNo.equals(it.getBillNo())) {
throw new ServiceException("当前接口暂不支持多张单据合并配送,请确保所有明细 billNo 相同"); throw new ServiceException("暂不支持多合并配送");
} }
if (it.getRkRecordId() == null) { if (it.getRkRecordId() == null) {
throw new ServiceException("明细缺少 rk_record 主键 id"); throw new ServiceException("明细缺少 rk_record_id");
} }
} }
DeliveryOrder row = new DeliveryOrder(); DeliveryOrder row = new DeliveryOrder();
// 2.1 头部字段(整单一致)
row.setOrderNo(orderNo); row.setOrderNo(orderNo);
row.setOriginName(dto.getOriginName()); row.setOriginName(dto.getOriginName());
row.setOriginLng(dto.getOriginLng()); row.setOriginLng(dto.getOriginLng());
@@ -257,12 +242,10 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
row.setGoodsSize(dto.getGoodsSize()); row.setGoodsSize(dto.getGoodsSize());
row.setMakerId(makerId); row.setMakerId(makerId);
row.setReceiveStatus(dto.getReceiveStatus());
row.setReceiveProblem(dto.getReceiveProblem());
// 配送单状态不传则默认“2=已接单”保持你原来创建即回写2的行为 row.setOrderStatus(StringUtils.defaultIfBlank(dto.getOrderStatus(), "1"));
String orderStatus = StringUtils.isBlank(dto.getOrderStatus())
? "2"
: dto.getOrderStatus().trim();
row.setOrderStatus(orderStatus);
row.setVehicleTypeId(dto.getVehicleTypeId()); row.setVehicleTypeId(dto.getVehicleTypeId());
row.setVehicleTypeName(dto.getVehicleTypeName()); row.setVehicleTypeName(dto.getVehicleTypeName());
@@ -272,9 +255,9 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
row.setTotalKm(dto.getTotalKm()); row.setTotalKm(dto.getTotalKm());
row.setRemark(dto.getRemark()); row.setRemark(dto.getRemark());
// 2.2 明细字段(关键改造点 // 🔥 关键改造点
row.setRkRecordId(it.getRkRecordId()); // ✅ 改:关联 rk_record.id row.setRkRecordId(it.getRkRecordId());
row.setBillNo(it.getBillNo()); // ✅ 改:单据号 billNo不再 billNoCk row.setBillNo(it.getBillNo());
row.setXmMs(it.getXmMs()); row.setXmMs(it.getXmMs());
row.setXmNo(it.getXmNo()); row.setXmNo(it.getXmNo());
@@ -285,7 +268,6 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
row.setSapNo(it.getSapNo()); row.setSapNo(it.getSapNo());
row.setGysMc(it.getGysMc()); row.setGysMc(it.getGysMc());
// 2.3 通用字段
row.setIsDelete("0"); row.setIsDelete("0");
row.setCreateTime(now); row.setCreateTime(now);
row.setCreateBy(username); row.setCreateBy(username);
@@ -293,17 +275,14 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
rows.add(row); rows.add(row);
} }
// ========== 3. 落库 ==========
if (!rows.isEmpty()) { if (!rows.isEmpty()) {
deliveryOrderMapper.batchInsert(rows); deliveryOrderMapper.batchInsert(rows);
} }
// ========== 4. 回写 WMS仅 WMS 生成场景) ==========
if (fromWms) { if (fromWms) {
// 你最新语义0不需要1需要2已接单3配送中4完成
boolean ok = updateWmsIsDeliveryByIds(rkRecordIds, 2); boolean ok = updateWmsIsDeliveryByIds(rkRecordIds, 2);
if (!ok) { if (!ok) {
throw new ServiceException("已生成配送单,但回写 WMS 配送状态失败"); throw new ServiceException("回写WMS失败");
} }
} }
@@ -317,12 +296,12 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
* POST ${delivery.wisdom-base-url}/wisdom/stock/updateDeliveryStatus * POST ${delivery.wisdom-base-url}/wisdom/stock/updateDeliveryStatus
* Body: { "ids": [1, 2, 3], "isDelivery": 2 } * Body: { "ids": [1, 2, 3], "isDelivery": 2 }
*/ */
private boolean updateWmsIsDeliveryByIds(List<Long> rkInfoIds, int isDelivery) { private boolean updateWmsIsDeliveryByIds(List<Long> rkRecordIds, int isDelivery) {
String url = wisdomBaseUrl + "/wisdom/record/updateDeliveryStatus"; String url = wisdomBaseUrl + "/wisdom/record/updateDeliveryStatus";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("ids", rkInfoIds); map.put("ids", rkRecordIds);
map.put("isDelivery", isDelivery); map.put("isDelivery", isDelivery);
String json = JSON.toJSONString(map); String json = JSON.toJSONString(map);
@@ -342,7 +321,7 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
} }
} catch (Exception e) { } catch (Exception e) {
log.error("WMS 调用异常 rkInfoIds={} error={}", rkInfoIds, e.getMessage(), e); log.error("WMS 调用异常 rkInfoIds={} error={}", rkRecordIds, e.getMessage(), e);
return false; return false;
} }
} }

View File

@@ -10,10 +10,10 @@
<id property="id" column="id"/> <id property="id" column="id"/>
<!-- 单号 --> <!-- 单号 -->
<result property="orderNo" column="order_no"/> <result property="orderNo" column="order_no"/>
<result property="billNoCk" column="bill_no_ck"/> <result property="billNo" column="bill_no"/>
<!-- 新增rk_info 主键ID --> <!-- 新增rk_info 主键ID -->
<result property="rkInfoId" column="rk_info_id"/> <result property="rkRecordId" column="rk_record_id"/>
<!-- 新增制单人ID、接收物资状态、问题描述 --> <!-- 新增制单人ID、接收物资状态、问题描述 -->
<result property="makerId" column="maker_id"/> <result property="makerId" column="maker_id"/>
@@ -113,7 +113,7 @@
<result property="makerId" column="maker_id"/> <result property="makerId" column="maker_id"/>
<result property="receiveStatus" column="receive_status"/> <result property="receiveStatus" column="receive_status"/>
<result property="receiveProblem" column="receive_problem"/> <result property="receiveProblem" column="receive_problem"/>
<result property="billNoCk" column="bill_no_ck"/> <result property="billNo" column="bill_no"/>
<result property="originName" column="origin_name"/> <result property="originName" column="origin_name"/>
<result property="originLng" column="origin_lng" jdbcType="DECIMAL"/> <result property="originLng" column="origin_lng" jdbcType="DECIMAL"/>
<result property="originLat" column="origin_lat" jdbcType="DECIMAL"/> <result property="originLat" column="origin_lat" jdbcType="DECIMAL"/>
@@ -164,8 +164,8 @@
select select
dor.id, dor.id,
dor.order_no, dor.order_no,
dor.bill_no_ck, dor.bill_no,
dor.rk_info_id, dor.rk_record_id,
dor.maker_id, dor.maker_id,
-- 制单人用户名(连表 sys_user -- 制单人用户名(连表 sys_user
su.user_name AS maker_user_name, su.user_name AS maker_user_name,
@@ -206,7 +206,6 @@
left join delivery_attachment da left join delivery_attachment da
on da.order_no = dor.order_no on da.order_no = dor.order_no
and da.is_delete = '0' and da.is_delete = '0'
<!-- 报表/列表查询连表 sys_user按制单人ID 取用户名 -->
left join sys_user su left join sys_user su
on su.user_id = dor.maker_id on su.user_id = dor.maker_id
</sql> </sql>
@@ -216,8 +215,8 @@
select select
id, id,
order_no, order_no,
bill_no_ck, bill_no,
rk_info_id, rk_record_id,
maker_id, maker_id,
receive_status, receive_status,
receive_problem, receive_problem,
@@ -237,6 +236,7 @@
from delivery_order from delivery_order
</sql> </sql>
<!-- 仅用于列表:只查配送单据头字段,不查货物明细 --> <!-- 仅用于列表:只查配送单据头字段,不查货物明细 -->
<sql id="selectDeliveryOrderHeader"> <sql id="selectDeliveryOrderHeader">
SELECT SELECT
@@ -296,8 +296,8 @@
SELECT SELECT
dor.order_no AS order_no, dor.order_no AS order_no,
MAX(dor.bill_no_ck) AS bill_no_ck, MAX(dor.bill_no) AS bill_no,
MAX(dor.rk_info_id) AS rk_info_id, MAX(dor.rk_record_id) AS rk_record_id,
MAX(dor.maker_id) AS maker_id, MAX(dor.maker_id) AS maker_id,
MAX(dor.receive_status) AS receive_status, MAX(dor.receive_status) AS receive_status,
MAX(dor.receive_problem) AS receive_problem, MAX(dor.receive_problem) AS receive_problem,
@@ -324,84 +324,72 @@
MAX(dor.toll_fee) AS toll_fee, MAX(dor.toll_fee) AS toll_fee,
MAX(dor.total_km) AS total_km, MAX(dor.total_km) AS total_km,
MAX(dor.remark) AS remark MAX(dor.remark) AS remark
FROM delivery_order dor FROM delivery_order dor
<where> <where>
(dor.is_delete = '0' OR dor.is_delete = 0 OR dor.is_delete IS NULL) (dor.is_delete = '0' OR dor.is_delete = 0 OR dor.is_delete IS NULL)
<!-- 单号 -->
<if test="orderNo != null and orderNo != ''"> <if test="orderNo != null and orderNo != ''">
AND dor.order_no = #{orderNo} AND dor.order_no = #{orderNo}
</if> </if>
<!-- 出库单据号 --> <if test="billNo != null and billNo != ''">
<if test="billNoCk != null and billNoCk != ''"> AND dor.bill_no = #{billNo}
AND dor.bill_no_ck = #{billNoCk}
</if> </if>
<!-- 制单人 -->
<if test="makerId != null"> <if test="makerId != null">
AND dor.maker_id = #{makerId} AND dor.maker_id = #{makerId}
</if> </if>
<!-- 接收物资状态 -->
<if test="receiveStatus != null"> <if test="receiveStatus != null">
AND dor.receive_status = #{receiveStatus} AND dor.receive_status = #{receiveStatus}
</if> </if>
<!-- 项目描述(模糊) -->
<if test="xmMs != null and xmMs != ''"> <if test="xmMs != null and xmMs != ''">
AND dor.xm_ms LIKE CONCAT('%', #{xmMs}, '%') AND dor.xm_ms LIKE CONCAT('%', #{xmMs}, '%')
</if> </if>
<!-- 项目号 -->
<if test="xmNo != null and xmNo != ''"> <if test="xmNo != null and xmNo != ''">
AND dor.xm_no LIKE CONCAT('%', #{xmNo}, '%') AND dor.xm_no LIKE CONCAT('%', #{xmNo}, '%')
</if> </if>
<!-- 物料号 -->
<if test="wlNo != null and wlNo != ''"> <if test="wlNo != null and wlNo != ''">
AND dor.wl_no LIKE CONCAT('%', #{wlNo}, '%') AND dor.wl_no LIKE CONCAT('%', #{wlNo}, '%')
</if> </if>
<!-- 物料描述 -->
<if test="wlMs != null and wlMs != ''"> <if test="wlMs != null and wlMs != ''">
AND dor.wl_ms LIKE CONCAT('%', #{wlMs}, '%') AND dor.wl_ms LIKE CONCAT('%', #{wlMs}, '%')
</if> </if>
<!-- SAP订单编号 -->
<if test="sapNo != null and sapNo != ''"> <if test="sapNo != null and sapNo != ''">
AND dor.sap_no LIKE CONCAT('%', #{sapNo}, '%') AND dor.sap_no LIKE CONCAT('%', #{sapNo}, '%')
</if> </if>
<!-- 供应商名称 -->
<if test="gysMc != null and gysMc != ''"> <if test="gysMc != null and gysMc != ''">
AND dor.gys_mc LIKE CONCAT('%', #{gysMc}, '%') AND dor.gys_mc LIKE CONCAT('%', #{gysMc}, '%')
</if> </if>
<!-- 起始 / 目的地点模糊 -->
<if test="originName != null and originName != ''"> <if test="originName != null and originName != ''">
AND dor.origin_name LIKE CONCAT('%', #{originName}, '%') AND dor.origin_name LIKE CONCAT('%', #{originName}, '%')
</if> </if>
<if test="destName != null and destName != ''"> <if test="destName != null and destName != ''">
AND dor.dest_name LIKE CONCAT('%', #{destName}, '%') AND dor.dest_name LIKE CONCAT('%', #{destName}, '%')
</if> </if>
<!-- 配送日期 -->
<if test="deliveryDate != null"> <if test="deliveryDate != null">
AND dor.delivery_date = #{deliveryDate} AND dor.delivery_date = #{deliveryDate}
</if> </if>
<!-- 车牌 -->
<if test="plateNo != null and plateNo != ''"> <if test="plateNo != null and plateNo != ''">
AND dor.plate_no = #{plateNo} AND dor.plate_no = #{plateNo}
</if> </if>
<!-- ✅ 新增/确认:接收单位名称(模糊) -->
<if test="receiverOrgName != null and receiverOrgName != ''"> <if test="receiverOrgName != null and receiverOrgName != ''">
AND dor.receiver_org_name LIKE CONCAT('%', #{receiverOrgName}, '%') AND dor.receiver_org_name LIKE CONCAT('%', #{receiverOrgName}, '%')
</if> </if>
<!-- ✅ 新增/确认:配送状态(多选优先) -->
<if test="orderStatusList != null and orderStatusList.size > 0"> <if test="orderStatusList != null and orderStatusList.size > 0">
AND dor.order_status IN AND dor.order_status IN
<foreach collection="orderStatusList" item="st" open="(" separator="," close=")"> <foreach collection="orderStatusList" item="st" open="(" separator="," close=")">
@@ -409,25 +397,27 @@
</foreach> </foreach>
</if> </if>
<!-- ✅ 新增/确认:配送状态(单选兜底) -->
<if test="(orderStatusList == null or orderStatusList.size == 0) <if test="(orderStatusList == null or orderStatusList.size == 0)
and orderStatus != null and orderStatus != ''"> and orderStatus != null and orderStatus != ''">
AND dor.order_status = #{orderStatus} AND dor.order_status = #{orderStatus}
</if> </if>
</where> </where>
GROUP BY dor.order_no GROUP BY dor.order_no
ORDER BY MAX(dor.create_time) DESC ORDER BY MAX(dor.create_time) DESC
</select> </select>
<!-- 供 VO 使用:按单号查所有行明细 --> <!-- 供 VO 使用:按单号查所有行明细 -->
<select id="selectLinesByOrderNo" <select id="selectLinesByOrderNo"
parameterType="java.lang.String" parameterType="java.lang.String"
resultType="com.delivery.project.document.domain.dto.DeliveryOrderLineDTO"> resultType="com.delivery.project.document.domain.dto.DeliveryOrderLineDTO">
SELECT SELECT
dor.id, dor.id,
dor.rk_info_id AS rkInfoId, dor.rk_record_id AS rkRecordId,
dor.bill_no_ck AS billNoCk, dor.bill_no AS billNo,
dor.xm_ms AS xmMs, dor.xm_ms AS xmMs,
dor.xm_no AS xmNo, dor.xm_no AS xmNo,
dor.wl_no AS wlNo, dor.wl_no AS wlNo,
@@ -441,6 +431,7 @@
WHERE (dor.is_delete = '0' OR dor.is_delete = 0 OR dor.is_delete IS NULL) WHERE (dor.is_delete = '0' OR dor.is_delete = 0 OR dor.is_delete IS NULL)
AND dor.order_no = #{value} AND dor.order_no = #{value}
ORDER BY dor.id ASC ORDER BY dor.id ASC
</select> </select>
<!-- 供 VO 使用:按单号查附件 --> <!-- 供 VO 使用:按单号查附件 -->
@@ -584,9 +575,10 @@
<select id="selectGroupList" <select id="selectGroupList"
parameterType="com.delivery.project.document.domain.DeliveryOrder" parameterType="com.delivery.project.document.domain.DeliveryOrder"
resultType="com.delivery.project.document.domain.vo.DeliveryOrderGroupVO"> resultType="com.delivery.project.document.domain.vo.DeliveryOrderGroupVO">
SELECT SELECT
dor.order_no AS orderNo, dor.order_no AS orderNo,
MAX(dor.bill_no_ck) AS billNoCk, MAX(dor.bill_no) AS billNo,
MIN(dor.delivery_date) AS deliveryDate, MIN(dor.delivery_date) AS deliveryDate,
MAX(dor.origin_name) AS originName, MAX(dor.origin_name) AS originName,
MAX(dor.dest_name) AS destName, MAX(dor.dest_name) AS destName,
@@ -596,7 +588,9 @@
COUNT(1) AS itemCount, COUNT(1) AS itemCount,
SUM(dor.real_qty) AS totalQty, SUM(dor.real_qty) AS totalQty,
MAX(dor.order_status) AS orderStatus MAX(dor.order_status) AS orderStatus
FROM delivery_order dor FROM delivery_order dor
<where> <where>
(dor.is_delete = '0' OR dor.is_delete = 0 OR dor.is_delete IS NULL) (dor.is_delete = '0' OR dor.is_delete = 0 OR dor.is_delete IS NULL)
@@ -617,14 +611,19 @@
<if test="plateNo != null and plateNo != ''"> <if test="plateNo != null and plateNo != ''">
AND dor.plate_no = #{plateNo} AND dor.plate_no = #{plateNo}
</if> </if>
<if test="deliveryDate != null"> <if test="deliveryDate != null">
AND DATE(dor.delivery_date) = DATE(#{deliveryDate}) AND DATE(dor.delivery_date) = DATE(#{deliveryDate})
</if> </if>
</where> </where>
GROUP BY dor.order_no GROUP BY dor.order_no
ORDER BY MAX(dor.create_time) DESC ORDER BY MAX(dor.create_time) DESC
</select> </select>
<!-- 详情:同单号所有行(带附件 + makerUserName --> <!-- 详情:同单号所有行(带附件 + makerUserName -->
<select id="selectByOrderNo" <select id="selectByOrderNo"
parameterType="string" parameterType="string"
@@ -646,17 +645,16 @@
ORDER BY id ASC ORDER BY id ASC
</select> </select>
<!-- ======================== 插入 ======================== -->
<!-- 单条插入 --> <!-- 单条插入 -->
<insert id="insertDeliveryOrder" <insert id="insertDeliveryOrder"
parameterType="com.delivery.project.document.domain.DeliveryOrder" parameterType="com.delivery.project.document.domain.DeliveryOrder"
useGeneratedKeys="true" keyProperty="id"> useGeneratedKeys="true" keyProperty="id">
insert into delivery_order insert into delivery_order
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
<if test="orderNo != null">order_no,</if> <if test="orderNo != null">order_no,</if>
<if test="billNoCk != null">bill_no_ck,</if> <if test="billNo != null">bill_no,</if>
<if test="rkInfoId != null">rk_info_id,</if> <if test="rkRecordId != null">rk_record_id,</if>
<if test="makerId != null">maker_id,</if> <if test="makerId != null">maker_id,</if>
<if test="receiveStatus != null">receive_status,</if> <if test="receiveStatus != null">receive_status,</if>
<if test="receiveProblem != null">receive_problem,</if> <if test="receiveProblem != null">receive_problem,</if>
@@ -670,6 +668,7 @@
<if test="sapNo != null">sap_no,</if> <if test="sapNo != null">sap_no,</if>
<if test="gysMc != null">gys_mc,</if> <if test="gysMc != null">gys_mc,</if>
<if test="remark != null">remark,</if> <if test="remark != null">remark,</if>
<if test="originName != null">origin_name,</if> <if test="originName != null">origin_name,</if>
<if test="originLng != null">origin_lng,</if> <if test="originLng != null">origin_lng,</if>
<if test="originLat != null">origin_lat,</if> <if test="originLat != null">origin_lat,</if>
@@ -687,6 +686,7 @@
<if test="receiverName != null">receiver_name,</if> <if test="receiverName != null">receiver_name,</if>
<if test="receiverPhone != null">receiver_phone,</if> <if test="receiverPhone != null">receiver_phone,</if>
<if test="receiverOrgName != null">receiver_org_name,</if> <if test="receiverOrgName != null">receiver_org_name,</if>
<if test="deliveryTon != null">delivery_ton,</if> <if test="deliveryTon != null">delivery_ton,</if>
<if test="goodsSize != null">goods_size,</if> <if test="goodsSize != null">goods_size,</if>
<if test="orderStatus != null">order_status,</if> <if test="orderStatus != null">order_status,</if>
@@ -705,10 +705,11 @@
<if test="updateTime != null">update_time,</if> <if test="updateTime != null">update_time,</if>
<if test="isDelete != null">is_delete,</if> <if test="isDelete != null">is_delete,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="orderNo != null">#{orderNo,jdbcType=VARCHAR},</if> <if test="orderNo != null">#{orderNo,jdbcType=VARCHAR},</if>
<if test="billNoCk != null">#{billNoCk},</if> <if test="billNo != null">#{billNo,jdbcType=VARCHAR},</if>
<if test="rkInfoId != null">#{rkInfoId},</if> <if test="rkRecordId != null">#{rkRecordId},</if>
<if test="makerId != null">#{makerId},</if> <if test="makerId != null">#{makerId},</if>
<if test="receiveStatus != null">#{receiveStatus},</if> <if test="receiveStatus != null">#{receiveStatus},</if>
<if test="receiveProblem != null">#{receiveProblem},</if> <if test="receiveProblem != null">#{receiveProblem},</if>
@@ -722,6 +723,7 @@
<if test="sapNo != null">#{sapNo},</if> <if test="sapNo != null">#{sapNo},</if>
<if test="gysMc != null">#{gysMc},</if> <if test="gysMc != null">#{gysMc},</if>
<if test="remark != null">#{remark},</if> <if test="remark != null">#{remark},</if>
<if test="originName != null">#{originName},</if> <if test="originName != null">#{originName},</if>
<if test="originLng != null">#{originLng},</if> <if test="originLng != null">#{originLng},</if>
<if test="originLat != null">#{originLat},</if> <if test="originLat != null">#{originLat},</if>
@@ -739,6 +741,7 @@
<if test="receiverName != null">#{receiverName},</if> <if test="receiverName != null">#{receiverName},</if>
<if test="receiverPhone != null">#{receiverPhone},</if> <if test="receiverPhone != null">#{receiverPhone},</if>
<if test="receiverOrgName != null">#{receiverOrgName},</if> <if test="receiverOrgName != null">#{receiverOrgName},</if>
<if test="deliveryTon != null">#{deliveryTon},</if> <if test="deliveryTon != null">#{deliveryTon},</if>
<if test="goodsSize != null">#{goodsSize},</if> <if test="goodsSize != null">#{goodsSize},</if>
<if test="orderStatus != null">#{orderStatus},</if> <if test="orderStatus != null">#{orderStatus},</if>
@@ -757,12 +760,13 @@
<if test="updateTime != null">#{updateTime},</if> <if test="updateTime != null">#{updateTime},</if>
<if test="isDelete != null">#{isDelete},</if> <if test="isDelete != null">#{isDelete},</if>
</trim> </trim>
</insert> </insert>
<!-- 批量插入 --> <!-- 批量插入 -->
<insert id="batchInsert" parameterType="java.util.List"> <insert id="batchInsert" parameterType="java.util.List">
INSERT INTO delivery_order INSERT INTO delivery_order
(order_no, bill_no_ck, rk_info_id, maker_id, receive_status, receive_problem, (order_no, bill_no, rk_record_id, maker_id, receive_status, receive_problem,
xm_ms, xm_no, wl_no, wl_ms, real_qty, dw, sap_no, gys_mc, remark, xm_ms, xm_no, wl_no, wl_ms, real_qty, dw, sap_no, gys_mc, remark,
origin_name, origin_lng, origin_lat, origin_name, origin_lng, origin_lat,
dest_name, dest_lng, dest_lat, dest_name, dest_lng, dest_lat,
@@ -777,27 +781,59 @@
<foreach collection="list" item="it" separator=","> <foreach collection="list" item="it" separator=",">
( (
#{it.orderNo}, #{it.orderNo},
#{it.billNoCk}, #{it.billNo},
#{it.rkInfoId}, #{it.rkRecordId},
#{it.makerId}, #{it.makerId},
#{it.receiveStatus}, #{it.receiveStatus},
#{it.receiveProblem}, #{it.receiveProblem},
#{it.xmMs}, #{it.xmNo}, #{it.wlNo}, #{it.wlMs}, #{it.realQty}, #{it.dw}, #{it.xmMs},
#{it.sapNo}, #{it.gysMc}, #{it.remark}, #{it.xmNo},
#{it.wlNo},
#{it.wlMs},
#{it.realQty},
#{it.dw},
#{it.sapNo},
#{it.gysMc},
#{it.remark},
#{it.originName}, #{it.originLng}, #{it.originLat}, #{it.originName},
#{it.destName}, #{it.destLng}, #{it.destLat}, #{it.originLng},
#{it.originLat},
#{it.deliveryDate}, #{it.plateNo}, #{it.destName},
#{it.driverName}, #{it.driverPhone}, #{it.destLng},
#{it.shipperName}, #{it.shipperPhone}, #{it.receiverName}, #{it.receiverPhone}, #{it.receiverOrgName}, #{it.destLat},
#{it.deliveryTon}, #{it.goodsSize}, #{it.orderStatus}, #{it.deliveryDate},
#{it.vehicleTypeId}, #{it.vehicleTypeName}, #{it.plateNo},
#{it.suggestFee}, #{it.actualFee}, #{it.tollFee}, #{it.totalKm}, #{it.driverName},
#{it.createBy}, #{it.createTime}, #{it.updateBy}, #{it.updateTime}, #{it.isDelete} #{it.driverPhone},
#{it.shipperName},
#{it.shipperPhone},
#{it.receiverName},
#{it.receiverPhone},
#{it.receiverOrgName},
#{it.deliveryTon},
#{it.goodsSize},
#{it.orderStatus},
#{it.vehicleTypeId},
#{it.vehicleTypeName},
#{it.suggestFee},
#{it.actualFee},
#{it.tollFee},
#{it.totalKm},
#{it.createBy},
#{it.createTime},
#{it.updateBy},
#{it.updateTime},
#{it.isDelete}
) )
</foreach> </foreach>
</insert> </insert>
@@ -805,10 +841,12 @@
<!-- ======================== 更新 ======================== --> <!-- ======================== 更新 ======================== -->
<update id="updateDeliveryOrder" <update id="updateDeliveryOrder"
parameterType="com.delivery.project.document.domain.DeliveryOrder"> parameterType="com.delivery.project.document.domain.DeliveryOrder">
UPDATE delivery_order UPDATE delivery_order
<trim prefix="SET" suffixOverrides=","> <trim prefix="SET" suffixOverrides=",">
<if test="billNoCk != null">bill_no_ck = #{billNoCk},</if>
<if test="rkInfoId != null">rk_info_id = #{rkInfoId},</if> <if test="billNo != null">bill_no = #{billNo},</if>
<if test="rkRecordId != null">rk_record_id = #{rkRecordId},</if>
<if test="makerId != null">maker_id = #{makerId},</if> <if test="makerId != null">maker_id = #{makerId},</if>
<if test="receiveStatus != null">receive_status = #{receiveStatus},</if> <if test="receiveStatus != null">receive_status = #{receiveStatus},</if>
<if test="receiveProblem != null">receive_problem = #{receiveProblem},</if> <if test="receiveProblem != null">receive_problem = #{receiveProblem},</if>
@@ -858,10 +896,14 @@
<if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if> <if test="updateTime != null">update_time = #{updateTime},</if>
<if test="isDelete != null">is_delete = #{isDelete},</if> <if test="isDelete != null">is_delete = #{isDelete},</if>
</trim> </trim>
WHERE order_no = #{orderNo} WHERE order_no = #{orderNo}
</update> </update>
<!-- ======================== 删除 ======================== --> <!-- ======================== 删除 ======================== -->
<delete id="deleteDeliveryOrderById" parameterType="java.lang.Long"> <delete id="deleteDeliveryOrderById" parameterType="java.lang.Long">
delete from delivery_order where id = #{id} delete from delivery_order where id = #{id}