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.common.enums.ReviewStatusEnum; import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.dto.StockUninventoryDto; 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.time.LocalDateTime; 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; /** * 不合格入库 * * @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); stockUninventoryDto.setType(resolveUninventoryType(recordType)); stockUninventoryService.addStockInRecordOnly(stockUninventoryDto); } /** * 不合格入库带批次号 * * @param productModelId * @param quantity * @param recordType * @param recordId */ public void addUnStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) { StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); stockUninventoryDto.setRecordId(recordId); stockUninventoryDto.setRecordType(String.valueOf(recordType)); stockUninventoryDto.setQualitity(quantity); stockUninventoryDto.setProductModelId(productModelId); stockUninventoryDto.setBatchNo(batchNo); stockUninventoryDto.setType(resolveUninventoryType(recordType)); stockUninventoryService.addStockInRecordOnly(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); stockUninventoryDto.setType("unqualified"); stockUninventoryService.subtractStockUninventory(stockUninventoryDto); } /** * 合格入库 * @param recordType * @param recordId */ public void addStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId) { addStock(productModelId, quantity, recordType, recordId, null); } /** * 合格入库 * @param recordType * @param recordId */ public void addStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, LocalDateTime createTime) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setCreateTime(createTime); stockInventoryService.addStockInRecordOnly(stockInventoryDto); } /** * 合格入库带批次号 * @param productModelId * @param quantity * @param recordType * @param recordId */ public void addStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) { addStockWithBatchNo(productModelId, quantity, recordType, recordId, batchNo, null); } /** * 合格入库带批次号 * @param recordType * @param recordId */ public void addStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo, LocalDateTime createTime) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setBatchNo(batchNo); stockInventoryDto.setCreateTime(createTime); stockInventoryService.addStockInRecordOnly(stockInventoryDto); } /** * 合格入库带批次号和含水量信息 * @param productModelId 产品规格ID * @param actualStockInNum 实际入库数量 * @param recordType 记录类型 * @param recordId 记录ID * @param batchNo 批次号 * @param isContainsWater 是否含水 * @param waterContent 含水量 * @param theoryStockInNum 理论入库数量 */ public void addStockWithBatchNo(Long productModelId, BigDecimal actualStockInNum, String recordType, Long recordId, String batchNo, Boolean isContainsWater, BigDecimal waterContent, BigDecimal theoryStockInNum) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(actualStockInNum); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setBatchNo(batchNo); stockInventoryDto.setIsContainsWater(isContainsWater); stockInventoryDto.setWaterContent(waterContent); stockInventoryDto.setTheoryStockInNum(theoryStockInNum); if (theoryStockInNum != null && actualStockInNum != null) { stockInventoryDto.setDifferenceNum(theoryStockInNum.subtract(actualStockInNum)); } stockInventoryService.addStockInRecordOnly(stockInventoryDto); } /** * 合格出库 * * @param productModelId * @param quantity * @param recordType * @param recordId */ public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) { StockInventoryDto stockInventoryDto = new StockInventoryDto(); stockInventoryDto.setRecordId(recordId); stockInventoryDto.setRecordType(String.valueOf(recordType)); stockInventoryDto.setQualitity(quantity); stockInventoryDto.setProductModelId(productModelId); stockInventoryDto.setBatchNo(batchNo); 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); stockOutRecordService.list(queryWrapper).stream().forEach(stockOutRecord -> { 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), false); if (ObjectUtils.isNotEmpty(one)) { if (ReviewStatusEnum.APPROVED.getCode().equals(one.getApprovalStatus())) { stockInRecordService.batchDelete(Collections.singletonList(one.getId())); } else { stockInRecordService.removeById(one.getId()); } } } //删除出库记录 public void deleteStockOutRecord(Long recordId, String recordType) { java.util.List list = stockOutRecordService.list(new QueryWrapper() .lambda().eq(StockOutRecord::getRecordId, recordId) .eq(StockOutRecord::getRecordType, recordType)); if (ObjectUtils.isNotEmpty(list)) { java.util.List approvedIds = new java.util.ArrayList<>(); java.util.List pendingIds = new java.util.ArrayList<>(); for (StockOutRecord stockOutRecord : list) { if (ReviewStatusEnum.APPROVED.getCode().equals(stockOutRecord.getApprovalStatus())) { approvedIds.add(stockOutRecord.getId()); } else { pendingIds.add(stockOutRecord.getId()); } } if (!approvedIds.isEmpty()) { stockOutRecordService.batchDelete(approvedIds); } if (!pendingIds.isEmpty()) { stockOutRecordService.removeByIds(pendingIds); } } } private String resolveUninventoryType(String recordType) { if (com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode().equals(recordType)) { return "waste"; } return "unqualified"; } }