• rlgy's avatar
    update · b6918f76
    rlgy authored
    b6918f76
AwardController.php 2.69 KB
<?php
/**
 * Created by PhpStorm.
 * User: rlgyzhcn
 * Date: 18-9-19
 * Time: 下午4:21
 */

namespace console\controllers;

use common\business\Chain33Business;
use common\business\CoinBusiness;
use h5\job\JugdeAwardJob;
use Yii;
use yii\console\Controller;
use common\models\psources\CoinGuessResult;

/**
 * Class AwardController
 * 竞猜开奖
 *
 * @package console\controllers
 */
class AwardController extends Controller
{
    /**
     * 区块链开奖
     */
    public function actionIndex()
    {
        $config = Yii::$app->params['h5_activity']['ZWG_GUESS_NEWBEE'];
        //获取最新的区块高度
        $last_header = Chain33Business::getLastHeader();
        if ($last_header['code'] != 0) {
            Yii::info('获取区块高度失败: ' . $last_header['msg'], __CLASS__);
            return 0;
        }
        $last_header = $last_header['result'];
        //获取最新竞猜期数以及区块高度
        $last = CoinGuessResult::getMaxStage();
        if ($last) {
            $stage        = $last->stage + 1;
            $start_height = $last->end_height;
        } else {
            //第一次计算开奖
            $stage        = intval($last_header['height'] / $config['do_award_step']);
            $start_height = ($stage - 1) * $config['do_award_step'];
        }
        $end_height = $start_height + $config['do_award_step'];
        //判断区块是否超前了
        if ($end_height > $last_header['height']) {
            return 0;
        }
        //获取中奖号码
        $hash = Chain33Business::getBlockHashByHeight($end_height);
        if ($hash['code'] != 0) {
            Yii::info('获取区块hash失败: ' . $hash['msg'], __CLASS__);
            return 0;
        }
        $hash   = $hash['result']['hash'];
        preg_match_all('/\d+/', $hash, $matchs);
        $hash   = implode('', $matchs[0]);
        $hash   = substr($hash, -2);
        if (!ctype_digit($hash)) {
            $hash = hexdec($hash) % 100;
            $hash = sprintf("%02d", $hash);
        }
        $hash = strval($hash);
        //保存开奖结果到数据库
        $guess_result               = new CoinGuessResult();
        $guess_result->stage        = $stage;
        $guess_result->start_height = $start_height;
        $guess_result->end_height   = $end_height;
        $guess_result->result       = $hash;
        $guess_result->is_award     = 0;
        if ($guess_result->save()) {
            //添加派奖任务到队列
            Yii::$app->queue->push(new JugdeAwardJob());
            Yii::info("竞猜开奖成功! [期数]: $stage", __CLASS__);
        } else {
            Yii::info("保存开奖记录失败!  [期数]: $stage", __CLASS__);
        }
        return 0;
    }
}