diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkOrderPageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkOrderPageReqVO.java index 357fc31..cc17629 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkOrderPageReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkOrderPageReqVO.java @@ -35,6 +35,9 @@ public class MesProWorkOrderPageReqVO extends PageParam { @Schema(description = "客户编号", example = "300") private Long clientId; + @Schema(description = "工单状态", example = "1") + private Integer status; + @Schema(description = "需求日期") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] requestDate; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/materialstock/vo/MesWmMaterialStockPageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/materialstock/vo/MesWmMaterialStockPageReqVO.java index 0a880e2..81d3392 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/materialstock/vo/MesWmMaterialStockPageReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/materialstock/vo/MesWmMaterialStockPageReqVO.java @@ -21,6 +21,9 @@ public class MesWmMaterialStockPageReqVO extends PageParam { @Schema(description = "批次号", example = "B20260101") private String batchCode; + @Schema(description = "批次编号", example = "1") + private Long batchId; + @Schema(description = "仓库编号", example = "1") private Long warehouseId; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java index b6f9b09..37e0f42 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java @@ -26,6 +26,7 @@ public interface MesProWorkOrderMapper extends BaseMapperX { .likeIfPresent(MesProWorkOrderDO::getOrderSourceCode, reqVO.getOrderSourceCode()) .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId()) .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId()) + .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus()) .betweenIfPresent(MesProWorkOrderDO::getRequestDate, reqVO.getRequestDate()) .orderByDesc(MesProWorkOrderDO::getId)); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java index 178717c..b082308 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java @@ -26,6 +26,7 @@ public interface MesWmMaterialStockMapper extends BaseMapperX getBackwardBatchList(String code); /** - * 获取批次列表 + * 校验批次存在,并校验批次与物料的归属关系 * - * @return 批次列表 + * @param batchId 批次ID + * @param itemId 物料ID + * @return 批次记录 */ - List getBatchList(); + MesWmBatchDO validateBatchExists(Long batchId, Long itemId); } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java index b3a2df1..3bc1580 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java @@ -237,8 +237,15 @@ public class MesWmBatchServiceImpl implements MesWmBatchService { } @Override - public List getBatchList() { - return batchMapper.selectList(); + public MesWmBatchDO validateBatchExists(Long batchId, Long itemId) { + MesWmBatchDO batch = batchMapper.selectById(batchId); + if (batch == null) { + throw exception(WM_BATCH_NOT_EXISTS); + } + if (ObjUtil.notEqual(batch.getItemId(), itemId)) { + throw exception(WM_BATCH_ITEM_MISMATCH); + } + return batch; } } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptDetailServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptDetailServiceImpl.java index 60e4934..2531fd8 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptDetailServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptDetailServiceImpl.java @@ -6,8 +6,6 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourcereceipt.MesWmOutso import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourcereceipt.MesWmOutsourceReceiptDetailMapper; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; -import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; -import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -31,28 +29,12 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec private MesMdItemService itemService; @Resource - private MesWmWarehouseService warehouseService; - - @Resource - private MesWmWarehouseLocationService locationService; - - @Resource private MesWmWarehouseAreaService areaService; @Override public Long createOutsourceReceiptDetail(MesWmOutsourceReceiptDetailSaveReqVO createReqVO) { - // 校验物料存在 - itemService.validateItemExists(createReqVO.getItemId()); - // 校验仓库、库区、库位存在 - if (createReqVO.getWarehouseId() != null) { - warehouseService.validateWarehouseExists(createReqVO.getWarehouseId()); - } - if (createReqVO.getLocationId() != null) { - locationService.validateWarehouseLocationExists(createReqVO.getLocationId()); - } - if (createReqVO.getAreaId() != null) { - areaService.validateWarehouseAreaExists(createReqVO.getAreaId()); - } + // 校验数据 + validateDetailSaveData(createReqVO); // 插入 MesWmOutsourceReceiptDetailDO detail = BeanUtils.toBean(createReqVO, MesWmOutsourceReceiptDetailDO.class); @@ -64,18 +46,8 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec public void updateOutsourceReceiptDetail(MesWmOutsourceReceiptDetailSaveReqVO updateReqVO) { // 校验存在 validateOutsourceReceiptDetailExists(updateReqVO.getId()); - // 校验物料存在 - itemService.validateItemExists(updateReqVO.getItemId()); - // 校验仓库、库区、库位存在 - if (updateReqVO.getWarehouseId() != null) { - warehouseService.validateWarehouseExists(updateReqVO.getWarehouseId()); - } - if (updateReqVO.getLocationId() != null) { - locationService.validateWarehouseLocationExists(updateReqVO.getLocationId()); - } - if (updateReqVO.getAreaId() != null) { - areaService.validateWarehouseAreaExists(updateReqVO.getAreaId()); - } + // 校验数据 + validateDetailSaveData(updateReqVO); // 更新 MesWmOutsourceReceiptDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmOutsourceReceiptDetailDO.class); @@ -115,6 +87,16 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec detailMapper.deleteByLineId(lineId); } + /** + * 校验保存时的关联数据 + */ + private void validateDetailSaveData(MesWmOutsourceReceiptDetailSaveReqVO reqVO) { + // 校验物料存在 + itemService.validateItemExists(reqVO.getItemId()); + // 校验仓库、库区、库位的层级关系 + areaService.validateWarehouseAreaExists(reqVO.getWarehouseId(), reqVO.getLocationId(), reqVO.getAreaId()); + } + private void validateOutsourceReceiptDetailExists(Long id) { if (detailMapper.selectById(id) == null) { throw exception(WM_OUTSOURCE_RECEIPT_DETAIL_NOT_EXISTS); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java index 4be0675..438b37f 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPac import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageLineMapper; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -33,13 +34,13 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { private MesWmPackageService packageService; @Resource private MesMdItemService itemService; + @Resource + private MesProWorkOrderService workOrderService; @Override public Long createPackageLine(MesWmPackageLineSaveReqVO createReqVO) { - // 校验装箱单状态为草稿 - packageService.validatePackageStatusDraft(createReqVO.getPackageId()); - // 校验产品物料存在 - itemService.validateItemExists(createReqVO.getItemId()); + // 校验数据 + validateLineSaveData(createReqVO); // 插入 MesWmPackageLineDO line = BeanUtils.toBean(createReqVO, MesWmPackageLineDO.class); @@ -51,10 +52,9 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { public void updatePackageLine(MesWmPackageLineSaveReqVO updateReqVO) { // 校验存在 MesWmPackageLineDO line = validatePackageLineExists(updateReqVO.getId()); - // 校验装箱单状态为草稿 - packageService.validatePackageStatusDraft(line.getPackageId()); - // 校验产品物料存在 - itemService.validateItemExists(updateReqVO.getItemId()); + // 校验数据 + updateReqVO.setPackageId(line.getPackageId()); + validateLineSaveData(updateReqVO); // 更新 MesWmPackageLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageLineDO.class); @@ -93,6 +93,20 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { // ========== 校验方法 ========== + /** + * 校验保存时的关联数据 + */ + private void validateLineSaveData(MesWmPackageLineSaveReqVO reqVO) { + // 校验装箱单状态为草稿 + packageService.validatePackageStatusDraft(reqVO.getPackageId()); + // 校验产品物料存在 + itemService.validateItemExists(reqVO.getItemId()); + // 校验工单已确认 + if (reqVO.getWorkOrderId() != null) { + workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId()); + } + } + private MesWmPackageLineDO validatePackageLineExists(Long id) { MesWmPackageLineDO line = packageLineMapper.selectById(id); if (line == null) { diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java index 634b168..cbaa79e 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java @@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesLine import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -43,6 +44,8 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ @Resource private MesMdItemService itemService; @Resource + private MesWmBatchService batchService; + @Resource @Lazy private MesWmReturnSalesDetailService returnSalesDetailService; @@ -153,6 +156,10 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ if (Boolean.TRUE.equals(item.getBatchFlag()) && batchId == null) { throw exception(MD_ITEM_BATCH_REQUIRED); } + // 校验批次存在且属于当前物料 + if (batchId != null) { + batchService.validateBatchExists(batchId, itemId); + } } @Override diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java index 71b8213..efda8d1 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesW import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorLineMapper; import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -36,6 +37,8 @@ public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineSe private MesWmReturnVendorDetailService returnVendorDetailService; @Resource private MesMdItemService itemService; + @Resource + private MesWmBatchService batchService; @Override public Long createReturnVendorLine(MesWmReturnVendorLineSaveReqVO createReqVO) { @@ -108,6 +111,10 @@ public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineSe returnVendorService.validateReturnVendorExistsAndPrepare(reqVO.getReturnId()); // 校验物料存在 itemService.validateItemExists(reqVO.getItemId()); + // 校验批次存在且属于当前物料 + if (reqVO.getBatchId() != null) { + batchService.validateBatchExists(reqVO.getBatchId(), reqVO.getItemId()); + } } }