Browse Source

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

TonyKang 8 years ago
parent
commit
685187d44e

+ 5 - 5
modules/main/controllers/GLJ_controller.js

@@ -14,9 +14,9 @@ var callback = function(req, res, err, message, data){
 module.exports = {
     getData: function(req, res){
         var data = JSON.parse(req.body.data);
-        billsData.getData(data.projectId, function(err, message, billsList){
+        GLJData.getData(data.projectId, function(err, message, GLJList){
             if (err === 0) {
-                callback(req, res, err, message, billsList);
+                callback(req, res, err, message, GLJList);
             } else {
                 callback(req, res, err, message, null);
             }
@@ -25,9 +25,9 @@ module.exports = {
 
     getItemTemplate: function(req, res){
         //var data = JSON.parse(req.body.data);
-        billsData.getItemTemplate(function(err, message, billsItem){
+        GLJData.getItemTemplate(function(err, message,GLJItem){
             if (billsItem) {
-                callback(req, res, err, message, billsItem);
+                callback(req, res, err, message, GLJItem);
             } else {
                 callback(req, res, err, message, null);
             }
@@ -35,7 +35,7 @@ module.exports = {
     },
 
     allocIDs: function(req, res){
-        billsData.allocIDs(function(err, message, data){
+        GLJData.allocIDs(function(err, message, data){
             if (err) {
                 callback(req, res, err, message, data);
             } else {

+ 10 - 0
modules/main/controllers/project_controller.js

@@ -18,5 +18,15 @@ module.exports = {
                 callback(req, res, err, message, null);
             }
         });
+    },
+    getData: function (req, res) {
+        var data = JSON.parse(req.body.data);
+        Project.getData(data.project_id, function (err, message, result) {
+            if (!err) {
+                callback(req, res, err, message, result);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
     }
 };

+ 41 - 34
modules/main/models/GLJ.js

@@ -4,9 +4,18 @@
 var mongoose = require("mongoose");
 var db = require("../db/project_db");
 var Schema = mongoose.Schema;
+var counter = require("../../../public/counter/counter.js");
+var deleteSchema = require('../../../public/models/deleteSchema');
+var consts = require('./projectConsts');
+var projectConsts = consts.projectConst;
+var commonConsts = consts.commonConst;
 
 var GLJSchema = new Schema({
     ID: Number,
+    GLJID: Number,
+    rGLJID: Number,
+    rationID: Number,
+    billsItemID: Number,
     projectID: Number,
     orgRQuantity: String, //Decimal
     rQuantity: String, //Decimal
@@ -18,19 +27,20 @@ var GLJSchema = new Schema({
     price: String, //Decimal
     tenderQuantity: String, //Decimal
     tenderPrice: String, //Decimal
-    type: Number
+    type: Number,
+    deleteInfo: deleteSchema
     // to do
 
 });
 
-var GLJ = db.model("GLJList", GLJSchema);
+var GLJ = db.model("GLJ", GLJSchema, "GLJ");
 
 var GLJDAO = function(){};
 
-GLJDAO.prototype.getData = function(projectId, callback){
-    GLJ.find({projectId: projectId}, function(err, datas){
+GLJDAO.prototype.getData = function(projectID, callback){
+    GLJ.find({'$or': [{projectID: projectID, deleteInfo: null}, {projectID: projectID, 'deleteInfo.deleted': {$in: [null, false]}}]}, '-_id', function(err, datas){
         if (!err) {
-            callback(0, '', datas);
+            callback(0, projectConsts.GLJ, datas);
         } else {
             callback(1, '', null);
         };
@@ -38,32 +48,32 @@ GLJDAO.prototype.getData = function(projectId, callback){
 };
 
 GLJDAO.prototype.save = function(datas, callback){
-    var data, errList = [], updateLength = 0;
-    var updateFunc = function (err, errData) {
-        if (err){
-            errList.push(errData);
-        };
-    };
-    if (datas){
-        for (var i = 0; i < datas.length; i++){
-            data = datas[i];
-            if (data.updateType === 'update') {
-                delete data.updateType;
-                data.save(updateFunc);
-            } else if (data.updateType === 'create') {
-                delete data.updateType;
-                data.save(updateFunc);
-            } else if (data.updateType === 'delete') {
-                delete data.updateType;
-                data.remove(updateFunc);
-            };
-        };
-        if (errList.length > 0){
-            callback(1, errList);
-        } else {
-            callback(0, null);
-        };
-    };
+    var functions = [];
+    var data;
+
+    function saveOne(data) {
+        return function (cb) {
+            switch (doc.updateType) {
+                case commonConsts.UT_UPDATE:
+                    GLJ.update({ID: doc.ID}, doc, cb);
+                    break;
+                case commonConsts.UT_CREATE:
+                    GLJ.create(doc, cb);
+                    break;
+                case commonConsts.UT_DELETE:
+                /* 假删除
+                 var item = new GLJ(doc);
+                 item.remove(cb);
+                 */
+            }
+        }
+    }
+    for (var i = 0; i < datas.length; i++){
+        data = datas[i];
+        functions.push(saveOne(data));
+    }
+
+    async.parallel(functions, callback);
 };
 
 GLJDAO.prototype.getItemTemplate = function(callback){
@@ -72,9 +82,6 @@ GLJDAO.prototype.getItemTemplate = function(callback){
     callback(0, '', data);
 };
 
-const
-    IDStep = 50, IDModule = 'bills';
-
 GLJDAO.prototype.allocIDs = function(IDStep, callback){
     counter.counterDAO.getIDAfterCount(counter.moduleName.GLJ, IDStep, function(err, highID){
         var lowID = highID - IDStep + 1;

+ 32 - 28
modules/main/models/bills.js

@@ -6,7 +6,11 @@ var db = require("../db/project_db");
 var subSchema = require("./billsSubSchemas");
 var deleteSchema = require('../../../public/models/deleteSchema');
 var Schema = mongoose.Schema;
+var async = require("async");
 var counter = require("../../../public/counter/counter.js");
+var consts = require('./projectConsts');
+var projectConsts = consts.projectConst;
+var commonConsts = consts.commonConst;
 
 var billsSchema = new Schema({
     ID: Number,
@@ -49,9 +53,9 @@ var billsDAO = function(){};
 billsDAO.prototype.getData = function(projectID, callback){
     bills.find({'$or': [{projectID: projectID, deleteInfo: null}, {projectID: projectID, 'deleteInfo.deleted': {$in: [null, false]}}]}, '-_id', function(err, datas){
         if (!err) {
-            callback(0, '', datas);
+            callback(0, projectConsts.BILLS, datas);
         } else {
-            callback(1, '', null);
+            callback(1, projectConsts.BILLS, null);
         };
     });
 };
@@ -78,32 +82,32 @@ billsDAO.prototype.AddBillsFromTemplate = function (datas, callback) {
 };
 
 billsDAO.prototype.save = function(datas, callback){
-    var data, errList = [], updateLength = 0;
-    var updateFunc = function (err, errData) {
-        if (err){
-            errList.push(errData);
-        };
-    };
-    if (datas){
-        for (var i = 0; i < datas.length; i++){
-            data = datas[i];
-            if (data.updateType === 'update') {
-                delete data.updateType;
-                data.save(updateFunc);
-            } else if (data.updateType === 'create') {
-                delete data.updateType;
-                data.save(updateFunc);
-            } else if (data.updateType === 'delete') {
-                delete data.updateType;
-                data.remove(updateFunc);
-            };
-        };
-        if (errList.length > 0){
-            callback(1, errList);
-        } else {
-            callback(0, null);
-        };
-    };
+    var functions = [];
+    var data;
+
+    function saveOne(doc) {
+        return function (cb) {
+            switch (doc.updateType) {
+                case commonConsts.UT_UPDATE:
+                    bills.update({ID: doc.ID}, doc, cb);
+                    break;
+                case commonConsts.UT_CREATE:
+                    bills.create(doc, cb);
+                    break;
+                case commonConsts.UT_DELETE:
+                    /* 假删除
+                    var item = new bills(doc);
+                    item.remove(cb);
+                    */
+            }
+        }
+    }
+    for (var i = 0; i < datas.length; i++){
+        data = datas[i];
+        functions.push(saveOne(data));
+    }
+
+    async.parallel(functions, callback);
 };
 
 billsDAO.prototype.getItemTemplate = function(callback){

+ 50 - 21
modules/main/models/project.js

@@ -5,20 +5,23 @@ var billsData = require('./bills');
 var rationData = require('./ration');
 var GLJData = require('./GLJ');
 var consts = require('./projectConsts');
+var projectConsts = consts.projectConst;
+var async = require("async");
 
 var moduleMap = {};
 
-moduleMap[consts.BILLS] = billsData;
-moduleMap[consts.RATION] = rationData;
-moduleMap[consts.GLJ] = GLJData;
+moduleMap[projectConsts.BILLS] = billsData;
+moduleMap[projectConsts.RATION] = rationData;
+moduleMap[projectConsts.GLJ] = GLJData;
 
 var Project = function (){};
 
 Project.prototype.datas = [];
 
 Project.prototype.prepare = function(data, callback){
-    data.updateData.forEach(function(item){
-        this.datas.push(item);
+    var me = this;
+    data.update_data.forEach(function(item){
+        me.datas.push(item);
         /*
         to do
         moduleMap[item.moduleName].prepare(item.data, jobCallback);
@@ -26,31 +29,57 @@ Project.prototype.prepare = function(data, callback){
     });
 };
 
-Project.prototype.save = function(data, callback){
+Project.prototype.save = function(datas, callback){
     var job, savePoint;
-    var errDatas = [];
-    this.prepare(data, function(job, savePoint){});
+    var functions = [];
+    var item;
 
-    var saveCallback = function(err, moduleName, data){
-        if (err != 0){
-            var errData = {moduleName: moduleName, err: err, data: data};
-            errDatas.push(errData);
+    this.prepare(datas, function(job, savePoint){});
+
+    function saveModule(data) {
+        return function (cb) {
+            moduleMap[data.moduleName].save(data.data, cb);
         }
-    };
+    }
+    for (var i = 0; i < this.datas.length; i++){
+        item = this.datas[i];
+        functions.push(saveModule(item));
+    }
 
-    this.datas.forEach(function(item){
-        moduleMap[item.moduleName].save(item.data, saveCallback);
+    async.parallel(functions, function(err, results) {
+        if (!err){
+            callback(null, '', results)
+        }
+        else{
+            callback(1, 'save project failed', null)
+        }
     });
-
     this.datas = [];
+};
 
-    if (errDatas.length > 0){
-        callback(1, 'error', errDatas)
-    }
-    else{
-        callback(0, '', null)
+Project.prototype.getData = function(projectID, callback){
+    var functions = [];
+    var itemName;
+
+    for (itemName in moduleMap){
+        functions.push((function(itemName){
+            return function (cb) {
+                moduleMap[itemName].getData(projectID, function(err, moduleName, data){
+                    cb(err, {moduleName: moduleName, data: data})
+                })
+            }
+        })(itemName))
     }
 
+    async.parallel(functions, function(err, results) {
+        if (!err){
+            callback(null, '', results)
+        }
+        else{
+            callback(1, 'load project failed', null)
+        }
+    });
+
 };
 
 module.exports = new Project();

+ 7 - 1
modules/main/models/projectConsts.js

@@ -9,4 +9,10 @@ var projectConst = {
 
 };
 
-module.exports = projectConst;
+var commonConst = {
+    UT_UPDATE: 'ut_update',
+    UT_CREATE: 'ut_create',
+    UT_DELETE: 'ut_delete'
+};
+
+module.exports = {projectConst: projectConst, commonConst: commonConst};

+ 39 - 35
modules/main/models/ration.js

@@ -5,6 +5,11 @@ var mongoose = require("mongoose");
 var db = require("../db/project_db");
 var subSchema = require("./billsSubSchemas");
 var Schema = mongoose.Schema;
+var deleteSchema = require('../../../public/models/deleteSchema');
+var counter = require("../../../public/counter/counter.js");
+var consts = require('./projectConsts');
+var projectConsts = consts.projectConst;
+var commonConsts = consts.commonConst;
 
 var rationSchema = new Schema({
     ID: Number,
@@ -17,24 +22,26 @@ var rationSchema = new Schema({
     maskName: String,
     unit: String,
     quantity: String, // Decimal
-    programId: Number,
+    programID: Number,
+    adjustState: String,
     content: String,
     rationProjName: String,
     comments: String,
     // 费用字段
     fees: [subSchema.feesSchema],
     // 标记字段
-    flags: [subSchema.flagsSchema]
+    flags: [subSchema.flagsSchema],
+    deleteInfo: deleteSchema
 });
 
-var ration = db.model("rations", rationSchema);
+var ration = db.model("ration", rationSchema, "ration");
 
 var rationDAO = function(){};
 
-rationDAO.prototype.getData = function(projectId, callback){
-    rations.find({projectID: projectId}, function(err, datas){
+rationDAO.prototype.getData = function(projectID, callback){
+    ration.find({'$or': [{projectID: projectID, deleteInfo: null}, {projectID: projectID, 'deleteInfo.deleted': {$in: [null, false]}}]}, '-_id', function(err, datas){
         if (!err) {
-            callback(0, '', datas);
+            callback(0, projectConsts.RATION, datas);
         } else {
             callback(1, '', null);
         }
@@ -42,32 +49,32 @@ rationDAO.prototype.getData = function(projectId, callback){
 };
 
 rationDAO.prototype.save = function(projectId, datas, callback){
-    var data, errList = [], updateLength = 0;
-    var updateFunc = function (err, errData) {
-        if (err){
-            errList.push(errData);
-        };
-    };
-    if (datas){
-        for (var i = 0; i < datas.length; i++){
-            data = datas[i];
-            if (data.updateType === 'update') {
-                delete data.updateType;
-                data.save(updateFunc);
-            } else if (data.updateType === 'create') {
-                delete data.updateType;
-                data.save(updateFunc);
-            } else if (data.updateType === 'delete') {
-                delete data.updateType;
-                data.remove(updateFunc);
-            };
-        };
-        if (errList.length > 0){
-            callback(1, 'update error.', errList);
-        } else {
-            callback(0, '', null);
-        };
-    };
+    var functions = [];
+    var data;
+
+    function saveOne(data) {
+        return function (cb) {
+            switch (doc.updateType) {
+                case commonConsts.UT_UPDATE:
+                    ration.update({ID: doc.ID}, doc, cb);
+                    break;
+                case commonConsts.UT_CREATE:
+                    ration.create(doc, cb);
+                    break;
+                case commonConsts.UT_DELETE:
+                /* 假删除
+                 var item = new ration(doc);
+                 item.remove(cb);
+                 */
+            }
+        }
+    }
+    for (var i = 0; i < datas.length; i++){
+        data = datas[i];
+        functions.push(saveOne(data));
+    }
+
+    async.parallel(functions, callback);
 };
 
 rationDAO.prototype.getItemTemplate = function(callback){
@@ -76,9 +83,6 @@ rationDAO.prototype.getItemTemplate = function(callback){
     callback(0, '', data);
 };
 
-const
-    IDStep = 50, IDModule = 'rations';
-
 rationDAO.prototype.allocIDs = function(IDStep, callback){
     counter.counterDAO.getIDAfterCount(counter.moduleName.ration, IDStep, function(err, highID){
         var lowID = highID - IDStep + 1;

+ 1 - 0
modules/main/routes/project_route.js

@@ -6,5 +6,6 @@ var projectRouter = express.Router();
 var projectController = require('../controllers/project_controller');
 
 projectRouter.post('/save', projectController.save);
+projectRouter.post('/getData', projectController.getData);
 
 module.exports = projectRouter;

File diff suppressed because it is too large
+ 32 - 10
test/tmp_data/test_project_1.js


+ 8 - 0
test/unit/testProject/testProject.js

@@ -0,0 +1,8 @@
+/**
+ * Created by jimiz on 2017/4/26.
+ */
+var billsData = require('./bills');
+var rationData = require('./ration');
+var GLJData = require('./GLJ');
+var consts = require('./projectConsts');
+

+ 29 - 4
web/main/html/main.html

@@ -630,9 +630,34 @@
             data.flags.push({fieldName: 'isPartGather', flag: false});
         });*/
 
-        project = PROJECT.createNew();
-        CommonAjax.post('/bills/getData', {projectId: scUrlUtil.GetQueryString('project')}, function (bills) {
-            project.Bills.loadDatas(datas);
+        project = PROJECT.createNew(scUrlUtil.GetQueryString('project'), null/* to do: userID*/);
+        project.loadDatas(function (err) {
+            if (!err) {
+                controller = TREE_SHEET_CONTROLLER.createNew(project.mainTree, billsSpread.getActiveSheet(), BillsGridSetting);
+                //controller = TREE_SHEET_CONTROLLER.createNew(project.Bills.tree, billsSpread.getActiveSheet(), BillsGridSetting);
+
+                controller.showTreeData();
+                controller.bind('refreshBaseActn', function (tree) {
+                    var showButton = function (show, btn) {
+                        if (show) {
+                            btn.show();
+                        } else {
+                            btn.hide();
+                        }
+                    };
+                    showButton(tree.selected && tree.selected.canUpLevel(), $('#upLevel'));
+                    showButton(tree.selected && tree.selected.canDownLevel(), $('#downLevel'));
+                    showButton(tree.selected && tree.selected.canUpMove(), $('#upMove'));
+                    showButton(tree.selected && tree.selected.canDownMove(), $('#downMove'));
+                    showButton(tree.selected ? true : false, $('#delete'));
+                });
+            }
+            else {
+
+            }
+        });
+        /*CommonAjax.post('/bills/getBills', {}, function (bills) {
+            project.Bills.loadDatas(bills);
             project.Ration.loadDatas([]);
             //project.Rations.loadDatas(drawing_data);
             project.loadMainTree();
@@ -655,7 +680,7 @@
                 showButton(tree.selected && tree.selected.canDownMove(), $('#downMove'));
                 showButton(tree.selected ? true : false, $('#delete'));
             });
-        });
+        });*/
 
         $('#insert').click(function () {
             var selected = controller.tree.selected;

+ 4 - 4
web/main/js/models/bills.js

@@ -28,7 +28,7 @@ var Bills = {
         };
 
         // 从后台获取数据
-        bills.prototype.pullData = function (){
+        /*bills.prototype.pullData = function (){
             this.project.pullData(
                 '/bills/getData',
                 {projectID: this.project.ID},
@@ -41,12 +41,12 @@ var Bills = {
                         alert(result.message);
                     }
                 },
-                function (){/* to do: 错误处理需要细化*/}
+                function (){}// to do: 错误处理需要细化
             )
-        };
+        };*/
 
         // prototype用于定义public方法
-        bills.prototype.loadDatas = function (datas) {
+        bills.prototype.loadData = function (datas) {
             this.datas = datas;
             // generate Fees & Flags Index, For View & Calculate
             this.datas.forEach(function (data) {

+ 4 - 4
web/main/js/models/glj.js

@@ -19,7 +19,7 @@ var GLJ = {
         };
 
         // 从后台获取数据
-        glj.prototype.pullData = function (){
+        /*glj.prototype.pullData = function (){
             this.project.pullData(
                 '/glj/getData',
                 {projectID: this.project.ID},
@@ -32,11 +32,11 @@ var GLJ = {
                         alert(result.message);
                     }
                 },
-                function (){/* to do: 错误处理需要细化*/}
+                function (){}//to do: 错误处理需要细化
             )
-        };
+        };*/
         // prototype用于定义public方法
-        glj.prototype.loadDatas = function (datas) {
+        glj.prototype.loadData = function (datas) {
             this.datas = datas;
         };
 

+ 54 - 17
web/main/js/models/project.js

@@ -5,31 +5,51 @@ var PROJECT = {
     createNew: function (projectID, userID) {
         // 定义private方法
         var tools = {
+            _project: null,
             _ID: projectID,
             _userID: userID,
             updateLock: 0,
             updateData: [],
             operation: '',
-            modules: {},
+            modules: {}
+        };
 
-            doAfterUpdate: function(result){
-                result.forEach(function(item){
-                    if (item.moduleName in this.modules){
-                        this.modules[item.moduleName].doAfterUpdate(item.err, item.data);
-                    }
-                });
-            }
+        var me = tools;
+        tools.doAfterUpdate = function(result){
+            result.forEach(function(item){
+                if (me.modules[item.moduleName]){
+                    me.modules[item.moduleName].doAfterUpdate(item.err, item.data);
+                }
+            });
         };
+        tools.doAfterLoad = function(result, callback){
+            result.forEach(function(item){
+                if (me.modules[item.moduleName]){
+                    me.modules[item.moduleName].loadData(item.data);
+                }
+            });
+            me._project.loadMainTree();
+            //me.test(result[0].data[0]);
+            callback(0);
+        };
+        /*tools.test = function(data){
+            me._project.beginUpdate('修改名称');
+            data.name = 'test';
+            data['updateType'] = 'ut_update';
+            me._project.push(ModuleNames.bills, [data]);
+            me._project.endUpdate();
+        };*/
 
         // 所有通过this访问的属性,都不应在此单元外部进行写入操作
         var project = function () {
+            tools._project = this;
             this.mainTree = cacheTree.createNew(this);
 
             this.Bills = Bills.createNew(this);
             this.Ration = Ration.createNew(this);
             this.GLJ = GLJ.createNew(this);
 
-            this.masterField = {ration: 'BillsID'};
+            this.masterField = {ration: 'billsItemID'};
         };
 
         // prototype用于定义public方法
@@ -75,7 +95,7 @@ var PROJECT = {
         };
 
         // 提供给各模块调用的统一从后台获取数据的方法
-        project.prototype.pullData = function (url, data, successCallback, errorCallback) {
+        /*project.prototype.pullData = function (url, data, successCallback, errorCallback) {
             $.ajax({
                 type:"POST",
                 url: url,
@@ -91,14 +111,31 @@ var PROJECT = {
                     errorCallback();
                 }
             });
-        };
+        };*/
 
         // 所有模块在此从后台获取数据
-        project.prototype.loadDatas = function (){
-            this.Bills.pullData();
-            this.Ration.pullData();
-            this.GLJ.pullData();
-
+        project.prototype.loadDatas = function (callback){
+            $.ajax({
+                type: "POST",
+                url: '/project/getData',
+                data: {'data': JSON.stringify({
+                    "project_id": tools._ID
+                })},
+                dataType: 'json',
+                cache: false,
+                timeout: 50000,
+                success: function (result) {
+                    if (!result.error) {
+                        tools.doAfterLoad(result.data, callback);
+                    } else {
+                        alert('error: ' + result.message);
+                        callback(result.error);
+                    }
+                },
+                error: function(jqXHR, textStatus, errorThrown){
+                    alert('error ' + textStatus + " " + errorThrown);
+                }
+            });
         };
 
         project.prototype.beginUpdate = function(operation){
@@ -128,7 +165,7 @@ var PROJECT = {
                     cache: false,
                     timeout: 50000,
                     success: function (result) {
-                        if (result.error === 0) {
+                        if (!result.error) {
                             tools.doAfterUpdate(result.data);
                         } else {
                             alert('error: ' + result.message);

+ 4 - 4
web/main/js/models/ration.js

@@ -20,7 +20,7 @@ var Ration = {
         };
 
         // 从后台获取数据
-        ration.prototype.pullData = function (){
+        /*ration.prototype.pullData = function (){
             this.project.pullData(
                 '/ration/getData',
                 {projectID: this.project.ID},
@@ -33,11 +33,11 @@ var Ration = {
                         alert(result.message);
                     }
                 },
-                function (){/* to do: 错误处理需要细化*/}
+                function (){}//to do: 错误处理需要细化
             )
-        };
+        };*/
         // prototype用于定义public方法
-        ration.prototype.loadDatas = function (datas) {
+        ration.prototype.loadData = function (datas) {
             this.datas = datas;
             // generate Fees & Flags Index,For View & Calculate
             this.datas.forEach(function (data) {