From 553fa2a2c9c22efed6e5b1e078a80852ca182a2b Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 30 Jul 2025 10:43:53 +0800 Subject: [PATCH 1/5] * [task#147127,done,0.5h,4h] Add upgradeDeliverable function. --- db/update21.7.3.sql | 2 +- module/tree/lang/de.php | 2 ++ module/tree/lang/en.php | 2 ++ module/tree/lang/fr.php | 2 ++ module/tree/lang/zh-cn.php | 2 ++ module/upgrade/model.php | 13 ++++++++++++- 6 files changed, 21 insertions(+), 2 deletions(-) diff --git a/db/update21.7.3.sql b/db/update21.7.3.sql index 5bffe4952f..f6a7cf06ce 100644 --- a/db/update21.7.3.sql +++ b/db/update21.7.3.sql @@ -88,4 +88,4 @@ CREATE TABLE IF NOT EXISTS `zt_deliverablestage` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE UNIQUE INDEX `unique` ON `zt_deliverablestage`(`deliverable`,`stage`); -ALTER TABLE `zt_module` ADD `extra` varchar(30) NOT NULL DEFAULT ''; \ No newline at end of file +ALTER TABLE `zt_module` ADD `extra` varchar(30) NOT NULL DEFAULT ''; diff --git a/module/tree/lang/de.php b/module/tree/lang/de.php index 4c0bfb77d9..5bc42a8c25 100755 --- a/module/tree/lang/de.php +++ b/module/tree/lang/de.php @@ -67,6 +67,8 @@ $lang->tree->groupName = 'Group Name'; $lang->tree->parentGroup = 'Parent grpup'; $lang->tree->childGroup = 'Child'; $lang->tree->confirmDeleteHost = 'Do you want to delete this host and its child hosts?'; +$lang->tree->designModule = 'Design'; +$lang->tree->otherModule = 'Other'; $lang->tree->module = 'Modul'; $lang->tree->name = 'Name'; diff --git a/module/tree/lang/en.php b/module/tree/lang/en.php index 7ab48e69cd..48250680d9 100755 --- a/module/tree/lang/en.php +++ b/module/tree/lang/en.php @@ -67,6 +67,8 @@ $lang->tree->groupName = 'Group Name'; $lang->tree->parentGroup = 'Parent grpup'; $lang->tree->childGroup = 'Child'; $lang->tree->confirmDeleteHost = 'Do you want to delete this host and its child hosts?'; +$lang->tree->designModule = 'Design'; +$lang->tree->otherModule = 'Other'; $lang->tree->module = 'Module'; $lang->tree->name = 'Module Name'; diff --git a/module/tree/lang/fr.php b/module/tree/lang/fr.php index b8d45fa0d1..a5052b465b 100755 --- a/module/tree/lang/fr.php +++ b/module/tree/lang/fr.php @@ -67,6 +67,8 @@ $lang->tree->groupName = 'Group Name'; $lang->tree->parentGroup = 'Parent grpup'; $lang->tree->childGroup = 'Child'; $lang->tree->confirmDeleteHost = 'Do you want to delete this host and its child hosts?'; +$lang->tree->designModule = 'Design'; +$lang->tree->otherModule = 'Other'; $lang->tree->module = 'Module'; $lang->tree->name = 'Nom'; diff --git a/module/tree/lang/zh-cn.php b/module/tree/lang/zh-cn.php index 12f167c29e..afce3964bc 100755 --- a/module/tree/lang/zh-cn.php +++ b/module/tree/lang/zh-cn.php @@ -67,6 +67,8 @@ $lang->tree->groupName = '分组名称'; $lang->tree->parentGroup = '上级分组'; $lang->tree->childGroup = '子分组'; $lang->tree->confirmDeleteHost = '该分组及子分组都会被删除,您确定删除吗?'; +$lang->tree->designModule = '设计类'; +$lang->tree->otherModule = '其他'; $lang->tree->module = '模块'; $lang->tree->name = '模块名称'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 0f264654ce..72b93a5cad 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -11214,7 +11214,7 @@ class upgradeModel extends model $module = new stdclass(); $module->root = $group->id; $module->branch = '0'; - $module->name = $this->lang->deliverable->designModule; + $module->name = $this->lang->tree->designModule; $module->parent = '0'; $module->path = ''; $module->grade = '1'; @@ -11320,4 +11320,15 @@ class upgradeModel extends model $this->dao->update(TABLE_DESIGN)->set('type')->eq($deliverableID)->where('type')->eq($designType)->andWhere('project')->in(array_keys($projectWorkflowGroup[$module->workflowGroup]))->exec(); } } + + /** + * 将通用交付物升级为项目流程下的交付物。 + * Upgrade deliverable. + * + * @access public + * @return void + */ + public function upgradeDeliverable() + { + } } From 67df46cb9ebcefa079061127b361f5e13dcef00e Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 30 Jul 2025 10:46:41 +0800 Subject: [PATCH 2/5] * [task#147127,doing,2h,2h] Finish create workflowgroup deliverable. --- module/upgrade/model.php | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 72b93a5cad..d4550eca77 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -11330,5 +11330,54 @@ class upgradeModel extends model */ public function upgradeDeliverable() { + $this->app->loadLang('tree'); + + $deliverable = new stdClass(); + $deliverable->status = 'disabled'; + $deliverable->createdBy = 'system'; + $deliverable->createdDate = helper::now(); + + $deliverableStage = new stdClass(); + + $workflowGroups = $this->dao->select('id,deliverable,projectModel,projectType')->from(TABLE_WORKFLOWGROUP)->fetchAll(); + $deliverableList = $this->dao->select('id,name')->from(TABLE_DELIVERABLE)->where('deleted')->eq('0')->fetchAll('id'); + $fileList = $this->dao->select('id,title,objectType,objectID')->from(TABLE_FILE)->where('objectType')->eq('deliverable')->fetchAll('objectID'); + foreach($workflowGroups as $workflowGroup) + { + $groupDeliverable = !empty($workflowGroup->deliverable) ? json_decode($workflowGroup->deliverable, true) : array(); + if($groupDeliverable) $otherModule = $this->createOtherModule($workflowGroup->id); + + /* 解析项目流程的交付物配置。 */ + foreach($groupDeliverable as $stageCode => $methodDeliverable) + { + foreach($methodDeliverable as $methodCode => $deliverableConfigs) + { + foreach($deliverableConfigs as $config) + { + $oldDeliverableID = $config['deliverable']; + if(empty($deliverableList[$oldDeliverableID])) continue; + + $oldDeliverable = $deliverableList[$oldDeliverableID]; + if(empty($deliverableFilter[$oldDeliverable->id])) + { + $deliverableFile = $fileList[$oldDeliverableID]; // 原交付物只会上传一个附件。 + $deliverable->workflowGroup = $workflowGroup->id; + $deliverable->desc = $oldDeliverable->desc; + $deliverable->module = $otherModule; + $deliverable->template = $deliverableFile ? '{"new_0":{"name":"' . $deliverableFile->title . '","doc":"","fileID":"' . $deliverableFile->id . '"}}' : '[]'; + $deliverable->name = $oldDeliverable->name; + + $this->dao->insert(TABLE_DELIVERABLE)->data($deliverable)->exec(); + $deliverableID = $this->dao->lastInsertID(); + $deliverableFilter[$oldDeliverable->id] = $deliverableID; + } + else + { + $deliverableID = $deliverableFilter[$oldDeliverable->id]; + } + } + } + } + } } } From ddb7d711ae1c5ba942117314132194939033076a Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 30 Jul 2025 10:47:26 +0800 Subject: [PATCH 3/5] * [task#147127,doing,2h,0.5h] Finish add deliverable stage. --- module/upgrade/model.php | 45 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index d4550eca77..5f9893d3b8 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -11344,8 +11344,11 @@ class upgradeModel extends model $fileList = $this->dao->select('id,title,objectType,objectID')->from(TABLE_FILE)->where('objectType')->eq('deliverable')->fetchAll('objectID'); foreach($workflowGroups as $workflowGroup) { + $nameFilter = array(); + $deliverableFilter = array(); + $sprintFilter = array(); $groupDeliverable = !empty($workflowGroup->deliverable) ? json_decode($workflowGroup->deliverable, true) : array(); - if($groupDeliverable) $otherModule = $this->createOtherModule($workflowGroup->id); + if($groupDeliverable) $otherModule = '0'; /* 解析项目流程的交付物配置。 */ foreach($groupDeliverable as $stageCode => $methodDeliverable) @@ -11365,7 +11368,18 @@ class upgradeModel extends model $deliverable->desc = $oldDeliverable->desc; $deliverable->module = $otherModule; $deliverable->template = $deliverableFile ? '{"new_0":{"name":"' . $deliverableFile->title . '","doc":"","fileID":"' . $deliverableFile->id . '"}}' : '[]'; - $deliverable->name = $oldDeliverable->name; + + /* 重名的交付物名称后面加数字。 */ + if(!empty($nameFilter[$oldDeliverable->name])) + { + $deliverable->name = $oldDeliverable->name . $nameFilter[$oldDeliverable->name]; + $nameFilter[$oldDeliverable->name] ++; + } + else + { + $deliverable->name = $oldDeliverable->name; + $nameFilter[$oldDeliverable->name] = 1; + } $this->dao->insert(TABLE_DELIVERABLE)->data($deliverable)->exec(); $deliverableID = $this->dao->lastInsertID(); @@ -11375,9 +11389,36 @@ class upgradeModel extends model { $deliverableID = $deliverableFilter[$oldDeliverable->id]; } + + $workflowGroupModel = "{$workflowGroup->projectType}_{$workflowGroup->projectModel}"; + $deliverableStage->stage = $stageCode == $workflowGroupModel ? 'project' : str_replace("{$workflowGroupModel}_", '', $stageCode); + $deliverableStage->required = !empty($config['required']) ? '1' : '0'; + $deliverableStage->deliverable = $deliverableID; + /* 将原来不同类型的迭代合并成一个迭代。 */ + if(in_array($deliverableStage->stage, array('short', 'long', 'ops', 'kanban'))) + { + $deliverableStage->stage = 'sprint'; + /* 其中有一个类型是必填的合并后的结果就是必填。 */ + if(isset($sprintFilter[$deliverableID]) && empty($sprintFilter[$deliverableID]) && !empty($deliverableStage->required)) + { + $this->dao->update(TABLE_DELIVERABLESTAGE)->set('required')->eq('1')->where('deliverable')->eq($deliverableID)->andWhere('stage')->eq('sprint')->exec(); + } + if(!isset($sprintFilter[$deliverableID])) + { + $this->dao->insert(TABLE_DELIVERABLESTAGE)->data($deliverableStage)->exec(); + } + } + else + { + $this->dao->insert(TABLE_DELIVERABLESTAGE)->data($deliverableStage)->exec(); + } + $sprintFilter[$deliverableID] = $deliverableStage->required; } } } } + + /* 将历史的交付物数据删掉。 */ + $this->dao->delete()->from(TABLE_DELIVERABLE)->where('id')->in(array_keys($deliverableList))->exec(); } } From 548e6d4eeb423009accf772016ff0eb28bbb7a83 Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 30 Jul 2025 10:48:00 +0800 Subject: [PATCH 4/5] * [task#147127,done,0.5h,0h] Add deliverable other module. --- module/upgrade/model.php | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 5f9893d3b8..b24438d8cb 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -11348,7 +11348,7 @@ class upgradeModel extends model $deliverableFilter = array(); $sprintFilter = array(); $groupDeliverable = !empty($workflowGroup->deliverable) ? json_decode($workflowGroup->deliverable, true) : array(); - if($groupDeliverable) $otherModule = '0'; + if($groupDeliverable) $otherModule = $this->createOtherModule($workflowGroup->id); /* 解析项目流程的交付物配置。 */ foreach($groupDeliverable as $stageCode => $methodDeliverable) @@ -11421,4 +11421,37 @@ class upgradeModel extends model /* 将历史的交付物数据删掉。 */ $this->dao->delete()->from(TABLE_DELIVERABLE)->where('id')->in(array_keys($deliverableList))->exec(); } + + /** + * 内置交付物其他分类。 + * Create other module. + * + * @param int $workflowGroupID + * @access public + * @return int + */ + public function createOtherModule(int $workflowGroupID): int + { + $module = new stdclass(); + $module->root = $workflowGroupID; + $module->branch = '0'; + $module->name = $this->lang->tree->otherModule; + $module->parent = '0'; + $module->path = ''; + $module->grade = '1'; + $module->order = '0'; + $module->type = 'deliverable'; + $module->from = '0'; + $module->owner = ''; + $module->collector = null; + $module->short = ''; + $module->extra = 'design'; + $module->deleted = '0'; + $this->dao->insert(TABLE_MODULE)->data($module)->exec(); + + $moduleID = $this->dao->lastInsertID(); + $this->dao->update(TABLE_MODULE)->set('path')->eq(",$moduleID,")->where('id')->eq($moduleID)->exec(); + + return $moduleID; + } } From 32020d861725828e598c9f426eafd33f664df118 Mon Sep 17 00:00:00 2001 From: wangyuting Date: Wed, 30 Jul 2025 10:49:21 +0800 Subject: [PATCH 5/5] * [task#147127,done,0.1h,0h] Adjsut upgradeflow. --- module/upgrade/config/upgradeflow.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/upgrade/config/upgradeflow.php b/module/upgrade/config/upgradeflow.php index ff3a88d526..61353edf8c 100644 --- a/module/upgrade/config/upgradeflow.php +++ b/module/upgrade/config/upgradeflow.php @@ -112,7 +112,7 @@ $config->upgrade->execFlow['21_6_beta'] = array('functions' => 'processCharter $config->upgrade->execFlow['21_6_1'] = array('xxsqls' => "$appRoot/db/upgradexuanxuan9.1.2.sql"); $config->upgrade->execFlow['21_7'] = array('functions' => 'fixWorkflowNameForExecution'); $config->upgrade->execFlow['21_7_1'] = array('functions' => 'convertCharset,processActionProduct'); -$config->upgrade->execFlow['21_7_3'] = array('functions' => 'addDefaultDeliverableModule,upgradeDesignToDeliverable'); +$config->upgrade->execFlow['21_7_3'] = array('functions' => 'addDefaultDeliverableModule,upgradeDesignToDeliverable,upgradeDeliverable'); if(!empty($config->isINT)) {