diff --git a/src/main/java/com/delivery/project/document/domain/DeliveryOrder.java b/src/main/java/com/delivery/project/document/domain/DeliveryOrder.java index aae2a7f..5ec40aa 100644 --- a/src/main/java/com/delivery/project/document/domain/DeliveryOrder.java +++ b/src/main/java/com/delivery/project/document/domain/DeliveryOrder.java @@ -25,9 +25,8 @@ public class DeliveryOrder extends BaseEntity { @Excel(name = "配送单据号") private String orderNo; - /** rk_info主键ID */ -// @Excel(name = "rk_info主键ID") - private Long rkInfoId; + /** rk_record主键ID */ + private Long rkRecordId; /** 制单人用户ID */ // @Excel(name = "制单人ID") @@ -44,9 +43,8 @@ public class DeliveryOrder extends BaseEntity { @Excel(name = "存在问题描述") private String receiveProblem; - /** 出库单据号 */ -// @Excel(name = "出库单据号") - private String billNoCk; + /** 单据号(对应 rk_record.bill_no) */ + private String billNo; /** 项目描述 */ // @Excel(name = "项目描述") @@ -196,8 +194,12 @@ public class DeliveryOrder extends BaseEntity { public String getOrderNo() { return orderNo; } public void setOrderNo(String orderNo) { this.orderNo = orderNo; } - public Long getRkInfoId() { return rkInfoId; } - public void setRkInfoId(Long rkInfoId) { this.rkInfoId = rkInfoId; } + public Long getRkRecordId() { + return rkRecordId; + } + public void setRkRecordId(Long rkRecordId) { + this.rkRecordId = rkRecordId; + } public String getMakerUserName() { return makerUserName; @@ -219,8 +221,12 @@ public class DeliveryOrder extends BaseEntity { public String getReceiveProblem() { return receiveProblem; } public void setReceiveProblem(String receiveProblem) { this.receiveProblem = receiveProblem; } - public String getBillNoCk() { return billNoCk; } - public void setBillNoCk(String billNoCk) { this.billNoCk = billNoCk; } + public String getBillNo() { + return billNo; + } + public void setBillNo(String billNo) { + this.billNo = billNo; + } public String getXmMs() { return xmMs; } public void setXmMs(String xmMs) { this.xmMs = xmMs; } @@ -334,12 +340,12 @@ public class DeliveryOrder extends BaseEntity { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) .append("id", getId()) .append("orderNo", getOrderNo()) - .append("rkInfoId", getRkInfoId()) + .append("rkRecordId", getRkRecordId()) .append("makerId", getMakerId()) .append("makerUserName", getMakerUserName()) .append("receiveStatus", getReceiveStatus()) // *** 类型已是 Integer *** .append("receiveProblem", getReceiveProblem()) - .append("billNoCk", getBillNoCk()) + .append("billNo", getBillNo()) .append("xmMs", getXmMs()) .append("xmNo", getXmNo()) .append("wlNo", getWlNo()) diff --git a/src/main/java/com/delivery/project/document/domain/dto/DeliveryOrderLineDTO.java b/src/main/java/com/delivery/project/document/domain/dto/DeliveryOrderLineDTO.java index b9e06a9..23d0042 100644 --- a/src/main/java/com/delivery/project/document/domain/dto/DeliveryOrderLineDTO.java +++ b/src/main/java/com/delivery/project/document/domain/dto/DeliveryOrderLineDTO.java @@ -7,14 +7,17 @@ import java.math.BigDecimal; @Data public class DeliveryOrderLineDTO { - /** - * 对应智慧实物系统 rk_info 表的主键 ID - * detailList 里的 id 就是这个值 - */ - private Long rkInfoId; - /** 出库单据号 */ - private String billNoCk; + /** + * 对应智慧实物系统 rk_record 表主键 ID + */ + private Long rkRecordId; + + /** + * 单据号(以 rk_record.bill_no 为准) + * 说明:出库生成配送单时,所有行必须属于同一 billNo + */ + private String billNo; /** 项目描述 */ private String xmMs; diff --git a/src/main/java/com/delivery/project/document/service/impl/DeliveryAttachmentServiceImpl.java b/src/main/java/com/delivery/project/document/service/impl/DeliveryAttachmentServiceImpl.java index 33dead7..3a87fc2 100644 --- a/src/main/java/com/delivery/project/document/service/impl/DeliveryAttachmentServiceImpl.java +++ b/src/main/java/com/delivery/project/document/service/impl/DeliveryAttachmentServiceImpl.java @@ -154,7 +154,7 @@ public class DeliveryAttachmentServiceImpl implements IDeliveryAttachmentService // ====== 从配送单中拿到所有 rk_info_id 列表(允许为空:手工配送单场景) ====== List rkInfoIdList = existList.stream() - .map(DeliveryOrder::getRkInfoId) + .map(DeliveryOrder::getRkRecordId) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); diff --git a/src/main/java/com/delivery/project/document/service/impl/DeliveryOrderServiceImpl.java b/src/main/java/com/delivery/project/document/service/impl/DeliveryOrderServiceImpl.java index 8ca3ad1..5ad2da4 100644 --- a/src/main/java/com/delivery/project/document/service/impl/DeliveryOrderServiceImpl.java +++ b/src/main/java/com/delivery/project/document/service/impl/DeliveryOrderServiceImpl.java @@ -182,72 +182,61 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService public String createOrder(DeliveryOrderCreateDTO dto) { // ========== 0. 参数校验 ========== - if (dto == null || dto.getItems() == null || dto.getItems().isEmpty()) { throw new ServiceException("物料明细不能为空"); } - // 取第一条 billNoCk,判断是“手动创建”还是“出库单生成” - String billNoCk = dto.getItems().get(0).getBillNoCk(); - boolean fromWms = StringUtils.isNotBlank(billNoCk); // true = 出库单生成;false = 手动创建 + // 取第一条 billNo,判断是否来自 WMS(有 billNo = 出库单生成) + String billNo = dto.getItems().get(0).getBillNo(); + boolean fromWms = StringUtils.isNotBlank(billNo); - // 收集 rk_info 主键 id(仅用于出库单生成场景回写 WMS) - List rkInfoIds = dto.getItems().stream() - .map(DeliveryOrderLineDTO::getRkInfoId) + // 收集 rk_record 主键 id(用于回写 WMS) + List rkRecordIds = dto.getItems().stream() + .map(DeliveryOrderLineDTO::getRkRecordId) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); - // 出库单生成场景必须有 rkInfoId - if (fromWms && rkInfoIds.isEmpty()) { - throw new ServiceException("明细行缺少 rk_info 主键 id,无法回写配送状态"); + // 出库单生成场景必须有 rkRecordId + if (fromWms && rkRecordIds.isEmpty()) { + throw new ServiceException("明细行缺少 rk_record 主键 id,无法回写配送状态"); } // ========== 1. 生成配送单号 ========== - String orderNo = StringUtils.isBlank(dto.getOrderNo()) ? "DO" + DateUtils.dateTimeNow("yyyyMMddHHmmssSSS") : dto.getOrderNo().trim(); Date now = DateUtils.getNowDate(); String username = SecurityUtils.getUsername(); - Long currentUserId = null; + + Long currentUserId; try { currentUserId = SecurityUtils.getUserId(); } catch (Exception e) { - log.warn("获取当前登录用户ID失败:{}", e.getMessage()); + throw new ServiceException("无法获取当前登录用户ID,请重新登录后重试"); } - // 制单人用户ID:优先用前端传的 makerId,没有则回退到当前登录用户 - Long makerId = dto.getMakerId(); - if (makerId == null) { - if (currentUserId == null) { - throw new ServiceException("无法确定制单人用户ID,请重新登录后重试"); - } - makerId = currentUserId; - } + Long makerId = dto.getMakerId() != null ? dto.getMakerId() : currentUserId; List rows = new ArrayList<>(); - // ========== 2. 遍历每一条物料明细,组装行记录 ========== - + // ========== 2. 组装行记录 ========== for (DeliveryOrderLineDTO it : dto.getItems()) { - // ===== 出库单生成场景下的两个判断(手动创建时跳过) ===== + // ===== WMS 生成场景校验 ===== if (fromWms) { - // 限制同一出库单 - if (!billNoCk.equals(it.getBillNoCk())) { - throw new ServiceException("当前接口暂不支持多张出库单合并配送,请确保所有明细 billNoCk 相同"); + if (!billNo.equals(it.getBillNo())) { + throw new ServiceException("当前接口暂不支持多张单据合并配送,请确保所有明细 billNo 相同"); } - - if (it.getRkInfoId() == null) { - throw new ServiceException("明细行缺少 rk_info 主键 id"); + if (it.getRkRecordId() == null) { + throw new ServiceException("明细行缺少 rk_record 主键 id"); } } DeliveryOrder row = new DeliveryOrder(); - // 2.1 公共头部字段(整单一致) + // 2.1 头部字段(整单一致) row.setOrderNo(orderNo); row.setOriginName(dto.getOriginName()); row.setOriginLng(dto.getOriginLng()); @@ -266,12 +255,12 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService row.setDeliveryTon(dto.getDeliveryTon()); row.setGoodsSize(dto.getGoodsSize()); - // 制单人用户ID row.setMakerId(makerId); - // 配送状态:前端不传时默认 1(已接单 / 待起运) + // 配送单状态:不传则默认“2=已接单”(保持你原来创建即回写2的行为) String orderStatus = StringUtils.isBlank(dto.getOrderStatus()) - ? "1" : dto.getOrderStatus().trim(); + ? "2" + : dto.getOrderStatus().trim(); row.setOrderStatus(orderStatus); row.setVehicleTypeId(dto.getVehicleTypeId()); @@ -282,9 +271,10 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService row.setTotalKm(dto.getTotalKm()); row.setRemark(dto.getRemark()); - // 2.2 明细字段 - row.setRkInfoId(it.getRkInfoId()); // 关联 rk_info 主键ID(手动单可以为空) - row.setBillNoCk(it.getBillNoCk()); + // 2.2 明细字段(关键改造点) + row.setRkRecordId(it.getRkRecordId()); // ✅ 改:关联 rk_record.id + row.setBillNo(it.getBillNo()); // ✅ 改:单据号 billNo(不再 billNoCk) + row.setXmMs(it.getXmMs()); row.setXmNo(it.getXmNo()); row.setWlNo(it.getWlNo()); @@ -302,18 +292,16 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService rows.add(row); } - // ========== 3. 批量落库 ========== - + // ========== 3. 落库 ========== if (!rows.isEmpty()) { deliveryOrderMapper.batchInsert(rows); } - // ========== 4. 回写 WMS(仅出库单生成场景,手动创建不回写、不远程调用) ========== - + // ========== 4. 回写 WMS(仅 WMS 生成场景) ========== if (fromWms) { - boolean ok = updateWmsIsDeliveryByIds(rkInfoIds, 2); + // 你最新语义:0不需要,1需要,2已接单,3配送中,4完成 + boolean ok = updateWmsIsDeliveryByIds(rkRecordIds, 2); if (!ok) { - // 回写失败,整单回滚,避免脏数据 throw new ServiceException("已生成配送单,但回写 WMS 配送状态失败"); } } @@ -330,7 +318,7 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService */ private boolean updateWmsIsDeliveryByIds(List rkInfoIds, int isDelivery) { - String url = wisdomBaseUrl + "/wisdom/stock/updateDeliveryStatus"; + String url = wisdomBaseUrl + "/wisdom/record/updateDeliveryStatus"; Map map = new HashMap<>(); map.put("ids", rkInfoIds);