浏览代码

算法大调整:单核换成多核("核"指一套完整的计算规则)。

Chenshilong 7 年之前
父节点
当前提交
57e929648f

+ 18 - 20
public/calc_util.js

@@ -4,12 +4,11 @@
  */
  */
 
 
 let executeObj = {
 let executeObj = {
-    calculation : null,
     ration: null,
     ration: null,
     at: function(ID) {
     at: function(ID) {
         let me = executeObj,
         let me = executeObj,
             rst = 0;
             rst = 0;
-        rst = me.calculation.compileAssistantObj[ID].unitFee;
+        rst = me.ration.data.calcTemplate.compiledTemplate[ID].unitFee;
         rst = parseFloat(rst);
         rst = parseFloat(rst);
         return rst;
         return rst;
     },
     },
@@ -50,8 +49,8 @@ class Calculation {
 
 
     compile(template, feeRates, labourCoes){
     compile(template, feeRates, labourCoes){
         let me = this;
         let me = this;
-        me.hasCompiled = false;
-        me.errs = [];
+        template.hasCompiled = false;
+        template.errs = [];
 
 
         let private_extract_ID = function(str, idx){
         let private_extract_ID = function(str, idx){
             let rst = '', lBracket = 0, rBracket = 0, firstIdx = idx, lastIdx = 0;
             let rst = '', lBracket = 0, rBracket = 0, firstIdx = idx, lastIdx = 0;
@@ -82,15 +81,15 @@ class Calculation {
             while (idx >= 0) {
             while (idx >= 0) {
                 let ID = private_extract_ID(item.expression, idx);
                 let ID = private_extract_ID(item.expression, idx);
                 if (ID.length > 0) {
                 if (ID.length > 0) {
-                    let subItem = me.compileAssistantObj[ID];
+                    let subItem = template.compiledTemplate[ID];
                     if (subItem) {
                     if (subItem) {
                         if (subItem.ID !== item.ID) {
                         if (subItem.ID !== item.ID) {
-                            private_parse_ref(subItem, me.compileAssistantObj[ID + "_idx"]);
+                            private_parse_ref(subItem, template.compiledTemplate[ID + "_idx"]);
                         } else {
                         } else {
-                            me.errs.push("There exists the self refer ID: " + ID);
+                            template.errs.push("There exists the self refer ID: " + ID);
                         }
                         }
                     } else {
                     } else {
-                        me.errs.push("There exists the invalid ID by which could not find the item: " + ID);
+                        template.errs.push("There exists the invalid ID by which could not find the item: " + ID);
                         console.log('invalid ID: ' + ID);
                         console.log('invalid ID: ' + ID);
                     }
                     }
                 }
                 }
@@ -127,7 +126,6 @@ class Calculation {
                 }
                 }
             }
             }
         };
         };
-
         let private_compile_labourCoeFile = function() {
         let private_compile_labourCoeFile = function() {
             if (labourCoes) {
             if (labourCoes) {
                 me.compiledLabourCoes = {};
                 me.compiledLabourCoes = {};
@@ -139,41 +137,41 @@ class Calculation {
 
 
         if (template && template.calcItems && template.calcItems.length > 0) {
         if (template && template.calcItems && template.calcItems.length > 0) {
             template.compiledSeq = [];
             template.compiledSeq = [];
-            me.compileAssistantObj = {};
+            template.compiledTemplate = {};
             //1. first round -> prepare
             //1. first round -> prepare
             private_compile_feeFile();
             private_compile_feeFile();
             private_compile_labourCoeFile();
             private_compile_labourCoeFile();
             for (let i = 0; i < template.calcItems.length; i++) {
             for (let i = 0; i < template.calcItems.length; i++) {
                 let item = template.calcItems[i];
                 let item = template.calcItems[i];
-                me.compileAssistantObj[item.ID] = item;
-                me.compileAssistantObj[item.ID + "_idx"] = i;
+                template.compiledTemplate[item.ID] = item;
+                template.compiledTemplate[item.ID + "_idx"] = i;
             }
             }
             //2. second round -> go!
             //2. second round -> go!
             for (let i = 0; i < template.calcItems.length; i++) {
             for (let i = 0; i < template.calcItems.length; i++) {
                 private_setup_seq(template.calcItems[i], i);
                 private_setup_seq(template.calcItems[i], i);
             }
             }
-            if (me.errs.length == 0) {
+            if (template.errs.length == 0) {
                 private_compile_items();
                 private_compile_items();
-                if (me.errs.length == 0) me.hasCompiled = true;
+                template.hasCompiled = true;
             } else {
             } else {
-                console.log('errors: ' + me.errs.toString());
+                console.log('errors: ' + template.errs.toString());
             }
             }
         }
         }
     };
     };
+
     calculate($RATION){         // 参数$RATION也可以是清单
     calculate($RATION){         // 参数$RATION也可以是清单
         let me = this;
         let me = this;
-        if ($RATION && me.hasCompiled) {
+        let template = $RATION.data.calcTemplate;
+
+        if ($RATION && template.hasCompiled) {
             let $CE = executeObj;
             let $CE = executeObj;
             $CE.ration = $RATION;
             $CE.ration = $RATION;
-            $CE.calculation = me;
 
 
             if (!$RATION.fees) {
             if (!$RATION.fees) {
                 $RATION.fees = [];
                 $RATION.fees = [];
                 $RATION.feesIndex = {};
                 $RATION.feesIndex = {};
             };
             };
 
 
-            //let template = getCalcTemplate($RATION.CalcTemplateID);   // AAAAAA 通过定额获取计算规则
-            let template = calcTemplates[0];
             for (let idx of template.compiledSeq) {
             for (let idx of template.compiledSeq) {
                 let calcItem = template.calcItems[idx];
                 let calcItem = template.calcItems[idx];
 
 
@@ -184,7 +182,7 @@ class Calculation {
                     calcItem.feeRate = feeRate;
                     calcItem.feeRate = feeRate;
                 };
                 };
                 calcItem.unitFee = eval(calcItem.compiledExpr) * feeRate * 0.01;   // 如果eval()对清单树有影响,就换成小麦的Expression对象再试
                 calcItem.unitFee = eval(calcItem.compiledExpr) * feeRate * 0.01;   // 如果eval()对清单树有影响,就换成小麦的Expression对象再试
-                calcItem.totalFee = calcItem.unitFee * 3;     // AAAAA 测试值,因目前定额无数量(保存不上) $RATION.data.Quantity
+                calcItem.totalFee = calcItem.unitFee * 3;     // AAAAAA 测试值,因目前定额无数量(保存不上) $RATION.data.Quantity
 
 
                 // 费用同步到定额
                 // 费用同步到定额
                 // 引入小麦的字段检测后,快速切换定额出现计算卡顿现象,过多的循环造成。这里把她的代码拆出来,减少微循环。
                 // 引入小麦的字段检测后,快速切换定额出现计算卡顿现象,过多的循环造成。这里把她的代码拆出来,减少微循环。

+ 1 - 1
web/building_saas/main/js/models/ration_program.js

@@ -9,7 +9,6 @@ let calcTemplates = [
     {
     {
         ID: 1,
         ID: 1,
         name: "重庆2015",
         name: "重庆2015",
-        compiledSeq: [],
         calcItems: [
         calcItems: [
             {
             {
                 ID: "1",
                 ID: "1",
@@ -563,6 +562,7 @@ class RationProgram {
 
 
     calculate(ration){
     calculate(ration){
         ration.data.gljList = this.project.ration_glj.getGljArrByRation(ration.data.ID);
         ration.data.gljList = this.project.ration_glj.getGljArrByRation(ration.data.ID);
+        ration.data.calcTemplate = calcTemplates[0];  // AAAAAA = getCalcTemplate($RATION.calcTemplateID);
         this.calc.calculate(ration);
         this.calc.calculate(ration);
     };
     };
 }
 }

+ 1 - 3
web/building_saas/main/js/views/ration_calc_view.js

@@ -33,9 +33,7 @@ let rationCalcView = {
         var me = this;
         var me = this;
         me.ration = ration;
         me.ration = ration;
         projectObj.rationProgram.calculate(me.ration);
         projectObj.rationProgram.calculate(me.ration);
-
-        me.datas = calcTemplates[0].calcItems;   // AAAAAAAAA
-        //me.datas = getCalcTemplate(me.ration.CalcTemplateID);
+        me.datas = me.ration.data.calcTemplate.calcItems;
         sheetCommonObj.showData(me.sheet, me.setting, me.datas);
         sheetCommonObj.showData(me.sheet, me.setting, me.datas);
     },
     },