* Refactor screenModel::getRadarChartOption.

This commit is contained in:
wangxuepeng
2023-11-25 14:14:20 +08:00
parent 19d535e165
commit 0c3d1f913a
+16 -22
View File
@@ -539,67 +539,61 @@ class screenModel extends model
}
/**
* 获取雷达图配置。
* Get radar chart option.
*
* @param object $component
* @param object $chart
* @param array $filters
* @access public
* @return object
* @return void
*/
public function getRadarChartOption($component, $chart, $filters = '')
public function getRadarChartOption(object $component, object $chart, array $filters = array()): void
{
$indicator = array();
$seriesData = array();
if($chart->sql)
{
$settings = json_decode($chart->settings, true);
$langs = json_decode($chart->langs, true);
$settings = $settings[0];
$langs = json_decode($chart->langs, true);
$settings = current($settings);
list($group, $metrics, $aggs, $xLabels, $yStats) = $this->loadModel('chart')->getMultiData($settings, $chart->sql, $filters);
$fields = json_decode($chart->fields, true);
$fields = json_decode($chart->fields);
$radarIndicator = array();
$seriesData = array();
$max = 0;
$clientLang = $this->app->getClientLang();
$xLabelValues = $this->processXLabel($xLabels, $fields[$group]['type'], $fields[$group]['object'], $fields[$group]['field']);
$xLabelValues = $this->processXLabel($xLabels, $fields->{$group}->type, $fields->{$group}->object, $fields->{$group}->field);
foreach($yStats as $index => $dataList)
{
$field = zget($fields, $metrics[$index]);
$fieldName = $field->name;
if(isset($langs[$field->field]) and !empty($langs[$field->field][$clientLang])) $fieldName = $langs[$field->field][$clientLang];
$field = $fieldName . '(' . zget($this->lang->chart->aggList, $aggs[$index]) . ')';
$fieldConfig = zget($fields, $metrics[$index]);
$fieldName = $langs[$fieldConfig->field][$clientLang] ?? $fieldConfig->name;
$field = $fieldName . '(' . zget($this->lang->chart->aggList, $aggs[$index]) . ')';
$seriesData[$index] = new stdclass();
$seriesData[$index]->name = $field;
$values = array();
foreach($dataList as $valueField => $value)
{
$values[] = (float)$value;
$max = $max < $value ? (float)$value : (float)$max;
}
$values = array_map(function($value){return (float)$value;}, $dataList);
$max = max($values);
$seriesData[$index]->value = $values;
}
if(!empty($dataList))
{
foreach($dataList as $valueField => $value)
foreach(array_keys($dataList) as $valueField)
{
$indicator = new stdclass();
$indicator->name = $xLabelValues[$valueField];
$indicator->max = $max;
$radarIndicator[] = $indicator;;
$radarIndicator[] = $indicator;
}
}
$component->option->dataset->radarIndicator = $radarIndicator;
$component->option->dataset->seriesData = $seriesData;
}
return $this->setComponentDefaults($component);
$this->setComponentDefaults($component);
}