log('开始失效算力:'.json_encode($data)); $log = (new \app\model\BalanceLog)->setSuffix('_currency1') ->where('id',$data['id']) ->where('status',1) ->find(); if(!$log){ return ; } Db::startTrans(); try { $log->status = 2; $log->save(); \app\model\User::transform( 'currency1', 'currency2', $log->user_id, $log->amount, \app\enum\BalanceType::POWER_EXPRIS, $log->_id?:$log->id ); Db::commit(); } catch (\Exception $e) { Db::rollback(); $this->log($e->getMessage()); throw $e; } }elseif($data['action'] == 'realese'){ $this->log('开始释放算力:'.json_encode($data)); $user = \app\model\User::find($data['user_id']); $list = (new BalanceLog)->setSuffix('_currency1') ->where('user_id',intval($data['user_id'])) ->where('status','<>',2) ->where('amount','>',0) ->order('created_at','asc') ->select(); $this->log($list->toArray()); //需要结算的记录 $_calcs = []; //用户的待结算余额 $_currency1 = $user->currency1; //用户的算力余额 $_score = $user->score; foreach ($list as $key => $vo) { //如果用户的待结算余额和算力都大于本记录的金额,就结算本条否则就结束计算 if($_currency1 - $vo->amount >= 0 && $_score-$vo->amount>=0){ //更新剩余货币 $_currency1-=$vo->amount; $_score-=$vo->amount; $_calcs[]=$vo; continue; }else{ break; } } Db::startTrans(); try { $transfrom_amount = 0; foreach($_calcs as $k=>$log){ $transfrom_amount += $log->amount; $log->status = 2; $log->save(); } if($transfrom_amount != 0){ \app\model\User::transform('score','money',$user->id,$transfrom_amount,\app\enum\BalanceType::POWER_REALESE); \app\model\User::currency1($user->id,-$transfrom_amount,\app\enum\BalanceType::POWER_REALESE); cache_add('user_income_total_'.$user->user_id,$transfrom_amount); } Db::commit(); } catch (\Exception $e) { $this->log($e->getMessage()); Db::rollback(); } } } catch(\Exception $e) { $this->log($e->getMessage()); } } function log($msg = ''){ log_alert($msg,'power'); } // 消费失败回调 /* $package = [ 'id' => 1357277951, // 消息ID 'time' => 1709170510, // 消息时间 'delay' => 0, // 延迟时间 'attempts' => 2, // 消费次数 'queue' => 'send-mail', // 队列名 'data' => ['to' => 'tom@gmail.com', 'content' => 'hello'], // 消息内容 'max_attempts' => 5, // 最大重试次数 'error' => '错误信息' // 错误信息 ] */ public function onConsumeFailure(\Throwable $e, $package) { $this->log('consume failure:'.$e->getMessage()); } }