Jelajahi Sumber

更改加权系数独立设置

ellisran 3 bulan lalu
induk
melakukan
b1fc37037b

+ 3 - 3
app/public/js/material_exponent.js

@@ -142,7 +142,7 @@ $(document).ready(() => {
         },
     };
 
-    const needUpdateArray = ['m_price', 'remark'];
+    const needUpdateArray = ['weight_num', 'm_price', 'remark'];
 
     const materialExponentSpreadObj = {
         getMaterialExponentData: function (msid = null, mnid = null) {
@@ -379,7 +379,7 @@ $(document).ready(() => {
                         validText = ZhCalc.round(num, 3);
                         num = ZhCalc.round(num, 3);
                     }
-                    const total_weight = ZhCalc.add(ZhCalc.sub(ZhCalc.sum(_.map(materialExponentData, 'weight_num')), parseFloat(orgValue)), num);
+                    const total_weight = showStageExponent || exponent_nodes ? ZhCalc.add(ZhCalc.sub(ZhCalc.sum(_.map(materialExponentShardData, 'weight_num')), parseFloat(orgValue)), num) : ZhCalc.add(ZhCalc.sub(ZhCalc.sum(_.map(materialExponentData, 'weight_num')), parseFloat(orgValue)), num);
                     if (total_weight > 1) {
                         toastr.error('加权系数总和不能大于1');
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
@@ -591,7 +591,7 @@ $(document).ready(() => {
                             validText = ZhCalc.round(num, 3);
                             num = ZhCalc.round(num, 3);
                         }
-                        const total_weight = ZhCalc.add(ZhCalc.sub(_.sumBy(materialExponentData, 'weight_num'), parseFloat(orgValue)), num);
+                        const total_weight = showStageExponent || exponent_nodes ? ZhCalc.add(ZhCalc.sub(ZhCalc.sum(_.map(materialExponentShardData, 'weight_num')), parseFloat(orgValue)), num) : ZhCalc.add(ZhCalc.sub(ZhCalc.sum(_.map(materialExponentData, 'weight_num')), parseFloat(orgValue)), num);
                         if (total_weight > 1) {
                             toastMessageUniq(getPasteHint(hint.weightNumberCan, hintRow));
                             bPaste = false;

+ 3 - 3
app/service/material_exponent.js

@@ -225,7 +225,7 @@ module.exports = app => {
 
         async _updateOneExponentData(transaction, data, ms_id = null, mn_id = null) {
             // 当以下值和exponent值不相同时,需要同步更新最新的计算表达式和金额到stage表里,无需更新到exponentShard表
-            const updateColsArray = ['symbol', 'symbol_desc', 'code', 'weight_num', 'basic_price', 'is_summary', 'basic_times'];
+            const updateColsArray = ['symbol', 'symbol_desc', 'code', 'basic_price', 'is_summary', 'basic_times'];
             const updateCalcArray = ['weight_num', 'basic_price', 'is_summary'];
             let needCalc = false;
             let needUp = false;
@@ -331,8 +331,8 @@ module.exports = app => {
             if (mn_id !== null) mesCondition.mn_id = mn_id;
             const mesList = await transaction.select(this.ctx.service.materialExponentShard.tableName, { where: mesCondition });
             console.log(mesList);
-            const materialExponentColArray = ['symbol', 'symbol_desc', 'code', 'weight_num', 'basic_price', 'is_summary', 'basic_times'];
-            const materialExponentShardColArray = ['m_price', 'remark'];
+            const materialExponentColArray = ['symbol', 'symbol_desc', 'code', 'basic_price', 'is_summary', 'basic_times'];
+            const materialExponentShardColArray = ['weight_num', 'm_price', 'remark'];
             const updateCalcArray = ['weight_num', 'basic_price', 'm_price', 'is_summary'];
             const updateMeArray = [];
             const udpateMseArray = [];

+ 7 - 5
app/service/material_exponent_shard.js

@@ -12,7 +12,7 @@ const auditConst = require('../const/audit').material;
 const materialConst = require('../const/material');
 const MaterialCalculator = require('../lib/material_calc');
 
-const needUpdateArray = ['m_price', 'remark'];
+const needUpdateArray = ['weight_num', 'm_price', 'remark'];
 
 module.exports = app => {
     class MaterialExponentShard extends app.BaseService {
@@ -167,14 +167,14 @@ module.exports = app => {
             let sumByChange = 0;
             let constant = 0;
             for (const ex of exponentList) {
+                const stageEx = this._.find(stageExponentList, { me_id: ex.id });
                 if (ex.type === materialConst.ex_type[0].value) {
-                    constant = ex.weight_num ? ex.weight_num : 0;
+                    constant = stageEx.weight_num ? stageEx.weight_num : 0;
                     expr += constant.toString();
                 } else if (ex.type === materialConst.ex_type[1].value) {
-                    const stageEx = this._.find(stageExponentList, { me_id: ex.id });
-                    const calc_num = ex.basic_price > 0 ? this.ctx.helper.mul(ex.weight_num, this.ctx.helper.div(stageEx.m_price, ex.basic_price)) : 0;
+                    const calc_num = ex.basic_price > 0 ? this.ctx.helper.mul(stageEx.weight_num, this.ctx.helper.div(stageEx.m_price, ex.basic_price)) : 0;
                     const change = calc_num ? this.ctx.helper.round(calc_num, decimal.qty) : 0;
-                    expr = expr + (change !== 0 ? '+' + ex.weight_num.toString() + '*(' + stageEx.m_price.toString() + '/' + ex.basic_price.toString() + ')' : '');
+                    expr = expr + (change !== 0 ? '+' + stageEx.weight_num.toString() + '*(' + stageEx.m_price.toString() + '/' + ex.basic_price.toString() + ')' : '');
                     sumByChange = this.ctx.helper.add(sumByChange, change);
                 }
             }
@@ -270,6 +270,7 @@ module.exports = app => {
                         ms_id: materialStageInfo.id,
                         me_id: me.id,
                         type: me.type,
+                        weight_num: me.weight_num,
                         m_price: me.m_price,
                         remark: me.remark,
                     };
@@ -298,6 +299,7 @@ module.exports = app => {
                         me_id: e.id,
                         ms_id: ms.id,
                         type: e.type,
+                        weight_num: e.weight_num,
                         m_price: e.m_price,
                     };
                     insertStageExponentData.push(oneStageExponentData);

+ 14 - 0
sql/update.sql

@@ -40,6 +40,20 @@ CREATE TABLE `zh_material_exponent_node`  (
   PRIMARY KEY (`id`)
 ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci COMMENT = '调差指数分项价格指数表';
 
+CREATE TABLE `zh_material_exponent_shard` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `tid` int(11) NOT NULL COMMENT '标段id',
+  `mid` int(11) NOT NULL COMMENT '调差期id',
+  `ms_id` int(11) DEFAULT NULL COMMENT '调差多期单独计价期id(可以为空)',
+  `mn_id` int(11) DEFAULT NULL COMMENT '调差分项指数id(可以为空)',
+  `me_id` int(11) NOT NULL COMMENT '指数工料id',
+  `type` tinyint(1) NOT NULL DEFAULT '2' COMMENT '类型(1定值或2变值)',
+  `weight_num` decimal(30,8) DEFAULT NULL COMMENT '加权系数',
+  `m_price` decimal(30,8) DEFAULT NULL COMMENT '现行价格指数',
+  `remark` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='指数调差分表(独立期和分项价格指数结合)';
+
 ALTER TABLE `zh_sub_project_info`
 ADD COLUMN `lx_tp_unit` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '元' COMMENT '立项-金额单位' AFTER `lx_tp`,
 ADD COLUMN `cb_tp_unit` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '元' COMMENT '初步-金额单位' AFTER `cb_tp`,