<?php
namespace admin\action;
use \model\bi\bi;
class biAction  extends \action
{
    public $bi = null;
	function __construct()
	{
        $this->bi = new bi();
	}
	
    /**
	  * 魔术方法 __call 直接调用 model 中的类的方法
	  * @param string $method 模块中的方法,以 __开头
	  * @param mixed $arguments
	  * @return 返回model中方法的值
	  */
    function __call($method,$arguments) {
        if(substr($method,0,2)==='__'){
            $this->successJson(call_user_func_array([$this->bi,substr($method,2),$arguments]));
        }
    }

	/**
	  * 所有维度列配置信息
	  */
    function getColsCfg()
	{
		$cols = require(\mvc::$cfg['dir']['project'].'/config/bi/cols.php');
		echo 'var bi = bi || {}; bi.cols = '.json_encode($cols) .';';
    }

	/**
	  * 生成维度与汇总
	  */
    function buildDataTable()
	{
		set_time_limit(3600*24);
	    ini_set('memory_limit', '2048M');
	    make(\model\bi\pushData::class)->execute();
    }

	/**
	  * 大屏A
	  */
    function reportA()
	{
        \view::put();
    }

	/**
	  * 大屏A2
	  */
    function reportA2()
	{
        \view::put();
    }

	/**
	  * 大屏B
	  */
    function reportB()
	{
        \view::put();
    }

	/**
	  * 大屏 销售图表
	  */
    function biSales()
	{
        \view::put();
    }

	/**
	  * 取指定数据
	  * @param $rules array
	  */
    function getData($json)
	{
	    $rules = $this->jsonRulesToWhere($json);
        $data = make(\model\bi\getData2::class)->put($rules);
        $this->successJson($data);
    }
	/**
	  * 取指定图表指定维度列表
	  */
    function getDimension2($table,$dimension,$where=[])
	{
        $rules = $this->jsonRulesToWhere($where);
	    $data = make(\model\bi\getData2::class)->getDimension($table,$dimension,$rules);
        $this->successJson($data);
    }
	/**
	  * 通过caption查key
	  */
    function getDimensionKeyByCaption($table,$dimension,$caption)
	{
	    $data = make(\model\bi\getData2::class)->getDimensionKeyByCaption($table,$dimension,$caption);
        $this->successJson(['data'=>$data]);
    }
    
	/**
	  * 取指定图表
	  * @param $code 参考 config/bi/ui_code.png
	  */
    function getChart($code,$rules=[],$series='',$axis='',$countType='')
	{
	    $data = make(\model\bi\getData::class)->put($code,$rules,$series,$axis,$countType);
        $this->successJson($data);
    }

	/**
	  * 取指定图表指定维度列表
	  * @param $code 参考 config/bi/ui_code.png
	  */
    function getDimension($code,$dimension,$rules=[])
	{
	    $data = make(\model\bi\getData::class)->getDimension($code,$dimension,$rules);
        $this->successJson($data);
    }


	/**
	  * 设定
	  */
    function sys()
	{
        \view::put();
    }
    
	/**
	  * 销售数据刷新
	  */
    function new_saledataall_bi()
	{
	    $this->bi->new_saledataall_bi();
        $this->successJson();
    }
    
	/**
	  * 特定取值
	  */
    function getValue($tag,$dimens)
	{
        $this->successJson(['data'=>$this->bi->getValue($tag,$dimens)]);
    }
    
	/**
	  * 多维取值
	  */
    function getDimensValue($where=[],$fields=[],$row2col=[],$groups=[],$having=[],$orders=[],$limit=20)
	{
        $this->successJson(['data'=>$this->bi->getDimensValue($where,$fields,$row2col,$groups,$having,$orders,$limit)]);
    }

	/**
	  * @method 选择器
	  * @param  table  string  [必填] factory | make
	  * @param  style  string  [选填] 选择模式 anychk:多选  空(默认):单选
	  * @param  letter  int  [选填] 是否启用字母选择  1(默认)|-1
	  * @author soul
	  */
    public function select()
	{
		$req = \mvc::$req;
		$style = !empty($req['style']) && $req['style'] == 'anychk'? 'anychk': '';
        $dataArr = $this->bi->getSelect($req['table'], $req);
		if(empty($dataArr)) $dataArr = [];
		$letterArr = [];
		if($req['letter'] != -1)
		{
			$sort = ['seq'=>[], 'letter'=>[], 'name'=>[]];
			$flArr = [];
			foreach($dataArr as &$v)
			{
				if(isset($v['letter']))
				{
					$v['letter'] = substr($v['letter'], 0, 1);
				}
				else if(preg_match('/^[0-9a-zA-Z]/', $v['name'], $match))
				{
					$v['letter'] = $match[0];
				}
				else
				{
					$fl = mb_substr($v['name'], 0, 1);
					if(empty($flArr[$fl]))
					{
						$py = pinyinFirst($fl);
						$v['letter'] = substr($py, 0, 1);
						$flArr[$fl] = $v['letter'];
					}
					else
					{
						$v['letter'] = $flArr[$fl];
					}
				}
				$v['letter'] = strtoupper($v['letter']);
				$sort['seq'][] = isset($v['seq'])? $v['seq']: 0;
				$sort['letter'][] = $v['letter'];
				$sort['name'][] = $v['name'];
				$letterArr[] = $v['letter'];
			}
			array_multisort($sort['seq'], SORT_DESC,$sort['letter'], SORT_ASC, $sort['name'], SORT_ASC, $dataArr);
			$letterArr = array_unique($letterArr);
			sort($letterArr);
		}
		else
		{	//是否全部为数字
			$isNUm = true;
			$sort = [];
			foreach($dataArr as $k=>$v)
			{
				$sort[] = $v['name'];
				if(!preg_match('/\d+\.?\d*/', $v['name'], $match))
				{
					$isNUm = false;
					break;
				}
			}
			if($isNUm)
				array_multisort($sort, SORT_ASC, $dataArr);
		}
		\view::set('letterArr', $letterArr);
		\view::set('dataArr', $dataArr);
		\view::set('style', $style);
		$html = \view::fetch();
		$this->successJson(['data'=>$html]);
    }

	public function getMsTopList()
	{
		$req = \mvc::$req;
        $data = $this->bi->getMsTopList($req);
        $this->successJson($data);
	
	}
}