diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/warehouse/MesWmWarehouseLocationController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/warehouse/MesWmWarehouseLocationController.java index 429bf81..062c233 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/warehouse/MesWmWarehouseLocationController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/warehouse/MesWmWarehouseLocationController.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.warehouse.vo.location.Mes import cn.iocoder.yudao.module.mes.controller.admin.wm.warehouse.vo.location.MesWmWarehouseLocationSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO; +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 io.swagger.v3.oas.annotations.Operation; @@ -36,9 +37,10 @@ public class MesWmWarehouseLocationController { @Resource private MesWmWarehouseLocationService locationService; - @Resource private MesWmWarehouseService warehouseService; + @Resource + private MesWmWarehouseAreaService areaService; @PostMapping("/create") @Operation(summary = "创建库区") diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/warehouse/MesWmWarehouseAreaMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/warehouse/MesWmWarehouseAreaMapper.java index a9a5073..949518d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/warehouse/MesWmWarehouseAreaMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/warehouse/MesWmWarehouseAreaMapper.java @@ -32,6 +32,12 @@ public interface MesWmWarehouseAreaMapper extends BaseMapperX() + .eq(MesWmWarehouseAreaDO::getLocationId, locationId) + .eq(MesWmWarehouseAreaDO::getCode, code)); + } + default MesWmWarehouseAreaDO selectByName(Long locationId, String name) { return selectOne(new LambdaQueryWrapperX() .eq(MesWmWarehouseAreaDO::getLocationId, locationId) @@ -52,4 +58,22 @@ public interface MesWmWarehouseAreaMapper extends BaseMapperX() + .eq(MesWmWarehouseAreaDO::getLocationId, locationId)); + } + + /** + * 批量更新指定库区下所有库位的批次混放规则 + */ + default void updateAllowBatchMixingByLocationId(Long locationId, Boolean allowBatchMixing) { + update(new MesWmWarehouseAreaDO().setAllowBatchMixing(allowBatchMixing), + new LambdaQueryWrapperX() + .eq(MesWmWarehouseAreaDO::getLocationId, locationId)); + } + } 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 07e3e5c..0727502 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 @@ -335,6 +335,7 @@ public interface ErrorCodeConstants { ErrorCode WM_WAREHOUSE_HAS_LOCATION = new ErrorCode(1_040_700_003, "仓库下存在库区,无法删除"); ErrorCode WM_WAREHOUSE_HAS_WORKSTATION = new ErrorCode(1_040_700_004, "仓库已被工作站引用,无法删除"); ErrorCode WM_WAREHOUSE_HAS_MATERIAL_STOCK = new ErrorCode(1_040_700_005, "仓库下有库存记录,无法删除"); + ErrorCode WM_WAREHOUSE_IS_VIRTUAL = new ErrorCode(1_040_700_006, "虚拟仓库不允许删除"); // ========== MES 仓库管理-库区(1-040-701-000) ========== ErrorCode WM_WAREHOUSE_LOCATION_NOT_EXISTS = new ErrorCode(1_040_701_000, "库区不存在"); @@ -345,6 +346,7 @@ public interface ErrorCodeConstants { ErrorCode WM_WAREHOUSE_REQUIRED = new ErrorCode(1_040_701_005, "选择库区时,仓库不能为空"); ErrorCode WM_WAREHOUSE_LOCATION_RELATION_INVALID = new ErrorCode(1_040_701_006, "库区不属于所选仓库"); ErrorCode WM_WAREHOUSE_LOCATION_HAS_MATERIAL_STOCK = new ErrorCode(1_040_701_007, "库区下有库存记录,无法删除"); + ErrorCode WM_WAREHOUSE_LOCATION_IS_VIRTUAL = new ErrorCode(1_040_701_008, "虚拟库区不允许删除"); // ========== MES 仓库管理-库位(1-040-702-000) ========== ErrorCode WM_WAREHOUSE_AREA_NOT_EXISTS = new ErrorCode(1_040_702_000, "库位不存在"); @@ -355,6 +357,7 @@ public interface ErrorCodeConstants { ErrorCode WM_WAREHOUSE_AREA_RELATION_INVALID = new ErrorCode(1_040_702_005, "库位不属于所选库区"); ErrorCode WM_WAREHOUSE_AREA_HAS_MATERIAL_STOCK = new ErrorCode(1_040_702_006, "库位下有库存记录,无法删除"); ErrorCode WM_WAREHOUSE_AREA_WAREHOUSE_MISMATCH = new ErrorCode(1_040_702_007, "库位不属于所选仓库"); + ErrorCode WM_WAREHOUSE_AREA_IS_VIRTUAL = new ErrorCode(1_040_702_008, "虚拟库位不允许删除"); // ========== MES 仓库管理-库存(1-040-703-000) ========== ErrorCode WM_MATERIAL_STOCK_NOT_EXISTS = new ErrorCode(1_040_703_000, "库存记录不存在"); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaService.java index f07ff31..b3638ec 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaService.java @@ -101,6 +101,22 @@ public interface MesWmWarehouseAreaService { void validateWarehouseAreaExists(Long warehouseId, Long locationId, Long areaId); /** + * 批量设置指定库区下所有库位的物料混放规则 + * + * @param locationId 库区编号 + * @param allowItemMixing 是否允许物料混放 + */ + void updateAllowItemMixingByLocationId(Long locationId, Boolean allowItemMixing); + + /** + * 批量设置指定库区下所有库位的批次混放规则 + * + * @param locationId 库区编号 + * @param allowBatchMixing 是否允许批次混放 + */ + void updateAllowBatchMixingByLocationId(Long locationId, Boolean allowBatchMixing); + + /** * 按编码获得库位(如果是虚拟线边库位编码且不存在,会自动插入) * * @param code 编码 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaServiceImpl.java index 2535541..26dd822 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaServiceImpl.java @@ -87,7 +87,11 @@ public class MesWmWarehouseAreaServiceImpl implements MesWmWarehouseAreaService @Override public void deleteWarehouseArea(Long id) { // 校验存在 - validateWarehouseAreaExists(id); + MesWmWarehouseAreaDO area = validateWarehouseAreaExists(id); + // 校验虚拟库位不允许删除 + if (MesWmWarehouseAreaDO.WIP_VIRTUAL_AREA.equals(area.getCode())) { + throw exception(WM_WAREHOUSE_AREA_IS_VIRTUAL); + } // 校验是否被工作站引用 if (workstationService.getWorkstationCountByAreaId(id) > 0) { throw exception(WM_WAREHOUSE_AREA_HAS_WORKSTATION); @@ -111,7 +115,7 @@ public class MesWmWarehouseAreaServiceImpl implements MesWmWarehouseAreaService } private void validateWarehouseAreaCodeUnique(Long id, Long locationId, String code) { - MesWmWarehouseAreaDO area = areaMapper.selectByCode(code); + MesWmWarehouseAreaDO area = areaMapper.selectByCode(locationId, code); if (area == null) { return; } @@ -183,6 +187,16 @@ public class MesWmWarehouseAreaServiceImpl implements MesWmWarehouseAreaService } @Override + public void updateAllowItemMixingByLocationId(Long locationId, Boolean allowItemMixing) { + areaMapper.updateAllowItemMixingByLocationId(locationId, allowItemMixing); + } + + @Override + public void updateAllowBatchMixingByLocationId(Long locationId, Boolean allowBatchMixing) { + areaMapper.updateAllowBatchMixingByLocationId(locationId, allowBatchMixing); + } + + @Override public MesWmWarehouseAreaDO getWarehouseAreaByCode(String code) { // 1. 查询库位,存在则直接返回 MesWmWarehouseAreaDO area = areaMapper.selectByCode(code); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseLocationServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseLocationServiceImpl.java index 90479d6..632306f 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseLocationServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseLocationServiceImpl.java @@ -86,7 +86,11 @@ public class MesWmWarehouseLocationServiceImpl implements MesWmWarehouseLocation @Override public void deleteWarehouseLocation(Long id) { // 校验存在 - validateWarehouseLocationExists(id); + MesWmWarehouseLocationDO location = validateWarehouseLocationExists(id); + // 校验虚拟库区不允许删除 + if (MesWmWarehouseLocationDO.WIP_VIRTUAL_LOCATION.equals(location.getCode())) { + throw exception(WM_WAREHOUSE_LOCATION_IS_VIRTUAL); + } // 校验是否有库位 if (areaService.getWarehouseAreaCountByLocationId(id) > 0) { throw exception(WM_WAREHOUSE_LOCATION_HAS_AREA); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseServiceImpl.java index 5872664..ca68cc5 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseServiceImpl.java @@ -78,7 +78,11 @@ public class MesWmWarehouseServiceImpl implements MesWmWarehouseService { @Override public void deleteWarehouse(Long id) { // 校验存在 - validateWarehouseExists(id); + MesWmWarehouseDO warehouse = validateWarehouseExists(id); + // 校验虚拟仓库不允许删除 + if (MesWmWarehouseDO.WIP_VIRTUAL_WAREHOUSE.equals(warehouse.getCode())) { + throw exception(WM_WAREHOUSE_IS_VIRTUAL); + } // 校验是否有库区 if (locationService.getWarehouseLocationCountByWarehouseId(id) > 0) { throw exception(WM_WAREHOUSE_HAS_LOCATION);