202 lines
9.6 KiB
PHP
202 lines
9.6 KiB
PHP
<?php
|
|
|
|
namespace app\api\model;
|
|
|
|
use app\common\controller\Push;
|
|
use app\common\service\LotteryService;
|
|
use think\Db;
|
|
use think\Exception;
|
|
use think\Log;
|
|
use think\Model;
|
|
|
|
class Lottery extends Model
|
|
{
|
|
/**
|
|
* 送礼参与抽奖接口
|
|
* @return json
|
|
*/
|
|
public function gift($send_uid, $recv_uid,$gift_id, $room_id, $num)
|
|
{
|
|
if (ceil($num) != $num) {
|
|
return ['code' => 0, 'msg' => '打赏礼物数量必须为整数', 'data' => null];
|
|
}
|
|
$toarray = explode(',',$recv_uid);
|
|
if(in_array($send_uid,$toarray)){
|
|
return ['code' => 0, 'msg' => '收礼人不能包含自己', 'data' => null];
|
|
}
|
|
|
|
//获取礼物信息
|
|
$gift_info = Db::name('vs_gift')->where(['gid'=>$gift_id])
|
|
->field('gid as gift_id,gift_name,gift_price,file_type,base_image,play_image,gift_type,label,is_public_server')->find();
|
|
|
|
//送给所有人的总价格
|
|
$all_gift_price = $gift_info['gift_price'] * $num * count($toarray);
|
|
//判断是否有足够的金币
|
|
$user_waller = db::name('user_wallet')->where(['user_id'=>$send_uid])->find();
|
|
if ($user_waller['coin'] < $all_gift_price) {
|
|
return ['code' => 0, 'msg' => '用户金币不足', 'data' => null];
|
|
}
|
|
|
|
//获取送礼用户昵称
|
|
$FromUserInfo = db::name('user')->where('id',$send_uid)->field('id as user_id,nickname,avatar,sex')->find();
|
|
$FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($send_uid);//财富图标
|
|
$FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($send_uid);//魅力图标
|
|
$FromUserInfo['chat_bubble'] = model('Decorate')->user_decorate_detail($send_uid,9);//聊天气泡
|
|
|
|
//送礼 开启事务
|
|
Db::startTrans();
|
|
//扣除用户金币并记录日志
|
|
$wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$all_gift_price,$room_id,1,10,'用户金币购买礼物');
|
|
if(!$wallet_update){
|
|
Db::rollback();
|
|
return ['code' => 0, 'msg' => '扣除用户金币失败', 'data' => null];
|
|
}
|
|
//用户财富等级更新
|
|
$user_level = model('api/Level')->user_level_data_update($send_uid,$all_gift_price,1,$room_id);
|
|
if(!$user_level){
|
|
Db::rollback();
|
|
return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null];
|
|
}
|
|
|
|
//送给一人礼物的总价格(扣除用户的数额)
|
|
$gift_price = $gift_info['gift_price'] * $num;
|
|
|
|
foreach ($toarray as $k => $to_id){
|
|
// 1. 记录礼物赠送
|
|
$giftRecord = [
|
|
'send_uid' => $send_uid,
|
|
'recv_uid' => $recv_uid,
|
|
'gift_id' => $gift_id,
|
|
'gift_gold' => $gift_price,
|
|
'recv_gold' => $gift_price /2 ,
|
|
'small_pool_add' => $gift_price /2 ,
|
|
'create_time' => time()
|
|
];
|
|
$giftId = Db::name('bb_lottery_gift_record')->insertGetId($giftRecord);
|
|
|
|
//收礼记录行为日志
|
|
$give_gift = model('api/GiveGift')->change_user_give_gift_log($send_uid,$gift_id,$gift_price,$num,$to_id,2,1,$room_id,0);
|
|
if(!$give_gift){
|
|
Db::rollback();
|
|
return ['code' => 0, 'msg' => '送礼失败', 'data' => null];
|
|
}
|
|
//计算收礼人得益
|
|
$receiver_earnings = $gift_price /2/100;
|
|
//增加收益并记录日志
|
|
$receiver = model('api/GiveGift') -> change_user_cion_or_earnings_log($to_id,$receiver_earnings,$room_id,2,11,'收礼增加收益');
|
|
|
|
//用户魅力等级更新
|
|
$user_level = model('api/Level')->user_level_data_update($to_id,$gift_price,2,$room_id);
|
|
if(!$user_level){
|
|
Db::rollback();
|
|
return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null];
|
|
}
|
|
//增加房间幸运值
|
|
db::name('vs_room')->where(['id' => $room_id])->setInc('luck_value',$gift_price);
|
|
db::name('vs_room_luck_value')->insert( [
|
|
'room_id' => $room_id,
|
|
'send_uid' => $send_uid,
|
|
'recv_uid' => $to_id,
|
|
'gift_id' => $gift_id,
|
|
'num' => $num,
|
|
'luck_value' => $gift_price,
|
|
'createtime' => time()
|
|
]);
|
|
|
|
$ToUserInfo = Db::name('user')->where(['id' => $to_id])->field('id as user_id,nickname,avatar,sex')->find();
|
|
$ToUserInfo['icon'][0] = model('UserData')->user_wealth_icon($to_id);//财富图标
|
|
$ToUserInfo['icon'][1] = model('UserData')->user_charm_icon($to_id);//魅力图标
|
|
$ToUserInfo['charm'] = db::name('vs_room_user_charm')->where(['user_id' => $to_id,'room_id' => $room_id])->value('charm');//魅力
|
|
$text = $FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 礼物 ' .$gift_info['gift_name'].' x ' .$num;
|
|
$text = [
|
|
'FromUserInfo' => $FromUserInfo,
|
|
'ToUserInfo' => $ToUserInfo,
|
|
'GiftInfo' => $gift_info,
|
|
'gift_num' => $num,
|
|
'text' => $text
|
|
];
|
|
//聊天室推送系统消息
|
|
model('api/Chat')->sendMsg(1005,$room_id,$text);
|
|
}
|
|
Db::commit();
|
|
|
|
//计算爆币
|
|
$nums = $num * count($toarray);
|
|
$ress = $this->lottery($send_uid,$gift_info['gift_price'],$nums,$room_id,$gift_id,$FromUserInfo,$gift_info);
|
|
if($ress['code'] == 0){
|
|
return ['code' => 0, 'msg' => $ress['msg'], 'data' => null];
|
|
}
|
|
|
|
return ['code' => 1, 'msg' => '送礼成功', 'data' => null];
|
|
}
|
|
|
|
|
|
//抽奖
|
|
public function lottery($send_uid,$gift_price,$num,$room_id,$giftId,$fromUserInfo=null,$gift_info=null)
|
|
{
|
|
$big_prize_play_image = db::name('bb_lottery_config')->where(['key' => 'big_prize_play_image'])->value('value');
|
|
$small_prize_play_image = db::name('bb_lottery_config')->where(['key' => 'small_prize_play_image'])->value('value');
|
|
try {
|
|
for($i=0;$i<$num;$i++){
|
|
$gift_gold = $gift_price;
|
|
$service = new LotteryService();
|
|
$reslut = $service->handleGift($send_uid, $gift_gold, $giftId);
|
|
if ($reslut['code'] == 1) {
|
|
$result = $reslut['data'];
|
|
//(未开奖时)
|
|
if ($result['is_small_prize'] == 0) {
|
|
//不做处理
|
|
} else {//开奖
|
|
// 大奖
|
|
if ($result['is_big_prize'] == 1) {//$result['big_prize_amount'],//中奖金额
|
|
$beilv = floor($result['big_prize_amount'] / $gift_price);
|
|
$wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$result['big_prize_amount'],$room_id,1,58,'参与幸运币活动获得'.$beilv.'倍');
|
|
if(!$wallet_update){
|
|
return ['code' => 0, 'msg' => '流水记录失败', 'data' => null];
|
|
}
|
|
|
|
$tet['text'] = '恭喜用户'.$fromUserInfo['nickname'].'在幸运币活动中获得幸运币'.$beilv.'倍';
|
|
$tet['type'] = 1;
|
|
$tet['beilv'] = $beilv;
|
|
$tet['play_image'] = $big_prize_play_image;
|
|
} else { // 小奖 $result['small_prize_amount'],//中奖金额
|
|
$beilv = floor($result['small_prize_amount'] / $gift_price);
|
|
$wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$result['small_prize_amount'],$room_id,1,58,'参与幸运币活动获得'.$beilv.'倍');
|
|
if(!$wallet_update){
|
|
return ['code' => 0, 'msg' => '流水记录失败', 'data' => null];
|
|
}
|
|
|
|
$tet['text'] = '恭喜用户'.$fromUserInfo['nickname'].'在幸运币活动中获得幸运币'.$beilv.'倍';
|
|
$tet['type'] = 2;
|
|
$tet['beilv'] = $beilv;
|
|
$tet['play_image'] = $small_prize_play_image;
|
|
}
|
|
$tet['FromUserInfo'] = $fromUserInfo;
|
|
$tet['user_id'] = $send_uid;
|
|
model('api/Chat')->sendMsg(1100,$room_id,$tet);
|
|
|
|
$push = new Push($send_uid, $room_id);
|
|
$room_name = Db::name('vs_room')->where(['id' => $room_id, 'apply_status' => 2])->value('room_name');
|
|
$text = '恭喜'.$fromUserInfo['nickname'] . '在' . $room_name . '房间获得幸运币'. $beilv . '倍';
|
|
$text_list_new[] = [
|
|
'text' => $text,
|
|
'gift_picture' => $gift_info['base_image'],
|
|
'room_id' => $room_id,
|
|
'fromUserName' => $fromUserInfo['nickname'],
|
|
'toUserName' => '',
|
|
'giftName' => '',
|
|
'roomId' => $room_id,
|
|
'number' => 1,
|
|
];
|
|
$push->giftBanner($text_list_new);
|
|
}
|
|
}
|
|
}
|
|
return ['code' => 1, 'msg' => '送礼成功', 'data' => null];
|
|
} catch (Exception $e) {
|
|
Log::error('抽奖处理失败:' . $e->getMessage());
|
|
return ['code' => 0, 'msg' => $e->getMessage(), 'data' => null];
|
|
}
|
|
}
|
|
|
|
} |