zhongzewei il y a 7 ans
Parent
commit
1d7c25321d

+ 1 - 0
modules/pm/facade/pm_facade.js

@@ -983,6 +983,7 @@ async function updateUsedList(userId, compilation) {
 async function copyCompleRationSection(userId, compilationId) {
     await sectionTreeDao.copyDataFromTemplate(userId, compilationId);
 }
+
 //拷贝补充人材机分类树
 async function copyCompleGljSection(userId, compilationId) {
     let templateData = await compleGljSectionTModel.find({compilationId: compilationId});

+ 12 - 0
web/building_saas/main/js/models/bills.js

@@ -911,6 +911,18 @@ var Bills = {
             return data;
         };
 
+        //取需要父项汇总需要用到的子项(固定清单材料(工程设备)暂估价比较特殊,不进行父项汇总)
+        bills.prototype.getGatherNodes = function (node) {
+            let rst = [];
+            for (let child of node.source.children) {
+                if (cbTools.isFlag(child.data) && child.data.flagsIndex.fixed.flag === fixedFlag.MATERIAL_PROVISIONAL) {
+                    continue;
+                }
+                rst.push(child);
+            }
+            return rst;
+        };
+
         return new bills(project);
     }
 };

+ 95 - 336
web/building_saas/main/js/models/calc_base.js

@@ -14,7 +14,7 @@ let cbTools = {
         return this.isDef(v) && !isNaN(v) && v !== Infinity;
     },
     isFlag: function (v) {
-        return this.isDef(v) && this.isDef(v.flagsIndex) && this.isDef(v.flagsIndex.fixed);
+        return this.isDef(v) && this.isDef(v.flagsIndex) && this.isDef(v.flagsIndex.fixed) && this.isDef(v.flagsIndex.fixed.flag);
     },
     returnV: function (v, r) {
         if(this.isDef(v)){
@@ -163,76 +163,9 @@ let cbTools = {
                     mapObj[figureClass][figure] = baseFigures[figure];
                 }
             }
-            /*if(filter.indexOf(baseFigures[figure]['base']) === -1){
-                mapObj['CONSTRUCTION_ORGANIZATION'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'QTXMF' && baseFigures[figure]['base'] !== 'SQGCZJ' && baseFigures[figure]['base'] !== 'AQWMSGZXF'){
-                mapObj['OTHER'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'GF' && baseFigures[figure]['base'] !== 'SQGCZJ' && baseFigures[figure]['base'] !== 'AQWMSGZXF'){
-                mapObj['CHARGE'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'SJ' && baseFigures[figure]['base'] !== 'SQGCZJ'){
-                mapObj['TAX'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'SQGCZJ'){
-                mapObj['ENGINEERINGCOST'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'SQGCZJ' && baseFigures[figure]['base'] !== 'AQWMSGZXF'){
-                mapObj['OTHERS'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] === 'SQGCZJ'){
-                mapObj['SAFETY_CONSTRUCTION'][figure] = baseFigures[figure];
-            }*/
         }
-       // mapObj['SAFETY_CONSTRUCTION'] = Object.assign(mapObj['SAFETY_CONSTRUCTION'], mapObj['CONSTRUCTION_ORGANIZATION']);
 
     },
