| | |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | |
| | | public Integer addStockUninventory(StockUninventoryDto stockUninventoryDto) { |
| | | String inventoryType = resolveInventoryType(stockUninventoryDto); |
| | | stockUninventoryDto.setType(inventoryType); |
| | | LambdaQueryWrapper<StockUninventory> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()); |
| | | wrapper.eq(StockUninventory::getType, inventoryType); |
| | | if (StringUtils.isEmpty(stockUninventoryDto.getBatchNo())) { |
| | | stockUninventoryDto.setBatchNo(null); |
| | | wrapper.isNull(StockUninventory::getBatchNo); |
| | | } else { |
| | | wrapper.eq(StockUninventory::getBatchNo, stockUninventoryDto.getBatchNo()); |
| | | } |
| | | String batchNo = resolveOrGenerateBatchNo(stockUninventoryDto.getBatchNo(), stockUninventoryDto.getProductModelId()); |
| | | stockUninventoryDto.setBatchNo(batchNo); |
| | | //新增入库记录再添加库存 |
| | | StockInRecordDto stockInRecordDto = new StockInRecordDto(); |
| | | stockInRecordDto.setRecordId(stockUninventoryDto.getRecordId()); |
| | | stockInRecordDto.setRecordType(stockUninventoryDto.getRecordType()); |
| | | stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity()); |
| | | stockInRecordDto.setBatchNo(stockUninventoryDto.getBatchNo()); |
| | | stockInRecordDto.setBatchNo(batchNo); |
| | | stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId()); |
| | | if (UNQUALIFIED_TYPE.equals(inventoryType)) { |
| | | stockInRecordDto.setType("1"); |
| | |
| | | public Integer subtractStockUninventory(StockUninventoryDto stockUninventoryDto) { |
| | | String inventoryType = resolveInventoryType(stockUninventoryDto); |
| | | stockUninventoryDto.setType(inventoryType); |
| | | String batchNo = resolveOutboundBatchNo(stockUninventoryDto.getProductModelId(), inventoryType, stockUninventoryDto.getBatchNo()); |
| | | stockUninventoryDto.setBatchNo(batchNo); |
| | | |
| | | // 新增出库记录 |
| | | StockOutRecordDto stockOutRecordDto = new StockOutRecordDto(); |
| | |
| | | stockOutRecordDto.setRecordType(stockUninventoryDto.getRecordType()); |
| | | stockOutRecordDto.setStockOutNum(stockUninventoryDto.getQualitity()); |
| | | stockOutRecordDto.setProductModelId(stockUninventoryDto.getProductModelId()); |
| | | stockOutRecordDto.setBatchNo(stockUninventoryDto.getBatchNo()); |
| | | stockOutRecordDto.setBatchNo(batchNo); |
| | | stockOutRecordDto.setType("1"); |
| | | stockOutRecordService.add(stockOutRecordDto); |
| | | StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda() |
| | | LambdaQueryWrapper<StockUninventory> queryWrapper = new QueryWrapper<StockUninventory>().lambda() |
| | | .eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()) |
| | | .eq(StockUninventory::getType, inventoryType)); |
| | | .eq(StockUninventory::getType, inventoryType); |
| | | if (StringUtils.isEmpty(batchNo)) { |
| | | queryWrapper.isNull(StockUninventory::getBatchNo); |
| | | } else { |
| | | queryWrapper.eq(StockUninventory::getBatchNo, batchNo); |
| | | } |
| | | StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(queryWrapper); |
| | | if (ObjectUtils.isEmpty(oldStockInventory)) { |
| | | throw new RuntimeException("产品库存不存在"); |
| | | }else { |
| | |
| | | stockInRecordDto.setRecordId(stockUninventoryDto.getRecordId()); |
| | | stockInRecordDto.setRecordType(stockUninventoryDto.getRecordType()); |
| | | stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity()); |
| | | String batchNo = StringUtils.trim(stockUninventoryDto.getBatchNo()); |
| | | if (StringUtils.isEmpty(batchNo)) { |
| | | batchNo = generateAutoBatchNo(stockUninventoryDto.getProductModelId()); |
| | | } |
| | | String batchNo = resolveOrGenerateBatchNo(stockUninventoryDto.getBatchNo(), stockUninventoryDto.getProductModelId()); |
| | | stockInRecordDto.setBatchNo(batchNo); |
| | | stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId()); |
| | | if (UNQUALIFIED_TYPE.equals(inventoryType)) { |
| | |
| | | stockInRecordDto.setType("2"); |
| | | } |
| | | stockInRecordDto.setRemark(stockUninventoryDto.getRemark()); |
| | | stockInRecordDto.setSource(stockUninventoryDto.getSource()); |
| | | stockInRecordService.add(stockInRecordDto); |
| | | return 1; |
| | | } |
| | |
| | | public Integer addStockOutRecordOnly(StockUninventoryDto stockUninventoryDto) { |
| | | String inventoryType = resolveInventoryType(stockUninventoryDto); |
| | | stockUninventoryDto.setType(inventoryType); |
| | | String batchNo = resolveOutboundBatchNo(stockUninventoryDto.getProductModelId(), inventoryType, stockUninventoryDto.getBatchNo()); |
| | | stockUninventoryDto.setBatchNo(batchNo); |
| | | LambdaQueryWrapper<StockUninventory> eq = new LambdaQueryWrapper<>(); |
| | | eq.eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()); |
| | | eq.eq(StockUninventory::getType, inventoryType); |
| | | if (StringUtils.isEmpty(stockUninventoryDto.getBatchNo())) { |
| | | if (StringUtils.isEmpty(batchNo)) { |
| | | eq.isNull(StockUninventory::getBatchNo); |
| | | } else { |
| | | eq.eq(StockUninventory::getBatchNo, stockUninventoryDto.getBatchNo()); |
| | | eq.eq(StockUninventory::getBatchNo, batchNo); |
| | | } |
| | | StockUninventory stockUninventory = stockUninventoryMapper.selectOne(eq); |
| | | if (stockUninventory == null) { |
| | |
| | | stockOutRecordDto.setRecordId(stockUninventoryDto.getRecordId()); |
| | | stockOutRecordDto.setRecordType(stockUninventoryDto.getRecordType()); |
| | | stockOutRecordDto.setStockOutNum(stockUninventoryDto.getQualitity()); |
| | | stockOutRecordDto.setBatchNo(stockUninventoryDto.getBatchNo()); |
| | | stockOutRecordDto.setBatchNo(batchNo); |
| | | stockOutRecordDto.setProductModelId(stockUninventoryDto.getProductModelId()); |
| | | stockOutRecordDto.setType("1"); |
| | | stockOutRecordDto.setRemark(stockUninventoryDto.getRemark()); |
| | |
| | | return maxSequence; |
| | | } |
| | | |
| | | private String resolveOrGenerateBatchNo(String batchNo, Long productModelId) { |
| | | String normalizedBatchNo = StringUtils.trim(batchNo); |
| | | if (StringUtils.isNotEmpty(normalizedBatchNo)) { |
| | | return normalizedBatchNo; |
| | | } |
| | | return generateAutoBatchNo(productModelId); |
| | | } |
| | | |
| | | private String resolveOutboundBatchNo(Long productModelId, String inventoryType, String batchNo) { |
| | | String normalizedBatchNo = StringUtils.trim(batchNo); |
| | | if (StringUtils.isNotEmpty(normalizedBatchNo)) { |
| | | return normalizedBatchNo; |
| | | } |
| | | List<StockUninventory> stockUninventoryList = stockUninventoryMapper.selectList( |
| | | Wrappers.<StockUninventory>lambdaQuery() |
| | | .eq(StockUninventory::getProductModelId, productModelId) |
| | | .eq(StockUninventory::getType, inventoryType) |
| | | .orderByDesc(StockUninventory::getId)); |
| | | if (CollectionUtils.isEmpty(stockUninventoryList)) { |
| | | throw new BaseException("库存记录不存在"); |
| | | } |
| | | if (stockUninventoryList.size() == 1) { |
| | | return stockUninventoryList.get(0).getBatchNo(); |
| | | } |
| | | throw new BaseException("当前产品规格存在多个批次,请先选择批号后再出库"); |
| | | } |
| | | |
| | | private int parseSequence(String batchNo, String prefix) { |
| | | if (StringUtils.isEmpty(batchNo) || StringUtils.isEmpty(prefix) || !batchNo.startsWith(prefix)) { |
| | | return 0; |