package com.ruoyi.promo.service; import com.ruoyi.common.core.domain.R; import com.ruoyi.promo.domain.entity.PromoCdkey; import com.ruoyi.promo.domain.entity.PromoCdkeyRedeem; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; /** * 推广CDKEY服务 */ public interface PromoCdkeyService { /** * 生成CDKEY(仅主播账号可创建) * @param creatorId 创建者ID * @param creatorName 创建者名称 * @param form 表单参数 * @return 生成的CDKEY码列表 */ R> generateCdkeys(Long creatorId, String creatorName, Map form); /** * 获取创建记录列表(当前登录主播自己创建的) * @param creatorId 创建者ID * @param startDate 开始日期 * @param endDate 结束日期 * @param status 状态(0=进行中,1=已结束) */ List getCdkeyList(Long creatorId, Date startDate, Date endDate, Integer status); /** * 获取兑换记录列表(当前主播创建的CDKEY被下级普通用户兑换的记录) * @param creatorId CDKEY创建者ID * @param startDate 开始日期 * @param endDate 结束日期 * @param redeemerName 兑换人名称 * @param cdkeyCode CDKEY码 */ List getRedeemList(Long creatorId, Date startDate, Date endDate, String redeemerName, String cdkeyCode); /** * 创建日报 */ List> getCreateDailyReport(Long creatorId, Date startDate, Date endDate); /** * 兑换日报 */ List> getRedeemDailyReport(Long creatorId, Date startDate, Date endDate); /** * 全局补齐已过期状态(定时任务使用) * @return 受影响行数 */ int markExpiredCdkeys(); /** * 查询待退还的CDK:已结束(status=1)且未退还(refund_time IS NULL) */ List selectRefundableCdkeys(); /** * 对单个CDK执行精确退还(预扣总额 - 实际派发),金币与积分同额。 * 幂等:重复调用或已退还时返回 0。 * @return 本次实际退还金额 */ BigDecimal refundOne(PromoCdkey cdkey); }