package com.ruoyi.inventory.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.mapper.SupplierManageMapper; import com.ruoyi.basic.pojo.SupplierManage; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.inventory.dto.StockinDto; import com.ruoyi.inventory.excel.StockInExcelDto; import com.ruoyi.inventory.mapper.StockManagementMapper; import com.ruoyi.inventory.pojo.StockIn; import com.ruoyi.inventory.mapper.StockInMapper; import com.ruoyi.inventory.pojo.StockManagement; import com.ruoyi.inventory.service.StockInService; import com.ruoyi.purchase.dto.PurchaseLedgerDto; import com.ruoyi.purchase.mapper.ProductRecordMapper; import com.ruoyi.purchase.pojo.ProductRecord; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.Date; import java.util.List; @Service public class StockInServiceImpl extends ServiceImpl implements StockInService { @Autowired private StockInMapper stockInMapper; @Autowired private StockManagementMapper stockManagementMapper; @Autowired private ProductRecordMapper productRecordMapper; @Autowired private SupplierManageMapper supplierManageMapper; // 新增方法 /** * 新增库存入库信息 * @param stockIn */ @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 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()); stockManagement.setStockQuantity(stockIn.getInboundQuantity()); stockManagement.setInboundTime(stockIn.getInboundTime()); stockManagement.setBoundTime(new Date()); stockManagement.setUserId(stockIn.getUserId()); 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获取库存入库信息 public StockIn getStockInById(Long 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不能为空"); } // 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 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; } @Override public int delStockin(List ids) { LambdaQueryWrapper delWrapper = new LambdaQueryWrapper<>(); delWrapper.in(StockIn::getId, ids); return stockInMapper.delete(delWrapper); } @Override public IPage selectStockInPage(Page page, StockinDto stockinDto) { System.out.println(stockinDto); IPage stockinDtoIPage = stockInMapper.selectStockInWithProductInfo(page, stockinDto); System.out.println(stockinDtoIPage.getRecords()); return stockInMapper.selectStockInWithProductInfo(page, stockinDto); } @Override public void stockinExport(HttpServletResponse response, StockinDto stockinDto) { List stockInExcelDtoList = stockInMapper.stockinExportList(stockinDto); ExcelUtil util = new ExcelUtil(StockInExcelDto.class); util.exportExcel(response, stockInExcelDtoList, "供应商导出"); } }