Jelajahi Sumber

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

zhangweicheng 7 tahun lalu
induk
melakukan
76996b135d

+ 205 - 197
test/calculation/test_analyzer.js

@@ -2,203 +2,204 @@
  * Created by CSL on 2017-09-01.
  */
 var test = require('tape');
-import analyzer from '../../public/calc_util';
+import analyzer from '../../web/building_saas/main/js/models/calc_program';
 
-test('解析测试', function(t){
-    let calcTemplate = {
-        ID: 1,
-        name: "建筑工程",
-        calcItems: [
-            {
-                ID: "101",
-                code: "1",
-                name: "基价直接工程费",
-                fieldName: "baseDirect",
-                dispExpr: "F2+F5+F6+F10",
-                expression: "@('2') + @('5') + @('6') + @('10')",
-                compiledExpr: "",
-                statement: "基价人工费+基价材料费+基价机械费+未计价材料费"
-            },
-            {
-                ID: "102",
-                code: "1.1",
-                name: "基价人工费",
-                fieldName: "baseLabour",
-                dispExpr: "F3+F4",
-                expression: "@('3') + @('4')",
-                compiledExpr: "",
-                statement: "定额基价人工费+定额人工单价(基价)调整"
-            },
-            {
-                ID: "103",
-                code: "1.1.1",
-                name: "定额基价人工费",
-                fieldName: "rationBaseLabour",
-                dispExpr: "[定额基价人工费]",
-                expression: "base('定额基价人工费').toFixed(2)",
-                compiledExpr: "",
-                statement: "定额基价人工费"
-            },
-            {
-                ID: "104",
-                code: "1.1.2",
-                name: "定额人工单价(基价)调整",
-                fieldName: "rationLabourFixed",
-                dispExpr: "F3*(L-1)",
-                expression: "@('3') * (L-1)",
-                labourCoeID: 22,
-                compiledExpr: "",
-                statement: "定额基价人工费*[定额人工单价(基价)调整系数-1]",
-                memo: "渝建发(2013)51"
-            },
-            {
-                ID: "105",
-                code: "1.2",
-                name: "基价材料费",
-                fieldName: "baseMaterial",
-                dispExpr: "[定额基价材料费]",
-                expression: "base('定额基价材料费')",
-                compiledExpr: "",
-                statement: "定额基价材料费"
-            },
-            {
-                ID: "106",
-                code: "1.3",
-                name: "基价机械费",
-                fieldName: "baseMachine",
-                dispExpr: "F7+F9",
-                expression: "@('7') + @('9')",
-                compiledExpr: "",
-                statement: "定额基价机械费+定额机上人工单价(基价)调整"
-            },
-            {
-                ID: "107",
-                code: "1.3.1",
-                name: "定额基价机械费",
-                fieldName: "rationBaseMachine",
-                dispExpr: "[定额基价机械费]",
-                expression: "base('定额基价机械费')",
-                compiledExpr: "",
-                statement: "定额基价机械费"
-            },
-            {
-                ID: "108",
-                code: "1.3.1.1",
-                name: "其中:定额基价机上人工费",
-                fieldName: "rationBaseMachineLabour",
-                dispExpr: "[定额基价机上人工费]",
-                expression: "base('定额基价机上人工费')",
-                compiledExpr: "",
-                statement: "定额基价机上人工费"
-            },
-            {
-                ID: "109",
-                code: "1.3.2",
-                name: "定额机上人工单价(基价)调整",
-                fieldName: "rationBaseMachineLabourFixed",
-                dispExpr: "F8*(L-1)",
-                expression: "@('8') * (L-1)",
-                labourCoeID: 24,
-                compiledExpr: "",
-                statement: "定额基价机上人工费*[定额机上人工单价(基价)调整系数-1]"
-            },
-            {
-                ID: "110",
-                code: "1.4",
-                name: "未计价材料费",
-                fieldName: "unPriceMaterial",
-                dispExpr: "[主材费]+[设备费]",
-                expression: "base('主材费') + base('设备费')",
-                compiledExpr: "",
-                statement: "主材费+设备费"
-            },
-            {
-                ID: "111",
-                code: "2",
-                name: "企业管理费",
-                fieldName: "manageFee",
-                dispExpr: "F3+F5+F7",
-                feeRateID: 101,
-                expression: "@('3') + @('5') + @('7')",
-                compiledExpr: "",
-                statement: "定额基价人工费",
-                memo: "渝建发[2014]27号"
-            },
-            {
-                ID: "112",
-                code: "3",
-                name: "利润",
-                fieldName: "profit",
-                dispExpr: "F3+F5+F7",
-                feeRateID: 301,
-                expression: "@('3') + @('5') + @('7')",
-                compiledExpr: "",
-                statement: "定额基价人工费"
-            },
-            {
-                ID: "113",
-                code: "4",
-                name: "风险因素",
-                fieldName: "risk",
-                dispExpr: "F3+F5+F7",
-                feeRateID: 701,
-                expression: "@('3') + @('5') + @('7')",
-                compiledExpr: "",
-                statement: "定额基价人工费",
-                memo: "同定额包干费"
-            },
-            {
-                ID: "114",
-                code: "5",
-                name: "人材机价差",
-                fieldName: "lmmDiff",
-                dispExpr: "F15+F16+F17",
-                expression: "@('15') + @('16') + @('17')",
-                compiledExpr: "",
-                statement: "人工费价差+材料费价差+机械费价差"
-            },
-            {
-                ID: "115",
-                code: "5.1",
-                name: "人工费价差",
-                fieldName: "labourDiff",
-                dispExpr: "[人工费价差]",
-                expression: "base('市场价格人工费') - base('定额基价人工费(调整后)')",
-                compiledExpr: "",
-                statement: "市场价格人工费-调整后的定额人工费(基价)"
-            },
-            {
-                ID: "116",
-                code: "5.2",
-                name: "材料费价差",
-                fieldName: "materialDiff",
-                dispExpr: "[材料费价差]",
-                expression: "base('市场价格材料费') - base('定额基价材料费(调整后)')",
-                compiledExpr: "",
-                statement: "市场价格材料费-定额基价材料费"
-            },
-            {
-                ID: "117",
-                code: "5.3",
-                name: "机械费价差",
-                fieldName: "machineDiff",
-                dispExpr: "[机械费价差]",
-                expression: "base('市场价格机械费') - base('定额基价机械费(调整后)')",
-                compiledExpr: "",
-                statement: "市场价格机械费-调整后的定额基价机械费(基价)"
-            },
-            {
-                ID: "118",
-                code: "6",
-                name: "综合单价",
-                fieldName: "common",
-                dispExpr: "F1+F11+F12+F13+F14",
-                expression: "@('1') + @('11') + @('12') + @('13') + @('14')",
-                compiledExpr: "",
-                statement: "基价直接工程费+企业管理费+利润+风险因素+人材机价差"
-            }
-        ]
-    };
+let calcTemplate = {
+    ID: 1,
+    name: "建筑工程",
+    calcItems: [
+        {
+            ID: "101",
+            code: "1",
+            name: "基价直接工程费",
+            fieldName: "baseDirect",
+            dispExpr: "F2+F5+F6+F10",
+            expression: "@('2') + @('5') + @('6') + @('10')",
+            compiledExpr: "",
+            statement: "基价人工费+基价材料费+基价机械费+未计价材料费"
+        },
+        {
+            ID: "102",
+            code: "1.1",
+            name: "基价人工费",
+            fieldName: "baseLabour",
+            dispExpr: "F3+F4",
+            expression: "@('3') + @('4')",
+            compiledExpr: "",
+            statement: "定额基价人工费+定额人工单价(基价)调整"
+        },
+        {
+            ID: "103",
+            code: "1.1.1",
+            name: "定额基价人工费",
+            fieldName: "rationBaseLabour",
+            dispExpr: "[定额基价人工费]",
+            expression: "base('定额基价人工费').toFixed(2)",
+            compiledExpr: "",
+            statement: "定额基价人工费"
+        },
+        {
+            ID: "104",
+            code: "1.1.2",
+            name: "定额人工单价(基价)调整",
+            fieldName: "rationLabourFixed",
+            dispExpr: "F3*(L-1)",
+            expression: "@('3') * (L-1)",
+            labourCoeID: 22,
+            compiledExpr: "",
+            statement: "定额基价人工费*[定额人工单价(基价)调整系数-1]",
+            memo: "渝建发(2013)51"
+        },
+        {
+            ID: "105",
+            code: "1.2",
+            name: "基价材料费",
+            fieldName: "baseMaterial",
+            dispExpr: "[定额基价材料费]",
+            expression: "base('定额基价材料费')",
+            compiledExpr: "",
+            statement: "定额基价材料费"
+        },
+        {
+            ID: "106",
+            code: "1.3",
+            name: "基价机械费",
+            fieldName: "baseMachine",
+            dispExpr: "F7+F9",
+            expression: "@('7') + @('9')",
+            compiledExpr: "",
+            statement: "定额基价机械费+定额机上人工单价(基价)调整"
+        },
+        {
+            ID: "107",
+            code: "1.3.1",
+            name: "定额基价机械费",
+            fieldName: "rationBaseMachine",
+            dispExpr: "[定额基价机械费]",
+            expression: "base('定额基价机械费')",
+            compiledExpr: "",
+            statement: "定额基价机械费"
+        },
+        {
+            ID: "108",
+            code: "1.3.1.1",
+            name: "其中:定额基价机上人工费",
+            fieldName: "rationBaseMachineLabour",
+            dispExpr: "[定额基价机上人工费]",
+            expression: "base('定额基价机上人工费')",
+            compiledExpr: "",
+            statement: "定额基价机上人工费"
+        },
+        {
+            ID: "109",
+            code: "1.3.2",
+            name: "定额机上人工单价(基价)调整",
+            fieldName: "rationBaseMachineLabourFixed",
+            dispExpr: "F8*(L-1)",
+            expression: "@('8') * (L-1)",
+            labourCoeID: 24,
+            compiledExpr: "",
+            statement: "定额基价机上人工费*[定额机上人工单价(基价)调整系数-1]"
+        },
+        {
+            ID: "110",
+            code: "1.4",
+            name: "未计价材料费",
+            fieldName: "unPriceMaterial",
+            dispExpr: "[主材费]+[设备费]",
+            expression: "base('主材费') + base('设备费')",
+            compiledExpr: "",
+            statement: "主材费+设备费"
+        },
+        {
+            ID: "111",
+            code: "2",
+            name: "企业管理费",
+            fieldName: "manageFee",
+            dispExpr: "F3+F5+F7",
+            feeRateID: 101,
+            expression: "@('3') + @('5') + @('7')",
+            compiledExpr: "",
+            statement: "定额基价人工费",
+            memo: "渝建发[2014]27号"
+        },
+        {
+            ID: "112",
+            code: "3",
+            name: "利润",
+            fieldName: "profit",
+            dispExpr: "F3+F5+F7",
+            feeRateID: 301,
+            expression: "@('3') + @('5') + @('7')",
+            compiledExpr: "",
+            statement: "定额基价人工费"
+        },
+        {
+            ID: "113",
+            code: "4",
+            name: "风险因素",
+            fieldName: "risk",
+            dispExpr: "F3+F5+F7",
+            feeRateID: 701,
+            expression: "@('3') + @('5') + @('7')",
+            compiledExpr: "",
+            statement: "定额基价人工费",
+            memo: "同定额包干费"
+        },
+        {
+            ID: "114",
+            code: "5",
+            name: "人材机价差",
+            fieldName: "lmmDiff",
+            dispExpr: "F15+F16+F17",
+            expression: "@('15') + @('16') + @('17')",
+            compiledExpr: "",
+            statement: "人工费价差+材料费价差+机械费价差"
+        },
+        {
+            ID: "115",
+            code: "5.1",
+            name: "人工费价差",
+            fieldName: "labourDiff",
+            dispExpr: "[人工费价差]",
+            expression: "base('市场价格人工费') - base('定额基价人工费(调整后)')",
+            compiledExpr: "",
+            statement: "市场价格人工费-调整后的定额人工费(基价)"
+        },
+        {
+            ID: "116",
+            code: "5.2",
+            name: "材料费价差",
+            fieldName: "materialDiff",
+            dispExpr: "[材料费价差]",
+            expression: "base('市场价格材料费') - base('定额基价材料费(调整后)')",
+            compiledExpr: "",
+            statement: "市场价格材料费-定额基价材料费"
+        },
+        {
+            ID: "117",
+            code: "5.3",
+            name: "机械费价差",
+            fieldName: "machineDiff",
+            dispExpr: "[机械费价差]",
+            expression: "base('市场价格机械费') - base('定额基价机械费(调整后)')",
+            compiledExpr: "",
+            statement: "市场价格机械费-调整后的定额基价机械费(基价)"
+        },
+        {
+            ID: "118",
+            code: "6",
+            name: "综合单价",
+            fieldName: "common",
+            dispExpr: "F1+F11+F12+F13+F14",
+            expression: "@('1') + @('11') + @('12') + @('13') + @('14')",
+            compiledExpr: "",
+            statement: "基价直接工程费+企业管理费+利润+风险因素+人材机价差"
+        }
+    ]
+};
+
+/*test('解析测试', function(t){
     let calcItem = {dispExpr: "12 +[人工费]*1.2+f13+ (F6+ f10) +F16+[人工费] + f6+[材料费]"};
     let target = "12+base('人工费')*1.2+@('113')+(@('106')+@('110'))+@('116')+base('人工费')+@('106')+base('材料费')";
     let rst = analyzer.analyzeUserExpr(calcTemplate, calcItem);
@@ -207,4 +208,11 @@ test('解析测试', function(t){
     console.log(calcItem.expression);
     t.equal(calcItem.expression, target);
     t.end();
-});
+});*/
+
+analyzer.tempCalcItem = calcTemplate;
+let expr = "F2+F5+F6+F10";
+let arr = analyzer.getFArr(expr);
+console.log(JSON.stringify(arr));
+let id = analyzer.getFID('F10');
+console.log(JSON.stringify(id));

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

@@ -723,7 +723,7 @@ let analyzer = {
         return arr ? arr : [];
     },
     getFID: function (FName) {          // F3、F22
-        let me = this;
+        let me = analyzer;
         let idx = FName.slice(1) - 1;
         let id = me.calcTemplate.calcItems[idx] ? me.calcTemplate.calcItems[idx].ID : null;
         return id;
@@ -733,6 +733,11 @@ let analyzer = {
         let idx = FName.slice(1) - 1;
         return me.calcTemplate.calcItems[idx];
     },
+    getBaseArr: function (expr) {
+        let pattBase = new RegExp(/\[[\u4E00-\u9FA5]+\]/gi);
+        let arrBase = expr.match(pattBase);
+        return arrBase ? arrBase : [];
+    },
     isCycleCalc: function (expr) {     // @5+@6  这里已经是ID引用
         let me = this;
         
@@ -782,7 +787,7 @@ let analyzer = {
         for (let base of arrBase){
             let baseName = base.slice(1, -1);
             if (!rationCalcBases[baseName]){
-                alert('定额基数 [' + baseName + '] 末定义!');
+                // alert('定额基数 [' + baseName + '] 末定义!');
                 return false;
             }
         };
@@ -819,6 +824,32 @@ let analyzer = {
             return true;
         }else
             return false;
+    },
+    dispExprToExpression: function (calcTemplate, calcItem, dispExpr) {
+        let me = this;
+        me.calcTemplate = calcTemplate;
+        let expr = me.standard(dispExpr);
+        calcItem.dispExpr = expr;
+        let fArr = me.getFArr(expr);
+        let IDArr = fArr.map(me.getFID);
+        for (var i = 0; i < fArr.length; i++) {
+            let patt = new RegExp(fArr[i], 'g');
+            let val = `@('${IDArr[i]}')`;
+            expr = expr.replace(patt, val);
+        };
+
+/*        let bArr = me.getBaseArr(expr);
+        for (var i = 0; i < bArr.length; i++) {
+            let bPatt = new RegExp(bArr[i], 'g');
+            let val = bArr[i].slice(1, -1);
+            val = `base('${val}')`;
+            expr = expr.replace(bPatt, val);
+        };*/
+        expr = expr.replace(/\[/g, "base('");
+        expr = expr.replace(/\]/g, "')");
+
+        calcItem.expression = expr;
+        return calcItem.expression;
     }
 };
 
@@ -1514,4 +1545,6 @@ class CalcProgram {
         baseNodes.push(calcTools.getNodeByFlag(fixedFlag.CHARGE));
         return me.getTotalFee(baseNodes, excludeNodes);
     };
-};
+};
+
+// export default analyzer;

+ 8 - 0
web/building_saas/main/js/views/calc_program_manage.js

@@ -61,6 +61,7 @@ let calcProgramManage = {
         me.mainSpread.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onMainEnterCell);
         me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.CellChanged, me.onDetailCellChanged);
         me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.EditEnded, me.onDetailEditEnded);
