huminmin
12 小时以前 f16bf325804fb3bc6ab883693a96a374b3c63188
src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
@@ -31,6 +31,7 @@
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;
@@ -99,21 +100,14 @@
    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");
@@ -132,6 +126,8 @@
    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();
@@ -139,12 +135,18 @@
        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 {
@@ -162,10 +164,7 @@
        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)) {
@@ -174,6 +173,7 @@
            stockInRecordDto.setType("2");
        }
        stockInRecordDto.setRemark(stockUninventoryDto.getRemark());
        stockInRecordDto.setSource(stockUninventoryDto.getSource());
        stockInRecordService.add(stockInRecordDto);
        return 1;
    }
@@ -183,13 +183,15 @@
    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) {
@@ -215,7 +217,7 @@
        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());
@@ -332,6 +334,33 @@
        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;