package cn.iocoder.yudao.module.erp.dal.mysql.stock; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.stock.ErpStockPageReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; import java.math.BigDecimal; import java.util.List; import java.util.Map; /** * ERP 产品库存 Mapper * * @author 芋道源码 */ @Mapper public interface ErpStockMapper extends BaseMapperX { default PageResult selectPage(ErpStockPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ErpStockDO::getProductId, reqVO.getProductId()) .eqIfPresent(ErpStockDO::getWarehouseId, reqVO.getWarehouseId()) .orderByDesc(ErpStockDO::getId)); } default ErpStockDO selectByProductIdAndWarehouseId(Long productId, Long warehouseId) { return selectOne(ErpStockDO::getProductId, productId, ErpStockDO::getWarehouseId, warehouseId); } default int updateCountIncrement(Long id, BigDecimal count, boolean negativeEnable) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() .eq(ErpStockDO::getId, id); if (count.compareTo(BigDecimal.ZERO) > 0) { updateWrapper.setSql("count = count + " + count); } else if (count.compareTo(BigDecimal.ZERO) < 0) { if (!negativeEnable) { updateWrapper.ge(ErpStockDO::getCount, count.abs()); } updateWrapper.setSql("count = count - " + count.abs()); } return update(null, updateWrapper); } default BigDecimal selectSumByProductId(Long productId) { // SQL sum 查询 List> result = selectMaps(new QueryWrapper() .select("SUM(count) AS sumCount") .eq("product_id", productId)); // 获得数量 if (CollUtil.isEmpty(result)) { return BigDecimal.ZERO; } return BigDecimal.valueOf(MapUtil.getDouble(result.get(0), "sumCount", 0D)); } }