+        me.detailSpread.getSheet(0).bind(GC.Spread.Sheets.Events.EnterCell, me.onEnterCell);
         let mSheet = me.mainSpread.getSheet(0);
         sheetCommonObj.showData(mSheet, me.mainSetting, me.datas);
 
@@ -114,6 +115,13 @@ let calcProgramManage = {
             });
         }
     },
+    onEnterCell: function (sender, args) {
+/*        let t = calcProgramManage.getSelectionInfo().template;
+        let c = calcProgramManage.getSelectionInfo().calcItem;
+        analyzer.dispExprToExpression(t, c, c.dispExpr);
+        let e = c.dispExpr + '   ' + c.expression;
+        projectObj.testDisplay('', e);*/
+    },
     saveCalcItem: function (data,callback) {//data
         let me = this;
         $.ajax({

+ 6 - 5
web/building_saas/main/js/views/project_view.js

@@ -14,7 +14,9 @@ var projectObj = {
     },
     // CSL, 2018-02-09 用于测试显示。使用示例:projectObj.testDisplay(‘总额’, 100);
     testDisplay: function (caption, value) {
-        let s = `&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ ${caption}: ${value} ]`;
+        let c = '';
+        if (caption) c = caption + ': ';
+        let s = `&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${c}${value}`;
         $('#testDisplay').html(s);
     },
     treeSelectedChanged: function (node) {
@@ -47,10 +49,9 @@ var projectObj = {
 
         // 基数
         // node.data.isSubcontract = true;
-        node.data.gljList = project.ration_glj.getGljArrByRation(node.data.ID);
-        let bname = '甲供定额基价材料费';
-        projectObj.testDisplay(bname, rationCalcBases[bname](node));
-
+        // node.data.gljList = project.ration_glj.getGljArrByRation(node.data.ID);
+        // let bname = '甲供定额基价材料费';
+        // projectObj.testDisplay(bname, rationCalcBases[bname](node));
     },
     refreshBaseActn: function (tree) {
         let setButtonValid = function (valid, btn) {