本次重构将抽奖记录和中奖记录相关的业务逻辑从 LotteryService
中分离出来,创建了专门的 LotteryRecordService
服务类,实现了更好的职责分离和代码组织。
文件位置: application/common/Service/lottery/LotteryRecordService.php
主要功能:
createDrawRecord()
- 创建抽奖记录getUserDrawCount()
- 获取用户抽奖次数getUserWinCount()
- 获取用户中奖次数getActivityDrawStats()
- 获取活动抽奖统计getUserDrawRecords()
- 获取用户抽奖记录列表getActivityDrawRecords()
- 获取活动抽奖记录列表getDrawRecordDetail()
- 获取抽奖记录详情hasUserDrawnForOrder()
- 检查用户是否已为指定订单抽奖getUserDrawHistoryStats()
- 获取用户抽奖历史统计getActivityDrawRanking()
- 获取活动抽奖排行榜getActivityDrawTimeDistribution()
- 获取活动抽奖时间分布统计createWinRecord()
- 创建中奖记录markWinRecordAsDelivered()
- 标记中奖记录为发放成功markWinRecordAsFailed()
- 标记中奖记录为发放失败getPendingWinRecords()
- 获取待发放的中奖记录getUserWinRecords()
- 获取用户中奖记录getActivityWinStats()
- 获取活动中奖统计setWinRecordDeliveryAddress()
- 设置中奖记录收货地址setWinRecordExpressInfo()
- 设置中奖记录快递信息setWinRecordExchangeCode()
- 设置中奖记录兑换码markWinRecordCodeUsed()
- 标记中奖记录兑换码已使用batchProcessPendingWinRecords()
- 批量处理待发放的中奖记录manualDeliverPrize()
- 手动发放奖品(管理员操作)cancelWinRecord()
- 取消中奖记录autoDeliverPrize()
- 自动发放奖品deliverCoupon()
- 发放优惠券deliverRedPacket()
- 发放红包deliverExchangeCode()
- 发放兑换码deliverGoods()
- 发放商城商品以下方法已从 LotteryService
中移除,迁移到 LotteryRecordService
:
createDrawRecord()
getUserDrawCount()
getUserWinCount()
getActivityDrawStats()
getUserDrawRecords()
getActivityDrawRecords()
getDrawRecordDetail()
hasUserDrawnForOrder()
getUserDrawHistoryStats()
getActivityDrawRanking()
getActivityDrawTimeDistribution()
createWinRecord()
markWinRecordAsDelivered()
markWinRecordAsFailed()
setWinRecordDeliveryAddress()
setWinRecordExpressInfo()
setWinRecordExchangeCode()
markWinRecordCodeUsed()
getPendingWinRecords()
getUserWinRecords()
getActivityWinStats()
batchProcessPendingWinRecords()
manualDeliverPrize()
cancelWinRecord()
文件: application/api/controller/Lottery.php
getUserDrawCount()
→ LotteryRecordService::getUserDrawCount()
getUserWinCount()
→ LotteryRecordService::getUserWinCount()
getUserDrawRecords()
→ LotteryRecordService::getUserDrawRecords()
getUserWinRecords()
→ LotteryRecordService::getUserWinRecords()
getActivityDrawRanking()
→ LotteryRecordService::getActivityDrawRanking()
use app\common\Service\lottery\LotteryRecordService;
createDrawRecord()
→ LotteryRecordService::createDrawRecord()
createWinRecord()
→ LotteryRecordService::createWinRecord()
autoDeliverPrize()
→ LotteryRecordService::autoDeliverPrize()
hasUserDrawnForOrder()
→ LotteryRecordService::hasUserDrawnForOrder()
markWinRecordAsDelivered()
→ LotteryRecordService::markWinRecordAsDelivered()
setWinRecordExchangeCode()
→ LotteryRecordService::setWinRecordExchangeCode()
$drawRecord = LotteryRecordService::createDrawRecord(
$activityId,
$userId,
$prizeId,
$isWin,
$triggerType,
$triggerOrderId,
$triggerAmount,
$winInfo
);
$winRecord = LotteryRecordService::createWinRecord(
$drawRecord->id,
$activityId,
$userId,
$prizeId,
$prizeName,
$prizeType,
$prizeValue
);
$drawCount = LotteryRecordService::getUserDrawCount($activityId, $userId);
$winCount = LotteryRecordService::getUserWinCount($activityId, $userId);
$processedCount = LotteryRecordService::batchProcessPendingWinRecords(50);
LotteryRecordService
依赖 LotteryService
中的兑换码管理方法