Commit 8221ee3aae485bacd5e5248006f170ead27f64ab

Authored by YunaiV
1 parent b9ea7937

✨ feat(mes): 添加虚拟仓库和库区删除校验,优化物料混放规则更新

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
10 10 import cn.iocoder.yudao.module.mes.controller.admin.wm.warehouse.vo.location.MesWmWarehouseLocationSaveReqVO;
11 11 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO;
12 12 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
  13 +import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
13 14 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService;
14 15 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;
15 16 import io.swagger.v3.oas.annotations.Operation;
... ... @@ -36,9 +37,10 @@ public class MesWmWarehouseLocationController {
36 37  
37 38 @Resource
38 39 private MesWmWarehouseLocationService locationService;
39   -
40 40 @Resource
41 41 private MesWmWarehouseService warehouseService;
  42 + @Resource
  43 + private MesWmWarehouseAreaService areaService;
42 44  
43 45 @PostMapping("/create")
44 46 @Operation(summary = "创建库区")
... ...
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<MesWmWarehouseArea
32 32 .eq(MesWmWarehouseAreaDO::getCode, code));
33 33 }
34 34  
  35 + default MesWmWarehouseAreaDO selectByCode(Long locationId, String code) {
  36 + return selectOne(new LambdaQueryWrapperX<MesWmWarehouseAreaDO>()
  37 + .eq(MesWmWarehouseAreaDO::getLocationId, locationId)
  38 + .eq(MesWmWarehouseAreaDO::getCode, code));
  39 + }
  40 +
