package cn.iocoder.yudao.module.product.dal.mysql.sku;
|
|
import cn.hutool.core.lang.Assert;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.extension.handlers.Jackson3TypeHandler;
|
import org.apache.ibatis.annotations.*;
|
|
import java.util.Collection;
|
import java.util.List;
|
|
@Mapper
|
public interface ProductSkuMapper extends BaseMapperX<ProductSkuDO> {
|
|
/**
|
* 查询商品 SKU(包含已删除)
|
* 注意:使用 @Results 手动指定 typeHandler,否则 @Select 不会应用 autoResultMap,properties 字段无法解析 JSON
|
*/
|
@Select("SELECT * FROM product_sku WHERE id = #{id}")
|
@Results({
|
@Result(column = "properties", property = "properties", typeHandler = Jackson3TypeHandler.class),
|
})
|
ProductSkuDO selectByIdIncludeDeleted(@Param("id") Long id);
|
|
default List<ProductSkuDO> selectListBySpuId(Long spuId) {
|
return selectList(ProductSkuDO::getSpuId, spuId);
|
}
|
|
default List<ProductSkuDO> selectListBySpuId(Collection<Long> spuIds) {
|
return selectList(ProductSkuDO::getSpuId, spuIds);
|
}
|
|
default void deleteBySpuId(Long spuId) {
|
delete(new LambdaQueryWrapperX<ProductSkuDO>().eq(ProductSkuDO::getSpuId, spuId));
|
}
|
|
/**
|
* 更新 SKU 库存(增加)、销量(减少)
|
*
|
* @param id 编号
|
* @param incrCount 增加库存(正数)
|
*/
|
default void updateStockIncr(Long id, Integer incrCount) {
|
Assert.isTrue(incrCount > 0);
|
LambdaUpdateWrapper<ProductSkuDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<ProductSkuDO>()
|
.setSql(" stock = stock + " + incrCount
|
+ ", sales_count = sales_count - " + incrCount)
|
.eq(ProductSkuDO::getId, id);
|
update(null, lambdaUpdateWrapper);
|
}
|
|
/**
|
* 更新 SKU 库存(减少)、销量(增加)
|
*
|
* @param id 编号
|
* @param incrCount 减少库存(负数)
|
* @return 更新条数
|
*/
|
default int updateStockDecr(Long id, Integer incrCount) {
|
Assert.isTrue(incrCount < 0);
|
incrCount = - incrCount; // 取正
|
LambdaUpdateWrapper<ProductSkuDO> updateWrapper = new LambdaUpdateWrapper<ProductSkuDO>()
|
.setSql(" stock = stock - " + incrCount
|
+ ", sales_count = sales_count + " + incrCount)
|
.eq(ProductSkuDO::getId, id)
|
.ge(ProductSkuDO::getStock, incrCount);
|
return update(null, updateWrapper);
|
}
|
|
}
|