| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.route.vo.product.MesProRouteProductSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pro.route.MesProRouteProductMapper; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | @Resource |
| | | @Lazy |
| | | private MesProRouteProductBomService routeProductBomService; |
| | | @Resource |
| | | private MesWmWarehouseAreaService warehouseAreaService; |
| | | @Resource |
| | | private cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService warehouseService; |
| | | |
| | | @Override |
| | | public Long createRouteProduct(MesProRouteProductSaveReqVO createReqVO) { |
| | |
| | | routeService.validateRouteNotEnable(createReqVO.getRouteId()); |
| | | // 1.1 校验产品唯一性(一个产品只能关联一条工艺路线) |
| | | validateItemUnique(null, createReqVO.getItemId()); |
| | | // 1.2 校验报工入库三级(仓库 → 库区 → 库位)的父子关系 |
| | | validateWarehouseChain(createReqVO); |
| | | |
| | | // 2. 插入 |
| | | MesProRouteProductDO routeProduct = BeanUtils.toBean(createReqVO, MesProRouteProductDO.class); |
| | |
| | | validateRouteProductExists(updateReqVO.getId()); |
| | | // 1.2 校验产品唯一性 |
| | | validateItemUnique(updateReqVO.getId(), updateReqVO.getItemId()); |
| | | // 1.3 校验报工入库三级的父子关系 |
| | | validateWarehouseChain(updateReqVO); |
| | | |
| | | // 2. 更新 |
| | | MesProRouteProductDO updateObj = BeanUtils.toBean(updateReqVO, MesProRouteProductDO.class); |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 校验报工入库三级:仓库 → 库区 → 库位 的父子关系 |
| | | * |
| | | * <p>三个都填时才校验层级是否匹配,避免前端联动错位时把库位挂到别的仓库下。 |
| | | * 允许只填仓库(部分场景只要知道入哪个仓),所以不是三个都必填。</p> |
| | | */ |
| | | private void validateWarehouseChain(MesProRouteProductSaveReqVO reqVO) { |
| | | // 1. 仓库填了就校验存在(只填仓库、不填库区库位是允许的) |
| | | if (reqVO.getWarehouseId() != null) { |
| | | warehouseService.validateWarehouseExists(reqVO.getWarehouseId()); |
| | | } |
| | | // 2. 库位填了就校验「库区→库位」「仓库→库区」的父子关系是否串了 |
| | | warehouseAreaService.validateWarehouseAreaExists( |
| | | reqVO.getWarehouseId(), reqVO.getLocationId(), reqVO.getAreaId()); |
| | | } |
| | | |
| | | private void validateItemUnique(Long id, Long itemId) { |
| | | MesProRouteProductDO existing = routeProductMapper.selectByItemId(itemId); |
| | | if (existing == null) { |