tpl_tree_node.js 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * Created by Tony on 2017/5/31.
  3. */
  4. var mongoose = require('mongoose');
  5. var dbm = require("../../../config/db/db_manager");
  6. var db = dbm.getCfgConnection("Reports");
  7. var async = require("async");
  8. var rptTplDef = require("../../../public/rpt_tpl_def").getUtil();
  9. var Schema = mongoose.Schema;
  10. var TreeNodeSchema = new Schema({
  11. ID:Number,
  12. ParentID:Number,
  13. NextSiblingID:Number,
  14. grpType: Number, //建筑(const : 1)/公路(const 2)/其他 etc...
  15. nodeType: Number,//节点类型:树节点(枝) 或 模板节点(叶)
  16. tplType: Number, //概算、预算、招投标 etc...
  17. userId: String, //用户自定义模板用
  18. refId: Number, //
  19. name: String,
  20. isDeleted: Boolean
  21. });
  22. var TreeNodeModel = db.model("rpt_tpl_tree", TreeNodeSchema, "rpt_tpl_tree");
  23. var counter = require('../../../public/counter/counter');
  24. //var RplTplTreeDAO = function(){};
  25. class RplTplTreeDAO{
  26. getTplTreeNodes(grpType, userId, tplType, callback) {
  27. var filter = {"grpType": grpType, "$or": [{"isDeleted": null}, {"isDeleted": false} ]};
  28. if (userId) {
  29. filter.userId = userId;
  30. }
  31. if ((tplType && tplType !== rptTplDef.TplType.ALL)) {
  32. filter.tplType = tplType;
  33. }
  34. TreeNodeModel.find(filter, '-_id', function(err, data){
  35. if (err) {
  36. callback(true, null);
  37. } else callback(false,data);
  38. });
  39. };
  40. updateTreeNodes(nodes, callback) {
  41. var functions = [];
  42. for (let node of nodes) {
  43. functions.push((function(doc) {
  44. return function(cb) {
  45. TreeNodeModel.update({ID: doc.ID}, doc, cb);
  46. };
  47. })(node));
  48. }
  49. async.parallel(functions, function(err, results) {
  50. callback(err, results);
  51. });
  52. };
  53. removeNodes(nodeIds, preNodeId, preNodeNextId, callback) {
  54. var functions = [];
  55. if (preNodeId != -1) {
  56. functions.push((function(nodeId, nextId) {
  57. return function(cb) {
  58. TreeNodeModel.update({ID: nodeId}, {"NextSiblingID": nextId}, cb);
  59. };
  60. })(preNodeId, preNodeNextId));
  61. }
  62. for (let nId of nodeIds) {
  63. functions.push((function(nodeId) {
  64. return function(cb) {
  65. TreeNodeModel.update({ID: nodeId}, {"isDeleted": true}, cb);
  66. };
  67. })(nId));
  68. }
  69. async.parallel(functions, function(err, results) {
  70. callback(err, results);
  71. });
  72. };
  73. createTplTreeNode(nodeData, lastNodeId, callback) {
  74. counter.counterDAO.getIDAfterCount(counter.moduleName.report, 1, function(err, result){
  75. nodeData.ID = result.value.sequence_value;
  76. var node = new TreeNodeModel(nodeData);
  77. node.save(function (err, result) {
  78. if (err) {
  79. callback("树节点错误!", false);
  80. } else {
  81. if (lastNodeId > 0) {
  82. TreeNodeModel.update({ID: lastNodeId}, {"NextSiblingID": nodeData.ID}, function(err, rst){
  83. if (err) {
  84. callback("树节点错误!", false);
  85. } else {
  86. callback(false, result);
  87. }
  88. });
  89. } else callback(false, result);
  90. }
  91. });
  92. });
  93. };
  94. }
  95. module.exports = new RplTplTreeDAO();