package cn.lili.modules.promotion.service; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import java.util.Date; import java.util.List; import java.util.Map; /** * 促销商品业务层 * * @author Chopper * @since 2020/11/18 9:45 上午 */ public interface PromotionGoodsService extends IService { /** * 缓存商品库存key * * @param typeEnum 促销分类枚举 * @param promotionId 促销活动Id * @param skuId skuId * @return 缓存商品库存key */ static String getPromotionGoodsStockCacheKey(PromotionTypeEnum typeEnum, String promotionId, String skuId) { //ps: 2023-06-09 促销商品库存与普通商品库存不在同一槽内,会导致库存扣减lua脚本无法执行 return CachePrefix.SKU_STOCK.getPrefix() + "_" + typeEnum.name() + "_" + promotionId + "_" + skuId; } /** * 获取某sku所有有效活动 * * @param skuId 商品skuId * @param storeIds 店铺id * @return 促销商品集合 */ List findSkuValidPromotion(String skuId, String storeIds); /** * 获取sku所有有效活动 * * @param skus 商品skuId * @return 促销商品集合 */ List findSkuValidPromotions(List skus); /** * 分页获取促销商品信息 * * @param searchParams 查询参数 * @param pageVo 分页参数 * @return 促销商品列表 */ Page pageFindAll(PromotionGoodsSearchParams searchParams, PageVO pageVo); /** * 获取促销商品信息 * * @param searchParams 查询参数 * @return 促销商品列表 */ List listFindAll(PromotionGoodsSearchParams searchParams); /** * 获取促销商品信息 * * @param searchParams 查询参数 * @return 促销商品信息 */ PromotionGoods getPromotionsGoods(PromotionGoodsSearchParams searchParams); /** * 获取当前有效时间特定促销类型的促销商品信息 * * @param skuId skuId * @param promotionTypes 特定促销类型 * @return 促销商品信息 */ PromotionGoods getValidPromotionsGoods(String skuId, List promotionTypes); /** * 获取当前有效时间特定促销类型的促销商品价格 * * @param skuId skuId * @param promotionTypes 特定促销类型 * @return 促销商品价格 */ Double getValidPromotionsGoodsPrice(String skuId, List promotionTypes); /** * 查询参加活动促销商品是否同时参加指定类型的活动 * * @param promotionType 促销类型 * @param skuId skuId * @param startTime 开始时间 * @param endTime 结束时间 * @param promotionId 促销活动id(是否排除当前活动,如排除,则填写,没有的话,为null) * @return 共参加了几种活动 */ Integer findInnerOverlapPromotionGoods(String promotionType, String skuId, Date startTime, Date endTime, String promotionId); /** * 获取促销活动商品库存 * * @param typeEnum 促销商品类型 * @param promotionId 促销活动id * @param skuId 商品skuId * @return 促销活动商品库存 */ Integer getPromotionGoodsStock(PromotionTypeEnum typeEnum, String promotionId, String skuId); /** * 批量获取促销活动商品库存 * * @param typeEnum 促销商品类型 * @param promotionId 促销活动id * @param skuId 批量商品skuId * @return 促销活动商品库存 */ List getPromotionGoodsStock(PromotionTypeEnum typeEnum, String promotionId, List skuId); /** * 更新促销活动商品库存 * * @param promotionGoodsList 更新促销活动商品信息 */ void updatePromotionGoodsStock(List promotionGoodsList); /** * 更新促销活动商品库存 * * @param skuId 商品skuId * @param quantity 库存 */ void updatePromotionGoodsStock(String skuId, Integer quantity); /** * 更新促销活动商品索引 * * @param promotionGoods 促销商品信息 */ void updatePromotionGoodsByPromotions(PromotionGoods promotionGoods); /** * 删除促销商品 * * @param promotionId 促销活动id * @param skuIds skuId */ void deletePromotionGoods(String promotionId, List skuIds); /** * 删除促销促销商品 * * @param promotionIds 促销活动id */ void deletePromotionGoods(List promotionIds); /** * 删除商品的促销 * * @param goodsIds 商品id */ void deletePromotionGoodsByGoods(List goodsIds); /** * 根据参数删除促销商品 * * @param searchParams 查询参数 */ void deletePromotionGoods(PromotionGoodsSearchParams searchParams); /** * 获取当前商品促销信息 * * @param dataSku 商品sku信息 * @param cartType 购物车类型 * @return 当前商品促销信息 */ Map getCurrentGoodsPromotion(GoodsSku dataSku, String cartType); }