params['chain_parallel']['wasm']; if(empty($nodes)){ echo date('Y-m-d H:i:s') . '无节点'.PHP_EOL; return 0; } foreach ($nodes as $key => $node) { $service = new Chain33Business(); $result = $service->getGameStatus($node); if (0 !== $result['code']) { echo $key.':'.date('Y-m-d H:i:s') . $result['msg'].PHP_EOL; continue; } $queryResultItems = $result['result'] ?? []; if (empty($queryResultItems)) { echo $key.':'.date('Y-m-d H:i:s') . 'error'.PHP_EOL; continue; } $resultJSON = json_decode($queryResultItems['queryResultItems'][0]['resultJSON'], true); $current_round = $resultJSON['current_round']; $current_height = $resultJSON['height']; $cache_current_round = Yii::$app->redis->get('chain33_game_bet_status_'.$key); if (empty($cache_current_round)) { $cache_current_round = CoinGameBet::find()->where(['platform' => $key])->max('round'); Yii::$app->redis->set('chain33_game_bet_status_'.$key, $cache_current_round, 'EX', 300); } $cache_current_round = (false == $cache_current_round ? 0 : $cache_current_round); if ($cache_current_round >= $current_round) { echo $key.':'.date('Y-m-d H:i:s') . '数据已为最新' . PHP_EOL; continue; } Yii::$app->redis->set('chain33_game_bet_status_'.$key, $current_round, 'EX', 300); Yii::$app->redis->set('chain33_game_bet_status_height_'.$key, $current_height, 'EX', 300); $result = $service->getBetStatus($cache_current_round, $current_round, '', $node); if (0 !== $result['code']) { echo $key.':'.date('Y-m-d H:i:s') . '数据错误' . PHP_EOL; continue; } $queryResultItems = $result['result'] ?? []; if (empty($queryResultItems)) { echo $key.':'.date('Y-m-d H:i:s') . '数据错误' . PHP_EOL; continue; } $platform = $key; foreach ($queryResultItems['queryResultItems'] as $key => $val) { if (false == $val['found']) continue; $resultArr = json_decode($val['resultJSON'], true); $datas[] = [ $resultArr['round'], $resultArr['player'], $resultArr['amount'], $resultArr['height'], $resultArr['guess_num'], $resultArr['rand_num'], $resultArr['player_win'], $platform ]; } CoinGameBet::loadArray($datas); echo $platform.':'.date('Y-m-d H:i:s') . '数据更新成功'.PHP_EOL; continue; } return 0; } public function actionBetUpdate() { $nodes = \Yii::$app->params['chain_parallel']['wasm']; if(empty($nodes)){ echo date('Y-m-d H:i:s') . '无节点'.PHP_EOL; return 0; } foreach ($nodes as $key => $node) { $service = new Chain33Business(); $result = $service->getLastHeader($node); $height = $result['result']['height']; $models = CoinGameBet::find()->select('round')->where([ 'and', ['valid' => CoinGameBet::VAILD_FALSE], ['<', 'height', $height - 12], ['platform' => $key] ])->all(); if(empty($models)){ echo $key.':'.date('Y-m-d H:i:s') . '无需更新的数据'.PHP_EOL; continue; } $valid_arr = []; foreach ($models as $model) { $valid_arr[] = $model->round; } $result = $service->getBetStatus('', '', $valid_arr, $node); if( 0 !== $result['code']){ echo $key.':'.date('Y-m-d H:i:s') . '数据错误'.PHP_EOL; continue; } $queryResultItems = $result['result'] ?? []; if(empty($queryResultItems)){ echo $key.':'.date('Y-m-d H:i:s') . '数据错误'.PHP_EOL; continue; } $platform = $key; foreach ($queryResultItems['queryResultItems'] as $key => $val){ if (false == $val['found']) continue; $resultArr = json_decode($val['resultJSON'],true); CoinGameBet::updateAll([ 'amount' => $resultArr['amount'], 'height' => $resultArr['height'], 'guess_num' => $resultArr['guess_num'], 'rand_num' => $resultArr['rand_num'], 'player_win' => $resultArr['player_win'], 'valid' => CoinGameBet::VAILD_TRUE ],[ 'round' => $resultArr['round'], 'platform' => $platform ]); } echo $platform.':'.date('Y-m-d H:i:s') . '数据更新成功'.PHP_EOL; continue; } return 0; } }