Merge branch dev/task-143677 of zentao/zentaopms (#8937)

This commit is contained in:
刘刚
2025-05-27 16:28:38 +08:00
committed by Gitfox
16 changed files with 220 additions and 15 deletions
+1 -1
View File
@@ -39,7 +39,7 @@ spec:
type: run
spec:
container:
image: hub.zentao.net/ci/zentao-package:master
image: hub.zentao.net/ci/zentao-package:master-250527
script:
- DOWNGRADE_CODE_DIR=$(mktemp -d)
- mkdir $DOWNGRADE_CODE_DIR/diff
+25 -1
View File
@@ -163,6 +163,15 @@ class baseDAO
*/
public $autoLang;
/**
* 是否自动增加isTpl条件。
* If auto add isTpl statement.
*
* @var bool
* @access public
*/
public $autoTpl;
/**
* 上一次插入的数据id。
* Last insert id.
@@ -301,6 +310,20 @@ class baseDAO
return $this;
}
/**
* 设置autoTpl项。
* Set autoTpl item.
*
* @param bool $autoTpl
* @access public
* @return void
*/
public function setAutoTpl($autoTpl)
{
$this->autoTpl = $autoTpl;
return $this;
}
/**
* 重置属性。
* Reset the vars.
@@ -316,6 +339,7 @@ class baseDAO
$this->setMode('');
$this->setMethod('');
$this->setAutoLang(isset($this->config->framework->autoLang) and $this->config->framework->autoLang);
$this->setAutoTpl(true);
}
//-----根据请求的方式,调用sql类相应的方法(Call according method of sql class by query method. -----//
@@ -859,7 +883,7 @@ class baseDAO
$sql .= '(`' . implode('`,`', array_keys($values)) . '`)' . ' VALUES(' . implode(',', $values) . ')';
}
elseif($this->method == 'select' && $filterTpl)
elseif($this->method == 'select' && $filterTpl && $this->autoTpl)
{
/* 过滤模板类型的数据 */
foreach(array('project', 'task') as $table)
+8 -4
View File
@@ -1146,6 +1146,7 @@ class executionModel extends model
return $this->dao->select('*,whitelist')->from(TABLE_EXECUTION)
->where('id')->in($executionIdList)
->beginIF($mode != 'all')->andWhere('deleted')->eq(0)->fi()
->setAutoTpl(false)
->fetchAll('id');
}
@@ -1439,7 +1440,7 @@ class executionModel extends model
{
/* Construct the query SQL at search executions. */
$executionQuery = $browseType == 'bySearch' ? $this->getExecutionQuery($param) : '';
$project = $this->dao->select('model,isTpl')->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch();
if($projectID) $project = $this->dao->select('model,isTpl')->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch();
return $this->dao->select('t1.*,t2.name projectName, t2.model as projectModel')->from(TABLE_EXECUTION)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
@@ -1448,9 +1449,9 @@ class executionModel extends model
->andWhere('t1.deleted')->eq('0')
->andWhere('t1.vision')->eq($this->config->vision)
->andWhere('t1.multiple')->eq('1')
->beginIF($project->model == 'ipd')->andWhere('t1.enabled')->eq('on')->fi()
->beginIF($project->isTpl)->andWhere('t1.isTpl')->eq('1')->fi()
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi()
->beginIF(!empty($project->isTpl))->andWhere('t1.isTpl')->eq('1')->fi()
->beginIF(!empty($project->model) && $project->model == 'ipd')->andWhere('t1.enabled')->eq('on')->fi()
->beginIF(!$this->app->user->admin && !$project->isTpl)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi()
->beginIF(!empty($executionQuery))->andWhere($executionQuery)->fi()
->beginIF($productID)->andWhere('t3.product')->eq($productID)->fi()
->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi()
@@ -1989,6 +1990,7 @@ class executionModel extends model
->beginIF($filterStatus)->andWhere('t1.status')->notin('closed,cancel')->fi()
->andWhere('t1.execution')->in($executionIdList)
->orderBy('t1.order_asc, t1.id_desc')
->setAutoTpl(false)
->fetchGroup('execution', 'id');
$today = helper::today();
@@ -3757,6 +3759,7 @@ class executionModel extends model
->leftJoin(TABLE_USER)->alias('t3')->on('t1.assignedTo = t3.account')
->where('t1.deleted')->eq(0)
->andWhere($condition)
->setAutoTpl(false)
->orderBy($orderBy)
->page($pager, 't1.id')
->fetchAll('id');
@@ -5245,6 +5248,7 @@ class executionModel extends model
return $this->dao->select('id,name')->from(TABLE_EXECUTION)
->where('id')->in($executionIdList)
->beginIF(!empty($type))->andWhere('type')->in($type)->fi()
->setAutoTpl(false)
->orderBy($orderBy)
->fetchPairs();
}
@@ -23,6 +23,41 @@ title=测试 executionModel->fetchExecutionList();
timeout=0
cid=1
- 获取没有限制条件时执行的个数 @20
- 获取进行中执行的个数 @11
- 获取敏捷项目1下的执行的个数 @3
- 获取全部状态执行的个数 @24
- 获取未关闭的执行的个数 @20
- 获取未开始的执行的个数 @6
- 获取进行中的执行的个数 @11
- 获取已暂停的执行的个数 @3
- 获取已关闭的执行的个数 @4
- 获取我参与的执行的个数 @24
- 获取关联产品5的执行的个数 @1
- 获取敏捷项目下全部的执行
- 第101条的project属性 @11
- 第101条的name属性 @迭代5
- 获取敏捷项目下未关闭的执行
- 第101条的project属性 @11
- 第101条的name属性 @迭代5
- 获取敏捷项目下未开始的执行
- 第101条的project属性 @11
- 第101条的name属性 @迭代5
- 获取敏捷项目下进行中的执行
- 第103条的project属性 @11
- 第103条的name属性 @迭代7
- 获取敏捷项目下已暂停的执行 @0
- 获取敏捷项目下已关闭的执行 @0
- 获取敏捷项目下我参与的执行
- 第103条的project属性 @11
- 第103条的name属性 @迭代7
- 获取敏捷项目下按照开始日期倒序排列全部的执行
- 第103条的project属性 @11
- 第103条的name属性 @迭代7
- 获取按照开始日期倒序排列执行
- 第126条的project属性 @100
- 第126条的name属性 @看板30
*/
$projectIdList = array(0, 11);
+11 -3
View File
@@ -22,6 +22,12 @@ title=测试executionModel->getByIdListTest();
timeout=0
cid=1
- 敏捷项目查询第3条的name属性 @迭代1
- 瀑布项目查询第4条的type属性 @stage
- 看板项目查询第5条的status属性 @doing
- 看板项目查询第5条的type属性 @kanban
- 看板项目查询第5条的name属性 @迭代3
*/
$executionIdList = array(3, 4, 5);
@@ -31,6 +37,8 @@ $tester->loadModel('execution');
$executionList = $tester->execution->getByIdList($executionIdList);
r($executionList) && p('3:name') && e('迭代1'); // 敏捷项目查询
r($executionList) && p('4:type') && e('stage'); // 瀑布项目查询
r($executionList) && p('5:status') && e('doing'); // 看板项目查询
r($executionList) && p('3:name') && e('迭代1'); // 敏捷项目查询
r($executionList) && p('4:type') && e('stage'); // 瀑布项目查询
r($executionList) && p('5:status') && e('doing'); // 看板项目查询
r($executionList) && p('5:type') && e('kanban'); // 看板项目查询
r($executionList) && p('5:name') && e('迭代3'); // 看板项目查询
@@ -13,6 +13,12 @@ title=测试executionModel->getByIdListTest();
timeout=0
cid=1
- 测试查找执行 ID 1 2 3 的名称 @项目集1,项目集2,项目集3
- 测试查找执行 ID 4 5 6 的名称 @项目集4,项目集5,项目集6
- 测试查找执行 ID 7 8 9 的名称 @项目集7,项目集8,项目集9
- 测试查找执行 ID 10 11 12 的名称 @项目集10,项目11,项目12
- 测试查找执行 ID 13 14 15 的名称 @项目13,项目14,项目15
*/
$executionIdList = array('1,2,3', '4,5,6', '7,8,9', '10,11,12', '13,14,15');
@@ -39,8 +39,29 @@ title=executionModel->getSearchTasks();
timeout=0
cid=1
- 测试通过sql语句获取3个任务 id 倒序 execution = '3' and deleted = '0' and parent >= 0第10条的name属性 @任务10
- 测试通过sql语句获取3个任务 id 正序 execution = '3' and deleted = '0' and parent >= 0第1条的name属性 @任务1
- 测试通过sql语句获取5个任务 id 倒序 execution = '3' and deleted = '0' and parent >= 0第10条的name属性 @任务10
- 测试通过sql语句获取5个任务 id 正序 execution = '3' and deleted = '0' and parent >= 0第1条的name属性 @任务1
- 测试通过sql语句获取3个任务 id 倒序 type = 'devel' and fromBug != '0' and parent >= 0第8条的name属性 @任务8
- 测试通过sql语句获取3个任务 id 正序 type = 'devel' and fromBug != '0' and parent >= 0第2条的name属性 @任务2
- 测试通过sql语句获取5个任务 id 倒序 type = 'devel' and fromBug != '0' and parent >= 0第8条的name属性 @任务8
- 测试通过sql语句获取5个任务 id 正序 type = 'devel' and fromBug != '0' and parent >= 0第2条的name属性 @任务2
- 测试通过sql语句获取3个任务 id 倒序 execution = '3' and story != '0' and parent >= 0第10条的name属性 @任务10
- 测试通过sql语句获取3个任务 id 正序 execution = '3' and story != '0' and parent >= 0第2条的name属性 @任务2
- 测试通过sql语句获取5个任务 id 倒序 execution = '3' and story != '0' and parent >= 0第10条的name属性 @任务10
- 测试通过sql语句获取5个任务 id 正序 execution = '3' and story != '0' and parent >= 0第2条的name属性 @任务2
- 测试通过sql语句获取3个任务 id 倒序 module like '%2%' and type = 'design' and parent >= 0第6条的name属性 @任务6
- 测试通过sql语句获取3个任务 id 正序 module like '%2%' and type = 'design' and parent >= 0第6条的name属性 @任务6
- 测试通过sql语句获取5个任务 id 倒序 module like '%2%' and type = 'design' and parent >= 0第6条的name属性 @任务6
- 测试通过sql语句获取5个任务 id 正序 module like '%2%' and type = 'design' and parent >= 0第6条的name属性 @任务6
*/
global $app;
$app->rawModule = 'execution';
$app->rawMethod = 'task';
$condition = array();
$condition[] = "t1.execution = '3' AND t1.deleted = '0' AND t1.parent >= 0";
$condition[] = "t1.type = 'devel' AND t1.fromBug != '0' AND t1.parent >= 0";
@@ -31,7 +31,7 @@ $task->gen(10);
$story = zenData('story');
$story->id->range('1-10');
$story->status->range('active,changed');
$story->status->range('active,changing');
$story->version->range('1{6},2{2},3{2}');
$story->gen(10);
@@ -43,6 +43,21 @@ title=测试 executionModel->getTaskGroupByExecution();
timeout=0
cid=1
- 测试空数据 @0
- 测试获取执行的任务 @3
- 测试获取执行ID=3的任务关联需求版本跟需求状态
- 第1条的storyVersion属性 @1
- 第1条的storyStatus属性 @active
- 第1条的needConfirm属性 @~~
- 测试获取执行ID=4的任务关联需求版本跟需求状态
- 第2条的storyVersion属性 @1
- 第2条的storyStatus属性 @~~
- 第2条的needConfirm属性 @~~
- 测试获取执行ID=5的任务关联需求版本跟需求状态
- 第9条的storyVersion属性 @2
- 第9条的storyStatus属性 @active
- 第9条的needConfirm属性 @1
*/
@@ -53,6 +68,6 @@ r($execution->getTaskGroupByExecutionTest()) && p() && e('0');
r($execution->getTaskGroupByExecutionTest($executionIdList)) && p() && e('3'); // 测试获取执行的任务
$taskGroup = $execution->getTaskGroupByExecutionTest($executionIdList, false);
r($taskGroup[3]) && p('1:storyVersion,storyStatus,needConfirm') && e('1,active,~~'); // 测试获取执行ID=3的任务关联需求版本跟需求状态
r($taskGroup[4]) && p('2:storyVersion,storyStatus,needConfirm') && e('1,~~,~~'); // 测试获取执行ID=4的任务关联需求版本跟需求状态
r($taskGroup[5]) && p('9:storyVersion,storyStatus,needConfirm') && e('2,active,1'); // 测试获取执行ID=5的任务关联需求版本跟需求状态
r($taskGroup[3]) && p('1:storyVersion,storyStatus,needConfirm') && e('1,active,~~'); // 测试获取执行ID=3的任务关联需求版本跟需求状态
r($taskGroup[4]) && p('2:storyVersion,storyStatus,needConfirm') && e('1,changing,~~'); // 测试获取执行ID=4的任务关联需求版本跟需求状态
r($taskGroup[5]) && p('9:storyVersion,storyStatus,needConfirm') && e('2,active,1'); // 测试获取执行ID=5的任务关联需求版本跟需求状态
+1
View File
@@ -1653,6 +1653,7 @@ class productModel extends model
->andWhere("FIND_IN_SET('{$this->app->user->account}', t1.reviewers)")
->andWhere('t1.reviewStatus')->eq('doing')
->fi()
->setAutoTpl(false)
->orderBy("{$programOrder}t1.line_desc, t1.order_asc")
->beginIF($limit > 0)->limit($limit)->fi()
->fetchAll('id');
+1
View File
@@ -869,6 +869,7 @@ class programplanModel extends model
->where('t1.deleted')->eq(0)
->andWhere('t1.project')->eq($projectID)
->andWhere('t1.execution')->in($planIdList)
->setAutoTpl(false)
->orderBy('execution_asc, order_asc, id_asc')
->fetchAll('id');
}
+1 -1
View File
@@ -1233,7 +1233,7 @@ class projectModel extends model
$linkedProductsCount = $this->projectTao->getLinkedProductsCount($project, $postData->rawdata);
}
$needCreateProduct = !$project->hasProduct || isset($postData->rawdata->newProduct) || empty($linkedProductsCount);
$needCreateProduct = !$project->hasProduct || isset($postData->rawdata->newProduct) || (empty($linkedProductsCount) && !$project->isTpl);
if($needCreateProduct && !$this->projectTao->createProduct($projectID, $project, $postData, $program)) return false;
/* Save order. */
+6
View File
@@ -18,6 +18,12 @@ title=测试 projectModel->create();
timeout=0
cid=1
- 执行projectClass模块的create方法,参数是$normalProject, $postData 属性name @测试新增项目一
- 执行projectClass模块的create方法,参数是$emptyNameProject, $postData 第message[name]条的0属性 @『项目名称』不能为空。
- 执行projectClass模块的create方法,参数是$emptyEndProject, $postData 第message[end]条的0属性 @『计划完成』不能为空。
- 执行projectClass模块的create方法,参数是$beginGtEndProject, $postData 第message[end]条的0属性 @『计划完成』应当大于『2022-02-07』。
- 执行projectClass模块的create方法,参数是$emptyBeginProject, $postData 第message[begin]条的0属性 @『计划开始』不能为空。
*/
global $tester;
+2
View File
@@ -302,6 +302,7 @@ row
/* Linked product and plan. */
$project->hasProduct ? h::table
(
setID('products'),
setClass('table condensed bordered productsBox'),
h::thead
(
@@ -345,6 +346,7 @@ row
/* Project team. */
h::table
(
setID('teams'),
setClass('table condensed bordered teams ' . ($project->hasProduct ? 'mt-4' : '')),
h::thead
(
+1 -1
View File
@@ -329,7 +329,7 @@ class projectZen extends project
$hasProduct = isset($copyProject->hasProduct) ? $copyProject->hasProduct : 1;
if($this->config->edition != 'open')
{
$workflowGroups = $this->loadModel('workflowgroup')->getPairs('project', $model, $hasProduct, 'normal', '0');
$workflowGroups = $this->loadModel('workflowgroup')->getPairs('project', $model, (int)$hasProduct, 'normal', '0');
$this->view->workflowGroupPairs = $workflowGroups;
$this->view->workflowGroups = $this->workflowgroup->appendBuildinLabel($workflowGroups);
}
+3
View File
@@ -486,6 +486,8 @@ class taskTao extends taskModel
$actionIDList = array();
if($type == 'assignedbyme') $actionIDList = $this->dao->select('objectID')->from(TABLE_ACTION)->where('objectType')->eq('task')->andWhere('action')->eq('assigned')->andWhere('actor')->eq($this->app->user->account)->fetchPairs('objectID', 'objectID');
if($executionID) $execution = $this->fetchByID($executionID, 'project');
$tasks = $this->dao->select($fields)
->from(TABLE_TASK)->alias('t1')
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
@@ -493,6 +495,7 @@ class taskTao extends taskModel
->beginIF($productID)->leftJoin(TABLE_MODULE)->alias('t4')->on('t1.module = t4.id')->fi()
->beginIF($this->config->edition == 'max' or $this->config->edition == 'ipd')->leftJoin(TABLE_DESIGN)->alias('t5')->on('t1.design= t5.id')->fi()
->where('t1.execution')->eq((int)$executionID)
->beginIF(!empty($execution->isTpl))->andWhere('t1.isTpl')->eq('1')->fi()
->beginIF($type == 'myinvolved')
->andWhere("((t3.`account` = '{$this->app->user->account}') OR t1.`assignedTo` = '{$this->app->user->account}' OR t1.`finishedby` = '{$this->app->user->account}')")
->fi()
@@ -66,6 +66,85 @@ title=taskModel->fetchExecutionTasks();
timeout=0
cid=1
- 测试获取执行ID 0 product 0 type all module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 0 product 0 type all module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 1 product 0 type all module 空 orederBy 'status_asc, id_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 0 type all module 空 orederBy 'status_asc, id_desc' 的任务数量 @10
- 测试获取执行ID 1 product 1 type all module 空 orederBy 'status_asc, id_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 1 type all module 空 orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 1 product 1 type assignedbyme module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 1 product 1 type assignedbyme module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 1 product 1 type myinvolved module 空 orederBy 'status_asc, id_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 1 type myinvolved module 空 orederBy 'status_asc, id_desc' 的任务数量 @1
- 测试获取执行ID 1 product 1 type undone module 空 orederBy 'status_asc, id_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 1 type undone module 空 orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 1 product 1 type needconfirm module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 1 product 1 type needconfirm module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 1 product 1 type assignedtome module 空 orederBy 'status_asc, id_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 1 type assignedtome module 空 orederBy 'status_asc, id_desc' 的任务数量 @1
- 测试获取执行ID 1 product 1 type finishedbyme module 空 orederBy 'status_asc, id_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 1 type finishedbyme module 空 orederBy 'status_asc, id_desc' 的任务数量 @1
- 测试获取执行ID 1 product 1 type delayed module 空 orederBy 'status_asc, id_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 1 type delayed module 空 orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 1 product 1 type wait module 空 orederBy 'status_asc, id_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 1 type wait module 空 orederBy 'status_asc, id_desc' 的任务数量 @1
- 测试获取执行ID 1 product 1 type doing module 空 orederBy 'status_asc, id_desc' 的任务第11条的name属性 @任务11
- 测试获取执行ID 1 product 1 type doing module 空 orederBy 'status_asc, id_desc' 的任务数量 @1
- 测试获取执行ID 1 product 1 type done module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 1 product 1 type done module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 1 product 1 type pause module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 1 product 1 type pause module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 1 product 1 type cancel module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 1 product 1 type cancel module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 1 product 1 type array('wait', 'doing', 'done', 'pause', 'cancel') module 空 orederBy 'status_asc, id_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 1 type array('wait', 'doing', 'done', 'pause', 'cancel') module 空 orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 1 product 0 type all module array(2) orederBy 'status_asc, id_desc' 的任务第17条的name属性 @任务17
- 测试获取执行ID 1 product 0 type all module array(2) orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 1 product 0 type all module array(8) orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 1 product 0 type all module array(8) orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 1 product 0 type all module array(2,8) orederBy 'status_asc, id_desc' 的任务第17条的name属性 @任务17
- 测试获取执行ID 1 product 0 type all module array(2,8) orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 1 product 0 type all module 空 orederBy 'pri_desc' 的任务第1条的name属性 @任务1
- 测试获取执行ID 1 product 0 type all module 空 orederBy 'pri_desc' 的任务数量 @10
- 测试获取执行ID 2 product 0 type all module 空 orederBy 'status_asc, id_desc' 的任务第18条的name属性 @任务18
- 测试获取执行ID 2 product 0 type all module 空 orederBy 'status_asc, id_desc' 的任务数量 @10
- 测试获取执行ID 2 product 1 type all module 空 orederBy 'status_asc, id_desc' 的任务第6条的name属性 @任务6
- 测试获取执行ID 2 product 1 type all module 空 orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 2 product 1 type assignedbyme module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 2 product 1 type assignedbyme module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 2 product 1 type myinvolved module 空 orederBy 'status_asc, id_desc' 的任务第6条的name属性 @任务6
- 测试获取执行ID 2 product 1 type myinvolved module 空 orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 2 product 1 type undone module 空 orederBy 'status_asc, id_desc' 的任务第6条的name属性 @任务6
- 测试获取执行ID 2 product 1 type undone module 空 orederBy 'status_asc, id_desc' 的任务数量 @1
- 测试获取执行ID 2 product 1 type needconfirm module 空 orederBy 'status_asc, id_desc' 的任务第6条的name属性 @任务6
- 测试获取执行ID 2 product 1 type needconfirm module 空 orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 2 product 1 type assignedtome module 空 orederBy 'status_asc, id_desc' 的任务第6条的name属性 @任务6
- 测试获取执行ID 2 product 1 type assignedtome module 空 orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 2 product 1 type finishedbyme module 空 orederBy 'status_asc, id_desc' 的任务第6条的name属性 @任务6
- 测试获取执行ID 2 product 1 type finishedbyme module 空 orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 2 product 1 type delayed module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 2 product 1 type delayed module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 2 product 1 type wait module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 2 product 1 type wait module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 2 product 1 type doing module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 2 product 1 type doing module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 2 product 1 type done module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 2 product 1 type done module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 2 product 1 type pause module 空 orederBy 'status_asc, id_desc' 的任务第6条的name属性 @任务6
- 测试获取执行ID 2 product 1 type pause module 空 orederBy 'status_asc, id_desc' 的任务数量 @1
- 测试获取执行ID 2 product 1 type cancel module 空 orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 2 product 1 type cancel module 空 orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 2 product 1 type array('wait', 'doing', 'done', 'pause', 'cancel') module 空 orederBy 'status_asc, id_desc' 的任务第6条的name属性 @任务6
- 测试获取执行ID 2 product 1 type array('wait', 'doing', 'done', 'pause', 'cancel') module 空 orederBy 'status_asc, id_desc' 的任务数量 @1
- 测试获取执行ID 2 product 0 type all module array(2) orederBy 'status_asc, id_desc' 的任务第2条的name属性 @任务2
- 测试获取执行ID 2 product 0 type all module array(2) orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 2 product 0 type all module array(8) orederBy 'status_asc, id_desc' 的任务 @0
- 测试获取执行ID 2 product 0 type all module array(8) orederBy 'status_asc, id_desc' 的任务数量 @0
- 测试获取执行ID 2 product 0 type all module array(2,8) orederBy 'status_asc, id_desc' 的任务第2条的name属性 @任务2
- 测试获取执行ID 2 product 0 type all module array(2,8) orederBy 'status_asc, id_desc' 的任务数量 @2
- 测试获取执行ID 2 product 0 type all module 空 orederBy 'pri_desc' 的任务第20条的name属性 @任务20
- 测试获取执行ID 2 product 0 type all module 空 orederBy 'pri_desc' 的任务数量 @10
*/
$executionIdList = array(0, 1, 2);