diff --git a/db/update18.8.sql b/db/update18.8.sql index dceb5ab615..c095016d75 100644 --- a/db/update18.8.sql +++ b/db/update18.8.sql @@ -90,4 +90,3 @@ INSERT INTO `zt_config` ( `vision`, `owner`, `module`, `section`, `key`, `value` REPLACE INTO `zt_chart`(`id`, `name`, `dimension`, `type`, `group`, `dataset`, `desc`, `settings`, `filters`, `step`, `fields`, `langs`, `sql`, `stage`, `builtin`, `objects`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `deleted`) VALUES (1030, '宏观数据-禅道使用时长', 1, 'card', '58', '', '', '{\"value\": {\"type\": \"value\", \"field\": \"period\", \"agg\": \"value\"}, \"title\": {\"type\": \"text\", \"name\": \"\"},\n\"type\": \"value\"\n}', '[]', 0, '', NULL, ' SELECT if(t2.`year` > 0, concat(t2.`year`, \'年\', t2.`day`, \'天\'), concat(t2.`day`, \'天\')) as period from (\r\nSELECT TIMESTAMPDIFF(YEAR,t1.firstDay,t1.today) AS `year`,DATEDIFF(DATE_SUB(t1.today,INTERVAL TIMESTAMPDIFF(YEAR,t1.firstDay,t1.today) YEAR), t1.firstDay) AS `day` \r\nFROM (SELECT `value` AS firstDay, now() AS today FROM zt_config WHERE `owner` = \'system\' AND `key` = \'installedDate\') AS t1\r\n) t2', 'published', 1, '', 'system', '2022-12-07 14:59:41', '', '2022-12-07 14:59:41', 0); REPLACE INTO `zt_chart`(`id`, `name`, `dimension`, `type`, `group`, `dataset`, `desc`, `settings`, `filters`, `step`, `fields`, `langs`, `sql`, `stage`, `builtin`, `objects`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `deleted`) VALUES (20015, '使用数据分析-上线时间', 1, 'card', '58', '0', ' ', '{\"value\": {\"type\": \"value\", \"field\": \"date\", \"agg\": \"value\"}, \"title\": {\"type\": \"text\", \"name\": \"\"}, \"type\": \"value\"}', '[]', 0, ' ', NULL, 'select `value` as date from zt_config where `owner` = \'system\' and `key` = \'installedDate\'', 'published', 1, ' ', 'system', '2023-08-16 15:32:10', 'admin', '2023-08-16 15:32:17', 0); - diff --git a/module/product/config.php b/module/product/config.php index 546b8bf50c..4562fefac1 100644 --- a/module/product/config.php +++ b/module/product/config.php @@ -46,11 +46,10 @@ $config->product->report->planLabels = array(); $config->product->report->planLabels[] = ''; $config->product->statisticFields = array(); -$config->product->statisticFields['requirements'] = array('draftRequirements', 'activeRequirements', 'changingRequirements', 'reviewingRequirements', 'closedRequirements'); -$config->product->statisticFields['stories'] = array('draftStories', 'activeStories', 'changingStories', 'reviewingStories', 'closedStories', 'finishedStories', 'totalStories'); -$config->product->statisticFields['bugs'] = array('unresolvedBugs', 'closedBugs', 'fixedBugs'); -$config->product->statisticFields['plans'] = array('plans'); -$config->product->statisticFields['releases'] = array('releases'); +$config->product->statisticFields['stories'] = array('draftStories', 'activeStories', 'changingStories', 'reviewingStories', 'closedStories', 'finishedStories', 'totalStories'); +$config->product->statisticFields['bugs'] = array('unresolvedBugs', 'closedBugs', 'fixedBugs'); +$config->product->statisticFields['plans'] = array('plans'); +$config->product->statisticFields['releases'] = array('releases'); $config->product->skipRedirectMethod = ',create,index,showerrornone,ajaxgetdropmenu,kanban,all,manageline,export,ajaxgetplans,'; $config->product->memberFields = array('PO', 'QD', 'RD', 'feedback', 'ticket', 'createdBy;'); diff --git a/module/product/model.php b/module/product/model.php index a4ba91bd2c..4e4390b101 100755 --- a/module/product/model.php +++ b/module/product/model.php @@ -1050,11 +1050,13 @@ class productModel extends model $stats = $this->getStatsProducts($productIdList, $programID == 0, $orderBy, $pager); $latestReleases = $this->productTao->getStatisticByType($productIdList, 'latestReleases'); + $projectCountPairs = $this->productTao->getProjectCountPairs($productIdList); $executionCountPairs = $this->productTao->getExecutionCountPairs($productIdList); $coveragePairs = $this->getCaseCoveragePairs($productIdList); foreach($stats as $product) { + $product->projects = zget($projectCountPairs, $product->id, 0); $product->executions = zget($executionCountPairs, $product->id, 0); $product->coverage = zget($coveragePairs, $product->id, 0); diff --git a/module/program/ui/productview.html.php b/module/program/ui/productview.html.php index 1b8b068fd6..72c2bf22d2 100644 --- a/module/program/ui/productview.html.php +++ b/module/program/ui/productview.html.php @@ -52,7 +52,7 @@ $fnGenerateProgramRowData = function($programID, $program) use ($config, $users) if(!isset($program['programName']) || $config->systemMode != 'ALM') return null; /* ALM mode with more data. */ - $totalStories = $program['finishClosedStories'] + $program['unclosedStories']; + $totalStories = $program['totalStories']; $pmName = ''; if(!empty($program['programPM'])) { @@ -70,9 +70,9 @@ $fnGenerateProgramRowData = function($programID, $program) use ($config, $users) $item->PM = $pmName; $item->createdDate = ''; $item->createdBy = ''; - $item->totalUnclosedStories = $program['unclosedStories']; + $item->totalUnclosedStories = $totalStories - $program['closedStories']; $item->totalStories = $totalStories; - $item->closedStoryRate = ($totalStories == 0 ? 0 : round($program['finishClosedStories'] / $totalStories, 3) * 100); + $item->closedStoryRate = ($totalStories == 0 ? 0 : round($program['closedStories'] / $totalStories, 3) * 100); $item->totalPlans = $program['plans']; $item->totalProjects = 0; $item->totalExecutions = 0; @@ -125,8 +125,6 @@ $fnGenerateLineRowData = function($programID, $lineID, $line) use ($config, &$li /* Closure for generating product row data. */ $fnGenerateProductRowData = function($lineID, $product) use ($users) { - $totalStories = $product->stories['finishClosed'] + $product->stories['unclosed']; - $item = new stdClass(); $item->type = 'product'; $item->id = $product->id; @@ -135,15 +133,15 @@ $fnGenerateProductRowData = function($lineID, $product) use ($users) $item->PM = !empty($product->PO) ? zget($users, $product->PO) : ''; $item->createdDate = $product->createdDate; $item->createdBy = $product->createdBy; - $item->totalUnclosedStories = $product->stories['unclosed']; - $item->totalStories = $totalStories; - $item->closedStoryRate = empty($totalStories) ? 0 : round($product->stories['finishClosed'] / $totalStories, 3) * 100; + $item->totalUnclosedStories = $product->totalStories - $product->closedStories; + $item->totalStories = $product->totalStories; + $item->closedStoryRate = empty($product->totalStories) ? 0 : round($product->closedStories / $product->totalStories, 3) * 100; $item->totalPlans = $product->plans; $item->totalProjects = $product->projects; $item->totalExecutions = $product->executions; $item->testCaseCoverage = $product->coverage; - $item->totalActivatedBugs = $product->activeBugs; - $item->totalBugs = $product->bugs; + $item->totalActivatedBugs = $product->unresolvedBugs; + $item->totalBugs = $product->totalBugs; $item->fixedRate = empty($item->totalBugs) ? 0 : round($product->fixedBugs / $item->totalBugs, 3) * 100; $item->totalReleases = $product->releases; $item->latestReleaseDate = $product->latestReleaseDate;