| | |
| | | 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; |
| | |
| | | String seqStr = String.format("%03d", newSeq); |
| | | |
| | | // 组装batchNo |
| | | batchNo = stockInventoryDto.getMaterialCode() + stockInventoryDto.getModel() + "P" + monthFlag + seqStr; |
| | | batchNo = stockInventoryDto.getMaterialCode() + stockInventoryDto.getProductModelName() + "P" + monthFlag + seqStr; |
| | | stockInRecordDto.setBatchNo(batchNo); |
| | | } else { |
| | | stockInRecordDto.setBatchNo(stockInventoryDto.getBatchNo()); |
| | |
| | | stockInRecordService.add(stockInRecordDto); |
| | | //再进行新增库存数量库存 |
| | | //先查询库存表中的产品是否存在,不存在新增,存在更新 |
| | | StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())); |
| | | StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()) |
| | | .eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo())); |
| | | if (ObjectUtils.isEmpty(oldStockInventory)) { |
| | | StockInventory newStockInventory = new StockInventory(); |
| | | newStockInventory.setProductModelId(stockInventoryDto.getProductModelId()); |
| | |
| | | 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)) { |