Files
henan-backend/skins-promo/src/main/java/com/ruoyi/promo/service/PromoCdkeyService.java
T
2026-09-21 19:21:35 +08:00

74 lines
2.2 KiB
Java

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