From f5e56fd98e76229ebfeb3ea4d6b8381af0fe27a5 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 30 Mar 2026 20:35:24 +0800 Subject: [PATCH] ✨ feat(mes): 新增库存记录ID和收货地址字段 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/MesWmProductSalesController.java | 54 +++++++++++++++++++++++++++++++++++++++++++++++++----- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesRespVO.java | 4 ++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesSaveReqVO.java | 3 +++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailRespVO.java | 3 +++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailSaveReqVO.java | 3 +++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDO.java | 8 +++++++- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDetailDO.java | 13 ++++++++++++- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java | 1 + yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java | 3 ++- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineService.java | 8 ++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java | 6 ++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesServiceImpl.java | 25 +++++++++++++++++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeService.java | 13 +++++++++++++ 13 files changed, 136 insertions(+), 8 deletions(-) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/MesWmProductSalesController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/MesWmProductSalesController.java index 0ece7cc..b126a2e 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/MesWmProductSalesController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/MesWmProductSalesController.java @@ -13,9 +13,15 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.MesWmProd import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.MesWmProductSalesSaveReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.MesWmProductSalesShippingReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesLineDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeDO; import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; +import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesLineService; import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesService; +import cn.iocoder.yudao.module.mes.service.wm.salesnotice.MesWmSalesNoticeService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -27,12 +33,11 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.io.IOException; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Tag(name = "管理后台 - MES 销售出库单") @@ -46,6 +51,12 @@ public class MesWmProductSalesController { @Resource private MesMdClientService clientService; + @Resource + private MesMdItemService itemService; + @Resource + private MesWmProductSalesLineService productSalesLineService; + @Resource + private MesWmSalesNoticeService salesNoticeService; @PostMapping("/create") @Operation(summary = "创建销售出库单") @@ -156,6 +167,35 @@ public class MesWmProductSalesController { return success(true); } + // TODO @AI:是不是有需要?有需要在提供; + @GetMapping("/get-item") + @Operation(summary = "根据客户 ID 获取曾出库的产品清单(去重)") + @Parameter(name = "clientId", description = "客户 ID", required = true, example = "1") + @PreAuthorize("@ss.hasPermission('mes:wm-product-sales:query')") + public CommonResult> getItemByClientId(@RequestParam("clientId") Long clientId) { + // 1. 查询该客户的所有出库单 + List salesList = productSalesService.getProductSalesListByClientId(clientId); + if (CollUtil.isEmpty(salesList)) { + return success(Collections.emptyList()); + } + // 2. 查询所有行,提取去重的 itemId + List salesIds = convertList(salesList, MesWmProductSalesDO::getId); + Set itemIds = new LinkedHashSet<>(); + for (Long salesId : salesIds) { + List lines = productSalesLineService.getProductSalesLineListBySalesId(salesId); + for (MesWmProductSalesLineDO line : lines) { + if (line.getItemId() != null) { + itemIds.add(line.getItemId()); + } + } + } + if (itemIds.isEmpty()) { + return success(Collections.emptyList()); + } + // 3. 返回物料列表 + return success(new ArrayList<>(itemService.getItemMap(itemIds).values())); + } + // ==================== 拼接 VO ==================== private List buildRespVOList(List list) { @@ -165,10 +205,14 @@ public class MesWmProductSalesController { // 1. 获得关联数据 Map clientMap = clientService.getClientMap( convertSet(list, MesWmProductSalesDO::getClientId)); + Map noticeMap = salesNoticeService.getSalesNoticeMap( + convertSet(list, MesWmProductSalesDO::getNoticeId)); // 2. 构建结果 return BeanUtils.toBean(list, MesWmProductSalesRespVO.class, vo -> { - MapUtils.findAndThen(clientMap, vo.getClientId(), - client -> vo.setClientName(client.getName())); + MapUtils.findAndThen(clientMap, vo.getClientId(), client -> + vo.setClientName(client.getName()).setClientCode(client.getCode())); + MapUtils.findAndThen(noticeMap, vo.getNoticeId(), + notice -> vo.setNoticeCode(notice.getNoticeCode())); }); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesRespVO.java index f858717..a344546 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesRespVO.java @@ -58,6 +58,10 @@ public class MesWmProductSalesRespVO { @ExcelProperty("联系方式") private String contactTelephone; + @Schema(description = "收货地址", example = "北京市朝阳区XX路XX号") + @ExcelProperty("收货地址") + private String address; + @Schema(description = "承运商", example = "顺丰快递") @ExcelProperty("承运商") private String carrier; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesSaveReqVO.java index 7c835e2..d9d2eec 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/MesWmProductSalesSaveReqVO.java @@ -42,6 +42,9 @@ public class MesWmProductSalesSaveReqVO { @Schema(description = "联系方式", example = "13800138000") private String contactTelephone; + @Schema(description = "收货地址", example = "北京市朝阳区XX路XX号") + private String address; + @Schema(description = "承运商", example = "顺丰快递") private String carrier; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailRespVO.java index fbecd97..d64d9fa 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailRespVO.java @@ -37,6 +37,9 @@ public class MesWmProductSalesDetailRespVO { @Schema(description = "拣货数量", example = "50") private BigDecimal quantity; + @Schema(description = "库存记录ID", example = "1") + private Long materialStockId; + @Schema(description = "批次ID", example = "1") private Long batchId; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailSaveReqVO.java index 33983e2..1819cf4 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productsales/vo/detail/MesWmProductSalesDetailSaveReqVO.java @@ -29,6 +29,9 @@ public class MesWmProductSalesDetailSaveReqVO { @NotNull(message = "拣货数量不能为空") private BigDecimal quantity; + @Schema(description = "库存记录ID", example = "1") + private Long materialStockId; + @Schema(description = "批次ID", example = "1") private Long batchId; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDO.java index 4adb76a..6b96689 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDO.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.client.MesMdClientDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeDO; import cn.iocoder.yudao.module.mes.enums.wm.MesWmProductSalesStatusEnum; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; @@ -56,7 +57,7 @@ public class MesWmProductSalesDO extends BaseDO { /** * 发货通知单 ID * - * 关联 {@link cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeDO#getId()} + * 关联 {@link MesWmSalesNoticeDO#getId()} */ private Long noticeId; @@ -68,6 +69,11 @@ public class MesWmProductSalesDO extends BaseDO { * 联系电话 */ private String contactTelephone; + // TODO @AI:改成 contactAddress + /** + * 收货地址 + */ + private String address; /** * 承运商 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDetailDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDetailDO.java index 6ecab64..4fd87bd 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDetailDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productsales/MesWmProductSalesDetailDO.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; @@ -55,9 +57,18 @@ public class MesWmProductSalesDetailDO extends BaseDO { */ private BigDecimal quantity; /** - * 批次ID + * 库存记录ID + * + * 关联 {@link MesWmMaterialStockDO#getId()} + */ + private Long materialStockId; + /** + * 批次 ID + * + * 关联 {@link MesWmBatchDO#getId()} */ private Long batchId; + // TODO @AI:增加 batchCode 字段 /** * 仓库ID * diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index 8863a97..620bee0 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -554,6 +554,7 @@ public interface ErrorCodeConstants { ErrorCode WM_PRODUCT_SALES_LINE_NOT_EXISTS = new ErrorCode(1_040_714_011, "销售出库单行不存在"); ErrorCode WM_PRODUCT_SALES_DETAIL_NOT_EXISTS = new ErrorCode(1_040_714_012, "销售出库明细不存在"); ErrorCode WM_PRODUCT_SALES_STOCK_INSUFFICIENT = new ErrorCode(1_040_714_013, "库存不足,无法拣货"); + ErrorCode WM_PRODUCT_SALES_LINE_QUANTITY_INVALID = new ErrorCode(1_040_714_014, "出库数量必须大于 0"); // ========== MES 仓库管理-杂项出库单(1-040-715-000) ========== ErrorCode WM_MISC_ISSUE_NOT_EXISTS = new ErrorCode(1_040_715_000, "杂项出库单不存在"); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java index 800dcf6..0c5e70e 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java @@ -31,7 +31,8 @@ public enum MesMdAutoCodeRuleCodeEnum { QC_RQC_CODE("QC_RQC_CODE", "退货检验单编码"), WM_WAREHOUSE_CODE("WM_WAREHOUSE_CODE", "仓库编码"), WM_LOCATION_CODE("WM_LOCATION_CODE", "库区编码"), - WM_AREA_CODE("WM_AREA_CODE", "库位编码"); + WM_AREA_CODE("WM_AREA_CODE", "库位编码"), + WM_PRODUCT_SALES_CODE("WM_PRODUCT_SALES_CODE", "销售出库单编码"); /** * 规则代码 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineService.java index e038c10..d0e7506 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineService.java @@ -77,4 +77,12 @@ public interface MesWmProductSalesLineService { */ void updateProductSalesLineWhenOqcFinish(Long id, Long oqcId, Integer checkResult); + /** + * 更新行的质量状态 + * + * @param id 行 ID + * @param qualityStatus 质量状态 + */ + void updateProductSalesLineQualityStatus(Long id, Integer qualityStatus); + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java index 8089dd2..fbb278d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineServiceImpl.java @@ -154,5 +154,11 @@ public class MesWmProductSalesLineServiceImpl implements MesWmProductSalesLineSe } } + @Override + public void updateProductSalesLineQualityStatus(Long id, Integer qualityStatus) { + productSalesLineMapper.updateById(new MesWmProductSalesLineDO() + .setId(id).setQualityStatus(qualityStatus)); + } + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesServiceImpl.java index 0a3a61e..b9437a7 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesServiceImpl.java @@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSa import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesMapper; import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; import cn.iocoder.yudao.module.mes.enums.wm.MesWmProductSalesStatusEnum; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; @@ -57,6 +58,7 @@ public class MesWmProductSalesServiceImpl implements MesWmProductSalesService { @Override public Long createProductSales(MesWmProductSalesSaveReqVO createReqVO) { + // TODO @AI:增加 validateXXXSaveData; // 校验编码唯一 validateCodeUnique(null, createReqVO.getCode()); // 校验客户存在 @@ -73,6 +75,7 @@ public class MesWmProductSalesServiceImpl implements MesWmProductSalesService { public void updateProductSales(MesWmProductSalesSaveReqVO updateReqVO) { // 校验存在 + 草稿状态 validateProductSalesExistsAndDraft(updateReqVO.getId()); + // TODO @AI:增加 validateXXXSaveData;(校验数据) // 校验编码唯一 validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); // 校验客户存在 @@ -116,11 +119,25 @@ public class MesWmProductSalesServiceImpl implements MesWmProductSalesService { if (CollUtil.isEmpty(lines)) { throw exception(WM_PRODUCT_SALES_LINES_EMPTY); } + // 校验每行出库数量 > 0 + for (MesWmProductSalesLineDO line : lines) { + if (line.getQuantity() == null || BigDecimal.ZERO.compareTo(line.getQuantity()) >= 0) { + throw exception(WM_PRODUCT_SALES_LINE_QUANTITY_INVALID); + } + } // 检查所有行的 oqcCheckFlag:如果有需要 OQC 检验的行,进入待检测状态 boolean needOqc = CollectionUtils.anyMatch(lines, line -> Boolean.TRUE.equals(line.getOqcCheckFlag())); if (needOqc) { + // 初始化 OQC 行的质量状态为"待检验" + // TODO @AI:改成批量更新接口?productSalesLineService 提供一个?【对齐:这个是否为必须?!】 + for (MesWmProductSalesLineDO line : lines) { + if (Boolean.TRUE.equals(line.getOqcCheckFlag())) { + productSalesLineService.updateProductSalesLineQualityStatus( + line.getId(), MesWmQualityStatusEnum.PENDING.getStatus()); + } + } // 需要检验,进入待检测 productSalesMapper.updateById(new MesWmProductSalesDO() .setId(id).setStatus(MesWmProductSalesStatusEnum.CONFIRMED.getStatus())); @@ -157,6 +174,14 @@ public class MesWmProductSalesServiceImpl implements MesWmProductSalesService { if (ObjUtil.notEqual(MesWmProductSalesStatusEnum.APPROVING.getStatus(), sales.getStatus())) { throw exception(WM_PRODUCT_SALES_CANNOT_PICK); } + // 校验每行至少有拣货明细 + List lines = productSalesLineService.getProductSalesLineListBySalesId(id); + for (MesWmProductSalesLineDO line : lines) { + List details = productSalesDetailService.getProductSalesDetailListByLineId(line.getId()); + if (CollUtil.isEmpty(details)) { + throw exception(WM_PRODUCT_SALES_DETAILS_EMPTY); + } + } // 执行拣货(待拣货 → 待填写运单) productSalesMapper.updateById(new MesWmProductSalesDO() diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeService.java index 3861c77..b471b57 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeService.java @@ -8,6 +8,9 @@ import jakarta.validation.Valid; import java.util.Collection; import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; /** * MES 发货通知单 Service 接口 @@ -68,6 +71,16 @@ public interface MesWmSalesNoticeService { List getSalesNoticeList(Collection ids); /** + * 获得发货通知单 Map + * + * @param ids 编号列表 + * @return 发货通知单 Map + */ + default Map getSalesNoticeMap(Collection ids) { + return convertMap(getSalesNoticeList(ids), MesWmSalesNoticeDO::getId); + } + + /** * 按状态获得发货通知单列表 * * @param status 状态 -- libgit2 0.21.4