2026-06-26 20b96473f2520590a0dca6b775b81e3ea06a77a0
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
package cn.iocoder.yudao.module.promotion.service.bargain;
 
 
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.promotion.api.bargain.dto.BargainValidateJoinRespDTO;
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.recrod.BargainRecordPageReqVO;
import cn.iocoder.yudao.module.promotion.controller.app.bargain.vo.record.AppBargainRecordCreateReqVO;
import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainRecordDO;
 
import jakarta.annotation.Nullable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
 
/**
 * 砍价记录 service 接口
 *
 * @author HUIHUI
 */
public interface BargainRecordService {
 
    /**
     * 【会员】创建砍价记录(参与参加活动)
     *
     * @param userId 用户编号
     * @param reqVO 创建信息
     * @return 砍价记录编号
     */
    Long createBargainRecord(Long userId, AppBargainRecordCreateReqVO reqVO);
 
    /**
     * 更新砍价记录的砍价金额
     *
     * 如果满足砍价成功的条件,则更新砍价记录的状态为成功
     *
     * @param id 砍价记录编号
     * @param whereBargainPrice 当前的砍价金额
     * @param reducePrice 减少的砍价金额
     * @param success 是否砍价成功
     * @return 是否更新成功。注意,如果并发更新时,会更新失败
     */
    Boolean updateBargainRecordBargainPrice(Long id, Integer whereBargainPrice,
                                            Integer reducePrice, Boolean success);
 
    /**
     * 【下单前】校验是否参与砍价活动
     * <p>
     * 如果校验失败,则抛出业务异常
     *
     * @param userId          用户编号
     * @param bargainRecordId 砍价活动编号
     * @param skuId           SKU 编号
     * @return 砍价信息
     */
    BargainValidateJoinRespDTO validateJoinBargain(Long userId, Long bargainRecordId, Long skuId);
 
    /**
     * 更新砍价记录的订单编号
     *
     * 在砍价成功后,用户发起订单后,会记录该订单编号
     *
     * @param id     砍价记录编号
     * @param orderId 订单编号
     */
    void updateBargainRecordOrderId(Long id, Long orderId);
 
    /**
     * 获得砍价记录
     *
     * @param id 砍价记录编号
     * @return 砍价记录
     */
    BargainRecordDO getBargainRecord(Long id);
 
    /**
     * 获得用户在当前砍价活动中的最后一条砍价记录
     *
     * @param userId 用户编号
     * @param activityId 砍价记录编号
     * @return 砍价记录
     */
    BargainRecordDO getLastBargainRecord(Long userId, Long activityId);
 
    /**
     * 获得砍价人数 Map
     *
     * @param activityIds 活动编号
     * @param status 砍价记录状态
     * @return 砍价人数 Map
     */
    Map<Long, Integer> getBargainRecordUserCountMap(Collection<Long> activityIds, @Nullable Integer status);
 
    /**
     * 获得砍价人数
     *
     * @param status 砍价记录状态
     * @return 砍价人数
     */
    Integer getBargainRecordUserCount(Integer status);
 
    /**
     * 获得砍价人数
     *
     * @param activityId 砍价活动编号
     * @param status 砍价记录状态
     * @return 砍价人数
     */
    Integer getBargainRecordUserCount(Long activityId, Integer status);
 
    /**
     * 【管理员】获得砍价记录分页
     *
     * @param pageReqVO 分页查询
     * @return 砍价记录分页
     */
    PageResult<BargainRecordDO> getBargainRecordPage(BargainRecordPageReqVO pageReqVO);
 
    /**
     * 【会员】获得砍价记录分页
     *
     * @param userId 用户编号
     * @param pageParam 分页查询
     * @return 砍价记录分页
     */
    PageResult<BargainRecordDO> getBargainRecordPage(Long userId, PageParam pageParam);
 
    /**
     * 获得砍价记录列表
     *
     * @param status 砍价记录状态
     * @param count 条数
     * @return 砍价记录列表
     */
    List<BargainRecordDO> getBargainRecordList(Integer status, Integer count);
 
}