| | |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.stock.enums.StockInventorySourceEnum; |
| | | import com.ruoyi.stock.dto.StockInRecordDto; |
| | | import com.ruoyi.stock.dto.StockInventoryDto; |
| | | import com.ruoyi.stock.dto.StockOutRecordDto; |
| | |
| | | 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; |
| | |
| | | @RequiredArgsConstructor |
| | | public class StockUninventoryServiceImpl extends ServiceImpl<StockUninventoryMapper, StockUninventory> implements StockUninventoryService { |
| | | |
| | | |
| | | private static final String UNQUALIFIED_TYPE = "unqualified"; |
| | | private final StockUninventoryMapper stockUninventoryMapper; |
| | | private final StockOutRecordService stockOutRecordService; |
| | | private final StockInRecordService stockInRecordService; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public IPage<StockUninventoryDto> pageWasteQuery(Page page, StockUninventoryDto stockUninventoryDto) { |
| | | IPage<StockUninventoryDto> resultPage = stockUninventoryMapper.pageWasteQuery(page, stockUninventoryDto); |
| | | resultPage.getRecords().forEach(dto -> { |
| | | if (StringUtils.isNotEmpty(dto.getSource())) { |
| | | StockInventorySourceEnum sourceEnum = StockInventorySourceEnum.fromCode(dto.getSource()); |
| | | if (sourceEnum != null) { |
| | | dto.setSourceText(sourceEnum.getValue()); |
| | | } |
| | | } |
| | | }); |
| | | return resultPage; |
| | | } |
| | | |
| | | @Override |
| | | public IPage<StockUninventoryDto> getWasteBatchNoQty(Page page, StockInventoryDto stockInventoryDto) { |
| | | IPage<StockUninventoryDto> resultPage = stockUninventoryMapper.getWasteBatchNoQty(page, stockInventoryDto); |
| | | resultPage.getRecords().forEach(dto -> { |
| | | if (StringUtils.isNotEmpty(dto.getSource())) { |
| | | StockInventorySourceEnum unQualifiedSourceEnum = StockInventorySourceEnum.fromCode(dto.getSource()); |
| | | if (unQualifiedSourceEnum != null) { |
| | | dto.setSourceText(unQualifiedSourceEnum.getValue()); |
| | | } |
| | | } |
| | | }); |
| | | return resultPage; |
| | | } |
| | | |
| | | @Override |
| | | public List<StockUninventoryDto> getWasteByModelId(Long productModelId) { |
| | | return stockUninventoryMapper.getWasteByModelId(productModelId); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Integer addStockUninventory(StockUninventoryDto stockUninventoryDto) { |
| | | LambdaQueryWrapper<StockUninventory> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()); |
| | | if (StringUtils.isEmpty(stockUninventoryDto.getBatchNo())) { |
| | | stockUninventoryDto.setBatchNo(null); |
| | | wrapper.isNull(StockUninventory::getBatchNo); |
| | | } else { |
| | | wrapper.eq(StockUninventory::getBatchNo, stockUninventoryDto.getBatchNo()); |
| | | } |
| | | String inventoryType = resolveInventoryType(stockUninventoryDto); |
| | | stockUninventoryDto.setType(inventoryType); |
| | | 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()); |
| | | stockInRecordDto.setType("1"); |
| | | if (UNQUALIFIED_TYPE.equals(inventoryType)) { |
| | | stockInRecordDto.setType("1"); |
| | | } else { |
| | | stockInRecordDto.setType("2"); |
| | | } |
| | | stockInRecordDto.setManufacturerId(stockUninventoryDto.getManufacturerId()); |
| | | stockInRecordDto.setSource(stockUninventoryDto.getSource()); |
| | | stockInRecordService.add(stockInRecordDto); |
| | | //审批再添加 |
| | | return 1; |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | 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().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId())); |
| | | LambdaQueryWrapper<StockUninventory> queryWrapper = new QueryWrapper<StockUninventory>().lambda() |
| | | .eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()) |
| | | .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 { |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Integer addStockInRecordOnly(StockUninventoryDto stockUninventoryDto) { |
| | | String inventoryType = resolveInventoryType(stockUninventoryDto); |
| | | stockUninventoryDto.setType(inventoryType); |
| | | StockInRecordDto stockInRecordDto = new StockInRecordDto(); |
| | | 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()); |
| | | stockInRecordDto.setType("1"); |
| | | if (UNQUALIFIED_TYPE.equals(inventoryType)) { |
| | | stockInRecordDto.setType("1"); |
| | | } else { |
| | | stockInRecordDto.setType("2"); |
| | | } |
| | | stockInRecordDto.setRemark(stockUninventoryDto.getRemark()); |
| | | stockInRecordDto.setSource(stockUninventoryDto.getSource()); |
| | | stockInRecordService.add(stockInRecordDto); |
| | | return 1; |
| | | } |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | 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()); |
| | | if (StringUtils.isEmpty(stockUninventoryDto.getBatchNo())) { |
| | | eq.eq(StockUninventory::getType, inventoryType); |
| | | 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()); |
| | |
| | | @Override |
| | | public void exportStockUninventory(HttpServletResponse response, StockUninventoryDto stockUninventoryDto) { |
| | | List<StockUnInventoryExportData> list = stockUninventoryMapper.listStockInventoryExportData(stockUninventoryDto); |
| | | list.forEach(item -> { |
| | | if (StringUtils.isNotEmpty(item.getSource())) { |
| | | StockInventorySourceEnum sourceEnum = StockInventorySourceEnum.fromCode(item.getSource()); |
| | | if (sourceEnum != null) { |
| | | item.setSourceText(sourceEnum.getValue()); |
| | | } |
| | | } |
| | | }); |
| | | ExcelUtil<StockUnInventoryExportData> util = new ExcelUtil<>(StockUnInventoryExportData.class); |
| | | util.exportExcel(response,list, "不合格库存信息"); |
| | | } |
| | | |
| | | @Override |
| | | public void exportWasteQuery(HttpServletResponse response, StockUninventoryDto stockUninventoryDto) { |
| | | List<StockUnInventoryExportData> list = stockUninventoryMapper.listWasteQueryExportData(stockUninventoryDto); |
| | | list.forEach(item -> { |
| | | if (StringUtils.isNotEmpty(item.getSource())) { |
| | | StockInventorySourceEnum sourceEnum = StockInventorySourceEnum.fromCode(item.getSource()); |
| | | if (sourceEnum != null) { |
| | | item.setSourceText(sourceEnum.getValue()); |
| | | } |
| | | } |
| | | }); |
| | | ExcelUtil<StockUnInventoryExportData> util = new ExcelUtil<>(StockUnInventoryExportData.class); |
| | | util.exportExcel(response, list, "废品查询信息"); |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | stockUninventory.setLockedQuantity(stockUninventory.getLockedQuantity().subtract(stockInventoryDto.getLockedQuantity())); |
| | | return this.updateById(stockUninventory); |
| | | } |
| | | |
| | | private String resolveInventoryType(StockUninventoryDto stockUninventoryDto) { |
| | | if (stockUninventoryDto != null && StringUtils.isNotEmpty(stockUninventoryDto.getType())) { |
| | | return stockUninventoryDto.getType().trim(); |
| | | } |
| | | return UNQUALIFIED_TYPE; |
| | | } |
| | | |
| | | //规则生成:20260424-产品编号-001 |
| | |
| | | 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; |