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); /** * 【下单前】校验是否参与砍价活动 *

* 如果校验失败,则抛出业务异常 * * @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 getBargainRecordUserCountMap(Collection 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 getBargainRecordPage(BargainRecordPageReqVO pageReqVO); /** * 【会员】获得砍价记录分页 * * @param userId 用户编号 * @param pageParam 分页查询 * @return 砍价记录分页 */ PageResult getBargainRecordPage(Long userId, PageParam pageParam); /** * 获得砍价记录列表 * * @param status 砍价记录状态 * @param count 条数 * @return 砍价记录列表 */ List getBargainRecordList(Integer status, Integer count); }