rpt_tpl_controller.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. /**
  2. * Created by Tony on 2017/6/1.
  3. */
  4. import mongoose from "mongoose";
  5. import async from "async";
  6. import counter from "../../../public/counter/counter";
  7. let RptTplModel = mongoose.model("rpt_templates");
  8. let TreeNodeModel = mongoose.model("rpt_tpl_tree");
  9. let rptExtCodeModel = mongoose.model("rpt_ext_code_tpl");
  10. let rptCustCfgFacade = require("../facade/rpt_cust_cfg_facade");
  11. let costIndexModel = mongoose.model("costIndexReport");
  12. import JV from "../rpt_component/jpc_value_define";
  13. import rttFacade from "../facade/rpt_tpl_tree_node_facade";
  14. import CompilationModel from "../../users/models/compilation_model";
  15. //统一回调函数
  16. let callback = function (req, res, err, message, data) {
  17. res.json({ error: err, message: message, data: data });
  18. };
  19. let mExport = {
  20. getCustomerCfg: function (req, res) {
  21. let params = JSON.parse(req.body.params),
  22. userId = params.userId,
  23. me = this;
  24. if (req.session.sessionUser && req.session.sessionUser.id)
  25. userId = req.session.sessionUser.id;
  26. let userIds = [];
  27. userIds.push(userId);
  28. if (userId !== "-100") {
  29. userIds.push("-100");
  30. }
  31. rptCustCfgFacade.getCustomizeCfg(userIds).then(function (custCfg) {
  32. if (custCfg) {
  33. //success
  34. let rst = null;
  35. if (custCfg.length > 0) {
  36. rst = [];
  37. rst.push(null);
  38. for (let itemCfg of custCfg) {
  39. // rst = itemCfg;
  40. let doc = itemCfg._doc ? itemCfg._doc : itemCfg;
  41. let dest = {};
  42. copyRptCfg(doc, dest);
  43. if (doc.userId !== "-100") {
  44. rst.push(dest);
  45. } else {
  46. rst[0] = dest;
  47. }
  48. }
  49. }
  50. if (rst !== null && rst.length === 1) {
  51. //copy dft config
  52. let userDest = {};
  53. copyRptCfg(rst[0], userDest);
  54. rst.push(userDest);
  55. }
  56. callback(req, res, false, "", rst);
  57. } else {
  58. //failed
  59. callback(req, res, true, "失败!", null);
  60. }
  61. });
  62. },
  63. saveCustomerCfg: function (req, res) {
  64. let params = JSON.parse(req.body.params),
  65. userId = params.userId,
  66. custCfg = params.custCfg;
  67. if (req.session.sessionUser && req.session.sessionUser.id)
  68. userId = req.session.sessionUser.id;
  69. custCfg.userId = userId;
  70. rptCustCfgFacade.saveCustomizeCfg(custCfg).then(function (rst) {
  71. if (rst) {
  72. //success
  73. callback(req, res, false, "", "success!");
  74. } else {
  75. //failed
  76. callback(req, res, true, "更新失败!", null);
  77. }
  78. });
  79. },
  80. getDftTemplates: function (req, res) {
  81. let filter = {
  82. userId: "-100",
  83. $or: [{ isDeleted: null }, { isDeleted: false }],
  84. };
  85. TreeNodeModel.find(filter, "-_id", function (err, data) {
  86. if (err) {
  87. callback(req, res, true, "", null);
  88. } else {
  89. callback(req, res, false, "", data);
  90. }
  91. });
  92. },
  93. getExtCodeTpl: function (req, res) {
  94. rptExtCodeModel
  95. .find({})
  96. .exec()
  97. .then(function (rstCodeTpl) {
  98. if (rstCodeTpl) {
  99. callback(req, res, false, "", rstCodeTpl);
  100. } else {
  101. callback(req, res, "The report template was not found!", null);
  102. }
  103. });
  104. },
  105. async getCompilationList(req, res) {
  106. let compilationModel = new CompilationModel();
  107. // let compilationList = await compilationModel.getPermissionCompilationList(req);
  108. let compilationList = await compilationModel.getCompilationList();
  109. console.log(compilationList);
  110. if (compilationList) {
  111. // console.log(compilationList);
  112. // compilationList.then(function (rst) {
  113. // console.log(rst);
  114. // callback(req, res, false, "", rst);
  115. // })
  116. callback(req, res, false, "", compilationList);
  117. } else {
  118. callback(req, res, true, "no result", null);
  119. }
  120. },
  121. getRptTplTree: function (req, res) {
  122. let params = JSON.parse(req.body.params),
  123. compilationId = params.compilationId,
  124. userId = params.userId,
  125. sessionUserId = null;
  126. let userIds = ["-100"];
  127. if (req.session.sessionUser && req.session.sessionUser.id)
  128. sessionUserId = req.session.sessionUser.id;
  129. if (userId !== null) {
  130. if (typeof userId === "string") {
  131. if (userIds.indexOf(userId) < 0) userIds.push(userId);
  132. } else if (userId instanceof Array) {
  133. for (let uid of userId) {
  134. userIds.push(uid);
  135. }
  136. }
  137. } else {
  138. }
  139. if (sessionUserId && userIds.indexOf(sessionUserId) < 0)
  140. userIds.push(sessionUserId);
  141. if (!compilationId) {
  142. compilationId = req.session.sessionCompilation._id;
  143. }
  144. rttFacade.findTplTree(compilationId, userIds).then(function (result) {
  145. if (result) {
  146. callback(req, res, false, "", result);
  147. } else {
  148. callback(req, res, true, "no result", null);
  149. }
  150. });
  151. },
  152. getTplTreeByCompilation: function (req, res) {
  153. let params = JSON.parse(req.body.params),
  154. compilationId = params.compilationId;
  155. // if (req.session.sessionUser && req.session.sessionUser.id) sessionUserId = req.session.sessionUser.id;
  156. console.log(params);
  157. if (!compilationId) {
  158. console.log(req.session.sessionCompilation);
  159. compilationId = req.session.sessionCompilation._id;
  160. }
  161. rttFacade.findTplTreeByCompilation(compilationId).then(function (result) {
  162. if (result) {
  163. callback(req, res, false, "", result);
  164. } else {
  165. callback(req, res, true, "no result", null);
  166. }
  167. });
  168. },
  169. updateTreeNodes: function (req, res) {
  170. let params = JSON.parse(req.body.params),
  171. nodes = params.nodes;
  172. let functions = [];
  173. for (let node of nodes) {
  174. functions.push(
  175. (function (doc) {
  176. return function (cb) {
  177. TreeNodeModel.update({ ID: doc.ID }, doc, cb);
  178. };
  179. })(node)
  180. );
  181. }
  182. async.parallel(functions, function (err, results) {
  183. callback(req, res, err, "", results);
  184. });
  185. },
  186. deleteRptTplNodes: function (req, res) {
  187. let params = JSON.parse(req.body.params),
  188. nodeIds = params.nodeIds,
  189. preNodeId = params.preNodeId,
  190. preNodeNextId = params.preNodeNextId;
  191. let functions = [];
  192. if (preNodeId !== -1) {
  193. functions.push(
  194. (function (nodeId, nextId) {
  195. return function (cb) {
  196. TreeNodeModel.update({ ID: nodeId }, { NextSiblingID: nextId }, cb);
  197. };
  198. })(preNodeId, preNodeNextId)
  199. );
  200. }
  201. for (let nId of nodeIds) {
  202. functions.push(
  203. (function (nodeId) {
  204. return function (cb) {
  205. TreeNodeModel.update({ ID: nodeId }, { isDeleted: true }, cb);
  206. };
  207. })(nId)
  208. );
  209. }
  210. async.parallel(functions, function (err, results) {
  211. callback(req, res, err, "", results);
  212. });
  213. },
  214. createTreeRootNode: function (req, res) {
  215. let params = JSON.parse(req.body.params),
  216. doc = params.doc;
  217. rttFacade.createNewTree(doc).then(function (rst) {
  218. if (rst) {
  219. //success
  220. callback(req, res, false, "", rst);
  221. } else {
  222. //failed
  223. callback(req, res, true, "创建失败!", null);
  224. }
  225. });
  226. },
  227. updateTreeRootNode: function (req, res) {
  228. let params = JSON.parse(req.body.params),
  229. doc = params.doc;
  230. rttFacade
  231. .updateTree(doc.compilationId, doc.engineerId, doc.userId, doc)
  232. .then(function (rst) {
  233. if (rst) {
  234. //success
  235. callback(req, res, false, "", rst);
  236. } else {
  237. //failed
  238. callback(req, res, true, "更新失败!", null);
  239. }
  240. });
  241. },
  242. updateTopNodeName: function (req, res) {
  243. //备注:因设计的更改,此方法将被放弃
  244. let params = JSON.parse(req.body.params),
  245. compilationId = params.compilationId,
  246. engineerId = params.engineerId,
  247. userId = params.userId,
  248. nodeName = params.nodeName;
  249. if (req.session.sessionUser && req.session.sessionUser.id)
  250. userId = req.session.sessionUser.id;
  251. let filter = {
  252. compilationId: compilationId,
  253. engineerId: engineerId,
  254. userId: userId,
  255. $or: [{ isDeleted: null }, { isDeleted: false }],
  256. };
  257. let updateStatement = { $set: { name: nodeName } };
  258. rttFacade.updateTreeInDetail(filter, updateStatement).then(function (rst) {
  259. if (rst) {
  260. //success
  261. callback(req, res, false, "", rst);
  262. } else {
  263. //failed
  264. callback(req, res, true, "更新失败!", null);
  265. }
  266. });
  267. },
  268. updateSubLevelOneNode: function (req, res) {
  269. let params = JSON.parse(req.body.params),
  270. compilationId = params.compilationId,
  271. // engineerId = params.engineerId,
  272. userId = params.userId,
  273. subNode = params.subNode;
  274. if (req.session.sessionUser && req.session.sessionUser.id)
  275. userId = req.session.sessionUser.id; //备注:这段逻辑只会在前端有效,后端运维不会走到
  276. let filter = {
  277. compilationId: compilationId,
  278. userId: userId,
  279. "items.ID": subNode.ID,
  280. $or: [{ isDeleted: null }, { isDeleted: false }],
  281. };
  282. let updateStatement = { $set: { "items.$": subNode } };
  283. rttFacade.updateTreeInDetail(filter, updateStatement).then(function (rst) {
  284. if (rst) {
  285. //success
  286. callback(req, res, false, "", rst);
  287. } else {
  288. //failed
  289. callback(req, res, true, "更新失败!", null);
  290. }
  291. });
  292. },
  293. removeTreeRootNode: function (req, res) {
  294. let params = JSON.parse(req.body.params),
  295. compilationId = params.compilationId,
  296. engineerId = params.engineerId,
  297. userId = params.userId,
  298. isPhysically = params.isPhysically;
  299. if (req.session.sessionUser && req.session.sessionUser.id)
  300. userId = req.session.sessionUser.id;
  301. if (isPhysically) {
  302. rttFacade
  303. .removeTreePhycically(compilationId, engineerId, userId)
  304. .then(function (rst) {
  305. if (rst) {
  306. //success
  307. callback(req, res, false, "", rst);
  308. } else {
  309. //failed
  310. callback(req, res, true, "删除失败!", null);
  311. }
  312. });
  313. } else {
  314. rttFacade
  315. .removeTree(compilationId, engineerId, userId)
  316. .then(function (rst) {
  317. if (rst) {
  318. //success
  319. callback(req, res, false, "", rst);
  320. } else {
  321. //failed
  322. callback(req, res, true, "删除失败!", null);
  323. }
  324. });
  325. }
  326. },
  327. getNewNodeID: function (req, res) {
  328. let params = JSON.parse(req.body.params),
  329. scope = params.scope;
  330. counter.counterDAO.getIDAfterCount(
  331. counter.moduleName.report,
  332. scope,
  333. function (err, result) {
  334. callback(req, res, false, "", result.sequence_value);
  335. }
  336. );
  337. },
  338. createDftRptTpl: function (req, res) {
  339. let params = JSON.parse(req.body.params),
  340. treeNodeId = params.treeNodeId,
  341. rptDftTplId = params.rptDftTplId,
  342. rptName = params.rptName,
  343. grpKey = params.grpKey,
  344. compilationId = params.compilationId,
  345. engineerId = params.engineerId,
  346. userId = params.userId,
  347. subNode = params.subNode;
  348. if (req.session.sessionUser && req.session.sessionUser.id)
  349. userId = req.session.sessionUser.id;
  350. let filter = { ID: rptDftTplId };
  351. RptTplModel.findOne(filter, "-_id")
  352. .exec()
  353. .then(function (dftTplRst) {
  354. if (dftTplRst) {
  355. let _doc = dftTplRst["_doc"];
  356. _doc["ID"] = treeNodeId;
  357. _doc["GROUP_KEY"] = grpKey;
  358. _doc["ID_KEY"] = "";
  359. _doc[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME] = rptName;
  360. let rptTpl = new RptTplModel(_doc);
  361. rptTpl.save(function (err, actTplRst) {
  362. if (err) {
  363. callback(req, res, "报表模板创建错误", "", null);
  364. } else {
  365. let filter = {
  366. compilationId: compilationId,
  367. engineerId: engineerId,
  368. userId: userId,
  369. "items.ID": subNode.ID,
  370. $or: [{ isDeleted: null }, { isDeleted: false }],
  371. };
  372. let updateStatement = { $set: { "items.$": subNode } };
  373. rttFacade
  374. .updateTreeInDetail(filter, updateStatement)
  375. .then(function (rst) {
  376. if (rst) {
  377. //success
  378. callback(req, res, false, "", actTplRst);
  379. } else {
  380. //failed
  381. callback(req, res, true, "更新失败!", null);
  382. }
  383. });
  384. }
  385. });
  386. } else {
  387. callback(req, res, "Create report template failed!", null);
  388. }
  389. });
  390. },
  391. getRefRptTpl: function (req, res) {
  392. let params = JSON.parse(req.body.params),
  393. rptTplId = params.rptTplId;
  394. let filter = { ID: rptTplId };
  395. RptTplModel.findOne(filter, "-_id")
  396. .exec()
  397. .then(function (rstTpl) {
  398. if (rstTpl) {
  399. callback(req, res, false, "", rstTpl);
  400. } else {
  401. callback(req, res, "The report template was not found!", null);
  402. }
  403. });
  404. },
  405. updateRptTpl: function (req, res) {
  406. let params = JSON.parse(req.body.params),
  407. rptTpl = JSON.parse(params.rptTpl);
  408. let filter = { ID: parseInt(rptTpl[JV.PROP_ID]) },
  409. options = { overwrite: true };
  410. RptTplModel.update(filter, rptTpl, options, function (err, rst) {
  411. if (err) {
  412. callback(
  413. req,
  414. res,
  415. true,
  416. "The report template was updated failed!",
  417. false
  418. );
  419. } else {
  420. callback(
  421. req,
  422. res,
  423. false,
  424. "The report template was updated successfully!",
  425. true
  426. );
  427. }
  428. });
  429. },
  430. copyRptTpl: function (req, res) {
  431. let params = JSON.parse(req.body.params),
  432. orgRptTplId = params.orgRptTplId,
  433. newID = params.newRptTplId;
  434. let filter = { ID: orgRptTplId };
  435. RptTplModel.findOne(filter, "-_id")
  436. .exec()
  437. .then(function (baseTplRst) {
  438. if (baseTplRst) {
  439. let _doc = baseTplRst["_doc"];
  440. _doc["ID"] = newID;
  441. if (_doc["GROUP_KEY"].indexOf("(Copy)") < 0) {
  442. _doc["GROUP_KEY"] = _doc["GROUP_KEY"] + "(Copy)";
  443. }
  444. let rptTpl = new RptTplModel(_doc);
  445. rptTpl.save(function (err, actTplRst) {
  446. if (err) {
  447. callback(req, res, "报表模板创建错误", "", null);
  448. } else {
  449. callback(req, res, false, "", newID);
  450. }
  451. });
  452. } else {
  453. callback(req, res, "Create report template failed!", null);
  454. }
  455. });
  456. },
  457. // 接口指标报表编辑器,新增的辅表选项数据
  458. getAidReportDataList: function (req, res) {
  459. let params = JSON.parse(req.body.params),
  460. compilationID = params.compilationID;
  461. let filter = { compilationID };
  462. costIndexModel
  463. .find(filter, "-_id")
  464. .exec()
  465. .then(function (data) {
  466. if (data) {
  467. callback(req, res, false, "", data);
  468. } else {
  469. callback(req, res, "The aidReportData template was not found!", null);
  470. }
  471. });
  472. },
  473. };
  474. function copyRptCfg(src, dest) {
  475. dest.margins = {
  476. Left: src.margins.Left,
  477. Right: src.margins.Right,
  478. Top: src.margins.Top,
  479. Bottom: src.margins.Bottom,
  480. };
  481. dest.showVerticalLine = src.showVerticalLine;
  482. dest.isNarrow = src.isNarrow;
  483. dest.fillZero = src.fillZero;
  484. dest.fonts = [];
  485. for (let font of src.fonts) {
  486. dest.fonts.push({
  487. ID: font["ID"],
  488. CfgDispName: font["CfgDispName"],
  489. Name: font["Name"],
  490. FontHeight: font["FontHeight"],
  491. FontColor: font["FontColor"],
  492. FontBold: font["FontBold"],
  493. FontItalic: font["FontItalic"],
  494. FontUnderline: font["FontUnderline"],
  495. FontStrikeOut: font["FontStrikeOut"],
  496. FontAngle: font["FontAngle"],
  497. });
  498. }
  499. }
  500. export default mExport;