-    /*setBaseFigureClass: function (baseFigures, mapObj) {
-        mapObj['CONSTRUCTION_ORGANIZATION'] = Object.create(null);
-        mapObj['SAFETY_CONSTRUCTION'] = Object.create(null);
-        mapObj['OTHER'] = Object.create(null);
-        mapObj['CHARGE'] = Object.create(null);
-        mapObj['TAX'] = Object.create(null);
-        mapObj['OTHERS'] = Object.create(null);
-        mapObj['ENGINEERINGCOST'] = Object.create(null);
-        let filter = ['CSXMF', 'ZZCSXMF', 'ZZCSXMDEJJZJGCF', 'ZZCSXMDEJJRGF', 'ZZCSXMDEJJCLF', 'ZZCSXMDEJJJXF', 'QTXMF', 'GF', 'SJ', 'SQGCZJ', 'AQWMSGZXF'];
-        let needFixedBillsClass = ['FBFX', 'CXSM', 'QTXM', 'GF', 'SJ'];
-        //不需要关联节点的、但是下挂在固定清单分类下的基数
-        let noneFixedBillsFigures = ['JZMJ'];
-        //安全文明施工专项费用只有税金和工程造价能用
-        for(let figure in baseFigures){
-            if(!noneFixedBillsFigures.includes(baseFigures[figure]['base'])){
-                //过滤相关清单固定行不存在的
-                if(needFixedBillsClass.includes(baseFigures[figure]['class']) && !baseFigures[figure]['fixedBill']){
-                    continue;
-                }
-            }
-            if(filter.indexOf(baseFigures[figure]['base']) === -1){
-                mapObj['CONSTRUCTION_ORGANIZATION'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'QTXMF' && baseFigures[figure]['base'] !== 'SQGCZJ' && baseFigures[figure]['base'] !== 'AQWMSGZXF'){
-                mapObj['OTHER'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'GF' && baseFigures[figure]['base'] !== 'SQGCZJ' && baseFigures[figure]['base'] !== 'AQWMSGZXF'){
-                mapObj['CHARGE'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'SJ' && baseFigures[figure]['base'] !== 'SQGCZJ'){
-                mapObj['TAX'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'SQGCZJ'){
-                mapObj['ENGINEERINGCOST'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] !== 'SQGCZJ' && baseFigures[figure]['base'] !== 'AQWMSGZXF'){
-                mapObj['OTHERS'][figure] = baseFigures[figure];
-            }
-            if(baseFigures[figure]['base'] === 'SQGCZJ'){
-                mapObj['SAFETY_CONSTRUCTION'][figure] = baseFigures[figure];
-            }
-        }
-        mapObj['SAFETY_CONSTRUCTION'] = Object.assign(mapObj['SAFETY_CONSTRUCTION'], mapObj['CONSTRUCTION_ORGANIZATION']);
-
-    },*/
     getFigure: function (node) {
         let calcBase = projectObj.project.calcBase;
         let parent = node.parent;
@@ -255,40 +188,6 @@ let cbTools = {
             return this.getFigure(parent);
         }
     },
-    /*getFigure: function (node) {
-        let calcBase = projectObj.project.calcBase;
-        let parent = node.parent;
-        if(this.isFlag(node.data) && (node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.SUB_ENGINERRING
-            || node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_TECH)){
-            return null;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION){
-            return calcBase.baseFigureClass.CONSTRUCTION_ORGANIZATION;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.SAFETY_CONSTRUCTION){
-            return calcBase.baseFigureClass.SAFETY_CONSTRUCTION;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.OTHER){
-            return calcBase.baseFigureClass.OTHER;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CHARGE){
-            return calcBase.baseFigureClass.CHARGE;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.TAX){
-            return calcBase.baseFigureClass.TAX;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.ENGINEERINGCOST){
-            return calcBase.baseFigureClass.ENGINEERINGCOST;
-        }
-        else {
-            if(!parent){
-                return calcBase.baseFigureClass.OTHERS;
-            }
-            else {
-                return this.getFigure(parent);
-            }
-        }
-    },*/
     getBaseBill: function (node) {
         let calcBase = projectObj.project.calcBase;
         let parent = node.parent;
@@ -346,30 +245,10 @@ let cbTools = {
                             }
                         }
                     }
-
-                    //税前工程造价算法用了分部分项、项目措施(已排除)、其他项目、规费里的底层价格,相当于引用了4条固定清单,特殊处理
-                   /* if(bases[i]['value'] === '税前工程造价'){
-                        let subEngineering = cbTools.findBill(calcBase.fixedFlag.SUB_ENGINERRING),
-                            other = cbTools.findBill(calcBase.fixedFlag.OTHER),
-                            charge = cbTools.findBill(calcBase.fixedFlag.CHARGE);
-                        if(subEngineering){
-                            block.push(subEngineering.ID);
-                        }
-                        if(other){
-                            block.push(other.ID);
-                        }
-                        if(charge){
-                            block.push(charge.ID);
-                        }
-                    }*/
                     else if(cbTools.isDef(calcBase.baseFigures[bases[i]['value']]['fixedBill'])){
                         block.push(calcBase.baseFigures[bases[i]['value']]['fixedBill']['bill']['ID']);
                     }
                 }
