xiangpei
2025-05-22 0d9214d780c5093165f566f3e6f0c60f5d8aead7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
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<PromotionGoods> {
 
 
    /**
     * 缓存商品库存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<PromotionGoods> findSkuValidPromotion(String skuId, String storeIds);
 
 
    /**
     * 获取sku所有有效活动
     *
     * @param skus 商品skuId
     * @return 促销商品集合
     */
    List<PromotionGoods> findSkuValidPromotions(List<String> skus);
 
    /**
     * 分页获取促销商品信息
     *
     * @param searchParams 查询参数
     * @param pageVo       分页参数
     * @return 促销商品列表
     */
    Page<PromotionGoods> pageFindAll(PromotionGoodsSearchParams searchParams, PageVO pageVo);
 
    /**
     * 获取促销商品信息
     *
     * @param searchParams 查询参数
     * @return 促销商品列表
     */
    List<PromotionGoods> listFindAll(PromotionGoodsSearchParams searchParams);
 
    /**
     * 获取促销商品信息
     *
     * @param searchParams 查询参数
     * @return 促销商品信息
     */
    PromotionGoods getPromotionsGoods(PromotionGoodsSearchParams searchParams);
 
 
    /**
     * 获取当前有效时间特定促销类型的促销商品信息
     *
     * @param skuId          skuId
     * @param promotionTypes 特定促销类型
     * @return 促销商品信息
     */
    PromotionGoods getValidPromotionsGoods(String skuId, List<String> promotionTypes);
 
    /**
     * 获取当前有效时间特定促销类型的促销商品价格
     *
     * @param skuId          skuId
     * @param promotionTypes 特定促销类型
     * @return 促销商品价格
     */
    Double getValidPromotionsGoodsPrice(String skuId, List<String> 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<Integer> getPromotionGoodsStock(PromotionTypeEnum typeEnum, String promotionId, List<String> skuId);
 
    /**
     * 更新促销活动商品库存
     *
     * @param promotionGoodsList 更新促销活动商品信息
     */
    void updatePromotionGoodsStock(List<PromotionGoods> 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<String> skuIds);
 
    /**
     * 删除促销促销商品
     *
     * @param promotionIds 促销活动id
     */
    void deletePromotionGoods(List<String> promotionIds);
 
    /**
     * 删除商品的促销
     *
     * @param goodsIds 商品id
     */
    void deletePromotionGoodsByGoods(List<String> goodsIds);
 
    /**
     * 根据参数删除促销商品
     *
     * @param searchParams 查询参数
     */
    void deletePromotionGoods(PromotionGoodsSearchParams searchParams);
 
    /**
     * 获取当前商品促销信息
     *
     * @param dataSku  商品sku信息
     * @param cartType 购物车类型
     * @return 当前商品促销信息
     */
    Map<String, Object> getCurrentGoodsPromotion(GoodsSku dataSku, String cartType);
 
}