| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | /** * Created by jimiz on 2017/4/16. */var billsData = require('./bills');var rationData = require('./ration');var ration_glj_data = require('../../ration_glj/facade/ration_glj_facade');var ration_coe_data = require('../../ration_glj/facade/ration_coe_facade');var ration_ass_data = require('../../ration_glj/facade/ration_ass_facade');let ration_installation = require('../facade/ration_installation_facade');var quantity_detail_data = require('../facade/quantity_detail_facade');var fee_rate_data = require('../../fee_rates/facade/fee_rates_facade');let projCounter = require('./proj_counter_model');let projSetting = require('./proj_setting_model');// let volumePriceData = require('../../volume_price/models/volume_price_model');var labour_coe_facade = require('../facade/labour_coe_facade');var calc_program_facade = require('../facade/calc_program_facade');import GLJController from "../../glj/controllers/glj_controller";let installation_facade = require('../facade/installation_facade');const ProjectModel = require('../../pm/models/project_model').project;import GLJListModel from "../../glj/models/glj_list_model";var consts = require('./project_consts');var projectConsts = consts.projectConst;var asyncTool = require("async");var moduleMap = {};moduleMap[projectConsts.BILLS] = billsData;moduleMap[projectConsts.RATION] = rationData;//moduleMap[projectConsts.GLJ] = GLJData;moduleMap[projectConsts.RATION_GLJ] = ration_glj_data;moduleMap[projectConsts.RATION_COE] = ration_coe_data;moduleMap[projectConsts.RATION_ASS] = ration_ass_data;moduleMap[projectConsts.RATION_INSTALLATION] = ration_installation;moduleMap[projectConsts.QUANTITY_DETAIL] = quantity_detail_data;moduleMap[projCounter.collectionName] = projCounter;moduleMap[projSetting.collectionName] = projSetting;// moduleMap[volumePriceData.collectionName] = volumePriceData;moduleMap[projectConsts.FEERATE] = fee_rate_data;moduleMap[projectConsts.LABOUR_COE] = labour_coe_facade;moduleMap[projectConsts.CALC_PROGRAM] = calc_program_facade;moduleMap[projectConsts.PROJECTGLJ] = new GLJController();moduleMap[projectConsts.INSTALLATION_FEE] = installation_facade;var Project = function (){};Project.prototype.datas = [];Project.prototype.prepare = function(data, callback){    var me = this;    data.update_data.forEach(function(item){        item.user_id = data.user_id;        me.datas.push(item);        /*        to do        moduleMap[item.moduleName].prepare(item.data, jobCallback);        */    });};Project.prototype.save = function(datas, callback){    var job, savePoint;    var functions = [];    var item;    var me = this;    me.prepare(datas, function(job, savePoint){});    function saveModule(data) {        return function (cb) {            if(data.moduleName!=undefined){                moduleMap[data.moduleName].save(data.user_id, data.data, cb);            }           // console.log(moduleMap[data.moduleName])        }    }    for (var i = 0; i < me.datas.length; i++){        item = me.datas[i];        functions.push(saveModule(item));    }    asyncTool.parallel(functions, function(err, results) {        if (!err){            callback(null, '', results)        }        else{            callback(1, 'save project failed', null)        }    });    me.datas = [];};Project.prototype.getData = function(projectID, callback){    var functions = [];    var itemName;    let firstTime = +new Date();    for (itemName in moduleMap){        functions.push((function(itemName){            return function (cb) {                let startTime = +new Date();                moduleMap[itemName].getData(projectID, function(err, moduleName, data){                    let endTime = +new Date();                    console.log(moduleName+'---------------'+(endTime - startTime));                    cb(err, {moduleName: moduleName, data: data})                })            }        })(itemName))    }    asyncTool.parallel(functions, function(err, results) {        if (!err){            let lastTime = +new Date();            console.log('最后加载时间---------------'+(lastTime - firstTime));            callback(0, '', results)        }        else{            callback(1, 'load project failed', null)        }    });};Project.prototype.getFilterData = function (projectID, filter, callback) {    let functions = [];    let getModuleData = function (moduleName) {        return async function (cb) {            if (moduleMap[moduleName]) {                moduleMap[moduleName].getData(projectID, function (err, name, data) {                    cb(err, {'moduleName': name, 'data': data})                });            } else if (moduleName === projectConsts.PROJECTGLJ) {                try {                    if (isNaN(projectID) || projectID <= 0) {                        throw '标段id有误';                    }                    // 获取标段对应的单价文件id                    let unitPriceFileId = await ProjectModel.getUnitPriceFileId(projectID);                    if (unitPriceFileId <= 0) {                        throw '没有对应的单价文件';                    }                    // 先获取对应标段的项目工料机数据                    let gljListModel = new GLJListModel();                    let [gljList, mixRatioConnectData] = await gljListModel.getListByProjectId(projectID, unitPriceFileId);                    cb(null, {'moduleName': moduleName, 'data': gljList});                } catch (error) {                    cb(error, null);                }            } else {                throw '要查询的项目模块不存在';            }        }    };    for (let itemName of filter) {        functions.push(getModuleData(itemName));    }    asyncTool.parallel(functions, function (err, results) {        //console.log(results);        if (err) {            throw '获取项目数据出错';        } else {            callback(results);        }    });};module.exports = new Project();
 |