-               /* if(bases[i]['type'] === 'base' && cbTools.isDef(calcBase.baseFigures[bases[i]['value']])
-                    && cbTools.isDef(calcBase.baseFigures[bases[i]['value']]['fixedBill'])){
-                    block.push(calcBase.baseFigures[bases[i]['value']]['fixedBill']['bill']['ID']);
-                }*/
                 else if(bases[i]['type'] === 'id'){
                     let node = cbTools.getNodeByID(bases[i]['value']);
                     if(cbTools.isDef(node)){
@@ -446,89 +325,67 @@ let cbTools = {
         for (let node of nodes){
              if (node.data.calcBase.hasSubStr(sID)) return true;
         };
-    }
+    },
+    //获取清单节点的金额
+    //@param {Number}fixedFlag(清单固定行类别) {String}feeField(外层金额字段: common) {String}subFeeField(子金额字段: totalFee)
+    //@return {Number}
+    getBillsFee: function(fixedFlag, feeField, subFeeField) {
+        //固定清单类别与清单数据、关联基数的映射
+        let fixedBills = calcBase.fixedBills[fixedFlag];
+        if (this.isUnDef(fixedBills)) {
+            return 0;
+        }
+        let bills = fixedBills.bill;
+        if (this.isUnDef(bills)) {
+            return 0;
+        }
+        if (this.isUnDef(bills.feesIndex) || _.isEmpty(bills.feesIndex)) {
+            return 0;
+        }
+        return this.isDef(bills.feesIndex[feeField]) && this.isDef(bills.feesIndex[feeField][subFeeField]) ? bills.feesIndex[feeField][subFeeField] : 0;
+    },
 };
 
 let baseFigureTemplate = {
     'FBFXGCF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
+        let feeField = 'common',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     },
     'FBFXDEJJRGF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.labour) && cbTools.isDef(bill.feesIndex.labour[totalFeeType]) ? bill.feesIndex.labour[totalFeeType] : 0;
+        let feeField = 'labour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     },
     'FBFXDEJJCLF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.material) && cbTools.isDef(bill.feesIndex.material[totalFeeType]) ? bill.feesIndex.material[totalFeeType] : 0;
+        let feeField = 'material',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     },
     'FBFXDEJJJXF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.machine) && cbTools.isDef(bill.feesIndex.machine[totalFeeType]) ? bill.feesIndex.machine[totalFeeType] : 0;
+        let feeField = 'machine',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     },
     'FBFXTZRGF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.adjustLabour) && cbTools.isDef(bill.feesIndex.adjustLabour[totalFeeType]) ? bill.feesIndex.adjustLabour[totalFeeType] : 0;
+        let feeField = 'adjustLabour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     },
     'FBFXTZJSRGF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.adjustMachineLabour) && cbTools.isDef(bill.feesIndex.adjustMachineLabour[totalFeeType]) ? bill.feesIndex.adjustMachineLabour[totalFeeType] : 0;
+        let feeField = 'adjustMachineLabour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     },
     'FBFXZCF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.mainMaterial) && cbTools.isDef(bill.feesIndex.mainMaterial[totalFeeType]) ? bill.feesIndex.mainMaterial[totalFeeType] : 0;
+        let feeField = 'mainMaterial',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     },
     'FBFXSBF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.equipment) && cbTools.isDef(bill.feesIndex.equipment[totalFeeType]) ? bill.feesIndex.equipment[totalFeeType] : 0;
+        let feeField = 'equipment',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     },
     'FBFXWJJCLF': function (tender) {
         return (this['FBFXZCF'](tender) + this['FBFXSBF'](tender)).toDecimal(decimalObj.bills.totalPrice);
@@ -551,137 +408,72 @@ let baseFigureTemplate = {
         return (this['FBFXDEJJRGF'](tender) + this['FBFXDEJJCLF'](tender) + this['FBFXDEJJJXF'](tender)).toDecimal(decimalObj.bills.totalPrice);
     },
     'CSXMF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.MEASURE])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.MEASURE]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
+        let feeField = 'common',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.MEASURE, feeField, subFeeField);
     },
     'ZZCSXMF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
+        let feeField = 'common',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_ORGANIZATION, feeField, subFeeField);
     },
     'ZZCSXMDEJJZJGCF': function (tender) {
         return (this['ZZCSXMDEJJRGF'](tender) + this['ZZCSXMDEJJCLF'](tender) + this['ZZCSXMDEJJJXF'](tender)).toDecimal(decimalObj.bills.totalPrice);
     },
     'ZZCSXMDEJJRGF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.labour) && cbTools.isDef(bill.feesIndex.labour[totalFeeType]) ? bill.feesIndex.labour[totalFeeType] : 0;
