diff --git a/module/programplan/model.php b/module/programplan/model.php index 975d99cec9..7e0a2565aa 100755 --- a/module/programplan/model.php +++ b/module/programplan/model.php @@ -415,6 +415,7 @@ class programplanModel extends model } /** + * 获取阶段百分比。 * Get total percent. * * @param object $stage @@ -422,11 +423,11 @@ class programplanModel extends model * @access public * @return int */ - public function getTotalPercent(object $stage, bool $parent = false) + public function getTotalPercent(object $stage, bool $parent = false) : int { /* When parent is equal to true, query the total workload of the subphase. */ $executionID = $parent ? $stage->id : $stage->project; - $plans = $this->getStage($executionID, $stage->product, 'parent'); + $plans = $this->programplanTao->getStageListBy((int)$executionID, (int)$stage->product, $browseType = 'parent'); $totalPercent = 0; $stageID = $stage->id; diff --git a/module/programplan/tao.php b/module/programplan/tao.php index a74800ca9a..7f84aadb69 100644 --- a/module/programplan/tao.php +++ b/module/programplan/tao.php @@ -287,4 +287,33 @@ class programplanTao extends programplanModel return $datas; } + + /** + * 获取阶段信息。 + * Get stage listt. + * + * @param int $executionID + * @param int $productID + * @param string $browseType + * @param string $orderBy + * @access protected + * @return array + */ + protected function getStageListBy(int $executionID, int $productID, string $browseType, $orderBy = 'id_asc') + { + if(empty($executionID)) return array(); + $projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($executionID)->fetch('model'); + + return $this->dao->select('t1.*')->from(TABLE_EXECUTION)->alias('t1') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.project') + ->where('1 = 1') + ->beginIF($projectModel != 'waterfallplus')->andWhere('t1.type')->eq('stage')->fi() + ->beginIF($productID)->andWhere('t2.product')->eq($productID)->fi() + ->beginIF($browseType == 'all')->andWhere('t1.project')->eq($executionID)->fi() + ->beginIF($browseType == 'parent')->andWhere('t1.parent')->eq($executionID)->fi() + ->beginIF($this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi() + ->andWhere('t1.deleted')->eq('0') + ->orderBy($orderBy) + ->fetchAll('id'); + } } diff --git a/module/programplan/test/model/gettotalpercent.php b/module/programplan/test/model/gettotalpercent.php index e9e8adea7c..b542fc7e16 100755 --- a/module/programplan/test/model/gettotalpercent.php +++ b/module/programplan/test/model/gettotalpercent.php @@ -10,22 +10,18 @@ title=测试 programplanModel->getTotalPercent(); cid=1 pid=1 -测试获取阶段131的总进度 >> 60 -测试获取阶段131是父阶段的总进度 >> 0 -测试获取阶段132的总进度 >> 60 -测试获取阶段133的总进度 >> 60 -测试获取阶段134的总进度 >> 60 -测试获取阶段135的总进度 >> 60 - */ -$stageIDList = array(131, 132, 133, 134, 135); + +zdTable('project')->config('project')->gen(5); +zdTable('projectproduct')->config('projectproduct')->gen(5); + +$stageIDList = array(2, 1, 5, 3); $programplan = new programplanTest(); -r($programplan->getTotalPercentTest($stageIDList[0])) && p() && e('60'); // 测试获取阶段131的总进度 -r($programplan->getTotalPercentTest($stageIDList[0], true)) && p() && e('0'); // 测试获取阶段131是父阶段的总进度 -r($programplan->getTotalPercentTest($stageIDList[1])) && p() && e('60'); // 测试获取阶段132的总进度 -r($programplan->getTotalPercentTest($stageIDList[2])) && p() && e('60'); // 测试获取阶段133的总进度 -r($programplan->getTotalPercentTest($stageIDList[3])) && p() && e('60'); // 测试获取阶段134的总进度 -r($programplan->getTotalPercentTest($stageIDList[4])) && p() && e('60'); // 测试获取阶段135的总进度 \ No newline at end of file +r($programplan->getTotalPercentTest($stageIDList[0])) && p() && e('23'); // 测试获取阶段2的总进度 +r($programplan->getTotalPercentTest($stageIDList[0], true)) && p() && e('23'); // 测试获取阶段2是父阶段的总进度 +r($programplan->getTotalPercentTest($stageIDList[1])) && p() && e('47'); // 测试获取阶段1的总进度 +r($programplan->getTotalPercentTest($stageIDList[2], true)) && p() && e('0'); // 测试获取阶段5是父阶段的总进度 +r($programplan->getTotalPercentTest($stageIDList[3])) && p() && e('24'); // 测试获取阶段3的总进度 diff --git a/module/programplan/test/model/yaml/gettotalpercent/project.yaml b/module/programplan/test/model/yaml/gettotalpercent/project.yaml new file mode 100644 index 0000000000..315d6edc2a --- /dev/null +++ b/module/programplan/test/model/yaml/gettotalpercent/project.yaml @@ -0,0 +1,28 @@ +title: zt_project +author: jukui +version: '1.0' +fields: + - field: id + range: 1-6 + - field: project + range: '1,2,3,4,1,1' + - field: name + range: '瀑布项目1,阶段a,阶段a子1,阶段a子1子1,阶段b,阶段c' + - field: parent + range: '0,1,2,3,1,1' + - field: type + range: 'stage' + - field: percent + range: 1-6 + prefix: '2' + - field: grade + range: 1 + - field: days + range: 1 + - field: status + range: 'doing,doing,doing,closed,suspended' + - field: desc + range: 1-6 + prefix: '项目描述' + - field: path + range: "`,1,`,`,1,2,`,`,1,2,3,`,`,1,2,3,4,`,`,1,5,`,`,1,6,`" diff --git a/module/programplan/test/model/yaml/gettotalpercent/projectproduct.yaml b/module/programplan/test/model/yaml/gettotalpercent/projectproduct.yaml new file mode 100644 index 0000000000..3c79cc3486 --- /dev/null +++ b/module/programplan/test/model/yaml/gettotalpercent/projectproduct.yaml @@ -0,0 +1,12 @@ +title: zt_projectproduct +author: jukui +version: '1.0' +fields: + - field: project + range: '1,2,3,4,5,6' + - field: product + range: '2' + - field: branch + range: 0 + - field: plan + range: 0