From 709d8f62b4da8dbc6b45d8bae10afe3ca81891c3 Mon Sep 17 00:00:00 2001 From: caoyanyi Date: Wed, 11 Jun 2025 10:45:45 +0800 Subject: [PATCH] * [task#144606,doing,1h] add count_of_story_in_product_and_module metric. --- .../count_of_story_in_product_and_module.php | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 module/metric/calc/product/scale/count_of_story_in_product_and_module.php diff --git a/module/metric/calc/product/scale/count_of_story_in_product_and_module.php b/module/metric/calc/product/scale/count_of_story_in_product_and_module.php new file mode 100644 index 0000000000..60f68a5def --- /dev/null +++ b/module/metric/calc/product/scale/count_of_story_in_product_and_module.php @@ -0,0 +1,63 @@ + + * @package + * @uses func + * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html) + * @Link https://www.zentao.net + */ +class count_of_story_in_product_and_module extends baseCalc +{ + public $dataset = ''; + + public $fieldList = array(); + + public $result = array(); + + public function calculate($row) + { + if(!isset($this->result[$row->product])) $this->result[$row->product] = array('name'=> $row->product, 'value' => 0, 'children' => array()); + if(!isset($this->result[$row->product]['children'][$row->module])) $this->result[$row->product]['children'][$row->module] = array('name'=> $row->module, 'value' => 0, 'children' => array()); + if($row->secondModule && !isset($this->result[$row->product]['children'][$row->module]['children'][$row->secondModule])) $this->result[$row->product]['children'][$row->module]['children'][$row->secondModule] = array('name'=> $row->secondModule, 'value' => 0); + + $this->result[$row->product]['value'] ++; + if($row->module) $this->result[$row->product]['children'][$row->module]['value'] ++; + if($row->secondModule) $this->result[$row->product]['children'][$row->module]['children'][$row->secondModule]['value'] ++; + } + + public function processRecords($options = array()) + { + $records = array(); + foreach($options as $row) + { + if(!empty($row['children'])) + { + $row['children'] = array_values($this->processRecords($row['children'])); + } + else + { + unset($row['children']); + } + $records[] = $row; + } + return $records; + } + + public function getResult($options = array()) + { + $records = $this->processRecords($this->result); + return $this->filterByOptions($records, $options); + } +}