35 41 default MesWmWarehouseAreaDO selectByName(Long locationId, String name) {
36 42 return selectOne(new LambdaQueryWrapperX<MesWmWarehouseAreaDO>()
37 43 .eq(MesWmWarehouseAreaDO::getLocationId, locationId)
... ... @@ -52,4 +58,22 @@ public interface MesWmWarehouseAreaMapper extends BaseMapperX&lt;MesWmWarehouseArea
52 58 return selectCount(MesWmWarehouseAreaDO::getLocationId, locationId);
53 59 }
54 60  
  61 + /**
  62 + * 批量更新指定库区下所有库位的物料混放规则
  63 + */
  64 + default void updateAllowItemMixingByLocationId(Long locationId, Boolean allowItemMixing) {
  65 + update(new MesWmWarehouseAreaDO().setAllowItemMixing(allowItemMixing),
  66 + new LambdaQueryWrapperX<MesWmWarehouseAreaDO>()
  67 + .eq(MesWmWarehouseAreaDO::getLocationId, locationId));
  68 + }
  69 +
  70 + /**
  71 + * 批量更新指定库区下所有库位的批次混放规则
  72 + */
  73 + default void updateAllowBatchMixingByLocationId(Long locationId, Boolean allowBatchMixing) {
  74 + update(new MesWmWarehouseAreaDO().setAllowBatchMixing(allowBatchMixing),
  75 + new LambdaQueryWrapperX<MesWmWarehouseAreaDO>()
  76 + .eq(MesWmWarehouseAreaDO::getLocationId, locationId));
  77 + }
  78 +
55 79 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -335,6 +335,7 @@ public interface ErrorCodeConstants {
335 335 ErrorCode WM_WAREHOUSE_HAS_LOCATION = new ErrorCode(1_040_700_003, "仓库下存在库区,无法删除");
336 336 ErrorCode WM_WAREHOUSE_HAS_WORKSTATION = new ErrorCode(1_040_700_004, "仓库已被工作站引用,无法删除");
337 337 ErrorCode WM_WAREHOUSE_HAS_MATERIAL_STOCK = new ErrorCode(1_040_700_005, "仓库下有库存记录,无法删除");
  338 + ErrorCode WM_WAREHOUSE_IS_VIRTUAL = new ErrorCode(1_040_700_006, "虚拟仓库不允许删除");
338 339  
339 340 // ========== MES 仓库管理-库区(1-040-701-000) ==========
340 341 ErrorCode WM_WAREHOUSE_LOCATION_NOT_EXISTS = new ErrorCode(1_040_701_000, "库区不存在");
... ... @@ -345,6 +346,7 @@ public interface ErrorCodeConstants {
345 346 ErrorCode WM_WAREHOUSE_REQUIRED = new ErrorCode(1_040_701_005, "选择库区时,仓库不能为空");
346 347 ErrorCode WM_WAREHOUSE_LOCATION_RELATION_INVALID = new ErrorCode(1_040_701_006, "库区不属于所选仓库");
347 348 ErrorCode WM_WAREHOUSE_LOCATION_HAS_MATERIAL_STOCK = new ErrorCode(1_040_701_007, "库区下有库存记录,无法删除");
  349 + ErrorCode WM_WAREHOUSE_LOCATION_IS_VIRTUAL = new ErrorCode(1_040_701_008, "虚拟库区不允许删除");
348 350  
349 351 // ========== MES 仓库管理-库位(1-040-702-000) ==========
350 352 ErrorCode WM_WAREHOUSE_AREA_NOT_EXISTS = new ErrorCode(1_040_702_000, "库位不存在");
... ... @@ -355,6 +357,7 @@ public interface ErrorCodeConstants {
355 357 ErrorCode WM_WAREHOUSE_AREA_RELATION_INVALID = new ErrorCode(1_040_702_005, "库位不属于所选库区");
356 358 ErrorCode WM_WAREHOUSE_AREA_HAS_MATERIAL_STOCK = new ErrorCode(1_040_702_006, "库位下有库存记录,无法删除");
357 359 ErrorCode WM_WAREHOUSE_AREA_WAREHOUSE_MISMATCH = new ErrorCode(1_040_702_007, "库位不属于所选仓库");
  360 + ErrorCode WM_WAREHOUSE_AREA_IS_VIRTUAL = new ErrorCode(1_040_702_008, "虚拟库位不允许删除");
358 361  
359 362 // ========== MES 仓库管理-库存(1-040-703-000) ==========
360 363 ErrorCode WM_MATERIAL_STOCK_NOT_EXISTS = new ErrorCode(1_040_703_000, "库存记录不存在");
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaService.java
... ... @@ -101,6 +101,22 @@ public interface MesWmWarehouseAreaService {
101 101 void validateWarehouseAreaExists(Long warehouseId, Long locationId, Long areaId);
102 102  
103 103 /**
  104 + * 批量设置指定库区下所有库位的物料混放规则
  105 + *
  106 + * @param locationId 库区编号
  107 + * @param allowItemMixing 是否允许物料混放
  108 + */
  109 + void updateAllowItemMixingByLocationId(Long locationId, Boolean allowItemMixing);
  110 +
  111 + /**
  112 + * 批量设置指定库区下所有库位的批次混放规则
  113 + *
  114 + * @param locationId 库区编号
  115 + * @param allowBatchMixing 是否允许批次混放
  116 + */
  117 + void updateAllowBatchMixingByLocationId(Long locationId, Boolean allowBatchMixing);
  118 +
  119 + /**
104 120 * 按编码获得库位(如果是虚拟线边库位编码且不存在,会自动插入)
105 121 *
106 122 * @param code 编码
... ...
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
87 87 @Override
88 88 public void deleteWarehouseArea(Long id) {
89 89 // 校验存在
90   - validateWarehouseAreaExists(id);
  90 + MesWmWarehouseAreaDO area = validateWarehouseAreaExists(id);
  91 + // 校验虚拟库位不允许删除
  92 + if (MesWmWarehouseAreaDO.WIP_VIRTUAL_AREA.equals(area.getCode())) {
  93 + throw exception(WM_WAREHOUSE_AREA_IS_VIRTUAL);
  94 + }
91 95 // 校验是否被工作站引用
92 96 if (workstationService.getWorkstationCountByAreaId(id) > 0) {
93 97 throw exception(WM_WAREHOUSE_AREA_HAS_WORKSTATION);
... ... @@ -111,7 +115,7 @@ public class MesWmWarehouseAreaServiceImpl implements MesWmWarehouseAreaService
111 115 }
112 116  
113 117 private void validateWarehouseAreaCodeUnique(Long id, Long locationId, String code) {
114   - MesWmWarehouseAreaDO area = areaMapper.selectByCode(code);
  118 + MesWmWarehouseAreaDO area = areaMapper.selectByCode(locationId, code);
115 119 if (area == null) {
116 120 return;
117 121 }
... ... @@ -183,6 +187,16 @@ public class MesWmWarehouseAreaServiceImpl implements MesWmWarehouseAreaService
183 187 }
184 188  
185 189 @Override
  190 + public void updateAllowItemMixingByLocationId(Long locationId, Boolean allowItemMixing) {
  191 + areaMapper.updateAllowItemMixingByLocationId(locationId, allowItemMixing);
  192 + }
  193 +
  194 + @Override
  195 + public void updateAllowBatchMixingByLocationId(Long locationId, Boolean allowBatchMixing) {
  196 + areaMapper.updateAllowBatchMixingByLocationId(locationId, allowBatchMixing);
  197 + }
  198 +
  199 + @Override
186 200 public MesWmWarehouseAreaDO getWarehouseAreaByCode(String code) {
187 201 // 1. 查询库位,存在则直接返回
188 202 MesWmWarehouseAreaDO area = areaMapper.selectByCode(code);
... ...
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
86 86 @Override
87 87 public void deleteWarehouseLocation(Long id) {
88 88 // 校验存在
89   - validateWarehouseLocationExists(id);
  89 + MesWmWarehouseLocationDO location = validateWarehouseLocationExists(id);
  90 + // 校验虚拟库区不允许删除
  91 + if (MesWmWarehouseLocationDO.WIP_VIRTUAL_LOCATION.equals(location.getCode())) {
  92 + throw exception(WM_WAREHOUSE_LOCATION_IS_VIRTUAL);
  93 + }
90 94 // 校验是否有库位
91 95 if (areaService.getWarehouseAreaCountByLocationId(id) > 0) {
92 96 throw exception(WM_WAREHOUSE_LOCATION_HAS_AREA);
... ...
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 {
78 78 @Override
79 79 public void deleteWarehouse(Long id) {
80 80 // 校验存在
81   - validateWarehouseExists(id);
  81 + MesWmWarehouseDO warehouse = validateWarehouseExists(id);
  82 + // 校验虚拟仓库不允许删除
  83 + if (MesWmWarehouseDO.WIP_VIRTUAL_WAREHOUSE.equals(warehouse.getCode())) {
  84 + throw exception(WM_WAREHOUSE_IS_VIRTUAL);
  85 + }
82 86 // 校验是否有库区
83 87 if (locationService.getWarehouseLocationCountByWarehouseId(id) > 0) {
84 88 throw exception(WM_WAREHOUSE_HAS_LOCATION);
... ...