| | |
| | | import com.ruoyi.inventory.mapper.StockInMapper; |
| | | import com.ruoyi.inventory.pojo.StockManagement; |
| | | import com.ruoyi.inventory.service.StockInService; |
| | | import com.ruoyi.purchase.dto.ProductRecordDto; |
| | | import com.ruoyi.purchase.dto.PurchaseLedgerDto; |
| | | import com.ruoyi.purchase.mapper.ProductRecordMapper; |
| | | import com.ruoyi.purchase.pojo.ProductRecord; |
| | |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | // |
| | | public void saveStockin(StockIn stockIn) { |
| | | //需要先判断产品记录表中是否有该产品 |
| | | ProductRecord productRecord = productRecordMapper.selectById(stockIn.getProductRecordid()); |
| | | if (productRecord == null) { |
| | | throw new RuntimeException("产品记录表中没有该产品"); |
| | | } |
| | | // 需要先判断供应商表中是否有该供应商 |
| | | SupplierManage supplierManage = supplierManageMapper.selectById(stockIn.getSupplierId()); |
| | | if (supplierManage == null) { |
| | | throw new RuntimeException("供应商表中没有该供应商"); |
| | | } |
| | | // 需要先判断库存管理表中是否有该产品 |
| | | LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(StockManagement::getProductRecordid, stockIn.getProductRecordid()); |
| | | queryWrapper.eq(StockManagement::getSupplierId, stockIn.getSupplierId()); |
| | | queryWrapper.eq(StockManagement::getUserId, stockIn.getUserId()); |
| | | StockManagement stockManagement = stockManagementMapper.selectOne(queryWrapper); |
| | | if (stockManagement == null) { |
| | | // 如果没有该产品,需要先新增库存管理表 |
| | | stockManagement = new StockManagement(); |
| | | stockManagement.setProductRecordid(stockIn.getProductRecordid()); |
| | | stockManagement.setSupplierId(stockIn.getSupplierId()); |
| | | //需要先判断采购记录表中是否有该产品的采购记录 |
| | | // 根据产品id查询采购记录表 |
| | | ProductRecordDto productRecordDto = productRecordMapper.selectProductRecordById(stockIn.getProductrecordId()); |
| | | if (productRecordDto != null) { |
| | | // 添加入库记录和库存管理记录 |
| | | stockIn.setInboundTime(new Date()); |
| | | // 自动生成批次码 |
| | | String batchCode = "RK" + System.currentTimeMillis(); |
| | | stockIn.setInboundBatch(batchCode); |
| | | stockIn.setSupplierId(productRecordDto.getSupplierId()); |
| | | |
| | | stockInMapper.insert(stockIn); |
| | | // 在库存管理表中添加库存管理记录 |
| | | StockManagement stockManagement = new StockManagement(); |
| | | stockManagement.setProductrecordId(productRecordDto.getId()); |
| | | stockManagement.setStockQuantity(stockIn.getInboundQuantity()); |
| | | stockManagement.setInboundTime(stockIn.getInboundTime()); |
| | | stockManagement.setBoundTime(new Date()); |
| | | stockManagement.setInboundBatch(stockIn.getInboundBatch()); |
| | | stockManagement.setUserId(stockIn.getUserId()); |
| | | stockManagement.setSupplierId(productRecordDto.getSupplierId()); |
| | | stockManagement.setBoundTime(stockIn.getInboundTime()); |
| | | stockManagementMapper.insert(stockManagement); |
| | | }else { |
| | | throw new RuntimeException("采购记录表中没有该产品的采购记录"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void batchSaveStockin(List<StockIn> stockInList) { |
| | | if (stockInList == null || stockInList.isEmpty()) { |
| | | throw new RuntimeException("入库列表不能为空"); |
| | | } |
| | | Date currentTime = new Date(); |
| | | for (StockIn stockIn : stockInList) { |
| | | // 根据产品id查询采购记录表 |
| | | ProductRecordDto productRecordDto = productRecordMapper.selectProductRecordById(stockIn.getProductrecordId()); |
| | | if (productRecordDto == null) { |
| | | throw new RuntimeException("采购记录表中没有产品ID为" + stockIn.getProductrecordId() + "的采购记录"); |
| | | } |
| | | // 设置入库时间和批次码 |
| | | stockIn.setInboundTime(currentTime); |
| | | String batchCode = "RK" + System.currentTimeMillis() + "-" + stockIn.getProductrecordId(); |
| | | stockIn.setInboundBatch(batchCode); |
| | | stockIn.setSupplierId(productRecordDto.getSupplierId()); |
| | | // 添加入库记录 |
| | | stockInMapper.insert(stockIn); |
| | | // 在库存管理表中添加库存管理记录 |
| | | StockManagement stockManagement = new StockManagement(); |
| | | stockManagement.setProductrecordId(productRecordDto.getId()); |
| | | stockManagement.setStockQuantity(stockIn.getInboundQuantity()); |
| | | stockManagement.setInboundTime(stockIn.getInboundTime()); |
| | | stockManagement.setInboundBatch(stockIn.getInboundBatch()); |
| | | stockManagement.setUserId(stockIn.getUserId()); |
| | | stockManagement.setSupplierId(productRecordDto.getSupplierId()); |
| | | stockManagement.setBoundTime(stockIn.getInboundTime()); |
| | | stockManagementMapper.insert(stockManagement); |
| | | } |
| | | // 如果有该产品,需要先更新库存管理表 |
| | | stockManagement.setStockQuantity(stockManagement.getStockQuantity() + stockIn.getInboundQuantity()); |
| | | stockManagement.setInboundTime(stockIn.getInboundTime()); |
| | | stockManagement.setBoundTime(new Date()); |
| | | stockManagement.setUserId(stockIn.getUserId()); |
| | | stockManagementMapper.updateById(stockManagement); |
| | | // 需要先新增库存入库表 |
| | | stockInMapper.insert(stockIn); |
| | | } |
| | | |
| | | @Override//根据id获取库存入库信息 |
| | |
| | | StockIn stockIn = stockInMapper.selectById(id); |
| | | return stockIn; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean updateStockIn(StockIn stockIn) { |
| | | // 1. 参数校验 |
| | | if (stockIn == null || stockIn.getId() == null) { |
| | | throw new IllegalArgumentException("入库记录ID不能为空"); |
| | | public void updateStockIn(StockIn stockIn) { |
| | | // 需要先判断采购记录表中是否有该产品的采购记录 |
| | | LambdaQueryWrapper<ProductRecord> queryWrapper1 = new LambdaQueryWrapper<>(); |
| | | queryWrapper1.eq(ProductRecord::getId, stockIn.getProductrecordId()); |
| | | ProductRecord productRecord = productRecordMapper.selectOne(queryWrapper1); |
| | | if (productRecord!= null) { |
| | | stockIn.setInboundTime(stockIn.getInboundTime()); |
| | | stockInMapper.updateById(stockIn); |
| | | } else { |
| | | throw new RuntimeException("采购记录表中没有该产品的采购记录"); |
| | | } |
| | | |
| | | // 2. 获取原始记录 |
| | | StockIn original = stockInMapper.selectById(stockIn.getId()); |
| | | if (original == null) { |
| | | throw new RuntimeException("要修改的入库记录不存在,ID: " + stockIn.getId()); |
| | | } |
| | | |
| | | // 3. 检查关联数据 |
| | | // 3.1 检查产品 |
| | | if (stockIn.getProductRecordid() != null && |
| | | productRecordMapper.selectById(stockIn.getProductRecordid()) == null) { |
| | | throw new RuntimeException("产品记录不存在,ID: " + stockIn.getProductRecordid()); |
| | | } |
| | | |
| | | // 3.2 检查供应商 |
| | | if (stockIn.getSupplierId() != null && |
| | | supplierManageMapper.selectById(stockIn.getSupplierId()) == null) { |
| | | throw new RuntimeException("供应商不存在,ID: " + stockIn.getSupplierId()); |
| | | } |
| | | |
| | | // 4. 确定最终使用的各ID值 |
| | | Integer finalProductId = stockIn.getProductRecordid() != null ? |
| | | stockIn.getProductRecordid() : original.getProductRecordid(); |
| | | Integer finalSupplierId = stockIn.getSupplierId() != null ? |
| | | stockIn.getSupplierId() : original.getSupplierId(); |
| | | Long finalUserId = stockIn.getUserId() != null ? |
| | | stockIn.getUserId() : original.getUserId(); |
| | | |
| | | // 5. 处理库存记录(确保存在对应记录) |
| | | LambdaQueryWrapper<StockManagement> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(StockManagement::getProductRecordid, finalProductId) |
| | | .eq(StockManagement::getSupplierId, finalSupplierId) |
| | | .eq(StockManagement::getUserId, finalUserId); |
| | | |
| | | StockManagement stock = stockManagementMapper.selectOne(wrapper); |
| | | |
| | | // 计算数量变化(如果有修改) |
| | | Integer quantityChange = stockIn.getInboundQuantity() != null ? |
| | | stockIn.getInboundQuantity() - original.getInboundQuantity() : 0; |
| | | |
| | | if (stock == null) { |
| | | // 5.1 不存在则创建新记录 |
| | | stock = new StockManagement(); |
| | | stock.setProductRecordid(finalProductId); |
| | | stock.setSupplierId(finalSupplierId); |
| | | stock.setUserId(finalUserId); |
| | | // 初始库存 = 原始库存 + 变化量(考虑修改后的值) |
| | | stock.setStockQuantity(original.getInboundQuantity() + quantityChange); |
| | | stockManagementMapper.insert(stock); |
| | | } else if (quantityChange != 0) { |
| | | // 5.2 存在且数量有变化则更新 |
| | | stock.setStockQuantity(stock.getStockQuantity() + quantityChange); |
| | | stockManagementMapper.updateById(stock); |
| | | } |
| | | |
| | | // 6. 更新入库记录 |
| | | int updateResult = stockInMapper.updateById(stockIn); |
| | | if (updateResult <= 0) { |
| | | throw new RuntimeException("入库记录更新失败"); |
| | | } |
| | | |
| | | return updateResult > 0; |
| | | } |
| | | |
| | | |
| | |
| | | ExcelUtil<StockInExcelDto> util = new ExcelUtil<StockInExcelDto>(StockInExcelDto.class); |
| | | util.exportExcel(response, stockInExcelDtoList, "供应商导出"); |
| | | } |
| | | |
| | | @Override |
| | | public int addstockin(List<StockIn> stockIns) { |
| | | for (StockIn stockIn : stockIns) { |
| | | saveStockin(stockIn); |
| | | } |
| | | return 1; |
| | | } |
| | | } |