Browse Source

音频,视频,私聊,礼物,充值

lizhen_gitee 1 year ago
parent
commit
e9f29b25c1
4 changed files with 1032 additions and 0 deletions
  1. 294 0
      app/Jobs/AudioJob.php
  2. 246 0
      app/Jobs/RechargeJob.php
  3. 246 0
      app/Jobs/TypingJob.php
  4. 246 0
      app/Jobs/VideoJob.php

+ 294 - 0
app/Jobs/AudioJob.php

@@ -0,0 +1,294 @@
+<?php
+
+namespace App\Jobs;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Redis;
+use Illuminate\Support\Facades\Config;
+use Illuminate\Support\Facades\Log;
+
+class GiftJob implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    protected $msgid;
+
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct($msgid)
+    {
+        //
+        $this->msgid = $msgid;
+        Log::info(date('Y-m-d H:i:d').':'.$msgid);
+
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        $result = $this->goaaa();
+
+
+        /*if($result === false){
+            //防止失败
+            $key = 'kgelavarel_giftjob_'.$this->msgid;
+
+            $limit_rs = $this->apiLimit(2,3600000,$key);//一小时最多另执行2次
+
+            if($limit_rs === true){
+                //echo 123;
+                dispatch((new GiftJob($this->msgid))->delay(60));//加入队列
+            }else{
+                //echo 345;
+            }
+        }*/
+    }
+
+    private function apiLimit($apiLimit = 1, $apiLimitTime = 1000, $key = '')
+    {
+        $app_name    = Config::get('app.name');// laravel name
+        $key         = "{$app_name}:{$key}";
+        $redis = Redis::connection();
+
+        //
+        //指定键值新增+1 并获取
+        $count = $redis->incr($key);
+        if ($count > $apiLimit) {
+            return false;
+        }
+
+        //设置过期时间
+        if ($count == 1) {
+            $redis->pExpire($key, $apiLimitTime);
+        }
+
+        return true;
+    }
+
+    //主要调用
+    public function goaaa(){
+
+        //
+        $data = DB::table('mt_user_match_audio_log')->where('id',$this->msgid)->first();
+
+        DB::beginTransaction();
+
+        $result = $this->shouyi($data->to_user_id,$data->money,'user_match_audio_log',$this->msgid);
+        if($result !== true){
+            DB::rollBack();
+            return false;
+        }
+
+        DB::commit();
+        return true;
+    }
+
+    //四大收益,视频,音频,私聊,礼物
+    public function shouyi($user_id,$gold,$table,$table_id){
+        //精确小数点
+        bcscale(2);
+
+        //枚举
+        $table_enum = [
+            'user_match_audio_log' => [
+                'prefix'=>'audio',
+                'remark'  =>'语音',
+            ],
+            'user_match_typing_log' => [
+                'prefix'=>'typing',
+                'remark'  =>'私聊',
+            ],
+            'user_match_video_log' => [
+                'prefix'=>'video',
+                'remark'  =>'视频',
+            ],
+            'gift_user_typing' => [
+                'prefix'=>'gift',
+                'remark'  =>'收礼',
+            ],
+        ];
+
+        //变量前缀,钱包备注
+        $prefix = $table_enum[$table]['prefix'];
+        $remark = $table_enum[$table]['remark'];
+
+        //收益者本人
+        $userinfo = DB::table('mt_user')->select(['id','username','group_id','intro_uid','invite_uid','gender'])->where('id',$user_id)->first();
+
+        //没有推荐人,自己等级最高
+        if(empty($userinfo->intro_uid) || $userinfo->group_id == 3){
+            return true;
+        }
+
+        //充值者上级
+        $intro_userinfo = DB::table('mt_user')->select(['id','username','group_id','intro_uid','gender'])->where('id',$userinfo->intro_uid)->first();
+        if(empty($intro_userinfo)){return true;}
+
+        //配置
+        $config_site = DB::table('mt_config')->whereIn('name',['shouyi_b2a_rate','shouyi_c2a_rate'])->pluck('name','value');
+
+        //上级是一级邀请A,本人为B普、B1(二级邀请人),贡献给A
+        if($intro_userinfo->group_id == 3){
+
+            $shouyi_b2a_rate = $config_site['shouyi_b2a_rate'];//b2a 与 b02a相等
+            $jewelA = bcdiv(bcmul($gold,$shouyi_b2a_rate),100);
+
+            $result = $this->lockChangeAccountRemain($intro_userinfo->id,'agentjewel',$jewelA,52, $userinfo->username.$remark,$table,$table_id);
+            if($result['status']===false)
+            {
+                //Db::rollback();
+                return false;
+            }
+
+            return true;//结束了
+        }
+
+        //上级是二级邀请B1,本人C1,贡献给B和A(表面上说B的钱在A那里,但是有记录,有总额,不能提现即可)
+        if($intro_userinfo->group_id == 2 && $intro_userinfo->group_id > $userinfo->group_id){
+
+            //充值者上上级,也就是A
+            $intro_intro_userinfo = DB::table('mt_user')->select(['id','username','group_id','intro_uid','gender'])->where('id',$intro_userinfo->intro_uid)->first();
+            if(empty($intro_intro_userinfo)){return true;}
+
+            if($intro_intro_userinfo->group_id == 3){
+
+                $shouyi_c2a_rate = $config_site['shouyi_c2a_rate'];
+                $jewelA = bcdiv(bcmul($gold,$shouyi_c2a_rate),100);
+
+                $result = $this->lockChangeAccountRemain($intro_intro_userinfo->id,'agentjewel',$jewelA,52, $userinfo->username.$remark,$table,$table_id);
+                if($result['status']===false)
+                {
+                    //Db::rollback();
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        return true;
+    }
+
+    /**
+     *
+     * @param floatval $number 金额(正数进账,负数出账)
+     * @param $accountType 货币类型,money,score
+     * @param $logtype 日志的类型
+     * @param $remark  备注
+     * @param $user_id  用户id
+     * @param $table  来源表
+     * @param $data_id  表id
+     * @param $isAdmin 是否是管理员处理
+     * @return array
+     * @return array[status]
+     * @return array[msg]
+     * @return array[log_table]
+     * @return array[log_id]
+     */
+    public function lockChangeAccountRemain($user_id,$accountType='gold',$number,$logtype='',$remark='',$table='',$table_id=0,$isAdmin=false)
+    {
+        //初始化
+        $result = array(
+            'status'=>false,
+            'msg'=>'',
+            'log_table' => '',
+            'log_id' => '',
+        );
+
+        //获取小数点
+        $point = 1;
+        if($accountType == 'agentjewel'){
+            $point = 2;
+        }
+        bcscale($point);
+
+        //检测0
+        $number = floatval( $number );
+        if( $number == 0 )
+        {
+            $result['status'] = true;
+            $result['msg'] = '交易金额:0';
+            return $result;
+        }
+        if(0 === bccomp($number, 0)){
+            $result['status'] = true;
+            $result['msg'] = '交易金额:0';
+            return $result;
+        }
+
+        //查询余额
+        $wallet = DB::table('mt_user_wallet')->where('user_id',$user_id)->lockForUpdate()->first();
+        if(empty($wallet))
+        {
+            $result['msg'] = '不存在的用户';
+            return $result;
+        }
+
+        //扣除金币单独方法
+
+            //gold的增加,jewel的增、减
+
+            //之前的余额
+            $wallet_before = $wallet->$accountType;
+
+            //正常方法
+            if(bccomp(bcadd($wallet_before, $number), 0) === -1)
+            {
+                $result['msg'] = '余额不足!';
+                return $result;
+            }
+
+            //钱币操作
+            $data = array();
+            $data['user_id'] = $user_id;
+            $data['log_type'] = $logtype;
+            $data['money_type'] = $accountType;
+            $data['before'] = $wallet_before;
+            $data['change_value'] = $number;
+            $data['remain'] = bcadd($wallet_before, $number);
+            $data['table'] = $table;
+            $data['table_id'] = $table_id;
+            $data['remark'] = $remark;
+            $data['createtime'] = time();
+            $data['updatetime'] = time();
+
+
+            $log_table = 'mt_user_gold_log';
+            if($accountType == 'agentjewel'){
+                $log_table = 'mt_user_agentjewel_log';
+            }
+
+            $rs2_id = DB::table($log_table)->insertGetId($data);
+
+            //修改金额
+            $rs1 = DB::table('mt_user_wallet')->where('user_id',$user_id)->update([$accountType => $data['remain']]);
+
+            //操作数据库失败
+            if($rs1 === false || $rs2_id === false){
+                $result['msg'] = '更新财务记录失败!';
+                return $result;
+            }
+
+            //默认成功
+            $result['status'] = true;
+            $result['msg'] = '账户余额已更新!';
+            $result['log_table'] = $log_table;
+            $result['log_id'] = $rs2_id;
+
+            return $result;
+        }
+
+}

+ 246 - 0
app/Jobs/RechargeJob.php

@@ -0,0 +1,246 @@
+<?php
+
+namespace App\Jobs;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Redis;
+use Illuminate\Support\Facades\Config;
+use Illuminate\Support\Facades\Log;
+
+class GiftJob implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    protected $msgid;
+
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct($msgid)
+    {
+        //
+        $this->msgid = $msgid;
+        Log::info(date('Y-m-d H:i:d').':'.$msgid);
+
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        $result = $this->goaaa();
+
+
+        if($result === false){
+            //防止失败
+            $key = 'kgelavarel_giftjob_'.$this->msgid;
+
+            $limit_rs = $this->apiLimit(2,3600000,$key);//一小时最多另执行2次
+
+            if($limit_rs === true){
+                //echo 123;
+                dispatch((new GiftJob($this->msgid))->delay(60));//加入队列
+            }else{
+                //echo 345;
+            }
+        }
+    }
+
+    public function apiLimit($apiLimit = 1, $apiLimitTime = 1000, $key = '')
+    {
+        $app_name    = Config::get('app.name');// laravel name
+        $key         = "{$app_name}:{$key}";
+        $redis = Redis::connection();
+
+        //
+        //指定键值新增+1 并获取
+        $count = $redis->incr($key);
+        if ($count > $apiLimit) {
+            return false;
+        }
+
+        //设置过期时间
+        if ($count == 1) {
+            $redis->pExpire($key, $apiLimitTime);
+        }
+
+        return true;
+    }
+
+    public function goaaa(){
+        
+        //
+        $data = DB::table('hx_gift_user_party')->where('id',$this->msgid)->first();
+
+        DB::beginTransaction();
+
+        //用户信息
+        $authuser_info = DB::table('hx_user')->where('id',$data->user_id)->value('nickname');
+        $partyInfo     = DB::table('hx_party')->where('id',$data->party_id)->first();
+
+
+        $jewel_to_money = 1;
+        $user_id = $data->user_to_id;
+        // 添加获赠用户余额
+        if($data->getvalue > 0){
+            $getMoney = bcdiv($data->getvalue,$jewel_to_money,2);
+            if($getMoney > 0){
+                $rs_wallet = $this->lockChangeAccountRemain($user_id,$getMoney,'+',0,"{$authuser_info}送你{$data->gift_name}x{$data->number}",101,'money');
+                if($rs_wallet['status'] == false){
+                    Db::rollback();
+                    return false;
+                }
+            }
+        }
+
+        // 增加房主抽成
+        if ($partyInfo) {
+            $guilderMoney = $data->guildermoney;
+            if($guilderMoney > 0){
+                $touserInfo    = DB::table('hx_user')->where('id',$user_id)->value('nickname');
+                $rs_wallet = $this->lockChangeAccountRemain($partyInfo->user_id,$guilderMoney,'+',0,"{$authuser_info}送礼物{$data->gift_name}x{$data->number}给{$touserInfo},房间礼物抽成",102,'money');
+                if($rs_wallet['status'] == false){
+                    Db::rollback();
+                    return false;
+                }
+            }
+        }
+
+        Db::commit();
+        return true;
+    }
+
+
+    /**
+     *
+     * @param floatval $number 金额(正数进账,负数出账)
+     * @param $accountType 货币类型,money,score
+     * @param $logtype 日志的类型
+     * @param $remark  备注
+     * @param $user_id  用户id
+     * @param $table  来源表
+     * @param $data_id  表id
+     * @param $isAdmin 是否是管理员处理
+     * @return array
+     * @return array[status]
+     * @return array[msg]
+     * @return array[log_table]
+     * @return array[log_id]
+     */
+    public function lockChangeAccountRemain($user_id,$money,$mode,$before = 0,$remark='',$logtype,$accountType='money',$extend = [])
+    {
+        //初始化
+        $result = array(
+            'status'=>false,
+            'code' => 0, //报错时候采用
+            'msg'=>'',
+            'log_table' => '',
+            'log_id' => '',
+        );
+
+        //获取小数点
+        $point = $accountType == 'money' ? 2 : 0;
+        bcscale($point);
+
+        //钱包名称
+        $wallet_name = '余额';
+
+        //数字纠正
+        $money = abs($money);
+        if($mode == '-'){
+            $number = -$money;
+        }else{
+            $number = $money;
+        }
+
+        //检测
+        $number = floatval( $number );
+        if( $number == 0 )
+        {
+            $result['msg'] = '交易金额:0';
+            return $result;
+        }
+        if(0 === bccomp($number, 0)){
+            $result['msg'] = '交易金额:0';
+            return $result;
+        }
+
+
+        //检测
+        $wallet = DB::table('hx_user_wallet')->where('user_id',$user_id)->lockForUpdate()->first();
+        if(empty($wallet))
+        {
+            $result['msg'] = '不存在的用户';
+            return $result;
+        }
+
+        if(bccomp(bcadd($wallet->$accountType, $number), 0) === -1)
+        {
+            $result['code'] = 10;
+            $result['msg'] = $wallet_name.'余额不足!';
+            return $result;
+        }
+
+        if(0 !== bccomp($number, 0))
+        {
+
+            //钱币记录
+            $data = array();
+            $data['user_id'] = $user_id;
+            $data['value'] = $money;
+            $data['mode'] = $mode;
+            $data['before'] = $wallet->$accountType;
+            $data['balance'] = bcadd($wallet->$accountType, $number);
+            $data['detail'] = $remark;
+            $data['createtime'] = time();
+            $data['type'] = $logtype;
+            if ($accountType == 'jewel') {
+                $data['cityname'] = isset($extend['cityname']) ? $extend['cityname'] : '';
+            }
+            //新的方式
+            $rs1 = DB::table('hx_user_wallet')->where('user_id',$user_id)->update([$accountType => $data['balance']]);
+
+            /////////////
+            $log_table = 'hx_user_'.$accountType.'_log';
+
+            $rs2_id = DB::table($log_table)->insertGetId($data);
+
+            if($rs1 === false || $rs2_id === false){
+                $result['msg'] = '更新财务记录失败!';
+                return $result;
+            }
+
+
+            if( $rs1 !== false && $rs2_id !== false )
+            {
+                $result['status'] = true;
+                $result['msg'] = '账户余额已更新!';
+                $result['log_table'] = $accountType.'_log';
+                $result['log_id'] = $rs2_id;
+
+                return $result;
+            }
+            else
+            {
+                $result['msg'] = '更新财务记录失败!';
+                return $result;
+            }
+        } else {
+            $result['msg'] = '金额不足0.01';
+            return $result;
+        }
+
+    }
+
+}

+ 246 - 0
app/Jobs/TypingJob.php

@@ -0,0 +1,246 @@
+<?php
+
+namespace App\Jobs;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Redis;
+use Illuminate\Support\Facades\Config;
+use Illuminate\Support\Facades\Log;
+
+class GiftJob implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    protected $msgid;
+
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct($msgid)
+    {
+        //
+        $this->msgid = $msgid;
+        Log::info(date('Y-m-d H:i:d').':'.$msgid);
+
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        $result = $this->goaaa();
+
+
+        if($result === false){
+            //防止失败
+            $key = 'kgelavarel_giftjob_'.$this->msgid;
+
+            $limit_rs = $this->apiLimit(2,3600000,$key);//一小时最多另执行2次
+
+            if($limit_rs === true){
+                //echo 123;
+                dispatch((new GiftJob($this->msgid))->delay(60));//加入队列
+            }else{
+                //echo 345;
+            }
+        }
+    }
+
+    public function apiLimit($apiLimit = 1, $apiLimitTime = 1000, $key = '')
+    {
+        $app_name    = Config::get('app.name');// laravel name
+        $key         = "{$app_name}:{$key}";
+        $redis = Redis::connection();
+
+        //
+        //指定键值新增+1 并获取
+        $count = $redis->incr($key);
+        if ($count > $apiLimit) {
+            return false;
+        }
+
+        //设置过期时间
+        if ($count == 1) {
+            $redis->pExpire($key, $apiLimitTime);
+        }
+
+        return true;
+    }
+
+    public function goaaa(){
+        
+        //
+        $data = DB::table('hx_gift_user_party')->where('id',$this->msgid)->first();
+
+        DB::beginTransaction();
+
+        //用户信息
+        $authuser_info = DB::table('hx_user')->where('id',$data->user_id)->value('nickname');
+        $partyInfo     = DB::table('hx_party')->where('id',$data->party_id)->first();
+
+
+        $jewel_to_money = 1;
+        $user_id = $data->user_to_id;
+        // 添加获赠用户余额
+        if($data->getvalue > 0){
+            $getMoney = bcdiv($data->getvalue,$jewel_to_money,2);
+            if($getMoney > 0){
+                $rs_wallet = $this->lockChangeAccountRemain($user_id,$getMoney,'+',0,"{$authuser_info}送你{$data->gift_name}x{$data->number}",101,'money');
+                if($rs_wallet['status'] == false){
+                    Db::rollback();
+                    return false;
+                }
+            }
+        }
+
+        // 增加房主抽成
+        if ($partyInfo) {
+            $guilderMoney = $data->guildermoney;
+            if($guilderMoney > 0){
+                $touserInfo    = DB::table('hx_user')->where('id',$user_id)->value('nickname');
+                $rs_wallet = $this->lockChangeAccountRemain($partyInfo->user_id,$guilderMoney,'+',0,"{$authuser_info}送礼物{$data->gift_name}x{$data->number}给{$touserInfo},房间礼物抽成",102,'money');
+                if($rs_wallet['status'] == false){
+                    Db::rollback();
+                    return false;
+                }
+            }
+        }
+
+        Db::commit();
+        return true;
+    }
+
+
+    /**
+     *
+     * @param floatval $number 金额(正数进账,负数出账)
+     * @param $accountType 货币类型,money,score
+     * @param $logtype 日志的类型
+     * @param $remark  备注
+     * @param $user_id  用户id
+     * @param $table  来源表
+     * @param $data_id  表id
+     * @param $isAdmin 是否是管理员处理
+     * @return array
+     * @return array[status]
+     * @return array[msg]
+     * @return array[log_table]
+     * @return array[log_id]
+     */
+    public function lockChangeAccountRemain($user_id,$money,$mode,$before = 0,$remark='',$logtype,$accountType='money',$extend = [])
+    {
+        //初始化
+        $result = array(
+            'status'=>false,
+            'code' => 0, //报错时候采用
+            'msg'=>'',
+            'log_table' => '',
+            'log_id' => '',
+        );
+
+        //获取小数点
+        $point = $accountType == 'money' ? 2 : 0;
+        bcscale($point);
+
+        //钱包名称
+        $wallet_name = '余额';
+
+        //数字纠正
+        $money = abs($money);
+        if($mode == '-'){
+            $number = -$money;
+        }else{
+            $number = $money;
+        }
+
+        //检测
+        $number = floatval( $number );
+        if( $number == 0 )
+        {
+            $result['msg'] = '交易金额:0';
+            return $result;
+        }
+        if(0 === bccomp($number, 0)){
+            $result['msg'] = '交易金额:0';
+            return $result;
+        }
+
+
+        //检测
+        $wallet = DB::table('hx_user_wallet')->where('user_id',$user_id)->lockForUpdate()->first();
+        if(empty($wallet))
+        {
+            $result['msg'] = '不存在的用户';
+            return $result;
+        }
+
+        if(bccomp(bcadd($wallet->$accountType, $number), 0) === -1)
+        {
+            $result['code'] = 10;
+            $result['msg'] = $wallet_name.'余额不足!';
+            return $result;
+        }
+
+        if(0 !== bccomp($number, 0))
+        {
+
+            //钱币记录
+            $data = array();
+            $data['user_id'] = $user_id;
+            $data['value'] = $money;
+            $data['mode'] = $mode;
+            $data['before'] = $wallet->$accountType;
+            $data['balance'] = bcadd($wallet->$accountType, $number);
+            $data['detail'] = $remark;
+            $data['createtime'] = time();
+            $data['type'] = $logtype;
+            if ($accountType == 'jewel') {
+                $data['cityname'] = isset($extend['cityname']) ? $extend['cityname'] : '';
+            }
+            //新的方式
+            $rs1 = DB::table('hx_user_wallet')->where('user_id',$user_id)->update([$accountType => $data['balance']]);
+
+            /////////////
+            $log_table = 'hx_user_'.$accountType.'_log';
+
+            $rs2_id = DB::table($log_table)->insertGetId($data);
+
+            if($rs1 === false || $rs2_id === false){
+                $result['msg'] = '更新财务记录失败!';
+                return $result;
+            }
+
+
+            if( $rs1 !== false && $rs2_id !== false )
+            {
+                $result['status'] = true;
+                $result['msg'] = '账户余额已更新!';
+                $result['log_table'] = $accountType.'_log';
+                $result['log_id'] = $rs2_id;
+
+                return $result;
+            }
+            else
+            {
+                $result['msg'] = '更新财务记录失败!';
+                return $result;
+            }
+        } else {
+            $result['msg'] = '金额不足0.01';
+            return $result;
+        }
+
+    }
+
+}

