Browse Source

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

TonyKang 4 years ago
parent
commit
12df023e63

+ 2 - 1
app/controller/stage_controller.js

@@ -361,6 +361,7 @@ module.exports = app => {
                 const ledgerData = await this._getStageLedgerData(ctx);
                 const posData = await this._getStagePosData(ctx);
 
+                const projRela = await this.ctx.service.project.getFunRela(this.ctx.session.sessionProject.id);
                 const checkDataModel = require('../lib/ledger').checkData;
                 const checkData = new checkDataModel(ctx, measureType);
                 checkData.loadData(ledgerData, posData);
@@ -368,7 +369,7 @@ module.exports = app => {
                 checkData.check3fLimit(ctx.tender.data);
                 checkData.checkBillsQty(['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
 
-                ctx.tender.info.ledger_check.over && checkData.checkOverRange(['contract_qty', 'qc_qty']);
+                projRela.banOver && ctx.tender.info.ledger_check.over && checkData.checkOverRange(['contract_qty', 'qc_qty']);
                 checkData.checkBillsTp([
                     { qty: 'contract_qty', tp: 'contract_tp' }, { qty: 'qc_qty', tp: 'qc_tp' },
                 ], this.ctx.tender.info.decimal);

+ 19 - 6
app/lib/analysis_excel.js

@@ -232,7 +232,14 @@ class ImportBaseTree {
                 return temp;
             } else {
                 const parent = this.findXmjParent(node.code);
-                return this.addNodeWithParent(node, parent);
+                if (parent) {
+                    return this.addNodeWithParent(node, parent);
+                } else {
+                    const newNode = this.addNodeWithParent(node, this.codeNodes['1']);
+                    newNode.error = 1;
+                    return null;
+                }
+
             }
         } else {
             const n = this.codeNodes[node.code];
@@ -296,11 +303,17 @@ class ImportBaseTree {
             } else if (!b.code) {
                 return -1;
             }
-            const codeA = a.code.split(splitChar);
-            const numA = _.toNumber(codeA[codeA.length -1]);
-            const codeB = b.code.split(splitChar);
-            const numB = _.toNumber(codeB[codeB.length -1]);
-            return numA - numB;
+            if (a.error === b.error) {
+                const codeA = a.code.split(splitChar);
+                const numA = _.toNumber(codeA[codeA.length -1]);
+                const codeB = b.code.split(splitChar);
+                const numB = _.toNumber(codeB[codeB.length -1]);
+                return numA - numB;
+            } else if (a.error) {
+                return 1
+            } else if (b.error) {
+                return -1;
+            }
         });
         for (const [i, c] of firstPart.children.entries()) {
             c.order = i + 1;

+ 0 - 1
app/public/js/stage_change.js

@@ -35,7 +35,6 @@ class ChangeAnalysis {
         change.attachments = change.detail.attachments;
         change.bills = change.detail.bills;
         for (const b of change.bills) {
-            console.log(b);
             const aub = change.detail.addUsedBills.find(function (x) {
                 return x.id === b.id;
             });

+ 4 - 3
app/service/change.js

@@ -1139,7 +1139,7 @@ module.exports = app => {
             const sql =
                 'SELECT C.*, Sum(U.utp) As used_tp, TRUNCATE(Sum(U.utp) / C.total_price * 100 + 0.005, 2) As used_pt' +
                 '  FROM ' + this.tableName + ' As C' +
-                '  LEFT JOIN (SELECT sc.tid, sc.cid, sc.cbid, IF(SUM(sc.qty) > 0, TRUNCATE(SUM(sc.qty) * cb.unit_price + ?, 0), TRUNCATE(SUM(sc.qty) * cb.unit_price - ?, ?)) As utp' +
+                '  LEFT JOIN (SELECT sc.tid, sc.cid, sc.cbid, IF(SUM(sc.qty) > 0, TRUNCATE(SUM(sc.qty) * cb.unit_price + ?, ?), TRUNCATE(SUM(sc.qty) * cb.unit_price - ?, ?)) As utp' +
                 '    FROM ' + this.ctx.service.stageChange.tableName + ' As sc' +
                 '    INNER JOIN (' +
                 '      SELECT MAX(`stimes`) As `stimes`, MAX(`sorder`) As `sorder`, `lid`, `pid`, `cbid`, sChange.`sid` ' +
@@ -1159,8 +1159,9 @@ module.exports = app => {
                 '  ORDER By in_time';
             // 舍入步长
             const step = parseFloat('0.' + '0000000'.substr(0, this.ctx.tender.info.decimal.tp) + '5');
-            const sqlParam = [step, step, this.ctx.tender.info.decimal.tp, tid, tid, audit.flow.status.checked];
-            return await this.db.query(sql, sqlParam);
+            const sqlParam = [step, this.ctx.tender.info.decimal.tp, step, this.ctx.tender.info.decimal.tp, tid, tid, audit.flow.status.checked];
+            const data = await this.db.query(sql, sqlParam);
+            return data;
         }
 
         /**

+ 9 - 0
app/service/report.js

@@ -210,6 +210,15 @@ module.exports = app => {
                             runnableRst.push(service.ledgerTag.getAllDataByCondition({ where: { tid: params.tender_id } }));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_change_info':
+                            runnableRst.push(service.reportMemory.getChangeInfo(params.tender_id, params.stage_id));
+                            runnableKey.push(filter);
+                            break;
+                        case 'mem_change_info_bills':
+                            runnableRst.push(service.reportMemory.getChangeInfoBills(params.tender_id, params.stage_id));
+                            runnableKey.push(filter);
+                            break;
+                            break;
                         default:
                             break;
                     }

+ 33 - 0
app/service/report_memory.js

@@ -1075,6 +1075,39 @@ module.exports = app => {
             }
             return result;
         }
+
+        async getChangeInfo(tid, sid) {
+            await this.ctx.service.tender.checkTender(tid);
+            await this.ctx.service.stage.checkStage(sid);
+            this.changeInfo = await this.ctx.service.change.getChangeAndUsedInfo(tid);
+            const usedChangesId = await ctx.service.stageChange.getStageUsedChangeId(sid);
+            for (const c of this.changeInfo) {
+                c.cur_used = usedChangesId.indexOf(c.cid) >= 0;
+            }
+            return this.changeInfo;
+        }
+
+        async getChangeInfoBills(tid, sid) {
+            if (!this.changeInfo) await this.getChangeInfo(tid, sid);
+            this.changeInfoBills = [];
+            for (const c of this.changeInfo) {
+                const cb = await this.ctx.service.stageChange.getUsedData(tid, c.cid);
+                const curUsedBills = await this.ctx.service.stageChange.getStageUsedData(sid, cid);
+                for (const b of cb) {
+                    b.qty = this.ctx.helper._.toNumber(b.samount);
+                    b.valid_qty = ZhCalc.sub(b.qty, b.used_qty);
+                    b.tp = this.ctx.helper.round(this.ctx.helper.mul(b.qty, b.unit_price), this.ctx.tender.info.decimal.tp);
+                    const pos = this.ctx.helper._.filter(curUsedBills, { cbid: b.id });
+                    b.cur_qty = 0;
+                    for (const p of pos) {
+                        b.cur_qty = ZhCalc.add(b.cur_qty, p.qty);
+                    }
+                    b.cur_used = !!data.cur_qty;
+                    this.changeInfoBills.push(b);
+                }
+            }
+            return this.changeInfoBills;
+        }
     }
 
     return ReportMemory;

+ 8 - 6
app/service/rpt_stage_sum_memory.js

@@ -226,29 +226,31 @@ module.exports = app => {
 
                 const dealPay = await this.ctx.service.stagePay.getStagePays(stage);
                 await this._checkStagePayCalc(tender, stage, dealPay);
-                this.ctx.helper.assignRelaData(billsData, [
-                    {data: dealPay, fields: ['tp'], prefix: 's_' + stage.order + '_', relaId: 'pid'}
+                this.ctx.helper.assignRelaData(payData, [
+                    {data: dealPay, fields: ['tp'], prefix: 's_' + stage.order + '_', relaId: 'pid'},
+                    {data: dealPay, fields: ['name'], prefix:'', relaId: 'pid'},
                 ]);
             }
         }
 
         async getStageSumPay(tid, memFieldKeys, gsDefine, gsCustom) {
             if (!gsDefine || !gsDefine.enable) return [];
-            if (!gsCustom || !gsCustom.tenders || gsCustom.tenders.length === 0) return [];
+            if (!gsCustom || !gsCustom.stages || gsCustom.stages.length === 0) return [];
 
             await this.ctx.service.tender.checkTender(tid);
             const payData = await this.ctx.service.pay.getAllDataByCondition({
-                where: {tid: tid},
+                where: {tid: tid, valid: true},
                 order: [['order', 'ASC']],
             });
 
             const gsSetting = JSON.parse(gsDefine.setting);
             for (const s of gsCustom.stages) {
-                const stage = this.getSelectStage(gsSetting, s);
+                const stage = await this.db.get(this.ctx.service.stage.tableName, { tid: this.ctx.tender.id, order: s });
+                if (!stage) continue;
                 await this.ctx.service.stage.doCheckStage(stage);
                 await this._gatherStagePay(this.ctx.tender, stage, payData);
-
             }
+            return payData;
         }
     }
 

+ 2 - 2
app/service/stage_change.js

@@ -359,11 +359,11 @@ module.exports = app => {
                         '    p.name As `p_name`, p.drawing_code As `p_drawing_code`, p.`quantity` As `p_qty`' +
                         '  FROM ' + this.tableName + ' As c ' +
                         '  INNER JOIN ( ' +
-                        '    SELECT MAX(`stimes` * ' + timesLen + ' + `sorder`) As `flow`, `lid`, `pid`, `cbid` From ' + this.tableName +
+                        '    SELECT MAX(`stimes` * ' + timesLen + ' + `sorder`) As `flow`, `lid`, `pid`, `cbid`, `sid` From ' + this.tableName +
                         '      WHERE sid = ? And cid = ?' +
                         '      GROUP By `lid`, `pid`, `cbid`' +
                         '  ) As m ' +
-                        '  ON (c.stimes * ' + timesLen + ' + c.sorder) = m.flow And c.lid = m.lid And c.pid = m.pid And c.cbid = m.cbid' +
+                        '  ON (c.stimes * ' + timesLen + ' + c.sorder) = m.flow And c.lid = m.lid And c.pid = m.pid And c.cbid = m.cbid And c.sid = m.sid' +
                         '  LEFT JOIN ' + this.ctx.service.ledger.tableName + ' As l ON c.lid = l.id' +
                         '  LEFT JOIN ' + this.ctx.service.pos.tableName + ' As p ON c.pid = p.id';
             const sqlParam = [sid, cid];

+ 11 - 1
app/view/setting/fun.ejs

@@ -11,6 +11,16 @@
                 <div class="row m-0 mt-3">
                     <div class="col-6">
                         <div class="form-group">
+                            <label>超计控制</label>
+                            <div>
+                                <div class="form-check form-check-inline">
+                                    <input class="form-check-input" type="checkbox" name="ban_over" <% if (funRela.banOver) { %>checked<% } %> onchange="updateSetting();">
+                                    <label class="form-check-label" for="inlineCheckbox6">超计时限制上报审批/审批通过</label>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="form-group">
                             <label>中间计量模式设置</label>
                             <div>
                                 <% for (const i in imType) { %>
@@ -36,6 +46,6 @@
         autoFlashHeight();
     });
     const updateSetting = function () {
-        postData('/setting/fun/update', {imType: parseInt($('[name=im_type]:checked').val())});
+        postData('/setting/fun/update', {imType: parseInt($('[name=im_type]:checked').val()), banOver: $('[name=ban_over]')[0].checked});
     }
 </script>

+ 127 - 58
builder_report_index_define.js

@@ -187,6 +187,8 @@ const change = {
         { name: '金额_8', field: 'tp_8', type: dataType.currency, tag: { type: 'tp' } },
         { name: '金额_9', field: 'tp_9', type: dataType.currency, tag: { type: 'tp' } },
         { name: '附件名称列表', field: 'attNames', type: dataType.currency },
+        { name: '(空) 截止本期-已执行(%)', field: 'used_ratio', type: dataType.currency },
+        { name: '(空) 本期使用', field: 'is_used', type: dataType.int },
     ],
 };
 const change_bills = {
@@ -233,6 +235,9 @@ const change_bills = {
         { name: '单位工程', field: 'xmj_dwgc', type: dataType.str },
         { name: '分部工程', field: 'xmj_fbgc', type: dataType.str },
         { name: '分项工程', field: 'xmj_fxgc', type: dataType.str },
+        { name: '(空) 截止本期-已变更', field: 'used_qty', type: dataType.currency },
+        { name: '(空) 变更令-本期使用', field: 'is_used_bgl', type: dataType.int },
+        { name: '(空) 变更清单-本期使用', field: 'is_used', type: dataType.int },
     ],
 };
 // 期 - 清单
@@ -1412,61 +1417,6 @@ const sign_select = {
     ],
 };
 
-const stage_change_bills = {
-    name: '期-变更清单 调用明细(mem_stage_change_bills)',
-    remark: '',
-    key: 'mem_stage_change_bills',
-    id: 48,
-    prefix: '期-变更清单 调用明细',
-    cols: [
-        { name: '变更令id', field: 'cid', type: dataType.str },
-        { name: '变更清单id', field: 'cbid', type: dataType.int },
-        { name: '变更数量', field: 'qty', type: dataType.int },
-        { name: '变更令-批复编号', field: 'c_code', type: dataType.str },
-        { name: '变更令-变更名称', field: 'c_name', type: dataType.str },
-        { name: '变更令-变更图号', field: 'c_new_code', type: dataType.str },
-        { name: '变更令-变更设计图名称', field: 'c_new_name', type: dataType.str },
-        { name: '变更令-工程变更理由及内容', field: 'c_content', type: dataType.str },
-        { name: '变更令-工程变更合同依据', field: 'c_basis', type: dataType.str },
-        { name: '变更令-变更状态发生时间', field: 'c_cin_time', type: dataType.str },
-        { name: '变更清单-清单编号', field: 'b_code', type: dataType.str },
-        { name: '变更清单-名称', field: 'name', type: dataType.str },
-        { name: '变更清单-单位', field: 'unit', type: dataType.str },
-        { name: '变更清单-单价', field: 'unit_price', type: dataType.str },
-        { name: '变更令-变更类型', field: 'c_type', type: dataType.str },
-        { name: '变更令-变更类别', field: 'c_class', type: dataType.int },
-        { name: '变更令-变更性质', field: 'c_quality', type: dataType.int },
-        { name: '调用期-序号', field: 's_order', type: dataType.int },
-    ],
-};
-
-const stage_change_ledger = {
-    name: '期-变更台账(mem_stage_change_ledger)',
-    remark: '',
-    key: 'mem_stage_change_ledger',
-    id: 49,
-    prefix: '期-变更台账',
-    cols: [
-        { name: '项目节编号', field: 'code', type: dataType.str },
-        { name: '名称', field: 'name', type: dataType.str },
-        { name: '台账-金额', field: 'total_price', type: dataType.currency },
-        { name: '签约-金额', field: 'deal_tp', type: dataType.currency },
-        { name: '本期-合同-金额', field: 'contract_tp', type: dataType.currency },
-        { name: '本期-变更-金额', field: 'qc_tp', type: dataType.currency },
-        { name: '本期-完成-金额', field: 'gather_tp', type: dataType.currency },
-        { name: '截止本期-合同-金额', field: 'end_contract_tp', type: dataType.currency },
-        { name: '截止本期-变更-金额', field: 'end_qc_tp', type: dataType.currency },
-        { name: '截止本期-完成-金额', field: 'end_gather_tp', type: dataType.currency },
-        { name: '变更令-批复编号', field: 'c_code', type: dataType.str },
-        { name: '变更令-变更名称', field: 'c_name', type: dataType.str },
-        { name: '变更令-变更图号', field: 'c_new_code', type: dataType.str },
-        { name: '变更令-变更设计图名称', field: 'c_new_name', type: dataType.str },
-        { name: '变更令-工程变更理由及内容', field: 'c_content', type: dataType.str },
-        { name: '变更令-工程变更合同依据', field: 'c_basis', type: dataType.str },
-        { name: '变更令-变更状态发生时间', field: 'c_cin_time', type: dataType.str },
-    ],
-};
-
 const gcl_gather_bills = {
     name: '工程量清单汇总2专用 - 工程量清单',
     remark: '',
@@ -1511,7 +1461,6 @@ const gcl_gather_bills = {
         { name: '备用6-金额', field: 'spec6_tp', type: dataType.currency },
     ],
 };
-
 const gcl_gather_xmj = {
     name: '工程量清单汇总2专用 - 相关项目节',
     remark: '',
@@ -1562,7 +1511,6 @@ const ledger_tag = {
         { name: '最后编辑时间', field: 'modify_time', type: dataType.time },
     ],
 };
-
 const stage_tag = {
     name: '期 - 台账书签(仅显示当前登录用户可见书签)',
     remark: '',
@@ -1580,7 +1528,6 @@ const stage_tag = {
         { name: '最后编辑时间', field: 'modify_time', type: dataType.time },
     ],
 };
-
 const all_tag = {
     name: '全部书签(台账&全部期&所有人)',
     remark: '',
@@ -1600,6 +1547,60 @@ const all_tag = {
         { name: '最后编辑时间', field: 'modify_time', type: dataType.time },
     ],
 };
+
+const stage_change_bills = {
+    name: '期-变更清单 调用明细(mem_stage_change_bills)',
+    remark: '',
+    key: 'mem_stage_change_bills',
+    id: 48,
+    prefix: '期-变更清单 调用明细',
+    cols: [
+        { name: '变更令id', field: 'cid', type: dataType.str },
+        { name: '变更清单id', field: 'cbid', type: dataType.int },
+        { name: '变更数量', field: 'qty', type: dataType.int },
+        { name: '变更令-批复编号', field: 'c_code', type: dataType.str },
+        { name: '变更令-变更名称', field: 'c_name', type: dataType.str },
+        { name: '变更令-变更图号', field: 'c_new_code', type: dataType.str },
+        { name: '变更令-变更设计图名称', field: 'c_new_name', type: dataType.str },
+        { name: '变更令-工程变更理由及内容', field: 'c_content', type: dataType.str },
+        { name: '变更令-工程变更合同依据', field: 'c_basis', type: dataType.str },
+        { name: '变更令-变更状态发生时间', field: 'c_cin_time', type: dataType.str },
+        { name: '变更清单-清单编号', field: 'b_code', type: dataType.str },
+        { name: '变更清单-名称', field: 'name', type: dataType.str },
+        { name: '变更清单-单位', field: 'unit', type: dataType.str },
+        { name: '变更清单-单价', field: 'unit_price', type: dataType.str },
+        { name: '变更令-变更类型', field: 'c_type', type: dataType.str },
+        { name: '变更令-变更类别', field: 'c_class', type: dataType.int },
+        { name: '变更令-变更性质', field: 'c_quality', type: dataType.int },
+        { name: '调用期-序号', field: 's_order', type: dataType.int },
+    ],
+};
+const stage_change_ledger = {
+    name: '期-变更台账(mem_stage_change_ledger)',
+    remark: '',
+    key: 'mem_stage_change_ledger',
+    id: 49,
+    prefix: '期-变更台账',
+    cols: [
+        { name: '项目节编号', field: 'code', type: dataType.str },
+        { name: '名称', field: 'name', type: dataType.str },
+        { name: '台账-金额', field: 'total_price', type: dataType.currency },
+        { name: '签约-金额', field: 'deal_tp', type: dataType.currency },
+        { name: '本期-合同-金额', field: 'contract_tp', type: dataType.currency },
+        { name: '本期-变更-金额', field: 'qc_tp', type: dataType.currency },
+        { name: '本期-完成-金额', field: 'gather_tp', type: dataType.currency },
+        { name: '截止本期-合同-金额', field: 'end_contract_tp', type: dataType.currency },
+        { name: '截止本期-变更-金额', field: 'end_qc_tp', type: dataType.currency },
+        { name: '截止本期-完成-金额', field: 'end_gather_tp', type: dataType.currency },
+        { name: '变更令-批复编号', field: 'c_code', type: dataType.str },
+        { name: '变更令-变更名称', field: 'c_name', type: dataType.str },
+        { name: '变更令-变更图号', field: 'c_new_code', type: dataType.str },
+        { name: '变更令-变更设计图名称', field: 'c_new_name', type: dataType.str },
+        { name: '变更令-工程变更理由及内容', field: 'c_content', type: dataType.str },
+        { name: '变更令-工程变更合同依据', field: 'c_basis', type: dataType.str },
+        { name: '变更令-变更状态发生时间', field: 'c_cin_time', type: dataType.str },
+    ],
+};
 const stage_change = {
     name: '本期-变更清单-全审批人 调用明细(mem_stage_change)',
     remark: '',
@@ -1620,6 +1621,73 @@ const stage_change = {
     ],
 };
 
+const stage_change_info = {
+    name: '变更概况(mem_change_info)',
+    remark: '',
+    id: 65,
+    key: 'mem_change_info',
+    prefix: '变更概况',
+    cols: [
+        { name: '变更令id', field: 'cid', type: dataType.str },
+        { name: '变更令号', field: 'code', type: dataType.str },
+        { name: '批复文号', field: 'w_code', type: dataType.str },
+        { name: '批复编号', field: 'p_code', type: dataType.str },
+        { name: '变更名称', field: 'name', type: dataType.str },
+        { name: '桩号', field: 'peg', type: dataType.str },
+        { name: '原设计图名称', field: 'org_name', type: dataType.str },
+        { name: '原图号', field: 'org_code', type: dataType.str },
+        { name: '变更设计图名称', field: 'new_name', type: dataType.str },
+        { name: '变更图号', field: 'new_code', type: dataType.str },
+        { name: '工程变更理由及内容', field: 'content', type: dataType.str },
+        { name: '工程变更合同依据', field: 'basis', type: dataType.str },
+        { name: '变更工程量数量计算式', field: 'expr', type: dataType.str },
+        { name: '备注', field: 'memo', type: dataType.str },
+        { name: '变更类型', field: 'type', type: dataType.str },
+        { name: '变更类别', field: 'class', type: dataType.int },
+        { name: '变更性质', field: 'quality', type: dataType.int },
+        { name: '变更提出单位', field: 'company', type: dataType.str },
+        { name: '费用承担方', field: 'charge', type: dataType.int },
+        { name: '金额', field: 'total_price', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '变更状态发生时间(时间戳)', field: 'cin_time', type: dataType.str },
+        { name: '完成审批时间(时间戳)', field: 'sin_time', type: dataType.str },
+        { name: '金额_1', field: 'tp_1', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '金额_2', field: 'tp_2', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '金额_3', field: 'tp_3', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '金额_4', field: 'tp_4', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '金额_5', field: 'tp_5', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '金额_6', field: 'tp_6', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '金额_7', field: 'tp_7', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '金额_8', field: 'tp_8', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '金额_9', field: 'tp_9', type: dataType.currency, tag: { type: 'tp' } },
+        { name: '附件名称列表', field: 'attNames', type: dataType.currency },
+        { name: '截止本期-已执行(%)', field: 'used_ratio', type: dataType.currency },
+        { name: '本期使用', field: 'cur_used', type: dataType.int },
+    ],
+};
+const stage_change_info_bills = {
+    name: '变更概况-清单(mem_change_info_bills)',
+    remark: '',
+    id: 66,
+    key: 'mem_change_info_bills',
+    prefix: '变更概况-清单',
+    cols: [
+        { name: '变更令id', field: 'cid', type: dataType.str },
+        { name: '签约清单id或台账id', field: 'lid', type: dataType.str },
+        { name: '清单编号', field: 'code', type: dataType.str },
+        { name: '名称', field: 'name', type: dataType.str },
+        { name: '单位', field: 'unit', type: dataType.str },
+        { name: '单价', field: 'unit_price', type: dataType.currency, tag: { type: 'up' } },
+        { name: '变更详情', field: 'detail', type: dataType.str },
+        { name: '变更部位', field: 'bwmx', type: dataType.str },
+        { name: '数量', field: 'qty', type: dataType.currency },
+        { name: '金额', field: 'tp', type: dataType.currency },
+        { name: '截止本期-已变更', field: 'used_qty', type: dataType.currency },
+        { name: '可执行', field: 'valid_qty', type: dataType.currency },
+        { name: '本期使用数量', field: 'cur_qty', type: dataType.currency },
+        { name: '本期使用', field: 'cur_used', type: dataType.int },
+    ],
+};
+
 // 定制表
 // 季华项目 中间计量报表--变更相关 汇总对比表
 const jh_im_change = {
@@ -1904,6 +1972,7 @@ const defines = [
     ledger_tag, stage_tag, all_tag,
     jh_im_change, jh_gather_im_change, jh_gather_stage_bills_compare,
     custom_select,
+    stage_change_info, stage_change_info_bills,
 ];
 for (const d of defines) {
     exportTableDefine(d);