| | |
| | | import cn.iocoder.yudao.module.mes.service.wm.stockwarning.MesWmStockWarningService; |
| | | 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 jakarta.annotation.Resource; |
| | |
| | | @Resource |
| | | private MesWmWarehouseAreaService areaService; |
| | | @Resource |
| | | private MesWmWarehouseDefaultService warehouseDefaultService; |
| | | @Resource |
| | | private MesWmStockWarningService stockWarningService; |
| | | |
| | | @Override |
| | |
| | | checkQuantity(reqDTO, inbound); |
| | | // 1.3 入库事务:批次号校验 + batchId/batchCode 互补 |
| | | checkBatch(reqDTO, inbound); |
| | | // 1.3.1 入库事务未指定库区/库位时,自动落到仓库默认库区/库位(客户未启用库区/库位管理) |
| | | if (inbound) { |
| | | fillDefaultLocationAndArea(reqDTO); |
| | | } |
| | | // 1.4 入库事务:库位混放规则校验 |
| | | if (inbound) { |
| | | materialStockService.checkAreaMixingRule(reqDTO.getAreaId(), reqDTO.getItemId(), reqDTO.getBatchId()); |
| | |
| | | // ==================== 私有校验方法 ==================== |
| | | |
| | | /** |
| | | * 入库事务未指定库区/库位时,自动使用仓库的默认库区/默认库位 |
| | | * |
| | | * 客户未启用库区/库位管理,前端不再让用户选择,库存仍需要完整的仓库-库区-库位维度。 |
| | | */ |
| | | private void fillDefaultLocationAndArea(MesWmTransactionSaveReqDTO reqDTO) { |
| | | if (reqDTO.getWarehouseId() == null |
| | | || (reqDTO.getLocationId() != null && reqDTO.getAreaId() != null)) { |
| | | return; |
| | | } |
| | | MesWmWarehouseAreaDO defaultArea = warehouseDefaultService.getOrCreateDefaultArea(reqDTO.getWarehouseId()); |
| | | reqDTO.setLocationId(defaultArea.getLocationId()); |
| | | reqDTO.setAreaId(defaultArea.getId()); |
| | | } |
| | | |
| | | /** |
| | | * 校验数量正负号与事务方向一致 |
| | | */ |
| | | private void checkQuantity(MesWmTransactionSaveReqDTO reqDTO, boolean inbound) { |