lishenao
3 天以前 d05d46076c62c744cdbd84c84d6e19b42cda9259
入库管理,出库管理,库存管理后端接口修改
已修改19个文件
444 ■■■■■ 文件已修改
src/main/java/com/ruoyi/inventory/controller/StockManagementController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/controller/StockOutController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/dto/StockManagementDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/dto/StockinDto.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/dto/StockoutDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/excel/StockInExcelDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/excel/StockManagementExcelDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/excel/StockOutExcelDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/pojo/StockIn.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/pojo/StockManagement.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/pojo/StockOut.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/service/StockInService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/service/StockManagementService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/service/impl/StockManagementServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/service/impl/StockOutServiceImpl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/inventory/StockInMapper.xml 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/inventory/StockManagementMapper.xml 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/inventory/StockOutMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inventory/controller/StockManagementController.java
@@ -47,4 +47,8 @@
    public void stockmanageExport(HttpServletResponse response, StockManagementDto stockManagementDto) {
        stockManagementService.stockManageExport(response, stockManagementDto);
    }
    @RequestMapping("/stockout")
    public AjaxResult stockout(@RequestBody StockManagement stockManagement) {
        return success(stockManagementService.stockout(stockManagement));
    }
}
src/main/java/com/ruoyi/inventory/controller/StockOutController.java
@@ -8,6 +8,7 @@
import com.ruoyi.inventory.dto.StockoutDto;
import com.ruoyi.inventory.mapper.StockManagementMapper;
import com.ruoyi.inventory.pojo.StockIn;
import com.ruoyi.inventory.pojo.StockManagement;
import com.ruoyi.inventory.pojo.StockOut;
import com.ruoyi.inventory.service.StockOutService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -60,4 +61,5 @@
        stockOutService.delStockOut(ids);
        return AjaxResult.success();
    }
}
src/main/java/com/ruoyi/inventory/dto/StockManagementDto.java
@@ -33,4 +33,8 @@
     * 规格型号
     */
    private String specificationModel;
    /**
     * 入库人
     */
    private String nickname;
}
src/main/java/com/ruoyi/inventory/dto/StockinDto.java
@@ -13,6 +13,10 @@
import java.util.Date;
@Data
public class StockinDto extends StockIn{
    /**
     * 入库人
     */
    private String nickname;
    @ApiModelProperty(value = "产品大类")
    private String productCategory;
@@ -45,8 +49,4 @@
    private BigDecimal taxExclusiveTotalPrice;
    @ApiModelProperty(value = "供应商名称")
    private String supplierName;
    @TableField(exist = false)
    private Date startTime;
    @TableField(exist = false)
    private Date endTime;
}
src/main/java/com/ruoyi/inventory/dto/StockoutDto.java
@@ -35,4 +35,8 @@
     * 规格型号
     */
    private String specificationModel;
    /**
     * 入库人
     */
    private String nickname;
}
src/main/java/com/ruoyi/inventory/excel/StockInExcelDto.java
@@ -31,5 +31,5 @@
    @Excel(name = "税率")
    private BigDecimal taxRate;
    @Excel(name = "入库人")
    private String inboundPerson;
    private String nickname;
}
src/main/java/com/ruoyi/inventory/excel/StockManagementExcelDto.java
@@ -35,5 +35,5 @@
    @Excel(name = "税率")
    private BigDecimal taxRate;
    @Excel(name = "入库人")
    private String inboundPerson;
    private String nickname;
}
src/main/java/com/ruoyi/inventory/excel/StockOutExcelDto.java
@@ -8,7 +8,7 @@
@Data
public class StockOutExcelDto {
    @Excel(name = "出库时间")
    private String inboundTime;
    private String outboundTime;
    @Excel(name = "出库批次")
    private String inboundBatch;
    @Excel(name = "产品大类")
@@ -28,6 +28,6 @@
    @Excel(name = "税率")
    private BigDecimal taxRate;
    @Excel(name = "出库人")
    private String outboundPerson;
    private String nickname;
}
src/main/java/com/ruoyi/inventory/pojo/StockIn.java
@@ -25,7 +25,7 @@
    /**
     * 产品id
     */
    private Long productId;
    private Integer productRecordid;
    /**
     * 入库时间
@@ -41,7 +41,7 @@
    /**
     * 供应商id
     */
    private Long supplierId;
    private Integer supplierId;
    /**
     * 入库数量
     */