+        let feeField = 'labour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_ORGANIZATION, feeField, subFeeField);
     },
     'ZZCSXMDEJJCLF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.material) && cbTools.isDef(bill.feesIndex.material[totalFeeType]) ? bill.feesIndex.material[totalFeeType] : 0;
+        let feeField = 'material',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_ORGANIZATION, feeField, subFeeField);
     },
     'ZZCSXMDEJJJXF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.machine) && cbTools.isDef(bill.feesIndex.machine[totalFeeType]) ? bill.feesIndex.machine[totalFeeType] : 0;
+        let feeField = 'machine',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_ORGANIZATION, feeField, subFeeField);
     },
     'JSCSXMF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
+        let feeField = 'common',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     },
     'JSCSXMDEJJRGF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.labour) && cbTools.isDef(bill.feesIndex.labour[totalFeeType]) ? bill.feesIndex.labour[totalFeeType] : 0;
+        let feeField = 'labour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     },
     'JSCSXMDEJJCLF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.material) && cbTools.isDef(bill.feesIndex.material[totalFeeType]) ? bill.feesIndex.material[totalFeeType] : 0;
+        let feeField = 'material',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     },
     'JSCSXMDEJJJXF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.machine) && cbTools.isDef(bill.feesIndex.machine[totalFeeType]) ? bill.feesIndex.machine[totalFeeType] : 0;
+        let feeField = 'machine',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     },
     'JSCSXMTZRGF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.adjustLabour) && cbTools.isDef(bill.feesIndex.adjustLabour[totalFeeType]) ? bill.feesIndex.adjustLabour[totalFeeType] : 0;
+        let feeField = 'adjustLabour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     },
     'JSCSXMTZJSRGF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.adjustMachineLabour) && cbTools.isDef(bill.feesIndex.adjustMachineLabour[totalFeeType]) ? bill.feesIndex.adjustMachineLabour[totalFeeType] : 0;
+        let feeField = 'adjustMachineLabour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     },
     'JSCSXMZCF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.mainMaterial) && cbTools.isDef(bill.feesIndex.mainMaterial[totalFeeType]) ? bill.feesIndex.mainMaterial[totalFeeType] : 0;
+        let feeField = 'mainMaterial',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     },
     'JSCSXMSBF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.equipment) && cbTools.isDef(bill.feesIndex.equipment[totalFeeType]) ? bill.feesIndex.equipment[totalFeeType] : 0;
+        let feeField = 'equipment',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     },
     'JSCSXMWJJCLF': function (tender) {
         return (this['JSCSXMZCF'](tender) + this['JSCSXMSBF'](tender)).toDecimal(decimalObj.bills.totalPrice);
@@ -703,44 +495,24 @@ let baseFigureTemplate = {
         return (this['JSCSXMDEJJRGF'](tender) + this['JSCSXMDEJJCLF'](tender) + this['JSCSXMDEJJJXF'](tender)).toDecimal(decimalObj.bills.totalPrice);
     },
     'QTXMF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.OTHER])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.OTHER]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
+        let feeField = 'common',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.OTHER, feeField, subFeeField);
     },
     'GF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.CHARGE])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CHARGE]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
+        let feeField = 'common',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CHARGE, feeField, subFeeField);
     },
     'SJ': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.TAX])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.TAX]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
