package com.ruoyi.other.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.domain.TExchangeCodePackage; import com.ruoyi.other.api.dto.ExchangeCodeBindDTO; import com.ruoyi.other.api.dto.ExchangeCodeConsumeDTO; import com.ruoyi.other.api.dto.ExchangeCodePackageSaveDTO; import com.ruoyi.other.api.dto.ExchangeCodeUseRecordQuery; import com.ruoyi.other.api.domain.TExchangeCodeUseRecord; import com.ruoyi.other.api.vo.ExchangeCodeBindResultVO; import com.ruoyi.other.api.vo.ExchangeCodeConsumeResultVO; import com.ruoyi.other.api.vo.ExchangeCodePackageDetailVO; import com.ruoyi.other.query.ExchangeCodeBatchInvalidDTO; import com.ruoyi.other.query.ExchangeCodeDetailQuery; import com.ruoyi.other.query.ExchangeCodePackageQuery; import com.ruoyi.other.vo.ExchangeCodeBatchInvalidResultVO; import com.ruoyi.other.vo.ExchangeCodeDetailVO; import java.util.List; import java.util.Map; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; public interface TExchangeCodePackageService extends IService { /** * 分页查询兑换码卡包列表。 * * @param query 查询条件 * @return 卡包分页结果 */ PageInfo pageList(ExchangeCodePackageQuery query); /** * 新增兑换码卡包。 * * @param dto 卡包保存参数 */ void savePackage(ExchangeCodePackageSaveDTO dto); /** * 编辑兑换码卡包。 * * @param dto 卡包保存参数 */ void updatePackage(ExchangeCodePackageSaveDTO dto); /** * 更新兑换码卡包启用状态。 * * @param id 卡包ID * @param status 启用状态 */ void updatePackageStatus(Long id, Integer status); /** * 刷新所有已过领取截止日期的兑换码卡包未绑定兑换码状态。 */ void refreshExpiredPackageCodes(); /** * 删除兑换码卡包。 * * @param ids 卡包ID,多个ID用英文逗号分隔 */ void deletePackage(String ids); /** * 查询兑换码卡包详情。 * * @param id 卡包ID * @return 卡包详情 */ ExchangeCodePackageDetailVO getDetail(Long id); /** * 分页查询兑换码明细。 * * @param query 查询条件 * @return 兑换码明细分页结果 */ PageInfo codePage(ExchangeCodeDetailQuery query); /** * 导出兑换码明细。 * * @param query 查询条件 * @return 兑换码明细导出数据 */ List exportCodes(ExchangeCodeDetailQuery query); /** * 批量失效兑换码。 * * @param dto 失效参数 * @return 失效结果 */ ExchangeCodeBatchInvalidResultVO batchInvalidate(ExchangeCodeBatchInvalidDTO dto); /** * 查询可下载二维码的兑换码列表。 * * @param packageId 卡包ID * @param onlyUnbound 是否只查询未绑定兑换码 * @return 可下载二维码的兑换码列表 */ List listDownloadableCodes(Long packageId, boolean onlyUnbound); /** * 查询兑换码明细。 * * @param id 兑换码明细ID * @return 兑换码明细 */ ExchangeCodeDetailVO getCodeDetail(Long id); /** * 绑定兑换码。 * * @param dto 绑定参数 * @param userId 用户ID * @param phone 手机号 * @return 绑定结果 */ ExchangeCodeBindResultVO bindExchangeCode(ExchangeCodeBindDTO dto, Long userId, String phone); /** * 查询用户兑换码余额映射。 * * @param userIds 用户ID集合 * @return 用户余额映射 */ Map getUserExchangeCodeBalanceMap(List userIds); /** * 扣减用户兑换码余额。 * * @param dto 扣减参数 * @return 扣减结果 */ ExchangeCodeConsumeResultVO consumeBalance(ExchangeCodeConsumeDTO dto); /** * 退款返还用户兑换码余额。 * * @param dto 退款参数 * @return 退款结果 */ ExchangeCodeConsumeResultVO refundBalance(ExchangeCodeConsumeDTO dto); /** * 分页查询兑换码余额流水。 * * @param query 查询条件 * @return 流水分页结果 */ Page useRecordPage(ExchangeCodeUseRecordQuery query); /** * 查询兑换码余额流水详情。 * * @param id 流水ID * @param userId 用户ID * @return 流水详情 */ TExchangeCodeUseRecord useRecordDetail(Long id, Long userId); }