| | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchGenerateReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLinePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLineSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO; |
| | | 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.mysql.wm.productsales.MesWmProductSalesLineMapper; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据 batchCode 解析 batchId |
| | | * 解析并填充批次 |
| | | * |
| | | * <p>启用批次管理的物料出库时必须落批次;未记录批次时按物料 + 客户 + 销售订单自动生成, |
| | | * 供后续退货等业务追溯。 |
| | | */ |
| | | private void fillBatchId(MesWmProductSalesLineSaveReqVO reqVO) { |
| | | if (StrUtil.isBlank(reqVO.getBatchCode())) { |
| | | private void fillBatchId(MesWmProductSalesDO sales, MesMdmItemDO item, |
| | | MesWmProductSalesLineSaveReqVO reqVO) { |
| | | if (StrUtil.isNotBlank(reqVO.getBatchCode())) { |
| | | MesWmBatchDO batch = batchService.getBatchByCode(reqVO.getBatchCode()); |
| | | if (batch != null) { |
| | | reqVO.setBatchId(batch.getId()); |
| | | return; |
| | | } |
| | | if (!Boolean.TRUE.equals(item.getIsBatchManaged())) { |
| | | reqVO.setBatchId(null); |
| | | return; |
| | | } |
| | | MesWmBatchDO batch = batchService.getBatchByCode(reqVO.getBatchCode()); |
| | | reqVO.setBatchId(batch != null ? batch.getId() : null); |
| | | // 指定了批次号但系统中不存在,按该批次号建档 |
| | | MesWmBatchDO created = batchService.getOrGenerateBatchCode(buildBatchGenerateReq(sales, reqVO)); |
| | | reqVO.setBatchId(created != null ? created.getId() : null); |
| | | return; |
| | | } |
| | | if (!Boolean.TRUE.equals(item.getIsBatchManaged())) { |
| | | reqVO.setBatchId(null); |
| | | return; |
| | | } |
| | | // 未记录批次,自动生成 |
| | | MesWmBatchDO batch = batchService.getOrGenerateBatchCode(buildBatchGenerateReq(sales, reqVO)); |
| | | reqVO.setBatchId(batch != null ? batch.getId() : null) |
| | | .setBatchCode(batch != null ? batch.getCode() : null); |
| | | } |
| | | |
| | | private MesWmBatchGenerateReqVO buildBatchGenerateReq(MesWmProductSalesDO sales, |
| | | MesWmProductSalesLineSaveReqVO reqVO) { |
| | | return new MesWmBatchGenerateReqVO() |
| | | .setItemId(reqVO.getItemId()) |
| | | .setBatchCode(reqVO.getBatchCode()) |
| | | .setClientId(sales.getClientId()) |
| | | .setSalesOrderCode(sales.getSalesOrderCode()); |
| | | } |
| | | |
| | | /** |
| | |
| | | // 校验主单存在且为草稿状态 |
| | | MesWmProductSalesDO sales = productSalesService.validateProductSalesExistsAndDraft(reqVO.getSalesId()); |
| | | // 校验物料存在 |
| | | mdmItemService.validateItemExistsAndEnable(reqVO.getItemId()); |
| | | MesMdmItemDO item = mdmItemService.validateItemExistsAndEnable(reqVO.getItemId()); |
| | | // 校验关联发货通知单行(存在性 + 归属 + 字段一致性) |
| | | validateSalesNoticeLine(sales, reqVO); |
| | | // 根据 batchCode 解析 batchId |
| | | fillBatchId(reqVO); |
| | | // 解析批次 |
| | | fillBatchId(sales, item, reqVO); |
| | | } |
| | | |
| | | /** |