/** * Created by Tony on 2017/5/31. */ var mongoose = require('mongoose'); var dbm = require("../../../config/db/db_manager"); var db = dbm.getCfgConnection("Reports"); var async = require("async"); var rptTplDef = require("../../../public/rpt_tpl_def").getUtil(); var Schema = mongoose.Schema; var TreeNodeSchema = new Schema({ ID:Number, ParentID:Number, NextSiblingID:Number, grpType: Number, //建筑(const : 1)/公路(const 2)/其他 etc... nodeType: Number,//节点类型:树节点(枝) 或 模板节点(叶) tplType: Number, //概算、预算、招投标 etc... userId: String, //用户自定义模板用 refId: Number, // name: String, isDeleted: Boolean }); var TreeNodeModel = db.model("rpt_tpl_tree", TreeNodeSchema, "rpt_tpl_tree"); var counter = require('../../../public/counter/counter'); //var RplTplTreeDAO = function(){}; class RplTplTreeDAO{ getTplTreeNodes(grpType, userId, tplType, callback) { var filter = {"grpType": grpType, "$or": [{"isDeleted": null}, {"isDeleted": false} ]}; if (userId) { filter.userId = userId; } if ((tplType && tplType !== rptTplDef.TplType.ALL)) { filter.tplType = tplType; } TreeNodeModel.find(filter, '-_id', function(err, data){ if (err) { callback(true, null); } else callback(false,data); }); }; updateTreeNodes(nodes, callback) { var functions = []; for (let node of nodes) { functions.push((function(doc) { return function(cb) { TreeNodeModel.update({ID: doc.ID}, doc, cb); }; })(node)); } async.parallel(functions, function(err, results) { callback(err, results); }); }; removeNodes(nodeIds, preNodeId, preNodeNextId, callback) { var functions = []; if (preNodeId != -1) { functions.push((function(nodeId, nextId) { return function(cb) { TreeNodeModel.update({ID: nodeId}, {"NextSiblingID": nextId}, cb); }; })(preNodeId, preNodeNextId)); } for (let nId of nodeIds) { functions.push((function(nodeId) { return function(cb) { TreeNodeModel.update({ID: nodeId}, {"isDeleted": true}, cb); }; })(nId)); } async.parallel(functions, function(err, results) { callback(err, results); }); }; createTplTreeNode(nodeData, lastNodeId, callback) { counter.counterDAO.getIDAfterCount(counter.moduleName.report, 1, function(err, result){ nodeData.ID = result.value.sequence_value; var node = new TreeNodeModel(nodeData); node.save(function (err, result) { if (err) { callback("树节点错误!", false); } else { if (lastNodeId > 0) { TreeNodeModel.update({ID: lastNodeId}, {"NextSiblingID": nodeData.ID}, function(err, rst){ if (err) { callback("树节点错误!", false); } else { callback(false, result); } }); } else callback(false, result); } }); }); }; } module.exports = new RplTplTreeDAO();