gaoluyang
8 天以前 7bd10d34e8a8dc2437ec8551eb511e37634d7306
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkstationServiceImpl.java
@@ -16,6 +16,7 @@
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;
@@ -35,7 +36,7 @@
/**
 * MES 工作站 Service 实现类
 *
 * @author 芋道源码
 * @author 超级管理员
 */
@Service
@Validated
@@ -59,6 +60,8 @@
    private MesWmWarehouseLocationService locationService;
    @Resource
    private MesWmWarehouseAreaService areaService;
    @Resource
    private MesWmWarehouseDefaultService warehouseDefaultService;
    @Resource
    private MesWmBarcodeService barcodeService;
    @Resource
@@ -98,8 +101,10 @@
        validateWorkstationNameUnique(id, reqVO.getName());
        // 校验车间存在
        validateWorkshopExists(reqVO.getWorkshopId());
        // 校验工序存在
        processService.validateProcessExistsAndEnable(reqVO.getProcessId());
        // 校验工序存在(工序为可选项,未配置工序时工作站仍可正常使用)
        if (reqVO.getProcessId() != null) {
            processService.validateProcessExistsAndEnable(reqVO.getProcessId());
        }
        // 处理仓库层级(未指定仓库时自动设置虚拟线边库)
        handleWarehouseHierarchy(reqVO);
    }
@@ -149,8 +154,9 @@
     * 仓库层级结构:仓库 -> 库区 -> 库位
     * 处理规则:
     * 1. 如果仓库/库区/库位都未填写,则自动设置虚拟线边库
     * 2. 如果填写了库区,必须填写仓库,且库区必须属于该仓库
     * 3. 如果填写了库位,必须填写库区,且库位必须属于该库区
     * 2. 如果只填写了仓库,未指定库区/库位,则自动落到该仓库的默认库区/默认库位
     * 3. 如果填写了库区,必须填写仓库,且库区必须属于该仓库
     * 4. 如果填写了库位,必须填写库区,且库位必须属于该库区
     *
     * @param reqVO 工作站保存请求对象
     */
@@ -175,6 +181,14 @@
        // 2. 校验仓库是否存在
        if (warehouseId != null) {
            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. 校验库区:如果填写了库区,必须填写仓库,且库区必须属于该仓库
@@ -239,6 +253,11 @@
    }
    @Override
    public MesMdWorkstationDO getWorkstationByName(String name) {
        return workstationMapper.selectByName(name);
    }
    @Override
    public List<MesMdWorkstationDO> getWorkstationListByStatus(Integer status) {
        return workstationMapper.selectListByStatus(status);
    }