| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | |
| | | stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); |
| | | stockOutRecordDto.setType("0"); |
| | | stockOutRecordService.add(stockOutRecordDto); |
| | | if (ObjectUtils.isEmpty(stockInventoryDto.getBatchNo())) { |
| | | List<StockInventory> stockInventories = stockInventoryMapper.selectList(new QueryWrapper<StockInventory>().lambda() |
| | | .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()) |
| | | .orderByAsc(StockInventory::getId)); |
| | | if (ObjectUtils.isEmpty(stockInventories)) { |
| | | throw new RuntimeException("产品库存不存在"); |
| | | } |
| | | |
| | | BigDecimal remainingQty = stockInventoryDto.getQualitity(); |
| | | for (StockInventory stockInventory : stockInventories) { |
| | | BigDecimal lockedQty = stockInventory.getLockedQuantity() == null ? BigDecimal.ZERO : stockInventory.getLockedQuantity(); |
| | | BigDecimal availableQty = stockInventory.getQualitity().subtract(lockedQty); |
| | | if (availableQty.compareTo(BigDecimal.ZERO) <= 0) { |
| | | continue; |
| | | } |
| | | |
| | | BigDecimal deductQty = remainingQty.min(availableQty); |
| | | stockInventory.setQualitity(stockInventory.getQualitity().subtract(deductQty)); |
| | | stockInventory.setVersion(stockInventory.getVersion() == null ? 1 : stockInventory.getVersion() + 1); |
| | | stockInventory.setUpdateTime(LocalDateTime.now()); |
| | | stockInventoryMapper.updateById(stockInventory); |
| | | |
| | | remainingQty = remainingQty.subtract(deductQty); |
| | | if (remainingQty.compareTo(BigDecimal.ZERO) <= 0) { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | ProductModel productModel = productModelMapper.selectById(stockInventoryDto.getProductModelId()); |
| | | Product product = productMapper.selectById(productModel.getProductId()); |
| | | throw new RuntimeException(product.getProductName() + "/" + productModel.getModel() + "库存不足无法出库"); |
| | | } |
| | | StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()) |
| | | .eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo())); |
| | | if (ObjectUtils.isEmpty(oldStockInventory)) { |