From 2a64c3ed6aa11c5e5e6ca9db7900227f0c33a538 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Mon, 26 Dec 2022 21:05:22 +0800 Subject: [PATCH] * Add build piecircle chart method. --- module/screen/model.php | 61 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/module/screen/model.php b/module/screen/model.php index ec78e4b684..da64039881 100644 --- a/module/screen/model.php +++ b/module/screen/model.php @@ -278,6 +278,9 @@ class screenModel extends model case 'bar': return $this->buildBarChart($component, $chart); break; + case 'piecircle': + return $this->buildPieCircleChart($component, $chart); + break; case 'pie': return $this->buildPieChart($component, $chart); break; @@ -626,6 +629,64 @@ class screenModel extends model } } + /** + * Build pie chart. + * + * @param object $component + * @param object $chart + * @access public + * @return object + */ + public function buildPieCircleChart($component, $chart) + { + if(!$chart->settings) + { + $component->request = json_decode('{"requestDataType":0,"requestHttpType":"get","requestUrl":"","requestIntervalUnit":"second","requestContentType":0,"requestParamsBodyType":"none","requestSQLContent":{"sql":"select * from where"},"requestParams":{"Body":{"form-data":{},"x-www-form-urlencoded":{},"json":"","xml":""},"Header":{},"Params":{}}}'); + $component->events = json_decode('{"baseEvent":{},"advancedEvents":{}}'); + $component->key = "PieCircle"; + $component->chartConfig = json_decode('{"key":"PieCircle","chartKey":"VPieCircle","conKey":"VCPieCircle","title":"饼图","category":"Pies","categoryName":"饼图","package":"Charts","chartFrame":"echarts","image":"/static/png/pie-circle-258fcce7.png"}'); + $component->option = json_decode('{"type":"nomal","series":[{"type":"pie","radius":"70%","roseType":false}],"backgroundColor":"rgba(0,0,0,0)"}'); + + return $this->setComponentDefaults($component); + } + else + { + if($chart->sql) + { + $settings = json_decode($chart->settings); + if($settings and isset($settings->metric)) + { + $sourceData = array(); + + $sql = $this->setFilterSQL($chart); + $results = $this->dao->query($sql)->fetchAll(); + $group = $settings->group[0]->field; + + $groupCount = array(); + foreach($results as $result) + { + if($settings->metric[0]->agg == 'count') + { + if(!isset($groupCount[$result->$group])) $groupCount[$result->$group] = 0; + $groupCount[$result->$group]++; + } + } + + foreach($groupCount as $groupValue => $groupCount) + { + $groupValue = strpos($groupValue, '未') !== false ? 'undone' : 'done'; + $sourceData[$groupValue] = $groupCount; + } + } + $component->option->dataset = array_sum($sourceData) != 0 ? $sourceData['undone'] / array_sum($sourceData) : 0; + $component->option->series[0]->data[0]->value = array(array_sum($sourceData) != 0 ? $sourceData['undone'] / array_sum($sourceData) : 0); + $component->option->series[0]->data[1]->value = array(array_sum($sourceData) != 0 ? $sourceData['done'] / array_sum($sourceData) : 0); + } + + return $this->setComponentDefaults($component); + } + } + /** * Build radar chart. *