From 2e58e35babd5f429983d2275b4ca86e63496d297 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Fri, 29 Aug 2025 15:36:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=9B=B4=E6=96=B0=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 WmsInstockRecordServiceImpl 中添加 updatePurchaseOrderStatus 方法 - 该方法根据采购订单的总采购数量与已入库数量对比来判断订单状态 - 更新 WmsInstockRecord 和 WmsPurchaseOrder 相关字段 - 优化 WmsPurchaseOrderServiceImpl 中的 insertByBo 方法,明确订单状态初始化 --- .../dromara/wms/domain/WmsInstockPrint.java | 1 + .../dromara/wms/domain/WmsInstockRecord.java | 13 +++ .../wms/domain/vo/WmsInstockPrintVo.java | 6 + .../wms/domain/vo/WmsInstockRecordVo.java | 10 ++ .../impl/WmsInstockRecordServiceImpl.java | 110 ++++++++++++++++++ .../impl/WmsPurchaseOrderServiceImpl.java | 3 +- 6 files changed, 141 insertions(+), 2 deletions(-) diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockPrint.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockPrint.java index 4ecb5cf0..97de1a32 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockPrint.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockPrint.java @@ -132,4 +132,5 @@ public class WmsInstockPrint{ private String materialCategoryName;//字段映射 + } diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockRecord.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockRecord.java index b36f6b93..e07fac0f 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockRecord.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsInstockRecord.java @@ -99,4 +99,17 @@ public class WmsInstockRecord extends TenantEntity { @TableField(exist = false) private String materialCategoryName;//字段映射 + + /** + * 用户账号 + */ + @TableField(exist = false) + private String userName; + + /** + * 用户昵称 + */ + @TableField(exist = false) + private String nickName; + } diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockPrintVo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockPrintVo.java index ef8af743..5e2e924a 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockPrintVo.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockPrintVo.java @@ -137,4 +137,10 @@ public class WmsInstockPrintVo implements Serializable { */ private String materialCategoryName;//字段映射 + /** + * 创建时间 + */ + private Date createTime; + + } diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockRecordVo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockRecordVo.java index f390b629..0146cf13 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockRecordVo.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsInstockRecordVo.java @@ -124,4 +124,14 @@ public class WmsInstockRecordVo implements Serializable { */ private String materialCategoryName;//字段映射 + /** + * 用户账号 + */ + private String userName; + + /** + * 用户昵称 + */ + private String nickName; + } diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockRecordServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockRecordServiceImpl.java index 3ef702c0..2b07d470 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockRecordServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsInstockRecordServiceImpl.java @@ -11,16 +11,21 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.wms.domain.BaseMaterialCategory; +import org.dromara.wms.domain.SysUser; import org.dromara.wms.domain.WmsInstockOrder; import org.dromara.wms.domain.WmsInstockRecord; import org.dromara.wms.domain.bo.WmsInstockOrderBo; import org.dromara.wms.domain.bo.WmsInstockPrintBo; import org.dromara.wms.domain.bo.WmsInstockRecordBo; import org.dromara.wms.domain.bo.WmsInventoryBo; +import org.dromara.wms.domain.bo.WmsPurchaseOrderBo; +import org.dromara.wms.domain.bo.WmsPurchaseOrderDetailBo; import org.dromara.wms.domain.vo.WmsInstockOrderVo; import org.dromara.wms.domain.vo.WmsInstockPrintVo; import org.dromara.wms.domain.vo.WmsInstockRecordVo; import org.dromara.wms.domain.vo.WmsInventoryVo; +import org.dromara.wms.domain.vo.WmsPurchaseOrderVo; +import org.dromara.wms.domain.vo.WmsPurchaseOrderDetailVo; import org.dromara.wms.mapper.WmsInstockOrderMapper; import org.dromara.wms.mapper.WmsInstockRecordMapper; import org.dromara.wms.service.*; @@ -51,6 +56,8 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService { private final IWmsInstockDetailService instockDetailService; private final IWmsInstockPrintService instockPrintService; + private final IWmsPurchaseOrderService purchaseOrderService; + private final IWmsPurchaseOrderDetailService purchaseOrderDetailService; /** @@ -98,6 +105,9 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService { // 关联表查询物料大类名称 .select(BaseMaterialCategory::getMaterialCategoryName) .leftJoin(BaseMaterialCategory.class, BaseMaterialCategory::getMaterialCategoryId, WmsInstockRecord::getMaterialCategoryId) + //关联查询创建人(入库人) + .select(SysUser::getUserName, SysUser::getNickName) + .leftJoin(SysUser.class,SysUser::getUserId, WmsInstockRecord::getCreateBy) .eq(StringUtils.isNotBlank(bo.getInstockCode()), WmsInstockRecord::getInstockCode, bo.getInstockCode()) @@ -254,7 +264,107 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService { inventoryService.updateByBo(update); } } + + // 更新采购订单状态 + updatePurchaseOrderStatus(order.getOrderNo()); + return true; } + /** + * 更新采购订单状态 + * 根据采购订单的总采购数量与已入库数量对比来判断订单状态 + * 1-待采购、2-部分到货、3-订单完成 + * + * @param orderNo 订单编号(采购订单号) + */ + private void updatePurchaseOrderStatus(String orderNo) { + // 如果订单编号为空,则不是采购订单入库,直接返回 + if (StringUtils.isBlank(orderNo)) { + return; + } + + try { + // 查询采购订单信息 + WmsPurchaseOrderBo purchaseOrderQuery = new WmsPurchaseOrderBo(); + purchaseOrderQuery.setPoNo(orderNo); + List purchaseOrders = purchaseOrderService.queryList(purchaseOrderQuery); + + if (purchaseOrders.isEmpty()) { + // 如果没有找到对应的采购订单,可能是其他类型的入库单,直接返回 + return; + } + + WmsPurchaseOrderVo purchaseOrder = purchaseOrders.get(0); + + // 查询采购订单明细,获取总采购数量 + WmsPurchaseOrderDetailBo detailQuery = new WmsPurchaseOrderDetailBo(); + detailQuery.setPoNo(orderNo); + List purchaseDetails = purchaseOrderDetailService.queryList(detailQuery); + + if (purchaseDetails.isEmpty()) { + return; + } + + // 计算总采购数量和已入库数量 + BigDecimal totalPurchaseQty = BigDecimal.ZERO; + BigDecimal totalInstockedQty = BigDecimal.ZERO; + + for (WmsPurchaseOrderDetailVo detail : purchaseDetails) { + // 累计总采购数量 + if (detail.getPurchaseQty() != null) { + totalPurchaseQty = totalPurchaseQty.add(detail.getPurchaseQty()); + } + + // 查询该物料的已入库数量 + WmsInstockRecordBo recordQuery = new WmsInstockRecordBo(); + recordQuery.setMaterialCode(detail.getMaterialCode()); + List instockRecords = this.queryList(recordQuery); + + for (WmsInstockRecordVo record : instockRecords) { + // 只统计来自当前采购订单的入库记录 + // 通过查询入库单的订单编号来确认是否来自当前采购订单 + WmsInstockOrderBo instockOrderQuery = new WmsInstockOrderBo(); + instockOrderQuery.setInstockCode(record.getInstockCode()); + MPJLambdaWrapper wrapper = JoinWrappers.lambda(WmsInstockOrder.class) + .selectAll(WmsInstockOrder.class) + .eq(StringUtils.isNotBlank(instockOrderQuery.getInstockCode()), WmsInstockOrder::getInstockCode, instockOrderQuery.getInstockCode()); + List instockOrders = instockOrderMapper.selectVoList(wrapper); + + if (!instockOrders.isEmpty() && orderNo.equals(instockOrders.get(0).getOrderNo())) { + if (record.getInstockQty() != null) { + totalInstockedQty = totalInstockedQty.add(BigDecimal.valueOf(record.getInstockQty())); + } + } + } + } + + // 根据入库完成情况判断订单状态 + String newStatus; + if (totalInstockedQty.compareTo(BigDecimal.ZERO) == 0) { + // 如果还没有入库,保持原状态或设为待采购 + newStatus = "1"; // 待采购 + } else if (totalInstockedQty.compareTo(totalPurchaseQty) >= 0) { + // 如果已入库数量大于等于采购数量,订单完成 + newStatus = "3"; // 订单完成 + } else { + // 如果已入库数量小于采购数量,部分到货 + newStatus = "2"; // 部分到货 + } + + // 如果状态发生变化,更新采购订单状态 + if (!newStatus.equals(purchaseOrder.getPoStatus())) { + WmsPurchaseOrderBo updateBo = new WmsPurchaseOrderBo(); + updateBo.setPoId(purchaseOrder.getPoId()); + updateBo.setPoStatus(newStatus); + purchaseOrderService.updateByBo(updateBo); + } + + } catch (Exception e) { + // 记录错误但不影响主流程 + // 可以考虑添加日志记录 + // log.error("更新采购订单状态失败: {}", e.getMessage(), e); + } + } + } diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsPurchaseOrderServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsPurchaseOrderServiceImpl.java index aeadecad..1d3a74d3 100644 --- a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsPurchaseOrderServiceImpl.java +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsPurchaseOrderServiceImpl.java @@ -13,7 +13,6 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.wms.domain.BaseMaterialCategory; import org.dromara.wms.domain.BaseSupplierInfo; import org.dromara.wms.domain.WmsPurchaseOrder; -import org.dromara.wms.domain.WmsPurchaseOrderDetail; import org.dromara.wms.domain.bo.WmsPurchaseOrderBo; import org.dromara.wms.domain.bo.WmsPurchaseOrderDetailBo; import org.dromara.wms.domain.vo.WmsPurchaseOrderVo; @@ -124,7 +123,7 @@ public class WmsPurchaseOrderServiceImpl implements IWmsPurchaseOrderService { @Override public WmsPurchaseOrder insertByBo(WmsPurchaseOrderBo bo) { // String username = LoginHelper.getUsername(); - bo.setPoStatus("1"); + bo.setPoStatus("1");//订单状态(1待采购2部分到货3订单完成) WmsPurchaseOrder add = MapstructUtils.convert(bo, WmsPurchaseOrder.class); validEntityBeforeSave(add); if (StringUtils.isEmpty(bo.getPoNo())) {