LotteryController.php 5.35 KB
<?php
/**
 * Created by PhpStorm.
 * User: ZCY
 * Date: 2018/10/8
 * Time: 11:00
 */
namespace console\controllers;

use common\business\Chain33Business;
use common\business\LotteryBusiness;
use common\models\psources\CoinLottery;
use yii\console\Controller;
use Yii;

class LotteryController extends Controller
{

    /**
     * 交易并开奖
     */
    public function actionTradeAndLottery()
    {
        echo date('Y-m-d H:i:s').': '.'每天10点彩票活动准时和大家见面'.PHP_EOL;
        $lottery_config = Yii::$app->params['lottery'];
        //获取最新的区块高度
        while(true){
            try{
                $last_header = Chain33Business::getLastHeader();
                if ($last_header['code'] != 0) {
                    echo '获取区块高度失败: ' . $last_header['msg'].PHP_EOL;
                    sleep(2);
                    continue;
                }
                $last_header = $last_header['result'];
                //获取最新竞猜期数以及区块高度
                $last = CoinLottery::getMaxStage();
                if($last && $last->stage == $lottery_config['period_num'] && $last->status == 1){    //达到40期并且开完奖
                    echo date('Y-m-d H:i:s').': '.'今天彩票期数已达到40期,下期明天10点不见不散'.PHP_EOL;
                    exit;
                }
                if ($last) {
                    $start_height = $last->start_height;
                    $end_height = $start_height + $lottery_config['period_total_step'];     //某一期结束区块高度
                    if($last->status == 0){    //未开奖
                        if($last_header['height'] < $end_height){     //未到开奖区块高度
                            sleep(2);
                            continue;
                        }
                        if($last_header['height'] >= $end_height){
                            /*****************************开奖************************************/
                            echo date('Y-m-d H:i:s').': '.'开奖高度: '.$last_header['height'].PHP_EOL;
                            $lottery_result = LotteryBusiness::lottery();
                            echo date('Y-m-d H:i:s').': '.'开奖成功'.PHP_EOL;
                            if($lottery_result['code'] == 0){  //如果开奖成功
                                $last->status = 1;
                                $last->lottery_height = $last_header['height'];
                                $last->result = rand(10000,99999);
                                $last->save();
                            }else{
                                echo date('Y-m-d H:i:s').': '.'开奖异常: '.$lottery_result['msg'].PHP_EOL;
                            }
                        }
                    }else{    //已开奖
                        if($last_header['height'] > $end_height){    //到下期参与交易高度
                            /*****************************开始下期交易****************************/
                            echo date('Y-m-d H:i:s').': '.'区块交易高度: '.$last_header['height'].PHP_EOL;
                            $trade_result = LotteryBusiness::trade(1,12345,5,0);
                            echo date('Y-m-d H:i:s').': '.'交易成功 '.PHP_EOL;
                            if($trade_result['code'] == 0){
                                $start_height = $last_header['height'];
                                $end_height = $start_height + $lottery_config['period_total_step'];
                                $stage = $last->stage + 1;
                                CoinLottery::addOneRecord($start_height,$end_height,$stage);
                            }else{
                                echo date('Y-m-d H:i:s').': '.'参与交易异常: '.$trade_result['msg'].PHP_EOL;
                            }
                            sleep(2);
                        }
                    }
                } else {
                    //第一期参与交易
                    $stage        = 1;
                    $start_height = $last_header['height'];
                    $end_height = $last_header['height'] + $lottery_config['period_total_step'];
                    /***************************参与交易**********************************/
                    echo date('Y-m-d H:i:s').': '.'区块交易高度: '.$last_header['height'].PHP_EOL;
                    $trade_result = LotteryBusiness::trade(1,12345,5,0);
                    echo date('Y-m-d H:i:s').': '.'交易成功 '.PHP_EOL;
                    if($trade_result['code'] ==0){    //如果交易成功
                        CoinLottery::addOneRecord($start_height,$end_height,$stage);
                    }else{
                        echo date('Y-m-d H:i:s').': '.'参与交易异常: '.$trade_result['msg'].PHP_EOL;
                    }
                    sleep(2);
                }
            }catch (\Exception $e){
                echo date('Y-m-d H:i:s').': '.'异常: '.$e->getMessage().PHP_EOL;
                sleep(2);
            }

        }
        exit;
    }

    public function actionTrade()
    {
        $res = LotteryBusiness::trade(1,12345,5,0);
    }

    public function actionLottery()
    {
        $res = LotteryBusiness::lottery();
        var_dump($res);
    }

}