+ 246 - 0
app/Jobs/VideoJob.php

@@ -0,0 +1,246 @@
+<?php
+
+namespace App\Jobs;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Redis;
+use Illuminate\Support\Facades\Config;
+use Illuminate\Support\Facades\Log;
+
+class GiftJob implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    protected $msgid;
+
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct($msgid)
+    {
+        //
+        $this->msgid = $msgid;
+        Log::info(date('Y-m-d H:i:d').':'.$msgid);
+
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        $result = $this->goaaa();
+
+
+        if($result === false){
+            //防止失败
+            $key = 'kgelavarel_giftjob_'.$this->msgid;
+
+            $limit_rs = $this->apiLimit(2,3600000,$key);//一小时最多另执行2次
+
+            if($limit_rs === true){
+                //echo 123;
+                dispatch((new GiftJob($this->msgid))->delay(60));//加入队列
+            }else{
+                //echo 345;
+            }
+        }
+    }
+
+    public function apiLimit($apiLimit = 1, $apiLimitTime = 1000, $key = '')
+    {
+        $app_name    = Config::get('app.name');// laravel name
+        $key         = "{$app_name}:{$key}";
+        $redis = Redis::connection();
+
+        //
+        //指定键值新增+1 并获取
+        $count = $redis->incr($key);
+        if ($count > $apiLimit) {
+            return false;
+        }
+
+        //设置过期时间
+        if ($count == 1) {
+            $redis->pExpire($key, $apiLimitTime);
+        }
+
+        return true;
+    }
+
+    public function goaaa(){
+        
+        //
+        $data = DB::table('hx_gift_user_party')->where('id',$this->msgid)->first();
+
+        DB::beginTransaction();
+
+        //用户信息
+        $authuser_info = DB::table('hx_user')->where('id',$data->user_id)->value('nickname');
+        $partyInfo     = DB::table('hx_party')->where('id',$data->party_id)->first();
+
+
+        $jewel_to_money = 1;
+        $user_id = $data->user_to_id;
+        // 添加获赠用户余额
+        if($data->getvalue > 0){
+            $getMoney = bcdiv($data->getvalue,$jewel_to_money,2);
+            if($getMoney > 0){
+                $rs_wallet = $this->lockChangeAccountRemain($user_id,$getMoney,'+',0,"{$authuser_info}送你{$data->gift_name}x{$data->number}",101,'money');
+                if($rs_wallet['status'] == false){
+                    Db::rollback();
+                    return false;
+                }
+            }
+        }
+
+        // 增加房主抽成
+        if ($partyInfo) {
+            $guilderMoney = $data->guildermoney;
+            if($guilderMoney > 0){
+                $touserInfo    = DB::table('hx_user')->where('id',$user_id)->value('nickname');
+                $rs_wallet = $this->lockChangeAccountRemain($partyInfo->user_id,$guilderMoney,'+',0,"{$authuser_info}送礼物{$data->gift_name}x{$data->number}给{$touserInfo},房间礼物抽成",102,'money');
+                if($rs_wallet['status'] == false){
+                    Db::rollback();
+                    return false;
+                }
+            }
+        }
+
+        Db::commit();
+        return true;
+    }
+
+
+    /**
+     *
+     * @param floatval $number 金额(正数进账,负数出账)
+     * @param $accountType 货币类型,money,score
+     * @param $logtype 日志的类型
+     * @param $remark  备注
+     * @param $user_id  用户id
+     * @param $table  来源表
+     * @param $data_id  表id
+     * @param $isAdmin 是否是管理员处理
+     * @return array
+     * @return array[status]
+     * @return array[msg]
+     * @return array[log_table]
+     * @return array[log_id]
+     */
+    public function lockChangeAccountRemain($user_id,$money,$mode,$before = 0,$remark='',$logtype,$accountType='money',$extend = [])
+    {
+        //初始化
+        $result = array(
+            'status'=>false,
+            'code' => 0, //报错时候采用
+            'msg'=>'',
+            'log_table' => '',
+            'log_id' => '',
+        );
+
+        //获取小数点
+        $point = $accountType == 'money' ? 2 : 0;
+        bcscale($point);
+
+        //钱包名称
+        $wallet_name = '余额';
+
+        //数字纠正
+        $money = abs($money);
+        if($mode == '-'){
+            $number = -$money;
+        }else{
+            $number = $money;
+        }
+
+        //检测
+        $number = floatval( $number );
+        if( $number == 0 )
+        {
+            $result['msg'] = '交易金额:0';
+            return $result;
+        }
+        if(0 === bccomp($number, 0)){
+            $result['msg'] = '交易金额:0';
+            return $result;
+        }
+
+
+        //检测
+        $wallet = DB::table('hx_user_wallet')->where('user_id',$user_id)->lockForUpdate()->first();
+        if(empty($wallet))
+        {
+            $result['msg'] = '不存在的用户';
+            return $result;
+        }
+
+        if(bccomp(bcadd($wallet->$accountType, $number), 0) === -1)
+        {
+            $result['code'] = 10;
+            $result['msg'] = $wallet_name.'余额不足!';
+            return $result;
+        }
+
+        if(0 !== bccomp($number, 0))
+        {
+
+            //钱币记录
+            $data = array();
+            $data['user_id'] = $user_id;
+            $data['value'] = $money;
+            $data['mode'] = $mode;
+            $data['before'] = $wallet->$accountType;
+            $data['balance'] = bcadd($wallet->$accountType, $number);
+            $data['detail'] = $remark;
+            $data['createtime'] = time();
+            $data['type'] = $logtype;
+            if ($accountType == 'jewel') {
+                $data['cityname'] = isset($extend['cityname']) ? $extend['cityname'] : '';
+            }
+            //新的方式
+            $rs1 = DB::table('hx_user_wallet')->where('user_id',$user_id)->update([$accountType => $data['balance']]);
+
+            /////////////
+            $log_table = 'hx_user_'.$accountType.'_log';
+
+            $rs2_id = DB::table($log_table)->insertGetId($data);
+
+            if($rs1 === false || $rs2_id === false){
+                $result['msg'] = '更新财务记录失败!';
+                return $result;
+            }
+
+
+            if( $rs1 !== false && $rs2_id !== false )
+            {
+                $result['status'] = true;
+                $result['msg'] = '账户余额已更新!';
+                $result['log_table'] = $accountType.'_log';
+                $result['log_id'] = $rs2_id;
+
+                return $result;
+            }
+            else
+            {
+                $result['msg'] = '更新财务记录失败!';
+                return $result;
+            }
+        } else {
+            $result['msg'] = '金额不足0.01';
+            return $result;
+        }
+
+    }
+
+}