| | |
| | | import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseDefaultService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService; |
| | |
| | | @Resource |
| | | private MesWmWarehouseAreaService areaService; |
| | | @Resource |
| | | private MesWmWarehouseDefaultService warehouseDefaultService; |
| | | @Resource |
| | | private MesWmBarcodeService barcodeService; |
| | | @Resource |
| | | private MesProProcessService processService; |
| | |
| | | validateWorkstationNameUnique(id, reqVO.getName()); |
| | | // 校验车间存在 |
| | | validateWorkshopExists(reqVO.getWorkshopId()); |
| | | // 校验工序存在 |
| | | processService.validateProcessExistsAndEnable(reqVO.getProcessId()); |
| | | // 校验工序存在(工序为可选项,未配置工序时工作站仍可正常使用) |
| | | if (reqVO.getProcessId() != null) { |
| | | processService.validateProcessExistsAndEnable(reqVO.getProcessId()); |
| | | } |
| | | // 处理仓库层级(未指定仓库时自动设置虚拟线边库) |
| | | handleWarehouseHierarchy(reqVO); |
| | | } |
| | |
| | | * 仓库层级结构:仓库 -> 库区 -> 库位 |
| | | * 处理规则: |
| | | * 1. 如果仓库/库区/库位都未填写,则自动设置虚拟线边库 |
| | | * 2. 如果填写了库区,必须填写仓库,且库区必须属于该仓库 |
| | | * 3. 如果填写了库位,必须填写库区,且库位必须属于该库区 |
| | | * 2. 如果只填写了仓库,未指定库区/库位,则自动落到该仓库的默认库区/默认库位 |
| | | * 3. 如果填写了库区,必须填写仓库,且库区必须属于该仓库 |
| | | * 4. 如果填写了库位,必须填写库区,且库位必须属于该库区 |
| | | * |
| | | * @param reqVO 工作站保存请求对象 |
| | | */ |
| | |
| | | warehouseService.validateWarehouseExists(warehouseId); |
| | | } |
| | | |
| | | // 2.1 只选了仓库、未指定库区/库位时,落到仓库默认库区/默认库位(客户未启用库区/库位管理) |
| | | if (locationId == null && areaId == null) { |
| | | MesWmWarehouseAreaDO defaultArea = warehouseDefaultService.getOrCreateDefaultArea(warehouseId); |
| | | reqVO.setLocationId(defaultArea.getLocationId()); |
| | | reqVO.setAreaId(defaultArea.getId()); |
| | | return; |
| | | } |
| | | |
| | | // 3. 校验库区:如果填写了库区,必须填写仓库,且库区必须属于该仓库 |
| | | MesWmWarehouseLocationDO location; |
| | | if (locationId != null) { |