Browse Source

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

MaiXinRong 7 years ago
parent
commit
3b40bb9905

+ 89 - 0
modules/main/facade/calc_program_facade.js

@@ -0,0 +1,89 @@
+/**
+ * Created by CSL on 2017-10-22.
+ */
+
+const uuidV1 = require('uuid/v1');
+let logger = require("../../../logs/log_helper").logger;
+let mongoose = require('mongoose');
+let stdCalcProgramsModel = mongoose.model('std_calc_programs');
+let projectCalcProgramsModel = mongoose.model('calc_programs');
+let EngineeringLibModel = require("../../users/models/engineering_lib_model");
+let _=require("lodash");
+let consts = require('../models/project_consts');
+let projectConsts = consts.projectConst;
+
+module.exports = {
+    newProjectCalcProgramFile: newProjectCalcProgramFile,
+    getProjectCalcProgramFile: getProjectCalcProgramFile,
+    getStdCalcProgramFile: getStdCalcProgramFile,
+    getData: getData,
+    save: save
+};
+
+async function newProjectCalcProgramFile(data) {
+    logger.info(`Create new CalcProgram file for project : ${data.ID}`);
+    let rst = null;
+    let egnrID = data.property.engineering_id;
+    let egnrModel = new EngineeringLibModel();
+    let egnr = await egnrModel.getEngineering(egnrID);
+    if(!egnr) return rst;
+    let valid_CP_libs = egnr._doc.calcProgram_lib;
+    if (valid_CP_libs == undefined  || valid_CP_libs.length == 0) return rst;
+
+    // 绑定多个计算程序标准文件时,默认取第一个作为标准模板。
+    let stdCP = await getStdCalcProgramFile(valid_CP_libs[0].id);
+    let doc={
+        ID: uuidV1(),
+        projectID: data.ID,
+        name: data.name,
+        libID: stdCP.ID,
+        libName: stdCP.libName,
+        templates: stdCP.templates
+    };
+    await projectCalcProgramsModel.create(doc);
+    rst = {ID: doc.ID, name: doc.name};
+    return rst;
+};
+
+async function getProjectCalcProgramFile(ID) {
+    let projLC = await projectCalcProgramsModel.findOne({ID:ID});
+    return projLC;
+};
+
+async function getStdCalcProgramFile(libID) {
+    let stdLC = await stdCalcProgramsModel.findOne({ID:libID});
+    return stdLC;
+};
+
+// 统一的 getData() 方法供project调用
+function getData(projectID, callback) {
+    projectCalcProgramsModel.findOne({projectID: projectID}, '-_id', function (err, datas) {
+        if (!err) {
+            // 旧项目没有计算程序文件,默认给它生成一个。
+            if (!datas) {
+                logger.info(`Create a calcProgram file for old project : ${projectID}`);
+                getStdCalcProgramFile(1).then(function (stdCP) {
+                    let doc = {
+                        ID: uuidV1(),
+                        projectID: projectID,
+                        name: '[旧项目补计算程序文件]',
+                        libID: stdCP.ID,
+                        libName: stdCP.libName,
+                        templates: stdCP.templates
+                    };
+                    projectCalcProgramsModel.create(doc);
+                    callback(0, projectConsts.CALC_PROGRAM, stdCP);
+                });
+            } else {
+                callback(0, projectConsts.CALC_PROGRAM, datas);
+            };
+        } else {
+            callback(1, projectConsts.CALC_PROGRAM, null);
+        };
+    });
+};
+
+// 统一的 save() 方法供project调用
+function save (user_id, datas, callback) {
+    projectCalcProgramsModel.update({"projectID": 553}, {"libName":"goo—test"}, callback(null, {data: 'test'}));
+}

+ 44 - 0
modules/main/models/calc_program_model.js

@@ -0,0 +1,44 @@
+/**
+ * Created by CSL on 2017-10-22.
+ */
+let mongoose = require('mongoose');
+let Schema = mongoose.Schema;
+
+let calcItemSchema = new Schema({
+    ID: Number,
+    code: String,
+    name: String,
+    fieldName: String,
+    dispExpr: String,
+    expression: String,
+    compiledExpr: String,
+    statement: String,
+    feeRateID: Number,
+    feeRate: Number,
+    labourCoeID: Number
+},{versionKey:false, _id: false});
+
+let templateSchema = new Schema({
+    ID: Number,
+    name: String,
+    calcItems: [calcItemSchema]
+},{versionKey:false, _id: false});
+
+let stdCalcPrograms = new Schema({
+    ID: Number,
+    region: String,
+    libName: String,
+    templates: [templateSchema]
+},{versionKey:false, _id: false});
+
+let projectCalcPrograms = new Schema({
+    ID: String,
+    projectID: Number,
+    name: String,
+    libID: Number,
+    libName: String,
+    templates: [templateSchema]
+},{versionKey:false});
+
+mongoose.model('std_calc_programs', stdCalcPrograms, 'std_calc_programs');
+mongoose.model('calc_programs', projectCalcPrograms, 'calc_programs');

