rpt_tpl_controller.js 18 KB

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