Merge branch dev/task-147127 of zentao/zentaopms (#10655)

This commit is contained in:
刘刚
2025-07-30 11:56:01 +08:00
committed by Gitfox
7 changed files with 145 additions and 3 deletions
+1 -1
View File
@@ -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 '';
ALTER TABLE `zt_module` ADD `extra` varchar(30) NOT NULL DEFAULT '';
+2
View File
@@ -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';
+2
View File
@@ -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';
+2
View File
@@ -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';
+2
View File
@@ -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 = '模块名称';
+1 -1
View File
@@ -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))
{
+135 -1
View File
@@ -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,138 @@ 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()
{
$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)
{
$nameFilter = array();
$deliverableFilter = array();
$sprintFilter = array();
$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 . '"}}' : '[]';
/* 重名的交付物名称后面加数字。 */
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();
$deliverableFilter[$oldDeliverable->id] = $deliverableID;
}
else
{
$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();
}
/**
* 内置交付物其他分类。
* 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;
}
}