+        let feeField = 'common',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.TAX, feeField, subFeeField);
     },
     'AQWMSGZXF': function (tender) {
-        if(cbTools.isUnDef(calcBase.fixedBills[calcBase.fixedFlag.SAFETY_CONSTRUCTION])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SAFETY_CONSTRUCTION]['bill'];
-        if(cbTools.isUnDef(bill) || cbTools.isUnDef(bill.ID)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
+        let feeField = 'common',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SAFETY_CONSTRUCTION, feeField, subFeeField);
     },
     'JZMJ': function () {
         let buildingArea = projFeatureView.getFeature('buildingArea');
@@ -1059,16 +831,6 @@ let baseFigureTemplate = {
         return rst;
     },
     'JDZCF': function (tender) {//甲定主材费
-       /* const quantityType = tender ? 'tenderQuantity' : 'quantity';
-        let rst = 0;
-        let projGljs = calcBase.project.projectGLJ.datas.gljList;
-        for(let glj of projGljs){
-            if(glj.type === gljType.MAIN_MATERIAL && (glj.supply === supplyType.JDYG || glj.supply === supplyText.JDYG)){
-                let marketPrice = tender ? calcBase.project.projectGLJ.getTenderMarketPrice(glj) : glj.unit_price.market_price;
-                rst = (rst + parseFloat(glj[quantityType] * marketPrice).toDecimal(decimalObj.bills.totalPrice)).toDecimal(decimalObj.bills.totalPrice);
-            }
-        }
-        return rst;*/
         const quantityType = tender ? 'tenderQuantity' : 'quantity';
         let rst = 0;
         let projGljs = calcBase.project.projectGLJ.datas.gljList;
@@ -1099,9 +861,6 @@ let baseFigureTemplate = {
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return cbTools.isDef(bill.feesIndex.estimate) && cbTools.isDef(bill.feesIndex.estimate[totalFeeType]) ? bill.feesIndex.estimate[totalFeeType] : 0;
     },
-   /* 'ZGCLFFGLJ': function () {//暂估材料费(从工料机汇总表汇总)
-        return 0;
-    },*/
     'FBF': function (tender) {//分包费
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let rst = 0;

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

@@ -1714,8 +1714,10 @@ class CalcProgram {
             if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){
                 calcTools.getGLJList(treeNode, true);
                 nodes = me.project.Ration.getRationNodes(treeNode);
+            } else { //固定清单材料(工程设备)暂估价比较特殊,不进行父项汇总(需求)
+                nodes = me.project.Bills.getGatherNodes(treeNode);
             }
-            else nodes = treeNode.children;
+            //else nodes = treeNode.children;
 
             let rst = [];
             for (let ft of cpFeeTypes) {

+ 7 - 1
web/building_saas/main/js/views/billsElf.js

@@ -742,14 +742,20 @@ const BillsElf = (function() {
     function bindListener(){
         //插入定额
         $('#elfInsertRation').click(function () {
+            if (!projectObj.project.Ration.canAdd(projectObj.project.mainTree.selected)) {
+                return;
+            }
             let addRationDatas =  getInsertElfRationData();
             insertRations(addRationDatas);
         });
         //插入单条
         $('#elfInsertSingle').click(function () {
+            if (!projectObj.project.Ration.canAdd(projectObj.project.mainTree.selected)) {
+                return;
+            }
             let addRationDatas = getInsertElfSingleRation();
             insertRations(addRationDatas);
-        })
+        });
     }
     return {buildSheet, refreshWorkBook, billsSelElf, setColumnWidthByRate, bindListener};
 })();

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

@@ -333,11 +333,13 @@ var projectObj = {
                                 data.unit = existB.unit;
                                 project.Bills.replaceBills(node.source, data, formatCode);
                                 projectObj.mainController.refreshTreeNode([node], false);
+                                BillsElf.billsSelElf(node.data.code);
                             } else {
                                 ConfirmModal.stdBillsUnit.check(data, function (std) {
                                     updateBeforeInsert(node, data);
                                     project.Bills.replaceBills(node.source, std, formatCode);
                                     projectObj.mainController.refreshTreeNode([node], false);
+                                    BillsElf.billsSelElf(node.data.code);
                                 }, function () {
                                     projectObj.mainController.refreshTreeNode([node], false);
                                 });
@@ -346,6 +348,7 @@ var projectObj = {
                             updateBeforeInsert(node, data);
                             project.Bills.replaceBills(node.source, data, formatCode);
                             projectObj.mainController.refreshTreeNode([node], false);
+                            BillsElf.billsSelElf(node.data.code);
                         }
                     } else {
                         normalUpdate(node,value);
@@ -512,12 +515,14 @@ var projectObj = {
                     }
                     node.data.userCalcBase = value;
                     project.calcBase.calculate(node);
+
                     if(!project.calcBase.success){
                         let activeCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];
                         projectObj.mainController.refreshTreeNode([node]);
                         return;
+                    } else if (value === '') {//删除清单基数,单价要清空
+                        calcTools.setFieldValue(node, 'feesIndex.common.unitFee', 0);
                     }
-                    // if (value) {value = parseFloat(value).toDecimal(decimalObj.decimal("totalPrice", node))};
                 };
                 //计算基数赋值要经过解析和标准化,已在calculate里赋值
                 if(fieldName !== 'calcBase'){
@@ -3255,6 +3260,10 @@ $('#calcBaseFeeRateConf').click(function () {
             $('#calcBaseFeeRate').modal('hide');
         }
     }
+    //删除清单基数,要清空单价
+    if (projectObj.project.calcBase.success && calcBaseValue === '') {
+        calcTools.setFieldValue(selected, 'feesIndex.common.unitFee', 0);
+    }
     if(!projectObj.project.calcBase.success && cusFeeRate==false){
         return;
     } else if((!validateFeeRate || selected.data.feeRateID === parseInt(feeRateObject.feeRateSelection.ID)) && needToSave) {

+ 3 - 3
web/building_saas/main/js/views/std_ration_lib.js

@@ -247,7 +247,7 @@ var rationLibObj = {
     },
     onRationSpreadCellDoubleClick: function (sender, args) {
         var select = $('#stdRationLibSelect'), rationCode = args.sheet.getText(args.row, 0);
-        if (rationCode !== '') {
+        if (rationCode !== '' && projectObj.project.Ration.canAdd(projectObj.project.mainTree.selected)) {
             let query = {userID: userID, rationRepId: select.val(), code: rationCode};
             //搜索结果全部定额中双击添加定额、有可能同名不同库,更新查询的库ID
             if (rationLibObj.resultCache && rationLibObj.resultCache[args.row]) {
@@ -284,7 +284,7 @@ var rationLibObj = {
                     name: "插入定额",
                     icon: 'fa-sign-in',
                     disabled: function () {
-                        return projectReadOnly;
+                        return projectReadOnly || !projectObj.project.Ration.canAdd(projectObj.project.mainTree.selected);
                     },
                     callback: function (key, opt) {
                         let select = $('#stdRationLibSelect'), rationSelect = rationSheet.getSelections();
@@ -299,7 +299,7 @@ var rationLibObj = {
                     name: "替换定额",
                     icon: 'fa-sign-in',
                     disabled: function () {
-                        return projectReadOnly
+                        return projectReadOnly || !projectObj.project.Ration.canAdd(projectObj.project.mainTree.selected);
                     },
                     callback: function (key, opt) {
                         let select = $('#stdRationLibSelect'), rationSelect = rationSheet.getSelections();

+ 3 - 8
web/over_write/js/chongqing_2018.js

@@ -272,14 +272,9 @@ if(typeof baseFigureMap !== 'undefined'){
 }
 if(typeof baseFigureTemplate !== 'undefined'){
     baseFigureTemplate['ZZS'] =  function (tender) {//增值税
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.ADDED_VALUE_TAX])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.ADDED_VALUE_TAX]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.common) && cbTools.isDef(bill.feesIndex.common[totalFeeType]) ? bill.feesIndex.common[totalFeeType] : 0;
+        let feeField = 'common',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.ADDED_VALUE_TAX, feeField, subFeeField);
     };
 }
 if(typeof figureClassTemplate !== 'undefined'){

+ 27 - 93
web/over_write/js/jiangxi_2017.js

@@ -212,105 +212,50 @@ if(typeof baseFigureMap !== 'undefined'){
     };
 }
 if(typeof baseFigureTemplate !== 'undefined'){
-    /*baseFigureTemplate['FBFXZJF'] =  function (tender) {//分部分项直接费
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.direct) && cbTools.isDef(bill.feesIndex.direct[totalFeeType]) ? bill.feesIndex.direct[totalFeeType] : 0;
-    };*/
     baseFigureTemplate['FBFXRGF'] =  function (tender) {//分部分项人工费(市场人工费)
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.marketLabour) && cbTools.isDef(bill.feesIndex.marketLabour[totalFeeType]) ? bill.feesIndex.marketLabour[totalFeeType] : 0;
+        let feeField = 'marketLabour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     };
     baseFigureTemplate['FBFXCLF'] =  function (tender) {//分部分项材料费(市场材料费)
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.marketMaterial) && cbTools.isDef(bill.feesIndex.marketMaterial[totalFeeType]) ? bill.feesIndex.marketMaterial[totalFeeType] : 0;
+        let feeField = 'marketMaterial',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     };
     baseFigureTemplate['FBFXJXF'] =  function (tender) {//分部分项机械费(市场机械费)
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.SUB_ENGINERRING])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.SUB_ENGINERRING]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.marketMachine) && cbTools.isDef(bill.feesIndex.marketMachine[totalFeeType]) ? bill.feesIndex.marketMachine[totalFeeType] : 0;
+        let feeField = 'marketMachine',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.SUB_ENGINERRING, feeField, subFeeField);
     };
     baseFigureTemplate['ZZCSXMRGF'] =  function (tender) {//组织措施项目人工费(市场人工费)
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.CONSTRUCTION_ORGANIZATION])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.marketLabour) && cbTools.isDef(bill.feesIndex.marketLabour[totalFeeType]) ? bill.feesIndex.marketLabour[totalFeeType] : 0;
+        let feeField = 'marketLabour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_ORGANIZATION, feeField, subFeeField);
     };
     baseFigureTemplate['ZZCSXMCLF'] =  function (tender) {//组织措施项目材料费(市场材料费)
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.CONSTRUCTION_ORGANIZATION])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.marketMaterial) && cbTools.isDef(bill.feesIndex.marketMaterial[totalFeeType]) ? bill.feesIndex.marketMaterial[totalFeeType] : 0;
+        let feeField = 'marketMaterial',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_ORGANIZATION, feeField, subFeeField);
     };
     baseFigureTemplate['ZZCSXMJXF'] =  function (tender) {//组织措施项目机械费(市场机械费)
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.CONSTRUCTION_ORGANIZATION])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.marketMachine) && cbTools.isDef(bill.feesIndex.marketMachine[totalFeeType]) ? bill.feesIndex.marketMachine[totalFeeType] : 0;
+        let feeField = 'marketMachine',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_ORGANIZATION, feeField, subFeeField);
     };
     baseFigureTemplate['JSCSXMRGF'] =  function (tender) {//技术措施项目人工费(市场人工费)
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.marketLabour) && cbTools.isDef(bill.feesIndex.marketLabour[totalFeeType]) ? bill.feesIndex.marketLabour[totalFeeType] : 0;
+        let feeField = 'marketLabour',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     };
     baseFigureTemplate['JSCSXMCLF'] =  function (tender) {//技术措施项目材料费(市场材料费)
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.marketMaterial) && cbTools.isDef(bill.feesIndex.marketMaterial[totalFeeType]) ? bill.feesIndex.marketMaterial[totalFeeType] : 0;
+        let feeField = 'marketMaterial',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     };
     baseFigureTemplate['JSCSXMJXF'] =  function (tender) {//技术措施项目机械费(市场机械费)
-        if(cbTools.isUnDef(calcBase.fixedBills[fixedFlag.CONSTRUCTION_TECH])){
-            return 0;
-        }
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let bill = calcBase.fixedBills[fixedFlag.CONSTRUCTION_TECH]['bill'];
-        if(cbTools.isUnDef(bill)) return 0;
-        if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
-        return cbTools.isDef(bill.feesIndex.marketMachine) && cbTools.isDef(bill.feesIndex.marketMachine[totalFeeType]) ? bill.feesIndex.marketMachine[totalFeeType] : 0;
+        let feeField = 'marketMachine',
+            subFeeField = tender ? 'tenderTotalFee' : 'totalFee';
+        return cbTools.getBillsFee(fixedFlag.CONSTRUCTION_TECH, feeField, subFeeField);
     };
     baseFigureTemplate['FBRGF'] =  function (tender) {//分包人工费(市场人工费)
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
@@ -367,17 +312,6 @@ if(typeof baseFigureTemplate !== 'undefined'){
         }
         return rst;
     };
-    /*baseFigureTemplate['GJXMZJF'] =  function (tender) {//估计项目直接费
-        const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
-        let rst = 0;
-        let rations = calcBase.project.Ration.datas;
-        for(let ration of rations){
-            if(ration.evaluationProject && ration.feesIndex && ration.feesIndex.direct){
-                rst = parseFloat(rst + ration.feesIndex.direct[totalFeeType]).toDecimal(decimalObj.ration.totalPrice)
-            }
-        }
-        return rst;
-    };*/
     baseFigureTemplate['GJXMRGF'] =  function (tender) {//估计项目人工费(市场人工费)
         const totalFeeType = tender ? 'tenderTotalFee' : 'totalFee';
         let rst = 0;