diff --git a/application/default/controllers/VisualController.php b/application/default/controllers/VisualController.php index efdda650..eb4b8ca1 100644 --- a/application/default/controllers/VisualController.php +++ b/application/default/controllers/VisualController.php @@ -50,7 +50,6 @@ class VisualController extends Zend_Controller_Action $this->_helper->layout->disableLayout(); $uuid = $this->_getParam("uuid"); - //$record_type = $this->_getParam("dataset"); $record_subset = $this->_getParam("subdataset"); $record = new Visual\Record($uuid,$record_subset); diff --git a/application/default/views/scripts/visual/view.phtml b/application/default/views/scripts/visual/view.phtml index 98a6cb6f..8efeb5c2 100644 --- a/application/default/views/scripts/visual/view.phtml +++ b/application/default/views/scripts/visual/view.phtml @@ -30,11 +30,11 @@ $this->nav[] = array('link'=>"/data/visual",'title'=>'可视化数据列表');
- normaldecode($this->data['vars']);?> + normaldecode($this->data['variable']);?> $v) { ?> - - + + @@ -67,7 +67,6 @@ $(function() { Highcharts.setOptions({ lang: { months : [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], - //months : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], weekdays: ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'] }, global: { @@ -87,17 +86,7 @@ $(function() { }, xAxis: { - type: 'datetime', - dateTimeLabelFormats: { - second: '%Y-%m-%d
%H:%M:%S', - minute: '%Y-%m-%d
%H:%M', - hour: '%Y-%m-%d
%H:%M', - day: '%Y
%m-%d', - week: '%Y
%m-%d', - month: '%Y-%m', - year: '%Y' - } - + type: 'datetime' }, tooltip : { @@ -138,7 +127,7 @@ $(function() { $.ajax({ 'url': '/visual/data', - 'data': 'uuid=' + uuid + '&dataset=' + dataset + '&subdataset=' + subdataset, + 'data': 'uuid=' + uuid + '&subdataset=' + subdataset, 'method': 'GET', 'dataType': 'json', 'success': function(data){ diff --git a/application/module/Westdc/Visual/Record.php b/application/module/Westdc/Visual/Record.php index 9bf665d5..80f693be 100644 --- a/application/module/Westdc/Visual/Record.php +++ b/application/module/Westdc/Visual/Record.php @@ -4,25 +4,16 @@ namespace Westdc\Visual; class Record extends Database { - public $subdataset,$valueFilter,$vars; - - public $timeFiled = "utctime"; - + public $subdataset,$valueFilter,$vars,$uuid,$xaxis; private $sql; - function __construct($uuid = NULL,$identifier = "") + function __construct($uuid,$identifier ) { parent::__construct(); - if(!empty($identifier)) - { - $this->subdataset = $identifier; - } - - if(!empty($uuid) && !empty($identifier)) - { - $this->initVisual($uuid); - } + $this->uuid=$uuid; + $this->subdataset = $identifier; + $this->init(); } public function __invoke() @@ -30,72 +21,24 @@ class Record extends Database return $this->getData(); } - public function initVisual($uuid) + public function init() { $visual = new Visual; - $var_data = $visual->getVisualVars($uuid); - $this->vars = $var_data['vars']; - - if(!empty($var_data['visual_valuefilter'])) - $this->valueFilter = (float)$var_data['visual_valuefilter']; - - if($var_data['visual_timefield_model'] == 'single') { - $this->timeFiled = '"' . $var_data['visual_timefield'] . '"'; - }//single - elseif($var_data['visual_timefield_model'] == 'multiple'){ - $timefield_temp = "("; - if(!empty($var_data['visual_timefield_year'])) - { - $timefield_temp .= $var_data['visual_timefield_year'] . "::character varying||"; - } - - $timefield_temp .= "'-'"; - - if(!empty($var_data['visual_timefield_month'])) - { - $timefield_temp .= "||".$var_data['visual_timefield_month']."::character varying||"; - }else{ - $timefield_temp .= '1'; - } - - $timefield_temp .= "'-"; - - if(!empty($var_data['visual_timefield_day'])) - { - $timefield_temp .= "'||".$var_data['visual_timefield_day'] . '::character varying'; - }else{ - $timefield_temp .= "1'"; - } - - $timefield_temp .= ")"; - - $timefield_temp .= "::timestamp without time zone"; - - $this->timeFiled = $timefield_temp; - }//multiple - elseif($var_data['visual_timefield_model'] == 'custom'){ - $this->timeFiled = $var_data['visual_timefield_custom']; - }//custom - - //时间字段为空的bug - if(empty($var_data['visual_timefield_model'])){ - $this->timeFiled = "utctime"; - }else{ - if($var_data['visual_timefield_model'] == 'single' && empty($var_data['visual_timefield'])){ - $this->timeFiled = "utctime"; - }elseif($var_data['visual_timefield_model'] == 'multiple' && empty($var_data['visual_timefield_year'])){ - $this->timeFiled = "utctime"; - }elseif($var_data['visual_timefield_model'] == 'custom' && empty($var_data['visual_timefield_custom'])) { - $this->timeFiled = "utctime"; - } - } - - if(isset($var_data['data']) && !empty($var_data['data'])) - $this->sql = $this->makeSql($var_data['data']); - else - $this->sql = $this->makeSql($var_data['visual_datatable']); - + $var_data = $visual->getVisualVars($this->uuid); + $this->vars = $var_data['variable']; + $this->xaxis=$var_data['xaxis']; + $json=json_decode($this->vars,true); + $subvar=array_filter($json,function($sub) { return $sub['name']==$this->subdataset; }); + if (isset($subvar['sql']) && !empty($subvar['sql'])) + $this->sql=$this->makeSql($subvar['sql']); + elseif(isset($var_data['data']) && !empty($var_data['data'])) + { + $condition=null; + if (isset($subvar['condition']) && !empty($subvar['condition'])) + $condition=$subvar['condition']; + $this->sql = $this->makeSql($var_data['data'],$condition); + } //echo $this->sql;exit(); } @@ -107,64 +50,43 @@ class Record extends Database public function getData() { $rs = $this->db->query($this->sql); - + $data = []; while($row = $rs->fetch(\PDO::FETCH_ASSOC)) { $row['utctime'] = $this->utcMsTime(strtotime($row['utctime'])); //var_dump($row); - $data[] = array( - $row['utctime'], - $row['value'] - ); + $t=[]; + foreach($row as $k=>$v) + $t[]=$v; + $data[] = $t; } return $data; } - public function makeSql($table) + public function makeSql($table,$condition=NULL) { $wheresql = ""; + if ($condition) + { + $filter=explode(';',$condition); + if(!empty($filter)) + { + if(is_string($filter)) + $wheresql = " WHERE $filter "; + elseif(is_array($filter)) + { + $wheresql = ' WHERE '.join(" AND ",$filter); + } + } + } - if(!empty($this->valueFilter)) - { - $wheresql = " WHERE \"$this->subdataset\"<>".$this->valueFilter .' '; - } - - $filter = $this->getFilter($this->subdataset); - if(!empty($filter)) - { - if(is_string($filter)) - $wheresql = ' WHERE "'.$this->subdataset.'"'. $filter .' '; - - elseif(is_array($filter)) - { - $wheresql = []; - foreach($filter as $v) - { - if(preg_match("/^[<|>|=|!](.*)/",$v)) - $wheresql[] = '"'.$this->subdataset.'"'.$v; - else - $wheresql[] = $v; - } - $wheresql = ' WHERE '.join(" AND ",$wheresql); - } - } - - $sql = "SELECT - {$this->timeFiled} as utctime , \"{$this->subdataset}\" as value - FROM $table as tbl + $sql = "SELECT {$this->xaxis},{$this->subdataset} + FROM ($table) as tbl $wheresql - ORDER BY - extract(YEAR from {$this->timeFiled}) ASC, - extract(MONTH from {$this->timeFiled}) ASC, - extract(DAY from {$this->timeFiled}) ASC, - extract(HOUR from {$this->timeFiled}) ASC, - extract(MINUTE from {$this->timeFiled}) ASC, - extract(SECOND from {$this->timeFiled}) ASC - "; - + ORDER BY {$this->xaxis}"; return $sql; } @@ -174,26 +96,4 @@ class Record extends Database else return ($time)*1000; } - - public function getFilter($subdataset) - { - $vars = json_decode($this->vars,TRUE); - - if(!is_array($vars) || count($vars)<1) - return null; - - foreach($vars as $v) - { - if($v['field'] == $subdataset) - { - if(isset($v['filter']) && !empty($v['filter'])) - { - return $v['filter']; - }else{ - return null; - } - } - } - return null; - } } \ No newline at end of file