| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; |
| | | import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum; |
| | | import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.framework.web.domain.R; |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Boolean addStockInRecordOnly(StockInventoryDto stockInventoryDto) { |
| | | StockInRecordDto stockInRecordDto = new StockInRecordDto(); |
| | | stockInRecordDto.setRecordId(stockInventoryDto.getRecordId()); |
| | | stockInRecordDto.setRecordType(stockInventoryDto.getRecordType()); |
| | | stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity()); |
| | | stockInRecordDto.setBatchNo(stockInventoryDto.getBatchNo()); |
| | | stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); |
| | | stockInRecordDto.setType("0"); |
| | | stockInRecordDto.setRemark(stockInventoryDto.getRemark()); |
| | | stockInRecordService.add(stockInRecordDto); |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Boolean addStockOutRecordOnly(StockInventoryDto stockInventoryDto) { |
| | | LambdaQueryWrapper<StockInventory> eq = new LambdaQueryWrapper<>(); |
| | | eq.eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()); |
| | | if (StringUtils.isEmpty(stockInventoryDto.getBatchNo())) { |
| | | eq.isNull(StockInventory::getBatchNo); |
| | | } else { |
| | | eq.eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo()); |
| | | } |
| | | StockInventory stockInventory = stockInventoryMapper.selectOne(eq); |
| | | if (stockInventory == null) { |
| | | throw new ServiceException("库存记录不存在"); |
| | | } |
| | | BigDecimal lockedQty = stockInventory.getLockedQuantity(); |
| | | if (lockedQty == null) { |
| | | lockedQty = BigDecimal.ZERO; |
| | | } |
| | | BigDecimal pendingOut = stockInventoryMapper.selectPendingOutQuantity( |
| | | stockInventoryDto.getProductModelId(), |
| | | stockInventoryDto.getBatchNo(), |
| | | "0" |
| | | ); |
| | | if (pendingOut == null) { |
| | | pendingOut = BigDecimal.ZERO; |
| | | } |
| | | BigDecimal availableQty = stockInventory.getQualitity().subtract(lockedQty).subtract(pendingOut); |
| | | if (stockInventoryDto.getQualitity().compareTo(availableQty) > 0) { |
| | | throw new ServiceException("申请数量超过可用库存,当前可用库存为:" + availableQty); |
| | | } |
| | | StockOutRecordDto stockOutRecordDto = new StockOutRecordDto(); |
| | | stockOutRecordDto.setRecordId(stockInventoryDto.getRecordId()); |
| | | stockOutRecordDto.setRecordType(stockInventoryDto.getRecordType()); |
| | | stockOutRecordDto.setStockOutNum(stockInventoryDto.getQualitity()); |
| | | stockOutRecordDto.setBatchNo(stockInventoryDto.getBatchNo()); |
| | | stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); |
| | | stockOutRecordDto.setType("0"); |
| | | stockOutRecordDto.setRemark(stockInventoryDto.getRemark()); |
| | | stockOutRecordService.add(stockOutRecordDto); |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R importStockInventory(MultipartFile file) { |
| | | try { |
| | | // 查询所有的产品并构建映射,提高查找效率 |