@@ -52,7 +52,7 @@
    /**
     * 入库人
     */
    private String inboundPerson;
    private Long userId;
//    tenant_id
    /**
     * 租户ID
src/main/java/com/ruoyi/inventory/pojo/StockManagement.java
@@ -25,15 +25,15 @@
    /**
     * 产品id
     */
    private Long productId;
    private Integer productRecordid;
    /**
     * 当前库存量
     */
    private Integer stockQuantity;
    private Long supplierId;
    private String inboundBatch;
    private Integer supplierId;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date boundTime;
@@ -43,7 +43,7 @@
    /**
     * 入库人
     */
    private String inboundPerson;
    private Long userId;
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
src/main/java/com/ruoyi/inventory/pojo/StockOut.java
@@ -24,7 +24,7 @@
    /**
     * 产品id
     */
    private Long productId;
    private Integer productRecordid;
    /**
     * 出库时间
@@ -39,7 +39,7 @@
    /**
     * 供应商名称
     */
    private Long supplierId;
    private Integer supplierId;
    /**
     * 入库数量
@@ -51,7 +51,8 @@
    /**
     * 出库人
     */
    private String inboundPerson;
    private Long userId;
    private Integer stockmanageId;
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
src/main/java/com/ruoyi/inventory/service/StockInService.java
@@ -19,7 +19,7 @@
    StockIn getStockInById(Long id);
    int updateStockIn(StockIn stockIn);
    boolean updateStockIn(StockIn stockIn);
    int delStockin(List<Integer> ids);
//    PageInfo<StockinProcuct> getStockInPage(Integer pageNum, Integer pageSize, StockInQueryDTO query);
src/main/java/com/ruoyi/inventory/service/StockManagementService.java
@@ -3,9 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.basic.dto.SupplierManageDto;
import com.ruoyi.inventory.dto.StockManagementDto;
import com.ruoyi.inventory.dto.StockinDto;
import com.ruoyi.inventory.pojo.StockManagement;
import javax.servlet.http.HttpServletResponse;
@@ -18,5 +16,6 @@
    int delStockManage(List<Integer> ids);
    IPage<StockManagement> selectStockManagePage(Page page, StockManagementDto stockManagementdto);
    void stockManageExport(HttpServletResponse response, StockManagementDto stockManagementdto);
    int stockout(StockManagement stockManagement);
    int addStockManage(StockManagement stockManagement);
}
src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java
@@ -4,6 +4,8 @@
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;
@@ -13,6 +15,8 @@
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;
@@ -28,6 +32,10 @@
    private StockInMapper stockInMapper;
    @Autowired
    private StockManagementMapper stockManagementMapper;
    @Autowired
    private ProductRecordMapper productRecordMapper;
    @Autowired
    private SupplierManageMapper supplierManageMapper;
