sysGraphController.ts 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. import { graphStateEnum } from "./graphStateEnum";
  2. import { sysGraphHttpUtils } from "@/utils/http/sysGraphHttpUtils";
  3. import { logicConfig } from "@/logicConfig";
  4. import moment from 'moment';
  5. export class sysGraphController {
  6. private static sysGraphHttpUtilsInstance = new sysGraphHttpUtils();
  7. //key为系统类型编码,值为 系统图类型 > 模板数据 的二级结构数组
  8. private static _tempTemplateObj = {};
  9. //三级数组 专业>系统类型>系统实例
  10. private static zhuanyeArr = [];
  11. //根据状态编码转状态名称
  12. static getStateNameByCode(stateCode: string) {
  13. return stateCode == graphStateEnum.Draft ? '草稿' :
  14. stateCode == graphStateEnum.Publish ? '上架' :
  15. stateCode == graphStateEnum.Recyle ? '回收站' : '';
  16. }
  17. /**
  18. * 查询系统图列表
  19. * @param grpphName 系统图名称
  20. */
  21. static async getDiagrams(grpphName: string) {
  22. //先取得所有的系统图,注:没有分页
  23. var resultObj = await this.sysGraphHttpUtilsInstance.postRequest('/diagram/getDiagrams', { name: grpphName });
  24. if (resultObj.result != logicConfig.resultObj.success)
  25. console.error(resultObj.message);
  26. //key为系统类型编码,值为系统类型数据
  27. var _tempSystemTypeObj = {};
  28. var newDataArr = [];
  29. var dataArr = (resultObj.data || []).filter(_c => {
  30. return (_c.extraProps || {}).state != graphStateEnum.Recyle;
  31. });
  32. dataArr.sort(function (a, b) {
  33. return ((b.extraProps || {}).createTime || {}).calendar - ((a.extraProps || {}).createTime || {}).calendar;
  34. });
  35. //取得专业>系统类型>系统实例 以和系统图列表中的系统类型编码 对应以获取系统类型名称
  36. if (this.zhuanyeArr.length == 0) {
  37. var url2 = '/diagram/major/system/instance';
  38. var zhuanyeObj = await this.sysGraphHttpUtilsInstance.postRequest(url2, {});
  39. this.zhuanyeArr = zhuanyeObj.data || [];
  40. }
  41. for (let i = 0; i < dataArr.length; i++) {
  42. let _c = dataArr[i];
  43. let extraProps = _c.extraProps || {};
  44. //图状态(Draft: 未发布, WaitCheck: 待审核, Checked: 审核完成, Recyle: 回收站, Publish: 发布)
  45. let stateName = this.getStateNameByCode(extraProps.state);
  46. //获取系统类型名称
  47. let systemTypeName = (_tempSystemTypeObj[_c.system] || {}).aliasName;
  48. if (!systemTypeName) {
  49. getSystemTypeByCode(_c.system);
  50. systemTypeName = (_tempSystemTypeObj[_c.system] || {}).aliasName || '';
  51. }
  52. //获取模版名称
  53. let _templateObj = await this.getTemplateGraphTypeBySysTypeCode(_c.system, _c.templateId);
  54. let templateName = ((_templateObj || {}).template || {}).name || '';
  55. //格式化日期时间
  56. let momentInstance = moment(((_c.extraProps || {}).createTime || {}).calendar);
  57. let timeStr = momentInstance.format('YYYY[/]MM[/]DD[ ]HH[:]mm');
  58. newDataArr.push({
  59. id: _c.id,
  60. name: _c.name,
  61. //系统类型名称
  62. sysType: systemTypeName,
  63. //系统实例名称
  64. sysInstance: extraProps.systemInstanceName,
  65. //模板名称
  66. sysTemplate: templateName,
  67. stateName: stateName,
  68. createTime: timeStr
  69. });
  70. }
  71. return newDataArr;
  72. function getSystemTypeByCode(systemTypeCode: string) {
  73. for (let i = 0; i < sysGraphController.zhuanyeArr.length; i++) {
  74. //专业
  75. let zhuanye = sysGraphController.zhuanyeArr[i];
  76. //系统类型数组
  77. let systemTypeArr = zhuanye.children || [];
  78. let isFind = false;
  79. for (let j = 0; j < systemTypeArr.length; j++) {
  80. //系统类型
  81. let systemType = systemTypeArr[j];
  82. if (systemType.code == systemTypeCode) {
  83. isFind = true;
  84. _tempSystemTypeObj[systemTypeCode] = systemType;
  85. break;
  86. }
  87. }
  88. if (isFind)
  89. break;
  90. }
  91. };
  92. }
  93. /**
  94. * 根据系统类型查询系统图模板和系统图类型,数据结构:系统图类型 -> 系统图模版
  95. * @param sysTypeCode 系统类型编码
  96. * @param templateId 模版ID
  97. * @return {template:{id:'',name:''},graphType:{id:'',name:''}}
  98. */
  99. static async getTemplateGraphTypeBySysTypeCode(sysTypeCode: string, templateId: string) {
  100. var dataArr = this._tempTemplateObj[sysTypeCode];
  101. if (!dataArr) {
  102. let url = '/diagram/systemType/template';
  103. let resultObj = await sysGraphController.sysGraphHttpUtilsInstance.postRequest(url, { system: sysTypeCode });
  104. dataArr = resultObj.data || [];
  105. }
  106. this._tempTemplateObj[sysTypeCode] = dataArr;
  107. for (let i = 0; i < dataArr.length; i++) {
  108. //_sysGraphType为系统图类型
  109. let sysGraphType = dataArr[i];
  110. //模板数组
  111. let templateArr = sysGraphType.children || [];
  112. for (let j = 0; j < templateArr.length; j++) {
  113. //模板
  114. let template = templateArr[j];
  115. if (template.id == templateId) {
  116. return {
  117. template: { id: template.id, name: template.name },
  118. graphType: { id: sysGraphType.id, name: sysGraphType.name }
  119. };
  120. }
  121. }
  122. }
  123. return null;
  124. }
  125. /**
  126. * 根据项目查询该项目下的专业>系统类型>系统实例
  127. * @param projectId 项目ID
  128. * @param groupCode 集团编码
  129. */
  130. static async getSysInstanceByProject(projectId: string, groupCode: string) {
  131. var url = '/diagram/major/system/instance?projectId=' + projectId + '&groupCode=' + groupCode;
  132. var resultObj = await this.sysGraphHttpUtilsInstance.postRequest(url, {});
  133. if (resultObj.result != logicConfig.resultObj.success)
  134. console.error(resultObj.message);
  135. var dataArr = resultObj.data || [];
  136. this.zhuanyeArr = dataArr;
  137. var newDataArr = [];
  138. dataArr.forEach(_c => {
  139. //_c为专业
  140. let zhuanye = { value: _c.id, label: _c.label, code: _c.code, children: [] };
  141. let sysTypeArr = [];
  142. (_c.children || []).forEach(_c2 => {
  143. //_c2为系统类型
  144. let sysType = { value: _c2.id, label: _c2.aliasName, code: _c2.code, children: [] };
  145. let sysInstanceArr = [];
  146. (_c2.children || []).forEach(_c3 => {
  147. //_c3为系统实例
  148. sysInstanceArr.push({ value: _c3.id, label: _c3.name, code: _c3.code });
  149. });
  150. sysType.children = sysInstanceArr;
  151. sysTypeArr.push(sysType);
  152. });
  153. zhuanye.children = sysTypeArr;
  154. newDataArr.push(zhuanye);
  155. });
  156. return newDataArr;
  157. }
  158. /**
  159. * 根据系统类型查询系统图模板,数据结构:系统图类型 -> 系统图模版
  160. * @param sysTypeCode 系统类型编码
  161. */
  162. static async getTemplateBySysTypeCode(sysTypeCode: string) {
  163. var url = '/diagram/systemType/template';
  164. var resultObj = await this.sysGraphHttpUtilsInstance.postRequest(url, { system: sysTypeCode });
  165. if (resultObj.result != logicConfig.resultObj.success)
  166. console.error(resultObj.message);
  167. var dataArr = resultObj.data || [];
  168. var newDataArr = [];
  169. dataArr.forEach(_sysGraphType => {
  170. //_sysGraphType为系统图类型
  171. let sysGraphType = { value: _sysGraphType.id, label: _sysGraphType.name, code: _sysGraphType.code, children: [] };
  172. let templateArr = [];
  173. (_sysGraphType.children || []).forEach(_template => {
  174. //_template为模版
  175. let template = { value: _template.id, label: _template.name, code: _template.code };
  176. templateArr.push(template);
  177. });
  178. sysGraphType.children = templateArr;
  179. newDataArr.push(sysGraphType);
  180. });
  181. return newDataArr;
  182. }
  183. /**
  184. * 新增系统图
  185. * @param _paramObj {name:'系统图名称',type:'系统图类型编码',templateId:'引用的模板id',system:'所属的系统类型编码',projectId:'项目id',systemId:'对应的系统实例id',groupCode:'集团编码',}
  186. */
  187. static async createSysGraph(_paramObj: any) {
  188. var url = '/diagram/newDiagram?groupCode=' + _paramObj.groupCode + '&projectId=' + _paramObj.projectId;
  189. var resultObj = await this.sysGraphHttpUtilsInstance.postRequest(url, _paramObj);
  190. if (resultObj.result != logicConfig.resultObj.success) {
  191. resultObj.message = '新建系统图失败:' + resultObj.message;
  192. return resultObj;
  193. }
  194. var dataObj = resultObj.data || {};
  195. if (!dataObj.id)
  196. return { result: logicConfig.resultObj.failure, message: '缺少系统图ID' };
  197. //新增成功后,要加载数据
  198. // var loadDataUrl = '/diagram/loadData?groupCode=' + _paramObj.groupCode + '&projectId=' + _paramObj.projectId;
  199. // var loadResultObj = await this.sysGraphHttpUtilsInstance.postRequest(loadDataUrl, { id: dataObj.id });
  200. var loadResultObj = await this.loadData({ id: dataObj.id, projectId: _paramObj.projectId, groupCode: _paramObj.groupCode });
  201. if (loadResultObj.result != logicConfig.resultObj.success) {
  202. loadResultObj.message = '加载模板数据失败:' + loadResultObj.message;
  203. return loadResultObj;
  204. }
  205. loadResultObj.data = await this.parseSystemGraphInfo(loadResultObj.data, _paramObj.groupCode, _paramObj.projectId);
  206. // //加载数据成功后保存数据
  207. // var saveResultObj = await this.saveSysGraph(loadResultObj.data, _paramObj.projectId, _paramObj.groupCode);
  208. // if (saveResultObj.result != logicConfig.resultObj.success) {
  209. // saveResultObj.message = '保存系统图数据失败:' + saveResultObj.message;
  210. // return saveResultObj;
  211. // }
  212. //因为保存数据成功返回的data里的数据不全,所以返回加载数据成功后的数据给页面
  213. return loadResultObj;
  214. }
  215. /**
  216. * 加载数据
  217. * @param _paramObj {projectId:'项目id',groupCode:'集团编码',id:'系统图ID'}
  218. */
  219. static async loadData(_paramObj: any) {
  220. var loadDataUrl = '/diagram/loadData?groupCode=' + _paramObj.groupCode + '&projectId=' + _paramObj.projectId;
  221. var loadResultObj = await this.sysGraphHttpUtilsInstance.postRequest(loadDataUrl, { id: _paramObj.id });
  222. return loadResultObj;
  223. }
  224. /**
  225. * 解析系统图数据
  226. * @param dataObj
  227. */
  228. static async parseSystemGraphInfo(dataObj: any, groupCode: string, projectId: string) {
  229. //取得专业>系统类型>系统实例 以和系统图列表中的系统类型编码 对应以获取系统实例名称
  230. if (this.zhuanyeArr.length == 0) {
  231. var url2 = '/diagram/major/system/instance?groupCode=' + groupCode + '&projectId=' + projectId;
  232. var zhuanyeObj = await this.sysGraphHttpUtilsInstance.postRequest(url2, {});
  233. this.zhuanyeArr = zhuanyeObj.data || [];
  234. }
  235. //获取系统实例名称
  236. var _systemInstance = getSystemInstanceByCode(dataObj.systemId);
  237. dataObj.systemInstanceName = _systemInstance.name || '';
  238. //获取系统图类型和系统图模版
  239. var _temoObj = await this.getTemplateGraphTypeBySysTypeCode(dataObj.system, dataObj.templateId);
  240. dataObj.graphTypeName = ((_temoObj || {}).graphType || {}).name;
  241. dataObj.templateName = ((_temoObj || {}).template || {}).name;
  242. //状态名称
  243. dataObj.stateName = this.getStateNameByCode((dataObj.extraProps || {}).state);
  244. return dataObj;
  245. //获取系统实例信息
  246. function getSystemInstanceByCode(systemInstanceId: string) {
  247. for (let i = 0; i < sysGraphController.zhuanyeArr.length; i++) {
  248. //专业
  249. let zhuanye = sysGraphController.zhuanyeArr[i];
  250. //系统类型数组
  251. let systemTypeArr = zhuanye.children || [];
  252. let isFind = false;
  253. for (let j = 0; j < systemTypeArr.length; j++) {
  254. //系统类型
  255. let systemType = systemTypeArr[j];
  256. //系统实例数组
  257. let systemInstanceArr = systemType.children || [];
  258. for (let k = 0; k < systemInstanceArr.length; k++) {
  259. //系统实例
  260. let systemInstance = systemInstanceArr[k];
  261. if (systemInstance.id == systemInstanceId)
  262. return systemInstance;
  263. }
  264. }
  265. if (isFind)
  266. break;
  267. }
  268. };
  269. };
  270. /**
  271. * 重置数据
  272. * @param _paramObj {projectId:'项目id',groupCode:'集团编码',id:'系统图ID'}
  273. */
  274. static async resetData(_paramObj: any) {
  275. var loadDataUrl = '/diagram/reset?groupCode=' + _paramObj.groupCode + '&projectId=' + _paramObj.projectId;
  276. var loadResultObj = await this.sysGraphHttpUtilsInstance.postRequest(loadDataUrl, { id: _paramObj.id });
  277. loadResultObj.data = await this.parseSystemGraphInfo(loadResultObj.data, _paramObj.groupCode, _paramObj.projectId);
  278. return loadResultObj;
  279. }
  280. /**
  281. * 保存系统图数据
  282. * @param _paramObj 参见后台loadData接口的返回
  283. * @param projectId 项目ID
  284. * @param groupCode 群组编码
  285. */
  286. static async saveSysGraph(_paramObj: any, projectId: string, groupCode: string) {
  287. var saveUrl = '/diagram/newDiagram?groupCode=' + groupCode + '&projectId=' + projectId;
  288. var saveResultObj = await this.sysGraphHttpUtilsInstance.postRequest(saveUrl, _paramObj);
  289. return saveResultObj;
  290. }
  291. /**
  292. * 根据系统图ID查询系统图信息
  293. * @param id 系统图ID
  294. */
  295. static async getDiagramById(id: string, groupCode: string, projectId: string) {
  296. var url = '/diagram/getDiagram?diagramId=' + id + '&groupCode=' + groupCode + '&projectId=' + projectId;
  297. var resultObj = await this.sysGraphHttpUtilsInstance.getRequest(url, {});
  298. if (resultObj.result != logicConfig.resultObj.success) {
  299. console.error(resultObj.message);
  300. return resultObj;
  301. }
  302. //#region -------------------------------------------------------------------------------测试
  303. // var tempData=
  304. // resultObj.data.lines=tempData.lines;
  305. // resultObj.data.template=tempData.template;
  306. //#regionend -------------------------------------------------------------------------------测试结束
  307. resultObj.data = await this.parseSystemGraphInfo(resultObj.data, groupCode, projectId);
  308. return resultObj;
  309. }
  310. /**
  311. * 更新系统图状态
  312. * @param _paramObj {id:'系统图ID',state:'系统图状态'}
  313. */
  314. static async updateSysGraphState(_paramObj: any) {
  315. var url = '/diagram/update/state';
  316. var resultObj = await this.sysGraphHttpUtilsInstance.postRequest(url, _paramObj);
  317. return resultObj;
  318. }
  319. /**
  320. * 删除系统图
  321. * @param id 系统图ID
  322. */
  323. static async delSysGraph(id: string) {
  324. var resultObj = await this.updateSysGraphState({ id: id, state: graphStateEnum.Recyle });
  325. return resultObj;
  326. }
  327. /**
  328. * 上架系统图
  329. * @param id 系统图ID
  330. */
  331. static async publishSysGraph(id: string) {
  332. var resultObj = await this.updateSysGraphState({ id: id, state: graphStateEnum.Publish });
  333. return resultObj;
  334. }
  335. /**
  336. * 下架系统图
  337. * @param id 系统图ID
  338. */
  339. static async draftGraph(id: string) {
  340. var resultObj = await this.updateSysGraphState({ id: id, state: graphStateEnum.Draft });
  341. return resultObj;
  342. }
  343. /**
  344. * 打开系统图新增、预览、编辑页面
  345. * @param state 打开新页面时的状态,0 预览; 1 编辑; 2 新建
  346. * @param diagramId 系统图ID
  347. * @param groupCode 集团编码
  348. * @param projectId 项目ID
  349. * @param projectName 项目名称
  350. * @param baseUrl 根路径
  351. * @param isOpenTarget 是否打开新页面
  352. */
  353. static openGraphPage(state: number, diagramId: string, groupCode: string, projectId: string, projectName: string, baseUrl: string, isOpenTarget: boolean) {
  354. var url = "/" +
  355. baseUrl +
  356. logicConfig.routerNameConfig.systemGraphEditName +
  357. "?ost=" +
  358. state +
  359. "&did=" +
  360. (diagramId || "") +
  361. '&gc=' + (groupCode || '') +
  362. '&pri=' + (projectId || '') +
  363. '&prn=' + encodeURIComponent(projectName || '');
  364. isOpenTarget === true ? window.open(url) : window.location.href = url;
  365. }
  366. /**
  367. * 保存系统图名称
  368. * @_paramObj {id:'系统图ID',name:'系统图名称'}
  369. */
  370. static async saveGraphName(_paramObj: any) {
  371. var url = '/diagram/update/name';
  372. var resultObj = await this.sysGraphHttpUtilsInstance.postRequest(url, _paramObj);
  373. return resultObj;
  374. }
  375. }