manghe/app/common/service/RewardService.php
2025-04-01 15:28:42 +00:00

114 lines
3.9 KiB
PHP

<?php
namespace app\common\service;
use app\common\model\User;
use app\common\model\Reward;
use app\common\model\CouponReceive;
use app\common\model\Coupon;
class RewardService
{
/**
* 发放奖励
* @param int $user_id 用户ID
* @param string $reward_ids 奖励ID或奖励ID数组
* @param string $source 奖励来源(如:签到、任务等)
* @return array 处理结果
*/
public static function sendReward($user_id, $reward_id, $source = '系统奖励')
{
if (!$user_id) {
return ['status' => false, 'msg' => '用户ID不能为空'];
}
// 获取奖励信息
$rewards = Reward::where('reward_id', '=', $reward_id)
->select()
->toArray();
if (empty($rewards)) {
return ['status' => false, 'msg' => '未找到有效奖励'];
}
$result = [];
$user = User::find($user_id);
if (empty($user)) {
return ['status' => false, 'msg' => '用户不存在'];
}
foreach ($rewards as $reward) {
$res = self::sendSingleReward($user_id, $reward, $source);
$result[] = $res;
}
return ['status' => true, 'msg' => '奖励发放成功', 'data' => $result];
}
/**
* 发放单个奖励
* @param int $user_id 用户ID
* @param array $reward 奖励信息
* @param string $source 奖励来源
* @return array 处理结果
*/
protected static function sendSingleReward($user_id, $reward, $source)
{
$result = ['reward_id' => $reward['id'], 'status' => false, 'msg' => ''];
switch ($reward['reward_type']) {
case 1: // 钻石
$res = User::changeMoney($user_id, $reward['reward_value'], 6, $source);
$result['status'] = !empty($res);
$result['msg'] = $result['status'] ? '钻石发放成功' : '钻石发放失败';
break;
case 2: // 货币1
$res = User::changeIntegral($user_id, $reward['reward_value'], 6, $source);
$result['status'] = !empty($res);
$result['msg'] = $result['status'] ? 'UU币发放成功' : 'UU币发放失败';
break;
case 3: // 货币2
$res = User::changeMoney2($user_id, $reward['reward_value'], 6, $source);
$result['status'] = !empty($res);
$result['msg'] = $result['status'] ? '达达券发放成功' : '达达券发放失败';
break;
case 4: // 优惠券
if (!empty($reward['reward_extend'])) {
$coupon = Coupon::find($reward['reward_extend']);
if (!empty($coupon)) {
// 发放优惠券
$ttype = isset($coupon['ttype']) ? $coupon['ttype'] : 0;
$res = CouponReceive::insert([
'user_id' => $user_id,
'title' => $coupon['title'],
'price' => $coupon['price'],
'man_price' => $coupon['man_price'],
'end_time' => $coupon['effective_day'] * 86400 + time(),
'addtime' => time(),
'coupon_id' => $coupon['id'],
'state' => $ttype
]);
$result['status'] = !empty($res);
$result['msg'] = $result['status'] ? '优惠券发放成功' : '优惠券发放失败';
} else {
$result['msg'] = '优惠券不存在';
}
} else {
$result['msg'] = '优惠券ID不能为空';
}
break;
default:
$result['msg'] = '不支持的奖励类型';
break;
}
return $result;
}
}