71 lines
2.2 KiB
PHP
71 lines
2.2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
class screenTao extends screenModel
|
|
{
|
|
/**
|
|
* 设置默认的图表配置。
|
|
* Set the default chart config.
|
|
*
|
|
* @param string $type
|
|
* @param object $component
|
|
* @return bool
|
|
*/
|
|
protected function setChartDefault(string $type, object $component): bool
|
|
{
|
|
if(!isset($this->config->screen->chart->default->{$type})) return false;
|
|
$chartConfig = $this->config->screen->chart->default->{$type};
|
|
foreach(get_object_vars($chartConfig) as $key => $value) $component->{$key} = $value;
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* 处理雷达图表的数据。
|
|
* Set the chart data.
|
|
*
|
|
* @param object $sql
|
|
* @param object $settings
|
|
* @param array $indicator
|
|
* @param array $seriesData
|
|
* @return void
|
|
*/
|
|
protected function processRadarData(string $sql, object $settings, array &$indicator, array &$seriesData)
|
|
{
|
|
$results = $this->dao->query($sql)->fetchAll();
|
|
$group = $settings->group[0]->field;
|
|
|
|
/* 通过配置获取指标。 */
|
|
/* Get the metric by the setting. */
|
|
$metrics = array();
|
|
foreach($settings->metric as $metric) $metrics[$metric->key] = array('field' => $metric->field, 'name' => $metric->name, 'value' => 0);
|
|
|
|
/* 计算指标的值。 */
|
|
/* Calculate the value of the metric. */
|
|
foreach($results as $result)
|
|
{
|
|
if(isset($metrics[$result->$group]))
|
|
{
|
|
$field = $metrics[$result->$group]['field'];
|
|
$metrics[$result->$group]['value'] += $result->$field;
|
|
}
|
|
}
|
|
|
|
$max = 0;
|
|
foreach($metrics as $data) $max = $data['value'] > $max ? $data['value'] : $max;
|
|
|
|
/* 设置指标和数据。 */
|
|
/* Set the indicator and data. */
|
|
$data = array('name' => '', 'value' => array());
|
|
$value = array();
|
|
foreach($metrics as $metric)
|
|
{
|
|
$indicator[] = array('name' => $metric['name'], 'max' => $max);
|
|
$data['value'][] = $metric['value'];
|
|
$value[] = $metric['value'];
|
|
}
|
|
$seriesData[] = $data;
|
|
|
|
return $value;
|
|
}
|
|
}
|