| | |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; |
| | | 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 com.mzt.logapi.starter.annotation.LogRecord; |
| | |
| | | @Resource |
| | | @Lazy |
| | | private MesWmWarehouseService warehouseService; |
| | | @Resource |
| | | @Lazy |
| | | private MesWmWarehouseDefaultService warehouseDefaultService; |
| | | @Resource |
| | | @Lazy |
| | | private MesWmTransactionService wmTransactionService; |
| | |
| | | |
| | | @Override |
| | | public void checkAreaMixingRule(Long areaId, Long itemId, Long batchId) { |
| | | // 未指定库位(客户未启用库区/库位管理)时不校验混放,后续入库事务会落到仓库默认库位 |
| | | if (areaId == null) { |
| | | return; |
| | | } |
| | | // 1.1 校验库位必须存在 |
| | | MesWmWarehouseAreaDO area = areaService.validateWarehouseAreaExists(areaId); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | // 3. 校验库位混放规则 |
| | | // 3. 未指定库区/库位时,落到仓库默认库区/库位(客户未启用库区/库位管理) |
| | | if (reqVO.getWarehouseId() != null |
| | | && (reqVO.getLocationId() == null || reqVO.getAreaId() == null)) { |
| | | MesWmWarehouseAreaDO defaultArea = warehouseDefaultService.getOrCreateDefaultArea(reqVO.getWarehouseId()); |
| | | reqVO.setLocationId(defaultArea.getLocationId()); |
| | | reqVO.setAreaId(defaultArea.getId()); |
| | | } |
| | | // 3.1 校验库位混放规则 |
| | | checkAreaMixingRule(reqVO.getAreaId(), reqVO.getItemId(), batchId); |
| | | |
| | | // 4. 获取或创建库存记录 |
| | |
| | | throw exception(WM_MATERIAL_STOCK_FROZEN); |
| | | } |
| | | |
| | | // 4. 校验目标库位混放规则 |
| | | // 4. 目标库区/库位未指定时,落到目标仓库的默认库区/库位(客户未启用库区/库位管理) |
| | | if (reqVO.getToWarehouseId() == null) { |
| | | reqVO.setToWarehouseId(sourceStock.getWarehouseId()); |
| | | } |
| | | if ((reqVO.getToLocationId() == null || reqVO.getToAreaId() == null)) { |
| | | MesWmWarehouseAreaDO defaultArea = warehouseDefaultService.getOrCreateDefaultArea(reqVO.getToWarehouseId()); |
| | | reqVO.setToLocationId(defaultArea.getLocationId()); |
| | | reqVO.setToAreaId(defaultArea.getId()); |
| | | } |
| | | // 4.1 校验目标库位混放规则 |
| | | checkAreaMixingRule(reqVO.getToAreaId(), sourceStock.getItemId(), sourceStock.getBatchId()); |
| | | |
| | | // 5. 生成移库单号 |