Quellcode durchsuchen

1、经测试中文能作为对象属性名,于是:计算基数也加入预编译。
2、用预编译取代getText()、setText()转换显示方法,速度更快。
3、预编译结构调整,使结构更合理。

Chenshilong vor 7 Jahren
Ursprung
Commit
5a9e017e67

+ 32 - 16
public/calc_util.js

@@ -6,16 +6,20 @@
 
 let executeObj = {
     treeNode: null,
+    template: null,
+    calcBase: null,
+
     at: function(ID) {
         let me = executeObj,
             rst = 0;
-        rst = me.treeNode.data.calcTemplate.compiledTemplate[ID].unitFee;
+        rst = me.template.compiledCalcItems[ID].unitFee;
         rst = parseFloat(rst);
         return rst;
     },
     base: function(calcBaseName) {
         let me = executeObj, rst = 0,
-            base = getRationCalcBase(calcBaseName);
+            //base = getRationCalcBase(calcBaseName);
+            base = me.calcBase[calcBaseName];
 
         if (base != null) {
             let price = 0, tmpSum = 0;
@@ -33,18 +37,13 @@ let executeObj = {
         };
         return rst;
     }
-/*    factor: function(factorID) {
-        let me = executeObj;
-        let rst = 7.77;
-        return rst;
-    }*/
 };
 
 class Calculation {
     // 先编译公用的基础数据
-    compilePublics(feeRates, labourCoes, feeTypes){
+    compilePublics(feeRates, labourCoes, feeTypes, calcBases){
         let me = this;
-        let private_compile_feeFile = function() {
+        let private_compile_feeRateFile = function() {
             if (feeRates) {
                 me.compiledFeeRates = {};
                 for (let rate of feeRates) {
@@ -65,17 +64,29 @@ class Calculation {
                 me.compiledFeeTypes = {};
                 for (let ft of feeTypes) {
                     me.compiledFeeTypes[ft.type] = ft.name;
+                    me.compiledFeeTypes[ft.name] = ft.type;    // 中文预编译,可靠性有待验证
+                }
+            }
+        };
+        let private_compile_calcBase = function() {
+            if (calcBases) {
+                me.compiledCalcBases = {};
+                for (let cb of calcBases) {
+                    me.compiledCalcBases[cb.dispName] = cb;         // 中文预编译,可靠性有待验证
                 }
             }
         };
 
-        private_compile_feeFile();
+        private_compile_feeRateFile();
         private_compile_labourCoeFile();
         private_compile_feeType();
+        private_compile_calcBase();
+        me.compiledTemplates = {};
     };
 
     compileTemplate(template){
         let me = this;
+        me.compiledTemplates[template.ID] = template;
         template.hasCompiled = false;
         template.errs = [];
 
@@ -108,10 +119,10 @@ class Calculation {
             while (idx >= 0) {
                 let ID = private_extract_ID(item.expression, idx);
                 if (ID.length > 0) {
-                    let subItem = template.compiledTemplate[ID];
+                    let subItem = template.compiledCalcItems[ID];
                     if (subItem) {
                         if (subItem.ID !== item.ID) {
-                            private_parse_ref(subItem, template.compiledTemplate[ID + "_idx"]);
+                            private_parse_ref(subItem, template.compiledCalcItems[ID + "_idx"]);
                         } else {
                             template.errs.push("There exists the self refer ID: " + ID);
                         }
@@ -154,12 +165,12 @@ class Calculation {
 
         if (template && template.calcItems && template.calcItems.length > 0) {
             template.compiledSeq = [];
-            template.compiledTemplate = {};
+            template.compiledCalcItems = {};
 
             for (let i = 0; i < template.calcItems.length; i++) {
                 let item = template.calcItems[i];
-                template.compiledTemplate[item.ID] = item;
-                template.compiledTemplate[item.ID + "_idx"] = i;
+                template.compiledCalcItems[item.ID] = item;
+                template.compiledCalcItems[item.ID + "_idx"] = i;
             }
 
             for (let i = 0; i < template.calcItems.length; i++) {
@@ -176,11 +187,16 @@ class Calculation {
 
     calculate($treeNode){
         let me = this;
-        let template = $treeNode.data.calcTemplate;
+        let templateID = $treeNode.data.calcTemplateID;
+        if (!templateID) templateID = 1;
+        let template = me.compiledTemplates[templateID];
+        $treeNode.data.calcTemplate = template;
 
         if ($treeNode && template.hasCompiled) {
             let $CE = executeObj;
             $CE.treeNode = $treeNode;
+            $CE.template = template;
+            $CE.calcBase = me.compiledCalcBases;
 
             if (!$treeNode.fees) {
                 $treeNode.fees = [];

+ 2 - 2
server.js

@@ -3,8 +3,8 @@ let express = require('express');
 let config = require("./config/config.js");
 let fileUtils = require("./modules/common/fileUtils");
 let dbm = require("./config/db/db_manager");
-config.setToLocalDb();
-// config.setToQaDb();
+///config.setToLocalDb();
+config.setToQaDb();
 
 let path = require('path');
 let session = require('express-session');

+ 3 - 4
test/tmp_data/test_ration_calc/ration_calc_base.js

@@ -85,13 +85,12 @@ let rationCalcBase = [
     }
 ];
 
+// 该方法暂时不用,已使用中文预编译的方式代替,但可靠性有待验证,若有问题再用回来。
 function getRationCalcBase(dispName){
-    let rst = null;
     for (let base of rationCalcBase) {
        if (base.dispName == dispName) {
-           rst = base;
-           break;
+           return base;
        };
     }
-    return rst;
+    return null;
 };

+ 2 - 3
web/building_saas/main/js/models/calc_program.js

@@ -3599,20 +3599,19 @@ class CalcProgram {
     };
 
     compileAllTemps(){
-        this.calc.compilePublics(calcFeeRates, calcLabourCoes, feeType);
+        this.calc.compilePublics(calcFeeRates, calcLabourCoes, feeType, rationCalcBase);
         for (let calcTemplate of calcTemplates){
             this.calc.compileTemplate(calcTemplate);
         };
     };
 
     compile(calcTemplate){
-        this.calc.compilePublics(calcFeeRates, calcLabourCoes, feeType);
+        //this.calc.compilePublics(calcFeeRates, calcLabourCoes, feeType, rationCalcBase);
         this.calc.compileTemplate(calcTemplate);
     };
 
     calculate(treeNode){
         treeNode.data.gljList = this.project.ration_glj.getGljArrByRation(treeNode.data.ID);
-        treeNode.data.calcTemplate = calcTemplates[0];  // AAAAAA = getCalcTemplate($RATION.calcTemplateID);
         this.calc.calculate(treeNode);
     };
 }

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

@@ -229,7 +229,7 @@ let calcProgramObj = {
     initSheet: function (sheet) {
         var me = this;
         me.sheet = sheet;
-        sheetCommonObj.initSheet(me.sheet, me.setting, 20);
+        sheetCommonObj.initSheet(me.sheet, me.setting, 1);
     },
 
     showData: function (treeNode) {

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

@@ -62,7 +62,7 @@ $("#linkJSCX").click(function(){        // 计算程序
     let sel = projectObj.mainController.tree.selected;
 
     if (sel.sourceType === projectObj.project.Bills.getSourceType() || sel.sourceType === projectObj.project.Ration.getSourceType()) {
-        calcProgramObj.showData(node);
+        calcProgramObj.showData(sel);
     } else {
         calcProgramObj.clearData();
     };