package com.ruoyi.procurementrecord.utils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import com.ruoyi.stock.dto.StockInRecordDto; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.dto.StockOutRecordDto; import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.mapper.StockInventoryMapper; import com.ruoyi.stock.pojo.StockInRecord; import com.ruoyi.stock.pojo.StockOutRecord; import com.ruoyi.stock.service.StockInRecordService; import com.ruoyi.stock.service.StockInventoryService; import com.ruoyi.stock.service.StockOutRecordService; import com.ruoyi.stock.service.StockUninventoryService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.Collections; @Component @RequiredArgsConstructor public class StockUtils { private final ProcurementRecordOutMapper procurementRecordOutMapper; private final ProcurementRecordMapper procurementRecordMapper; private final StockUninventoryService stockUninventoryService; private final StockInventoryService stockInventoryService; private final StockInRecordService stockInRecordService; private final StockOutRecordService stockOutRecordService; private final StockInventoryMapper stockInventoryMapper; /** * 涓嶅悎鏍煎叆搴? * * @param productModelId * @param quantity * @param recordType * @param recordId */ public void addUnStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId) { StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); stockUninventoryDto.setRecordId(recordId); stockUninventoryDto.setRecordType(String.valueOf(recordType)); stockUninventoryDto.setQualitity(quantity); stockUninventoryDto.setProductModelId(productModelId); stockUninventoryService.addStockUninventory(stockUninventoryDto); } /** * 涓嶅悎鏍煎嚭搴? * * @param productModelId * @param quantity * @param recordType * @param recordId */ public void subtractUnStock(Long productModelId, BigDecimal quantity, Integer recordType, Long recordId) { StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); stockUninventoryDto.setRecordId(recordId); stockUninventoryDto.setRecordType(String.valueOf(recordType)); stockUninventoryDto.setQualitity(quantity); stockUninventoryDto.setProductModelId(productModelId); stockUninventoryService.subtractStockUninventory(stockUninventoryDto); } /** * 鍚堟牸鍏ュ簱 * @param recordType * @param recordId */ public void addStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId) { addStock(productModelId, quantity, recordType, recordId, resolveWarehouseInfoId(null, productModelId, null)); } public void addStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, Long warehouseInfoId) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setWarehouseInfoId(warehouseInfoId); stockInventoryService.addStockInRecordOnly(stockInventoryDto); } /** * 鍚堟牸鍏ュ簱甯︽壒娆″彿 * @param productModelId * @param quantity * @param recordType * @param recordId */ public StockInRecordDto addStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) { return addStockWithBatchNo(productModelId, quantity, recordType, recordId, batchNo, resolveWarehouseInfoId(null, productModelId, batchNo)); } public StockInRecordDto addStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo, Long warehouseInfoId) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setBatchNo(batchNo); stockInventoryDto.setWarehouseInfoId(warehouseInfoId); return stockInventoryService.addStockInRecordOnly(stockInventoryDto); } /** * 鍚堟牸鍑哄簱 * * @param productModelId * @param quantity * @param recordType * @param recordId */ public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId) { substractStock(productModelId, quantity, recordType, recordId, resolveWarehouseInfoId(null, productModelId, null)); } public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, Long warehouseInfoId) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setWarehouseInfoId(warehouseInfoId); stockInventoryService.subtractStockInventory(stockInventoryDto); } public StockOutRecordDto substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) { return substractStock(productModelId, quantity, recordType, recordId, batchNo, resolveWarehouseInfoId(null, productModelId, batchNo)); } public StockOutRecordDto substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo, Long warehouseInfoId) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setBatchNo(batchNo); stockInventoryDto.setWarehouseInfoId(warehouseInfoId); return stockInventoryService.addStockOutRecordOnly(stockInventoryDto); } /** * @param recordType * @param recordId */ public void shipmentStatus(String recordType, Long recordId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().eq(StockOutRecord::getRecordType, recordType) .eq(StockOutRecord::getRecordId, recordId); StockOutRecord stockOutRecord = stockOutRecordService.getOne(queryWrapper); stockOutRecord.setApprovalStatus(0); stockOutRecordService.updateById(stockOutRecord); } public void deleteStockInRecord(Long recordId, String recordType) { StockInRecord one = stockInRecordService.getOne(new QueryWrapper() .lambda().eq(StockInRecord::getRecordId, recordId) .eq(StockInRecord::getRecordType, recordType)); if (ObjectUtils.isNotEmpty(one)) { stockInRecordService.batchDelete(Collections.singletonList(one.getId())); StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(recordType); stockInventoryDto.setQualitity(one.getStockInNum()); stockInventoryDto.setProductModelId(one.getProductModelId()); stockInventoryDto.setBatchNo(one.getBatchNo()); stockInventoryMapper.updateSubtractStockInventory((stockInventoryDto)); } } public void deleteStockOutRecord(Long recordId, String recordType) { StockOutRecord one = stockOutRecordService.getOne(new QueryWrapper() .lambda().eq(StockOutRecord::getRecordId, recordId) .eq(StockOutRecord::getRecordType, recordType)); if (ObjectUtils.isNotEmpty(one)) { stockOutRecordService.batchDelete(Collections.singletonList(one.getId())); StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(recordType); stockInventoryDto.setQualitity(one.getStockOutNum()); stockInventoryDto.setProductModelId(one.getProductModelId()); stockInventoryDto.setBatchNo(one.getBatchNo()); stockInventoryDto.setWarehouseInfoId(one.getWarehouseInfoId()); stockInventoryMapper.updateAddStockInventory((stockInventoryDto)); } } private Long resolveWarehouseInfoId(Long warehouseInfoId, Long productModelId, String batchNo) { if (warehouseInfoId == null) { throw new IllegalArgumentException("warehouseInfoId不能为空"); } return warehouseInfoId; } }