import * as fs from "fs-extra"; import * as Importer from "mysql2-import"; import * as path from "path"; import { Table_Project } from '../../../common/model/project'; import { Table_Project_Issue } from "../../../common/model/project_issue"; import { Table_Workflow } from "../../../common/model/workflow"; import { Table_Workflow_Solution_Workflow_Issue_Type } from "../../../common/model/workflow_solution_workflow_issue_type"; import { Permission_Base, Permission_Types } from '../../../common/permission/permission'; import Application, { ECommon_Application_Mode } from '../../common/app/app'; import { getConfigInstance } from '../../common/config/config'; import { getMysqlInstance } from "../../common/db/mysql"; import CommonUtil from "../../common/util/common"; import { generateQuerySql, generateSnowId, generateUpdateSql } from '../../common/util/sql'; import rpcCooperationApi from "../rpc/cooperation"; import rpcFileApi from '../rpc/file'; import rpcUserApi from '../rpc/user'; import { Table_Field_Solution } from './../../../common/model/field_solution'; import { Table_Field_Solution_Workflow_Node_Field_Type } from './../../../common/model/field_solution_workflow_node_field_type'; import { Table_Field_Solution_Workflow_Solution } from './../../../common/model/field_solution_workflow_solution'; import { Table_Field_Type } from './../../../common/model/field_type'; import { Table_Field_Type_Config_Value } from './../../../common/model/field_type_config_value'; import { Table_Issue_Type } from './../../../common/model/issue_type'; import { Table_Issue_Type_Solution } from './../../../common/model/issue_type_solution'; import { Table_Issue_Type_Solution_Issue_Type } from './../../../common/model/issue_type_solution_issue_type'; import { Table_Organization } from './../../../common/model/organization'; import { Table_Organization_User } from './../../../common/model/organization_user'; import { Table_Permission } from './../../../common/model/permission'; import { Table_Project_Issue_Description } from './../../../common/model/project_issue_description'; import { Table_Project_Issue_Field_Value } from './../../../common/model/project_issue_field_value'; import { Table_Project_Issue_Parent } from './../../../common/model/project_issue_parent'; import { Table_Project_Issue_Process } from './../../../common/model/project_issue_process'; import { Table_Project_Issue_Related } from './../../../common/model/project_issue_related'; import { Table_Project_Issue_Solution } from './../../../common/model/project_issue_type_solution'; import { Table_Project_Label } from './../../../common/model/project_label'; import { Table_Project_Label_Issue } from './../../../common/model/project_label_issue'; import { Table_Project_Member } from './../../../common/model/project_member'; import { Table_Project_Module } from './../../../common/model/project_module'; import { Table_Project_Module_Issue } from './../../../common/model/project_module_issue'; import { Table_Project_Role } from './../../../common/model/project_role'; import { Table_Role_Permission } from './../../../common/model/role_permission'; import { Table_Team } from './../../../common/model/team'; import { Table_Team_Role } from './../../../common/model/team_role'; import { Table_Team_User } from './../../../common/model/team_user'; import { Table_User } from './../../../common/model/user'; import { Table_Version, versionModel } from './../../../common/model/version'; import { Table_Workflow_Action } from './../../../common/model/workflow_action'; import { Table_Workflow_Node } from './../../../common/model/workflow_node'; import { Table_Workflow_Solution } from './../../../common/model/workflow_solution'; import { Table_Workflow_Solution_Issue_Type_Solution } from './../../../common/model/workflow_solution_issue_type_solution'; import { Table_Workflow_Solution_Workflow } from './../../../common/model/workflow_solution_workflow'; import { OBTPConfig } from './obtp'; export async function handleImageFields(data:object,organizationId:string){ let arrImage=<{ object:object, key:string|number }[]>[] let arrUser=<{ object:object, key:string|number }[]>[] function _clone(o){ var k, b; if(o && ((b = (o instanceof Array)) || o instanceof Object)) { for(k in o){ if(o.hasOwnProperty(k)){ if(["photo","image","icon","img"].includes(k) && typeof(o[k])=="string" && o[k].length>=18 && /^\d+$/.test(o[k])) { arrImage.push({ object:o, key:k }) } else if(["created_by","modified_by","assigner_id","reporter_id"].includes(k) && typeof(o[k])=="string" && o[k].length>=18 && /^\d+$/.test(o[k])) { arrUser.push({ object:o, key:k }) } else { _clone(o[k]) } } } } } _clone(data) await Promise.all([(async ()=>{ if(arrImage.length>0) { let ids=arrImage.map(item=>{ return item.object[item.key]; }) let paths=await rpcFileApi.getPaths(ids) for(let i=0;i{ if(arrUser.length>0) { let ids=arrUser.map(item=>{ return item.object[item.key]; }) let paths=await rpcUserApi.getUsersInfo(ids,organizationId) for(let i=0;i -1) { console.log("patch start"); for (let i = index; i < files.length; i++) { await (require(path.join(Application.debug?path.join(__dirname, "../../patch/dist"):path.join(__dirname, "../../../../../patch/dist") , files[i]))()); } console.log("patch end"); } mysql.execute(generateUpdateSql(versionModel,{ version:curVersion })) } export async function initSystem() { if(Application.needReset) { await resetSystem() } let mysql=getMysqlInstance() let ret=await mysql.execute(`select * from ${Table_Version}`) if(ret===null || ret.length==0){ let adminIds=await rpcUserApi.initAdmin(); let userIds=await rpcUserApi.initUser() let organizationId=await rpcUserApi.initOrganization(adminIds,userIds); await initVersion() let objPermission=await initPermission() let {projectRoleUserId,groupRoleUserId}=await initRole(objPermission); await rpcUserApi.initTeam(userIds[0],groupRoleUserId,organizationId); let projectId=await rpcCooperationApi.initProject(userIds[0],projectRoleUserId,organizationId) await rpcCooperationApi.initIssueTypeWorkflowAndSolution(organizationId,projectId) await rpcCooperationApi.initField() } console.log("init finish") } async function initVersion() { let mysql=getMysqlInstance() await mysql.execute(`insert into ${Table_Version} (version) values ('${getConfigInstance().version}')`) } async function initPermission():Promise<{ [param:number]:string }> { let mysql=getMysqlInstance() let objPermission=<{ [param:number]:string }>{} for(let key in Permission_Types) { let value=Permission_Types[key] let type=key let keys=Object.keys(value) for(let key of keys) { let val=value[key] if(val instanceof Permission_Base) { let name=val.toString() let value=val.value let id=await generateSnowId() await mysql.execute(`insert into ${Table_Permission} (id,name,type,value) values ('${id}','${name}','${type}','${value}')`) objPermission[value]=id } } } return objPermission } async function initRole(objPermission:{ [param:number]:string }):Promise<{ projectRoleUserId:string, groupRoleUserId:string }> { let mysql = getMysqlInstance() let objProjectRole = OBTPConfig.Role.Project_Role, projectRoleUserId; for (let key in objProjectRole) { let obj = objProjectRole[key] let projectRoleId = await generateSnowId() if (obj.name == "user") { projectRoleUserId = projectRoleId } let name = obj.name let description = obj.description await mysql.execute(`insert into ${Table_Project_Role} (id,name,description) values ('${projectRoleId}','${name}','${description}')`) for (let o of obj.permission) { let id = await generateSnowId() await mysql.execute(`insert into ${Table_Role_Permission} (id,role_id,permission_id) values ('${id}','${projectRoleId}','${objPermission[o.value]}')`) } } let objGroupRole = OBTPConfig.Role.Team_Role, groupRoleUserId; for (let key in objGroupRole) { let obj = objGroupRole[key] let groupRoleId = await generateSnowId() if (obj.name == "user") { groupRoleUserId = groupRoleId } let name = obj.name let description = obj.description await mysql.execute(`insert into ${Table_Team_Role} (id,name,description) values ('${groupRoleId}','${name}','${description}')`) for (let o of obj.permission) { let id = await generateSnowId() await mysql.execute(`insert into ${Table_Role_Permission} (id,role_id,permission_id) values ('${id}','${groupRoleId}','${objPermission[o.value]}')`) } } return { projectRoleUserId, groupRoleUserId } }