浏览代码

抽离计算累进数值方法

vian 5 年之前
父节点
当前提交
2b2e819a99

+ 0 - 3
modules/main/routes/main_route.js

@@ -8,7 +8,6 @@ const projectModel = require("../../pm/models/project_model");
 import OptionsDao from '../../options/models/optionsModel';
 import optionSetting from '../../options/models/optionTypes';
 let config = require("../../../config/config.js");
-const calculateUtil = require('../../../public/calculate_util');
 module.exports =function (app) {
     const baseController = new BaseController();
     app.get('/main', baseController.init, function(req, res) {
@@ -30,10 +29,8 @@ module.exports =function (app) {
                 if(options){
                     options = await optionsDao.saveOptions(req.session.sessionUser.id, req.session.sessionCompilation._id, optionSetting);
                 }
-                const testNumber = calculateUtil.getProgressiveFee(9741, '养护单位(业主)管理费', projectData.property.progressiveInterval, 2);
                 res.render('building_saas/main/html/main.html',
                     {
-                        testNumber: testNumber,
                         userAccount: req.session.userAccount,
                         userID: req.session.sessionUser.id,
                         projectData: projectData,

+ 0 - 98
public/common_util.js

@@ -43,104 +43,6 @@
             return sorted;
         }
     }
-    function standar(exp) {
-        //去空格
-        exp = exp.replace(/\s/g, '');
-        //( to (
-        exp = exp.replace(/(/g, '(');
-        //)to )
-        exp = exp.replace(/)/g, ')');
-        //,to ,
-        exp = exp.replace(/,/g, ',');
-        //f to F
-        exp = exp.replace(new RegExp('f', 'g'), 'F');
-        return exp;
-    }
-    /**
-     * 获取累进办法计算的金额
-     * @param {Number} baseFee - 基准金额
-     * @param {String} name - 使用累进计算的基数名称(需要与累进库中的名称匹配)
-     * @param {Array} progressiveData - 项目的累进数据(property.progressiveInterval)
-     * @param {Function} decimalFunc - scMath中的精度方法
-     * @param {Number} decimal - 精度
-     * @return {Number}
-     */
-    function getProgressiveFee(baseFee, name, progressiveData, decimalFunc, decimal) {
-        if (!progressiveData) {
-            throw '该项目不存在累进区间数据';
-        }
-        //根据基数名称匹配累进库数据,标准化以免(())等不同导致不匹配
-        const matchProgressiveData = progressiveData.find(item => standar(item.name) === standar(name));
-        if (!matchProgressiveData) {
-            throw `计算基数{${name}}不存在累进区间数据`;
-        }
-        // 将原始数据转换成方便处理的数据:[{feeRate: xx, min: 0, max: 200, minOpr: '(', maxOpr: ']'}]
-        const progression = matchProgressiveData.progression.map(item => {
-            // item.interval内容: eg (0,200]、[300,500) [1000,+)....
-            const interval = standar(item.interval);
-            // ( => 大于 [ => 大于等于 ) => 小于 ] => 小于等于
-            const minReg = /([\(\[])(\d+)/;
-            const minMatch = minReg.exec(interval);
-            if (!minMatch || !minMatch[1] || !minMatch[2]) {
-                throw `计算基数{${name}}累进区间数据错误`;
-            }
-            const minOpr = minMatch[1];
-            // 后台数据单位为万元,这里转为为元
-            const min = parseFloat(minMatch[2]) * 10000;
-            const maxReg = /[\,,]([\d\+]+)([\)\]])/;
-            const maxMatch = maxReg.exec(interval);
-            if (!maxMatch || !maxMatch[1] || !maxMatch[2]) {
-                throw `计算基数{${name}}累进区间数据错误`;
-            }
-            const max = maxMatch[1] === '+' ? 'infinity' : parseFloat(maxMatch[1]) * 10000;
-            const maxOpr = maxMatch[2];
-            return {
-                feeRate: item.feeRate,
-                min,
-                minOpr,
-                max,
-                maxOpr
-            }
-        });
-        progression.sort((a, b) => a.min - b.min);
-        // 基数所在区间
-        const withinData = progression.find(item => {
-            const oprMiddle = item.max === 'infinity' ? '+' : '';
-            const oprLink = item.minOpr + oprMiddle + item.maxOpr;
-            switch (oprLink) {
-                case '()':
-                    return baseFee > item.min && baseFee < item.max;
-                case '(]':
-                    return baseFee > item.min && baseFee <= item.max;
-                case '[)':
-                    return baseFee >= item.min && baseFee < item.max;
-                case '[]':
-                    return baseFee >= item.min && baseFee <= item.max;
-                case '(+)':
-                case '(+]':
-                    return baseFee > item.min;
-                case '[+)':
-                case '[+]':
-                    return baseFee >= item.min;
-                default:
-                    return false;
-            }
-        });
-        if (!withinData) {
-            return 0;
-        }
-        // 累进计算
-        let fee = 0;
-        //累进之前的区间
-        for (let i = 0; i < progression.indexOf(withinData); i++) {
-            const perData = progression[i];
-            fee += (perData.max - perData.min) * perData.feeRate * 0.01;
-        }
-        //累进所在区间
-        fee += (baseFee - withinData.min) * withinData.feeRate * 0.01;
-        return decimalFunc(fee, decimal);
-        //return fee.toDecimal(decimalObj.bills.totalPrice);
-    }
 
     return {
         isDef,

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

@@ -42,8 +42,6 @@
         let projectReadOnly = JSON.parse('<%- projectReadOnly %>');
         let projectCooperate = JSON.parse('<%- projectCooperate %>');
         let projectOptins =  JSON.parse('<%- options %>');
-        console.log(`'<%- testNumber %>'`);
-        console.log('<%- testNumber %>');
         const G_SHOW_BLOCK_LIB = false;
 //        const G_SHOW_BLOCK_LIB = false;
     </script>

+ 8 - 10
web/building_saas/main/js/models/calc_base.js

@@ -601,60 +601,58 @@ let baseFigureTemplate = {
         //使用累进办法计算,基数为{定额建筑安装工程费(不含定额设备购置费及专项费用)}
         'SGCDJSF': function (tender) {
             let baseFee = this['DEJZAZGCFBHSBZX'](tender);
-            return cbTools.getProgressiveFee(baseFee, '施工场地建设费');
+            return calculateUtil.getProgressiveFee(baseFee, '施工场地建设费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         //{养护单位(业主)管理费}
         // 使用累进办法计算,计算基数为{定额建筑安装工程(其中定额设备购置费按 40%计)}
         'YHDWYZGLF': function (tender) {
-            debugger;
             let baseFee = this['DEJZAZGCSBSS'](tender);
             return calculateUtil.getProgressiveFee(baseFee, '养护单位(业主)管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
-            //return cbTools.getProgressiveFee(baseFee, '养护单位(业主)管理费');
         },
         //{信息化费}
         // 使用累进办法计算,计算基数为{定额建筑安装工程(其中定额设备购置费按 40%计)}
         'XXHF': function (tender) {
             let baseFee = this['DEJZAZGCSBSS'](tender);
-            return cbTools.getProgressiveFee(baseFee, '信息化费');
+            return calculateUtil.getProgressiveFee(baseFee, '信息化费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         //{路线工程监理费}
         //使用累进办法计算,不足2万按2万,计算基数为{定额建筑安装工程(其中定额设备购置费按 40%计)}
         'LXGCJLF': function (tender) {
             let baseFee = this['DEJZAZGCSBSS'](tender),
-                fee = cbTools.getProgressiveFee(baseFee, '路线工程监理费');
+                fee = calculateUtil.getProgressiveFee(baseFee, '路线工程监理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
             return fee > 0 && fee < 20000 ? 20000 : fee;
         },
         //{独立桥梁隧道工程监理费}
         //使用累进办法计算,不足2万按2万,计算基数为{定额建筑安装工程(其中定额设备购置费按 40%计)}
         'QLSDGCJLF': function (tender) {
             let baseFee = this['DEJZAZGCSBSS'](tender),
-                fee = cbTools.getProgressiveFee(baseFee, '独立桥梁隧道工程监理费');
+                fee = calculateUtil.getProgressiveFee(baseFee, '独立桥梁隧道工程监理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
             return fee > 0 && fee < 20000 ? 20000 : fee;
         },
         //{设计文件审查费}
         // 使用累进办法计算,不足3千按3千,计算基数为{定额建筑安装工程(其中定额设备购置费按 40%计)}
         'SJWJSCF': function (tender) {
             let baseFee = this['DEJZAZGCSBSS'](tender),
-                fee = cbTools.getProgressiveFee(baseFee, '设计文件审查费');
+                fee = calculateUtil.getProgressiveFee(baseFee, '设计文件审查费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
             return fee > 0 && fee < 3000 ? 3000 : fee;
         },
         //{路线勘察设计费}
         // 使用累进办法计算,计算基数为{定额建筑安装工程(其中定额设备购置费按 40%计)}
         'LXKCSJF': function (tender) {
             let baseFee = this['DEJZAZGCSBSS'](tender);
-            return cbTools.getProgressiveFee(baseFee, '路线勘察设计费');
+            return calculateUtil.getProgressiveFee(baseFee, '路线勘察设计费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         //{独立桥梁隧道维修加固勘察设计费}
         // 使用累进办法计算,计算基数为{定额建筑安装工程(其中定额设备购置费按 40%计)}
         'QLSDKCSJF': function (tender) {
             let baseFee = this['DEJZAZGCSBSS'](tender);
-            return cbTools.getProgressiveFee(baseFee, '独立桥梁隧道维修加固勘察设计费');
+            return calculateUtil.getProgressiveFee(baseFee, '独立桥梁隧道维修加固勘察设计费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         //{招标代理及标底(最高投标限价)编制费} (招标代理及标底编制费ZBDLJBDBZF)
         // 使用累进办法计算,计算基数为{定额建筑安装工程(其中定额设备购置费按 40%计)}
         'ZBDLJBDBZF': function (tender) {
             let baseFee = this['DEJZAZGCSBSS'](tender);
-            return cbTools.getProgressiveFee(baseFee, '招标代理及标底(最高投标限价)编制费');
+            return calculateUtil.getProgressiveFee(baseFee, '招标代理及标底(最高投标限价)编制费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         //{价差预备费}
         //以建筑安装工程费为基数

+ 6 - 6
web/over_write/js/anhui_2019.js

@@ -268,34 +268,34 @@ if (typeof baseFigureTemplate !== 'undefined') {
         // 施工场地建设费 算法:以{定额建筑安装工程费(不含定额设备购置费及专项管理费) }为基数,采用累进办法计算。
         SGCDJSF(tender) {
             const baseFee = this['DEJZAZGCFBHSBZXGLF'](tender);
-            return cbTools.getProgressiveFee(baseFee, '施工场地建设费');
+            return calculateUtil.getProgressiveFee(baseFee, '施工场地建设费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         // 养护单位管理费 算法:以{定额建筑安装工程费(不含专项管理费) }为基数,采用累进办法计算。
         YHDWGLF(tender) {
             const baseFee = this['DEJZAZGCFBHZXGLF'](tender);
-            return cbTools.getProgressiveFee(baseFee, '养护单位管理费');
+            return calculateUtil.getProgressiveFee(baseFee, '养护单位管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         // 养护项目信息化费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。(不足20000元时按20000元计算)
         YHXMXXHF(tender) {
             const baseFee = this['DEJZAZGCF'](tender);
-            const fee = cbTools.getProgressiveFee(baseFee, '养护项目信息化费');
+            const fee = calculateUtil.getProgressiveFee(baseFee, '养护项目信息化费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
             return fee > 0 && fee < 20000 ? 20000 : fee;
         },
         // 工程监理费 算法:以{定额建筑安装工程费(不含专项管理费) }为基数,采用累进办法计算。(不足20000元时按20000元计算)
         GCJLF(tender) {
             const baseFee = this['DEJZAZGCFBHZXGLF'](tender);
-            const fee = cbTools.getProgressiveFee(baseFee, '工程监理费');
+            const fee = calculateUtil.getProgressiveFee(baseFee, '工程监理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
             return fee > 0 && fee < 20000 ? 20000 : fee;
         },
         // 设计文件审查费 算法:以{定额建筑安装工程费(不含专项管理费) }为基数,采用累进办法计算。
         SJWJSCF(tender) {
             const baseFee = this['DEJZAZGCFBHZXGLF'](tender);
-            return cbTools.getProgressiveFee(baseFee, '设计文件审查费');
+            return calculateUtil.getProgressiveFee(baseFee, '设计文件审查费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         // 前期工作费 算法:以{定额建筑安装工程费(不含专项管理费) }为基数,采用累进办法计算。(不足30000元时按30000元计算)
         QQGZF(tender) {
             const baseFee = this['DEJZAZGCFBHZXGLF'](tender);
-            const fee = cbTools.getProgressiveFee(baseFee, '前期工作费');
+            const fee = calculateUtil.getProgressiveFee(baseFee, '前期工作费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
             return fee > 0 && fee < 30000 ? 30000 : fee;
         },
         /*  价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。

+ 5 - 5
web/over_write/js/neimeng_2019.js

@@ -238,28 +238,28 @@ if (typeof baseFigureTemplate !== 'undefined') {
         // 养护单位项目管理费:以累进办法计算,计算基数为“定额建筑安装工程费(定额设备购置费按40%计)
         YHDWXMGLF(tender) {
             const baseFee = this['DEJZAZGCFSBSS'](tender);
-            return cbTools.getProgressiveFee(baseFee, '养护单位项目管理费');
+            return calculateUtil.getProgressiveFee(baseFee, '养护单位项目管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         // 信息化费:以累进办法计算,计算基数为“定额建筑安装工程费(定额设备购置费按40%计)”
         XXHF(tender) {
             const baseFee = this['DEJZAZGCFSBSS'](tender);
-            return cbTools.getProgressiveFee(baseFee, '信息化费');
+            return calculateUtil.getProgressiveFee(baseFee, '信息化费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         // 工程监理费:以累进办法计算,计算基数为“定额建筑安装工程费(定额设备购置费按40%计)
         GCJLF(tender) {
             const baseFee = this['DEJZAZGCFSBSS'](tender);
-            return cbTools.getProgressiveFee(baseFee, '工程监理费');
+            return calculateUtil.getProgressiveFee(baseFee, '工程监理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         // 设计文件审查费:以累进办法计算,计算基数为“定额建筑安装工程费(定额设备购置费按40%计)”;设计文件审查费不足3000元的,按3000元计算
         SJWJSCF(tender) {
             const baseFee = this['DEJZAZGCFSBSS'](tender);
-            const fee = cbTools.getProgressiveFee(baseFee, '设计文件审查费');
+            const fee = calculateUtil.getProgressiveFee(baseFee, '设计文件审查费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
             return fee > 0 && fee < 3000 ? 3000 : fee;
         },
         // 前期工作费:以累进办法计算,计算基数为“定额建筑安装工程费(定额设备购置费按40%计)
         QQGZF(tender) {
             const baseFee = this['DEJZAZGCFSBSS'](tender);
-            return cbTools.getProgressiveFee(baseFee, '前期工作费');
+            return calculateUtil.getProgressiveFee(baseFee, '前期工作费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         // 价差预备费
         JCYBF(tender) {

+ 1 - 1
web/over_write/js/zhejiang_2005.js

@@ -139,7 +139,7 @@ if (typeof baseFigureTemplate !== 'undefined') {
         // 养护工程管理经费:取清单固定类别是“建筑安装工程费”金额为基数,采用累进办法计算
         YHGCGLJF(tender) {
             const baseFee = this['GLYHGCF'](tender);
-            return cbTools.getProgressiveFee(baseFee, '养护工程管理费');
+            return calculateUtil.getProgressiveFee(baseFee, '养护工程管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice);
         },
         // 一二三部分合计:取清单固定类别是“一二三部分合计”的金额
         YESBFHJ(tender) {