//    新增方法
@@ -38,32 +46,41 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveStockin(StockIn stockIn) {
        stockInMapper.insert(stockIn);
        StockManagement stockManagement = new StockManagement();
//        进行判断是否存在相同的产品id和供应商id
        LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(StockManagement::getProductId, stockIn.getProductId());
        queryWrapper.eq(StockManagement::getSupplierId, stockIn.getSupplierId());
        StockManagement stockManagement1 = stockManagementMapper.selectOne(queryWrapper);
        if (stockManagement1!= null) {
            stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() + stockIn.getInboundQuantity());
            stockManagement1.setInboundTime(stockIn.getInboundTime());
            stockManagement1.setBoundTime(new Date());
            stockManagement1.setInboundPerson(stockIn.getInboundPerson());
            System.out.println(stockManagement1+"22");
            stockManagementMapper.updateById(stockManagement1);
//需要先判断产品记录表中是否有该产品
        ProductRecord productRecord = productRecordMapper.selectById(stockIn.getProductRecordid());
        if (productRecord == null) {
            throw new RuntimeException("产品记录表中没有该产品");
        }
        else {
            stockManagement.setProductId(stockIn.getProductId());
            stockManagement.setStockQuantity(stockIn.getInboundQuantity());
            stockManagement.setBoundTime(stockIn.getInboundTime());
            stockManagement.setStockQuantity(stockIn.getInboundQuantity());
            stockManagement.setInboundPerson(stockIn.getInboundPerson());
//        需要先判断供应商表中是否有该供应商
        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());
            stockManagement.setTenantId(stockIn.getTenantId());
            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获取库存入库信息
@@ -71,39 +88,78 @@
        StockIn stockIn = stockInMapper.selectById(id);
        return stockIn;
    }
    @Override//更新库存入库信息
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updateStockIn(StockIn stockIn) {
        StockIn stockIn1 = stockInMapper.selectById(stockIn.getId());
//        进行判断是否存在相同的产品id和供应商id
        LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(StockManagement::getProductId, stockIn.getProductId());
        queryWrapper.eq(StockManagement::getSupplierId, stockIn.getSupplierId());
        StockManagement stockManagement1 = stockManagementMapper.selectOne(queryWrapper);
        if (stockManagement1!= null) {
            stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() - stockIn1.getInboundQuantity() + stockIn.getInboundQuantity());
            stockManagement1.setInboundTime(stockIn.getInboundTime());
            stockManagement1.setBoundTime(new Date());
            stockManagement1.setInboundPerson(stockIn.getInboundPerson());
            System.out.println(stockManagement1 + "22");
            stockManagementMapper.updateById(stockManagement1);
        }        else {
            StockManagement stockManagement = new StockManagement();
            stockManagement.setProductId(stockIn.getProductId());
            stockManagement.setStockQuantity(stockIn.getInboundQuantity());
            stockManagement.setBoundTime(stockIn.getInboundTime());
            stockManagement.setStockQuantity(stockIn.getInboundQuantity());
            stockManagement.setInboundPerson(stockIn.getInboundPerson());
            stockManagement.setSupplierId(stockIn.getSupplierId());
            stockManagement.setTenantId(stockIn.getTenantId());
            stockManagement.setBoundTime(new Date());
            System.out.println(stockManagement + "33");
            stockManagementMapper.insert(stockManagement);
    public boolean updateStockIn(StockIn stockIn) {
        // 1. 参数校验
        if (stockIn == null || stockIn.getId() == null) {
            throw new IllegalArgumentException("入库记录ID不能为空");
        }
        return stockInMapper.updateById(stockIn);
        // 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;
    }
    @Override
    public int delStockin(List<Integer> ids) {
        LambdaQueryWrapper<StockIn> delWrapper = new LambdaQueryWrapper<>();
src/main/java/com/ruoyi/inventory/service/impl/StockManagementServiceImpl.java
@@ -1,15 +1,21 @@
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.excel.SupplierManageExcelDto;
import com.ruoyi.basic.mapper.SupplierManageMapper;
import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.inventory.dto.StockManagementDto;
import com.ruoyi.inventory.excel.StockManagementExcelDto;
import com.ruoyi.inventory.mapper.StockManagementMapper;
import com.ruoyi.inventory.mapper.StockOutMapper;
import com.ruoyi.inventory.pojo.StockManagement;
import com.ruoyi.inventory.pojo.StockOut;
import com.ruoyi.inventory.service.StockManagementService;
import com.ruoyi.purchase.mapper.ProductRecordMapper;
import com.ruoyi.purchase.pojo.ProductRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -20,6 +26,14 @@
public class StockManagementServiceImpl extends ServiceImpl<StockManagementMapper,StockManagement> implements StockManagementService {
    @Autowired
    private StockManagementMapper stockManagementMapper;
    @Autowired
    private StockOutMapper stockOutMapper;
    @Autowired
    private ProductRecordMapper productRecordMapper;
    @Autowired
    private SupplierManageMapper supplierManageMapper;
    @Override
    public int updateStockManagement(StockManagement stockManagement) {
@@ -43,4 +57,54 @@
        ExcelUtil<StockManagementExcelDto> util = new ExcelUtil<StockManagementExcelDto>(StockManagementExcelDto.class);
        util.exportExcel(response, stockManageList, "库存导出");
    }
    @Override
    public int stockout(StockManagement stockManagement) {
//        需要进行判断,库存数量是否足够
        StockManagement stockManagement1 = stockManagementMapper.selectById(stockManagement.getId());
        if (stockManagement1.getStockQuantity() < stockManagement.getStockQuantity()) {
            throw new RuntimeException("库存数量不足");
        }else if (stockManagement1.getStockQuantity().equals(stockManagement.getStockQuantity())){
//            减去的数量要在出库记录表中加一条数据
            StockOut stockOut = new StockOut();
            stockOut.setInboundQuantity(stockManagement.getStockQuantity());
            stockOut.setProductRecordid(stockManagement1.getProductRecordid());
            stockOut.setSupplierId(stockManagement1.getSupplierId());
            stockOut.setUserId(stockManagement.getUserId());
            stockOut.setInboundTime(stockManagement1.getBoundTime());
            stockOutMapper.insert(stockOut);
            return stockManagementMapper.deleteById(stockManagement.getId());
        }
        else {
            stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() - stockManagement.getStockQuantity());
            StockOut stockOut = new StockOut();
            stockOut.setInboundQuantity(stockManagement.getStockQuantity());
            stockOut.setProductRecordid(stockManagement1.getProductRecordid());
            stockOut.setSupplierId(stockManagement1.getSupplierId());
            stockOut.setUserId(stockManagement.getUserId());
            stockOut.setInboundTime(stockManagement1.getBoundTime());
            stockOutMapper.insert(stockOut);
            return stockManagementMapper.updateById(stockManagement1);
        }
    }
//    添加库存方法
    @Override
    public int addStockManage(StockManagement stockManagement) {
//        需要进行判断
        LambdaQueryWrapper<ProductRecord> queryWrapper1 = new LambdaQueryWrapper<>();
        queryWrapper1.eq(ProductRecord::getProductId, stockManagement.getProductRecordid());
        ProductRecord productRecord = productRecordMapper.selectOne(queryWrapper1);
        if (productRecord == null) {
            throw new RuntimeException("产品不存在");
        }
        LambdaQueryWrapper<SupplierManage> queryWrapper2 = new LambdaQueryWrapper<>();
        queryWrapper2.eq(SupplierManage::getId, stockManagement.getSupplierId());
        SupplierManage supplierManage = supplierManageMapper.selectOne(queryWrapper2);
        System.out.println(supplierManage+"11");
        if (supplierManage == null) {
            throw new RuntimeException("供应商不存在");
        }
        return stockManagementMapper.insert(stockManagement);
    }
}
src/main/java/com/ruoyi/inventory/service/impl/StockOutServiceImpl.java
@@ -4,6 +4,8 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.excel.SupplierManageExcelDto;
import com.ruoyi.basic.mapper.SupplierManageMapper;
import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.inventory.dto.StockoutDto;
import com.ruoyi.inventory.excel.StockOutExcelDto;
@@ -13,6 +15,8 @@
import com.ruoyi.inventory.pojo.StockOut;
import com.ruoyi.inventory.service.StockOutService;
import com.ruoyi.purchase.mapper.ProductRecordMapper;
import com.ruoyi.purchase.pojo.ProductRecord;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -28,6 +32,10 @@
    private StockOutMapper stockOutMapper;
    @Autowired
    private StockManagementMapper stockManagementMapper;
    @Autowired
    private ProductRecordMapper productRecordMapper;
    @Autowired
    private SupplierManageMapper supplierManageMapper;
    @Override
@@ -44,47 +52,56 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveStockout(StockOut stockOut) {
//    进行判断是否存在相同的产品id和供应商id
//    进行判断是否存在相同的产品id和供应商id,要判断product_id在表product_record中是否存在,因为stock_out表中的product_id是product_record表中的product_id关联的
        LambdaQueryWrapper<ProductRecord> queryWrapper1 = new LambdaQueryWrapper<>();
        queryWrapper1.eq(ProductRecord::getProductId, stockOut.getProductRecordid());
        ProductRecord productRecord = productRecordMapper.selectOne(queryWrapper1);
        if (productRecord == null) {
            throw new RuntimeException("产品不存在");
        }
        LambdaQueryWrapper<SupplierManage> queryWrapper2 = new LambdaQueryWrapper<>();
        queryWrapper2.eq(SupplierManage::getId, stockOut.getSupplierId());
        SupplierManage supplierManage = supplierManageMapper.selectOne(queryWrapper2);
        if (supplierManage == null) {
            throw new RuntimeException("供应商不存在");
        }
        LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(StockManagement::getProductId, stockOut.getProductId());
        queryWrapper.eq(StockManagement::getProductRecordid, stockOut.getProductRecordid());
        queryWrapper.eq(StockManagement::getSupplierId, stockOut.getSupplierId());
        StockManagement stockManagement1 = stockManagementMapper.selectOne(queryWrapper);
        if (stockManagement1!= null) {
//            判断库存数量是否大于出库数量
            if (stockManagement1.getStockQuantity() < stockOut.getInboundQuantity()) {
                throw new RuntimeException("库存数量不足");
            }
        StockManagement stockManagement = stockManagementMapper.selectOne(queryWrapper);
        if (stockManagement != null) {
            stockOut.setStockmanageId(stockManagement.getId());
            stockOutMapper.insert(stockOut);
            stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() - stockOut.getInboundQuantity());
            stockManagement1.setInboundTime(new Date());
            stockManagementMapper.updateById(stockManagement1);
        }
        else {
            throw new RuntimeException("库存不存在");
        }else {
            throw new RuntimeException("库存中不存在该产品和供应商");
        }
    }
    @Override
    public int updateStockOut(StockOut stockOut) {
//        需要进行判断在库存中是否存在该产品,如果存在,就进行修改,否则就抛出异常
        StockOut stockOut1 = stockOutMapper.selectById(stockOut.getId());
//      修改的时候要判断是否存在相同的产品id和供应商id
        LambdaQueryWrapper<ProductRecord> queryWrapper1 = new LambdaQueryWrapper<>();
        queryWrapper1.eq(ProductRecord::getProductId, stockOut.getProductRecordid());
        ProductRecord productRecord = productRecordMapper.selectOne(queryWrapper1);
        if (productRecord == null) {
            throw new RuntimeException("产品不存在");
        }
        LambdaQueryWrapper<SupplierManage> queryWrapper2 = new LambdaQueryWrapper<>();
        queryWrapper2.eq(SupplierManage::getId, stockOut.getSupplierId());
        SupplierManage supplierManage = supplierManageMapper.selectOne(queryWrapper2);
        if (supplierManage == null) {
            throw new RuntimeException("供应商不存在");
        }
            LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(StockManagement::getProductId, stockOut.getProductId());
            StockManagement stockManagement1 = stockManagementMapper.selectOne(queryWrapper);
            if (stockManagement1!= null) {
//                判断库存数量是否大于出库数量
                if (stockManagement1.getStockQuantity()+stockOut1.getInboundQuantity() < stockOut.getInboundQuantity()) {
                    throw new RuntimeException("库存数量不足");
                }
                stockManagement1.setStockQuantity(stockManagement1.getStockQuantity() + stockOut1.getInboundQuantity() - stockOut.getInboundQuantity());
                stockManagement1.setInboundTime(stockOut.getInboundTime());
                stockManagement1.setBoundTime(new Date());
                System.out.println(stockManagement1 + "22");
                stockManagementMapper.updateById(stockManagement1);
            } else {
                throw new RuntimeException("库存不存在");
            }
        queryWrapper.eq(StockManagement::getProductRecordid, stockOut.getProductRecordid());
        queryWrapper.eq(StockManagement::getSupplierId, stockOut.getSupplierId());
        StockManagement stockManagement = stockManagementMapper.selectOne(queryWrapper);
        if (stockManagement != null) {
            stockOut.setStockmanageId(stockManagement.getId());
        return stockOutMapper.updateById(stockOut);
        }else {
            throw new RuntimeException("库存中不存在该产品和供应商");
        }
    }
    @Override
@@ -98,4 +115,5 @@
        ExcelUtil<StockOutExcelDto> util = new ExcelUtil<StockOutExcelDto>(StockOutExcelDto.class);
        util.exportExcel(response, stockoutList, "供应商导出");
    }
}
src/main/resources/mapper/inventory/StockInMapper.xml
@@ -39,7 +39,7 @@
    <select id="selectStockInWithProductInfo" resultType="com.ruoyi.inventory.dto.StockinDto">
        SELECT
        T1.id,
        T1.product_id,
        T1.product_recordid,
        T1.inbound_time,
        T1.inbound_batch,
        T1.supplier_id,
