From dfb413dbb8740e9ff58ef65398216516548f109b Mon Sep 17 00:00:00 2001 From: liuruogu Date: Tue, 20 Sep 2022 09:02:23 +0000 Subject: [PATCH 1/3] * Finish task #69600. --- module/product/model.php | 28 +++++++++++------ module/tree/control.php | 3 +- test/model/product/getpairsdealshadow.php | 37 +++++++++++++++++++++++ 3 files changed, 57 insertions(+), 11 deletions(-) create mode 100755 test/model/product/getpairsdealshadow.php diff --git a/module/product/model.php b/module/product/model.php index 0b715c3e81..428b98813a 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -340,10 +340,10 @@ class productModel extends model * @param string $mode * @param string $programID * @param string|array $append - * @param number|bool $shadow + * @param bool $dealShadow: If it is true, the name of the shadow product will be displayed as the name of the project. If it is false, the shadow product will be hidden. * @return array */ - public function getPairs($mode = '', $programID = 0, $append = '', $shadow = false) + public function getPairs($mode = '', $programID = 0, $append = '', $dealShadow = false) { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProductPairs(); @@ -352,31 +352,39 @@ class productModel extends model $views = empty($append) ? $this->app->user->view->products : $this->app->user->view->products . ",$append"; if($this->config->systemMode == 'new') { + $select = 't1.*, IF(INSTR(" closed", t1.status) < 2, 0, 1) AS isClosed'; + if($dealShadow) $select = 't1.*, IF(t1.shadow = 1, t4.name, t1.name) AS name, IF(INSTR(" closed", t1.status) < 2, 0, 1) AS isClosed'; /* Order by program. */ - return $this->dao->select('t1.*, IF(INSTR(" closed", t1.status) < 2, 0, 1) AS isClosed')->from(TABLE_PRODUCT)->alias('t1') + return $this->dao->select($select)->from(TABLE_PRODUCT)->alias('t1') ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t3')->on('t1.id = t3.product') + ->leftJoin(TABLE_PROJECT)->alias('t4')->on('t3.project = t4.id') ->where(1) ->beginIF(strpos($mode, 'all') === false)->andWhere('t1.deleted')->eq(0)->fi() ->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi() ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi() ->beginIF(!$this->app->user->admin and $this->config->vision == 'rnd')->andWhere('t1.id')->in($views)->fi() - ->beginIF(is_numeric($shadow))->andWHere('t1.shadow')->eq($shadow)->fi() + ->beginIF(!$dealShadow)->andWhere('t1.shadow')->eq(0)->fi() ->andWhere('t1.vision')->eq($this->config->vision) ->orderBy('isClosed, t2.order_asc, t1.line_desc, t1.order_asc') ->fetchPairs('id', 'name'); } else { + $select = 't1.*, IF(INSTR(" closed", t1.status) < 2, 0, 1) AS isClosed'; + if($dealShadow) $select = 't1.*, IF(t1.shadow = 1, t3.name, t1.name) AS name, IF(INSTR(" closed", t1.status) < 2, 0, 1) AS isClosed'; $orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed'; return $this->dao->select('*, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed') ->from(TABLE_PRODUCT) + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.product') + ->leftJoin(TABLE_PROJECT)->alias('t3')->on('t2.project = t3.id') ->where(1) - ->beginIF(strpos($mode, 'all') === false)->andWhere('deleted')->eq(0)->fi() - ->beginIF($programID)->andWhere('program')->eq($programID)->fi() - ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi() - ->beginIF(!$this->app->user->admin and $this->config->vision == 'rnd')->andWhere('id')->in($views)->fi() - ->beginIF(is_numeric($shadow))->andWHere('t1.shadow')->eq($shadow)->fi() - ->andWhere('vision')->eq($this->config->vision) + ->beginIF(strpos($mode, 'all') === false)->andWhere('t1.deleted')->eq(0)->fi() + ->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi() + ->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi() + ->beginIF(!$this->app->user->admin and $this->config->vision == 'rnd')->andWhere('t1.id')->in($views)->fi() + ->beginIF(!$dealShadow)->andWhere('t1.shadow')->eq(0)->fi() + ->andWhere('t1.vision')->eq($this->config->vision) ->orderBy($orderBy) ->fetchPairs('id', 'name'); } diff --git a/module/tree/control.php b/module/tree/control.php index 01898938e1..959734be20 100644 --- a/module/tree/control.php +++ b/module/tree/control.php @@ -102,7 +102,8 @@ class tree extends control if($viewType == 'story') { /* Set menu.*/ - $products = $this->product->getPairs($mode = '', $programID = 0, $append = '', $shadow = 0); + $lib = $this->product->getById($rootID); + $products = $this->product->getPairs($mode = '', $programID = 0, $append = '', !empty($lib->shadow)); $this->product->saveState($rootID, $products); unset($products[$rootID]); diff --git a/test/model/product/getpairsdealshadow.php b/test/model/product/getpairsdealshadow.php new file mode 100755 index 0000000000..b28143c342 --- /dev/null +++ b/test/model/product/getpairsdealshadow.php @@ -0,0 +1,37 @@ +#!/usr/bin/env php +getPairs(); +cid=1 +pid=1 + +测试项目集10下的11号产品 >> 正常产品11 +测试项目集10下的55号产品 >> 多分支产品55 +测试项目集10下的99号产品 >> 多平台产品99 +测试不存在的项目集 >> 没有数据 +返回所有产品的数量 >> 120 +返回项目集10下的所有产品 >> 10 +测试项目集10下的未关闭产品5 >> 正常产品6 +返回项目集10下的未关闭产品的数量 >> 6 + +*/ + +$product = new productTest('admin'); + +$t_peoduct10 = array('programID'=>'10'); +$t_noproduct = array('programID'=>'11'); +$t_alproduct = array('programID'=>'0'); +$t_notclose5 = array('programID'=>'5'); + +r($product->getProductPairs($t_peoduct10['programID'])) && p('11') && e('正常产品11'); // 测试项目集10下的11号产品 +r($product->getProductPairs($t_peoduct10['programID'])) && p('55') && e('多分支产品55'); // 测试项目集10下的55号产品 +r($product->getProductPairs($t_peoduct10['programID'])) && p('99') && e('多平台产品99'); // 测试项目集10下的99号产品 +r($product->getProductPairs($t_noproduct['programID'])) && p() && e('没有数据'); // 测试不存在的项目集 +r($product->getProductPairsCount($t_alproduct['programID'])) && p() && e('120'); // 返回所有产品的数量 +r($product->getProductPairsCount($t_peoduct10['programID'])) && p() && e('10'); // 返回项目集10下的所有产品 +r($product->getNoclosedPairs($t_notclose5['programID'])) && p('6') && e('正常产品6'); // 测试项目集10下的未关闭产品5 +r($product->getNoclosedPairsCount($t_peoduct10['programID'])) && p() && e('6'); // 返回项目集10下的未关闭产品的数量 \ No newline at end of file From 403e2a02657a037274b927f632b7dc3ee7217ffa Mon Sep 17 00:00:00 2001 From: liuruogu Date: Tue, 20 Sep 2022 09:02:35 +0000 Subject: [PATCH 2/3] * Finish task #69600. --- test/model/product/getpairsdealshadow.php | 37 ----------------------- 1 file changed, 37 deletions(-) delete mode 100755 test/model/product/getpairsdealshadow.php diff --git a/test/model/product/getpairsdealshadow.php b/test/model/product/getpairsdealshadow.php deleted file mode 100755 index b28143c342..0000000000 --- a/test/model/product/getpairsdealshadow.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -getPairs(); -cid=1 -pid=1 - -测试项目集10下的11号产品 >> 正常产品11 -测试项目集10下的55号产品 >> 多分支产品55 -测试项目集10下的99号产品 >> 多平台产品99 -测试不存在的项目集 >> 没有数据 -返回所有产品的数量 >> 120 -返回项目集10下的所有产品 >> 10 -测试项目集10下的未关闭产品5 >> 正常产品6 -返回项目集10下的未关闭产品的数量 >> 6 - -*/ - -$product = new productTest('admin'); - -$t_peoduct10 = array('programID'=>'10'); -$t_noproduct = array('programID'=>'11'); -$t_alproduct = array('programID'=>'0'); -$t_notclose5 = array('programID'=>'5'); - -r($product->getProductPairs($t_peoduct10['programID'])) && p('11') && e('正常产品11'); // 测试项目集10下的11号产品 -r($product->getProductPairs($t_peoduct10['programID'])) && p('55') && e('多分支产品55'); // 测试项目集10下的55号产品 -r($product->getProductPairs($t_peoduct10['programID'])) && p('99') && e('多平台产品99'); // 测试项目集10下的99号产品 -r($product->getProductPairs($t_noproduct['programID'])) && p() && e('没有数据'); // 测试不存在的项目集 -r($product->getProductPairsCount($t_alproduct['programID'])) && p() && e('120'); // 返回所有产品的数量 -r($product->getProductPairsCount($t_peoduct10['programID'])) && p() && e('10'); // 返回项目集10下的所有产品 -r($product->getNoclosedPairs($t_notclose5['programID'])) && p('6') && e('正常产品6'); // 测试项目集10下的未关闭产品5 -r($product->getNoclosedPairsCount($t_peoduct10['programID'])) && p() && e('6'); // 返回项目集10下的未关闭产品的数量 \ No newline at end of file From 432ff3c8a28097d6d7bca26c834e592b50a4e2fb Mon Sep 17 00:00:00 2001 From: liuruogu Date: Tue, 20 Sep 2022 09:11:56 +0000 Subject: [PATCH 3/3] * Finish task #69600. --- module/product/model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/product/model.php b/module/product/model.php index 428b98813a..e2b9fec861 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -375,7 +375,7 @@ class productModel extends model if($dealShadow) $select = 't1.*, IF(t1.shadow = 1, t3.name, t1.name) AS name, IF(INSTR(" closed", t1.status) < 2, 0, 1) AS isClosed'; $orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed'; return $this->dao->select('*, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed') - ->from(TABLE_PRODUCT) + ->from(TABLE_PRODUCT)->alias('t1') ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.product') ->leftJoin(TABLE_PROJECT)->alias('t3')->on('t2.project = t3.id') ->where(1)