113 lines
4.0 KiB
PHP
113 lines
4.0 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'] ? '获得钻石*'.$reward['reward_value'] : '钻石发放失败';
|
|
break;
|
|
|
|
|
|
case 2: // 货币1
|
|
$res = User::changeIntegral($user_id, $reward['reward_value'], 6, $source);
|
|
$result['status'] = !empty($res);
|
|
$result['msg'] = $result['status'] ? '获得UU币*'.$reward['reward_value'] : 'UU币发放失败';
|
|
break;
|
|
|
|
case 3: // 货币2
|
|
$res = User::changeMoney2($user_id, $reward['reward_value'], 6, $source);
|
|
$result['status'] = !empty($res);
|
|
$result['msg'] = $result['status'] ? '获得达达券*'.$reward['reward_value'] : '达达券发放失败';
|
|
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;
|
|
}
|
|
} |