@@ -48,31 +48,29 @@
        T2.tax_inclusive_total_price,
        T2.tax_rate,
        T2.tax_exclusive_total_price,
        T1.inbound_person,
        T1.user_id,
        T1.tenant_id,
        T2.product_category,
        T2.specification_model,
        T2.unit,
        T3.supplier_name
        T3.supplier_name,
        T4.nick_name
        FROM
        stock_in T1
        INNER JOIN
        product_record T2
        ON
        T1.product_id = T2.product_id
        T1.product_recordid = T2.id
        INNER JOIN
        supplier_manage T3
        ON
        T1.supplier_id = T3.id
        INNER JOIN sys_user T4
        ON
        T1.user_id = T4.user_id
        <where>
            <if test="stockinDto.supplierName != null and stockinDto.supplierName != ''">
                AND T3.supplier_name LIKE CONCAT('%', #{stockinDto.supplierName}, '%')
            </if>
            <if test="stockinDto.startTime != null and stockinDto.startTime != ''">
                AND T1.inbound_time &gt;= #{stockinDto.startTime}
            </if>
            <if test="stockinDto.endTime != null and stockinDto.endTime != ''">
                AND T1.inbound_time &lt;= #{stockinDto.endTime}
            </if>
        </where>
        ORDER BY T1.inbound_time DESC
@@ -81,7 +79,7 @@
    <select id="stockinExportList" resultType="com.ruoyi.inventory.excel.StockInExcelDto">
        SELECT
        T1.id,
        T1.product_id,
        T1.product_recordid,
        T1.inbound_time,
        T1.inbound_batch,
        T1.supplier_id,
@@ -90,22 +88,26 @@
        T2.tax_inclusive_total_price,
        T2.tax_rate,
        T2.tax_exclusive_total_price,
        T1.inbound_person,
        T1.user_id,
        T1.tenant_id,
        T2.product_category,
        T2.specification_model,
        T2.unit,
        T3.supplier_name
        T3.supplier_name,
        T4.nick_name
        FROM
        stock_in T1
        INNER JOIN
        product_record T2
        ON
        T1.product_id = T2.product_id
        T1.product_recordid = T2.id
        INNER JOIN
        supplier_manage T3
        ON
        T1.supplier_id = T3.id
        INNER JOIN sys_user T4
        ON
        T1.user_id = T4.user_id
        <where>
            <if test="stockinDto.supplierName != null and stockinDto.supplierName != ''">
                AND T3.supplier_name LIKE CONCAT('%', #{stockinDto.supplierName}, '%')
src/main/resources/mapper/inventory/StockManagementMapper.xml
@@ -12,27 +12,33 @@
            T2.specification_model,
            T3.supplier_name,
            T1.id,
            T1.product_id,
            T1.product_recordid,
            T1.stock_quantity,
            T2.tax_inclusive_unit_price,
            T2.tax_inclusive_total_price,
            T2.tax_rate,
            T2.tax_exclusive_total_price,
            T1.inbound_person,
            T1.user_id,
            T1.supplier_id,
            T1.tenant_id,
            T1.bound_time,
            T1.inbound_time
            T1.inbound_time,
            T4.nick_name,
            T1.inbound_batch
        FROM
            stock_management T1
                INNER JOIN
            product_record T2
            ON
                T1.product_id = T2.product_id
                T1.product_recordid = T2.id
                INNER JOIN
            supplier_manage T3
            ON
                T1.supplier_id = T3.id
                INNER JOIN
            sys_user T4
            ON
                T1.user_id = T4.user_id
        <where>
            <if test="stockManagementDto.supplierName != null and stockManagementDto.supplierName != ''">
                AND T3.supplier_name LIKE CONCAT('%', #{stockManagementDto.supplierName}, '%')
@@ -47,27 +53,33 @@
        T2.specification_model,
        T3.supplier_name,
        T1.id,
        T1.product_id,
        T1.product_recordid,
        T1.stock_quantity,
        T2.tax_inclusive_unit_price,
        T2.tax_inclusive_total_price,
        T2.tax_rate,
        T2.tax_exclusive_total_price,
        T1.inbound_person,
        T1.user_id,
        T1.supplier_id,
        T1.tenant_id,
        T1.bound_time,
        T1.inbound_time
        T1.inbound_time,
        T4.nick_name,
        T1.inbound_batch
        FROM
        stock_management T1
        INNER JOIN
        product_record T2
        ON
        T1.product_id = T2.product_id
        T1.product_recordid = T2.id
        INNER JOIN
        supplier_manage T3
        ON
        T1.supplier_id = T3.id
        INNER JOIN
        sys_user T4
        ON
        T1.user_id = T4.user_id
        <where>
            <if test="stockManagementDto.supplierName != null and stockManagementDto.supplierName != ''">
                AND T3.supplier_name LIKE CONCAT('%', #{stockManagementDto.supplierName}, '%')
src/main/resources/mapper/inventory/StockOutMapper.xml
@@ -7,7 +7,7 @@
    <select id="selectStockOutBypage" resultType="com.ruoyi.inventory.dto.StockoutDto">
        SELECT
        T1.id,
        T1.product_id,
        T1.product_recordid,
        T1.inbound_time,
        T1.inbound_batch,
        T1.supplier_id,
@@ -16,22 +16,27 @@
        T2.tax_inclusive_total_price,
        T2.tax_rate,
        T2.tax_exclusive_total_price,
        T1.inbound_person,
        T1.user_id,
        T1.tenant_id,
        T2.product_category,
        T2.specification_model,
        T2.unit,
        T3.supplier_name
        T3.supplier_name,
        T4.nick_name
        FROM
        stock_out T1
        INNER JOIN
        product_record T2
        ON
        T1.product_id = T2.product_id
        T1.product_recordid = T2.id
        INNER JOIN
        supplier_manage T3
        ON
        T1.supplier_id = T3.id
        INNER JOIN
        sys_user T4
        ON
        T1.user_id = T4.user_id
        <where>
            <if test="stockOutdto.supplierName != null and stockOutdto.supplierName != ''">
                AND T3.supplier_name LIKE CONCAT('%', #{stockOutdto.supplierName}, '%')
@@ -42,7 +47,7 @@
    <select id="stockoutExportList" resultType="com.ruoyi.inventory.excel.StockOutExcelDto">
        SELECT
        T1.id,
        T1.product_id,
        T1.productrecord_id,
        T1.inbound_time,
        T1.inbound_batch,
        T1.supplier_id,
@@ -51,22 +56,27 @@
        T2.tax_inclusive_total_price,
        T2.tax_rate,
        T2.tax_exclusive_total_price,
        T1.inbound_person,
        T1.user_id,
        T1.tenant_id,
        T2.product_category,
        T2.specification_model,
        T2.unit,
        T3.supplier_name
        T3.supplier_name,
        T4.nick_name
        FROM
        stock_out T1
        INNER JOIN
        product_record T2
        ON
        T1.product_id = T2.product_id
        T1.productrecord_id = T2.id
        INNER JOIN
        supplier_manage T3
        ON
        T1.supplier_id = T3.id
        INNER JOIN
        sys_user T4
        ON
        T1.user_id = T4.user_id
        <where>
            <if test="stockOutdto.supplierName != null and stockOutdto.supplierName != ''">
                AND T3.supplier_name LIKE CONCAT('%', #{stockOutdto.supplierName}, '%')