+ 4 - 2
modules/main/models/project.js

@@ -12,7 +12,8 @@ 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_data = require('../facade/labour_coe_facade');
+var labour_coe_facade = require('../facade/labour_coe_facade');
+var calc_program_facade = require('../facade/calc_program_facade');
 var consts = require('./project_consts');
 var projectConsts = consts.projectConst;
 var async = require("async");
@@ -30,7 +31,8 @@ moduleMap[projCounter.collectionName] = projCounter;
 moduleMap[projSetting.collectionName] = projSetting;
 moduleMap[volumePriceData.collectionName] = volumePriceData;
 moduleMap[projectConsts.FEERATE] = fee_rate_data;
-moduleMap[projectConsts.LABOUR_COE] = labour_coe_data;
+moduleMap[projectConsts.LABOUR_COE] = labour_coe_facade;
+moduleMap[projectConsts.CALC_PROGRAM] = calc_program_facade;
 
 var Project = function (){};
 

+ 2 - 1
modules/main/models/project_consts.js

@@ -15,7 +15,8 @@ var projectConst = {
     PROPERTIES: 'properties',
     VOLUMEPRICE: 'volume_price',
     FEERATE:'feeRate',
-    LABOUR_COE:'labour_coe'
+    LABOUR_COE:'labour_coe',
+    CALC_PROGRAM:'calc_program'
 };
 
 var commonConst = {

+ 1 - 0
server.js

@@ -30,6 +30,7 @@ fileUtils.getGlobbedFiles('./modules/reports/models/*.js').forEach(function(mode
 
 // 引入人工系数模块
 require('./modules/main/models/labour_coe_model');
+require('./modules/main/models/calc_program_model');
 
 //config.setupCache();
 let cfgCacheUtil = require("./config/cacheCfg");

+ 3 - 2
web/building_saas/main/html/main.html

@@ -671,8 +671,7 @@
     <script src="/public/web/uuid.js"></script>
 
     <script type="text/javascript" src="/public/web/sheet/sheet_common.js"></script>
-    <script type="text/javascript" src="/web/building_saas/main/js/models/calc_program.js"></script>
-    <script type="text/javascript" src="/web/building_saas/main/js/views/calc_program_manage.js"></script>
+
 
     <!-- JS. -->
     <script src="/lib/popper/popper.min.js"></script>
@@ -711,6 +710,8 @@
     <script type="text/javascript" src="/web/building_saas/main/js/models/ration_ass.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/models/volume_price.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/models/labour_coe.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/calc_program.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/calc_program_manage.js"></script>
 
     <script type="text/javascript" src="/public/web/id_tree.js"></script>
     <script type="text/javascript" src="/test/tmp_data/test_ration_calc/ration_calc_base.js"></script>

File diff suppressed because it is too large
+ 24 - 3598
web/building_saas/main/js/models/calc_program.js


+ 2 - 1
web/building_saas/main/js/models/main_consts.js

@@ -13,5 +13,6 @@ const ModuleNames = {
     quantity_detail:'quantity_detail',
     volume_price: 'volume_price',
     projectGLJ: 'project_glj',
-    labour_coe: 'labour_coe'
+    labour_coe: 'labour_coe',
+    calc_program: 'calc_program'
 };

+ 2 - 1
web/building_saas/main/js/models/project.js

@@ -87,7 +87,8 @@ var PROJECT = {
                     totalFee: 2
                 }
             };
-            this.LabourCoe = new LabourCoe(this);
+            this.labourCoe = new LabourCoe(this);
+            this.calcProgram = new CalcProgram(this);
 
             this.masterField = {ration: 'billsItemID', volumePrice: 'billsItemID'};
         };

+ 1 - 1
web/building_saas/main/js/views/project_property_labour_coe_view.js

@@ -93,7 +93,7 @@ let labourCoeView = {
 
     showData(){
         let me = this;
-        let datas = projectObj.project.LabourCoe.datas !== null ? projectObj.project.LabourCoe.datas.coes : [];
+        let datas = projectObj.project.labourCoe.datas !== null ? projectObj.project.labourCoe.datas.coes : [];
         me.init();
         me.buildSheet();
         me.loadData(datas);

+ 0 - 1
web/building_saas/main/js/views/project_view.js

@@ -317,7 +317,6 @@ var projectObj = {
                     }
                 });
 
-                that.project.calcProgram = new CalcProgram(that.project);
                 that.project.calcProgram.compileAllTemps();
 
                 that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), that.project.projSetting.mainGridSetting);