Browse Source

Task #4282 统计截止本期正负变更相关

MaiXinRong 2 năm trước cách đây
mục cha
commit
23764322e7

+ 3 - 0
app/lib/revise_price.js

@@ -68,6 +68,7 @@ class revisePriceCalc {
             result.ibData.push({
                 tid: newStage.tid, sid: newStage.id, sorder: newStage.order, lid: node.id, org_price: node.pre_unit_price,
                 contract_pc_tp: node.contract_pc_tp, qc_pc_tp: node.qc_pc_tp, pc_tp: node.pc_tp,
+                positive_pc_tp: node.positive_pc_tp, negative_pc_tp: node.negative_pc_tp,
             });
         });
         if (result.ibData.length > 0) await transaction.insert(this.ctx.service.stageBillsPc.tableName, result.ibData);
@@ -136,6 +137,7 @@ class revisePriceCalc {
                 result.bpcData.push({
                     tid: stage.tid, sid: stage.id, sorder: stage.order, lid: node.id, org_price: node.pre_unit_price,
                     contract_pc_tp: node.contract_pc_tp, qc_pc_tp: node.qc_pc_tp, pc_tp: node.pc_tp,
+                    positive_pc_tp: node.positive_pc_tp, negative_pc_tp: node.negative_pc_tp,
                 });
             }
         });
@@ -246,6 +248,7 @@ class revisePriceCalc {
                 result.bpcData.push({
                     tid: stage.tid, sid: stage.id, sorder: stage.order, lid: node.id, org_price: node.pre_unit_price,
                     contract_pc_tp: node.contract_pc_tp, qc_pc_tp: node.qc_pc_tp, pc_tp: node.pc_tp,
+                    positive_pc_tp: node.positive_pc_tp, negative_pc_tp: node.negative_pc_tp,
                 });
             }
         });

+ 0 - 7
app/public/js/stage.js

@@ -1504,13 +1504,6 @@ $(document).ready(() => {
             return target.hitTestType === spreadNS.SheetArea.viewport || target.hitTestType === spreadNS.SheetArea.rowHeader;
         },
         items: {
-            // copyDisplay: {
-            //     name: '仅复制可见数据',
-            //     callback: function (key, opt) {
-            //         SpreadJsObj.Copy
-            //     }
-            // },
-            // copySpr: '----',
             'locateZjjl': {
                 name: '定位至中间计量',
                 icon: 'fa-sign-in',

+ 8 - 0
app/service/stage.js

@@ -229,9 +229,13 @@ module.exports = app => {
                     const pcSum = await this.ctx.service.stageBillsPc.getSumTotalPrice(stage);
                     stage.contract_tp = tpData.contract_tp;
                     stage.qc_tp = tpData.qc_tp;
+                    stage.positive_qc_tp = tpData.positive_qc_tp;
+                    stage.negative_qc_tp = tpData.negative_qc_tp;
                     stage.contract_pc_tp = pcSum.contract_pc_tp;
                     stage.qc_pc_tp = pcSum.qc_pc_tp;
                     stage.pc_tp = pcSum.pc_tp;
+                    stage.positive_qc_pc_tp = pcSum.positive_qc_pc_tp;
+                    stage.negative_qc_pc_tp = pcSum.negative_qc_pc_tp;
                     stage.tp = this.ctx.helper.sum([stage.contract_tp, stage.qc_tp, stage.pc_tp]);
                     const tp = await this.ctx.service.stagePay.getSpecialTotalPrice(stage);
                     stage.yf_tp = tp.yf;
@@ -240,7 +244,9 @@ module.exports = app => {
                     await this.update({
                         check_calc: false,
                         contract_tp: stage.contract_tp, qc_tp: stage.qc_tp,
+                        positive_qc_tp: stage.positive_qc_tp, negative_qc_tp: stage.negative_qc_tp,
                         contract_pc_tp: stage.contract_pc_tp || 0, qc_pc_tp: stage.qc_pc_tp || 0, pc_tp: stage.pc_tp || 0,
+                        positive_qc_pc_tp: stage.positive_qc_pc_tp || 0, negative_qc_pc_tp: stage.negative_qc_pc_tp || 0,
                         yf_tp: stage.yf_tp, sf_tp: stage.sf_tp,
                     }, { id: stage.id });
                 } else if (stage.tp_history) {
@@ -248,6 +254,8 @@ module.exports = app => {
                     if (his) {
                         stage.contract_tp = his.contract_tp;
                         stage.qc_tp = his.qc_tp;
+                        stage.positive_qc_tp = his.positive_qc_tp;
+                        stage.negative_qc_tp = his.negative_qc_tp;
                         stage.yf_tp = his.yf_tp;
                         stage.sf_tp = his.sf_tp;
                         stage.tp = this.ctx.helper.sum([stage.contract_tp, stage.qc_tp, stage.pc_tp]);

+ 26 - 6
app/service/stage_bills.js

@@ -162,6 +162,14 @@ module.exports = app => {
                 data.qc_qty = this.round(data.qc_qty, precision.value);
                 data.qc_tp = this.ctx.helper.mul(data.qc_qty, ledgerData.unit_price, info.decimal.tp);
             }
+            if (data.positive_qc_qty !== undefined) {
+                data.positive_qc_qty = this.round(data.positive_qc_qty, precision.value);
+                data.positive_qc_tp = this.ctx.helper.mul(data.positive_qc_qty, ledgerData.unit_price, info.decimal.tp);
+            }
+            if (data.negative_qc_qty !== undefined) {
+                data.negative_qc_qty = this.round(data.negative_qc_qty, precision.value);
+                data.negative_qc_tp = this.ctx.helper.mul(data.negative_qc_qty, ledgerData.unit_price, info.decimal.tp);
+            }
             if (ledgerData.is_tp && data.contract_tp !== undefined) {
                 data.contract_tp = this.ctx.helper.round(data.contract_tp, info.decimal.tp);
             }
@@ -198,9 +206,15 @@ module.exports = app => {
                 d.qc_qty = this.round(insertData.qc_qty, precision.value);
                 d.qc_tp = this.ctx.helper.mul(d.qc_qty, ledgerData.unit_price, info.decimal.tp);
             }
+            if (insertData.positive_qc_qty !== undefined) {
+                d.positive_qc_qty = this.round(insertData.positive_qc_qty, precision.value);
+                d.positive_qc_tp = this.ctx.helper.mul(d.positive_qc_qty, ledgerData.unit_price, info.decimal.tp);
+            }
+            if (insertData.negative_qc_qty !== undefined) {
+                d.negative_qc_qty = this.round(insertData.negative_qc_qty, precision.value);
+                d.negative_qc_tp = this.ctx.helper.mul(d.negative_qc_qty, ledgerData.unit_price, info.decimal.tp);
+            }
             d.qc_minus_qty = insertData.qc_minus_qty ? this.round(insertData.qc_minus_qty, precision.value) : 0;
-            d.positive_qc_qty = insertData.positive_qc_qty ? this.round(insertData.positive_qc_qty, precision.value) : 0;
-            d.negative_qc_qty = insertData.negative_qc_qty ? this.round(insertData.negative_qc_qty, precision.value) : 0;
             if (insertData.postil) {
                 d.postil = insertData.postil;
             }
@@ -281,8 +295,6 @@ module.exports = app => {
             const posGather = await this.ctx.service.stagePos.getPosGather(tid, sid, lid, transaction);
             if (!posGather) { return; }
             posGather.qc_minus_qty = posGather.qc_minus_qty || 0;
-            posGather.positive_qc_qty = posGather.positive_qc_qty || 0;
-            posGather.negative_qc_qty = posGather.negative_qc_qty || 0;
 
             const precision = this.ctx.helper.findPrecision(info.precision, ledgerBills.unit);
             // 计算
@@ -294,6 +306,14 @@ module.exports = app => {
                 posGather.qc_qty = this.round(posGather.qc_qty, precision.value);
                 posGather.qc_tp = this.ctx.helper.mul(posGather.qc_qty, ledgerBills.unit_price, info.decimal.tp);
             }
+            if (posGather.positive_qc_qty !== undefined) {
+                posGather.positive_qc_qty = this.round(posGather.positive_qc_qty, precision.value);
+                posGather.positive_qc_tp = this.ctx.helper.mul(posGather.positive_qc_qty, ledgerBills.unit_price, info.decimal.tp);
+            }
+            if (posGather.negative_qc_qty !== undefined) {
+                posGather.negative_qc_qty = this.round(posGather.negative_qc_qty, precision.value);
+                posGather.negative_qc_tp = this.ctx.helper.mul(posGather.negative_qc_qty, ledgerBills.unit_price, info.decimal.tp);
+            }
             if (stageBills) {
                 if (stageBills.contract_qty === posGather.contract_qty && stageBills.qc_qty === posGather.qc_qty && stageBills.qc_minus_qty === posGather.qc_minus_qty) {
                     return;
@@ -344,7 +364,7 @@ module.exports = app => {
         }
 
         async getSumTotalPrice(stage) {
-            const sql = 'SELECT Sum(`contract_tp`) As `contract_tp`, Sum(`qc_tp`) As `qc_tp` FROM ' + this.departTableName(stage.tid) + ' As Bills ' +
+            const sql = 'SELECT Sum(`contract_tp`) As `contract_tp`, Sum(`qc_tp`) As `qc_tp`, Sum(`positive_qc_tp`) As positive_qc_tp, Sum(`negative_qc_tp`) As negative_qc_tp FROM ' + this.departTableName(stage.tid) + ' As Bills ' +
                 '  INNER JOIN ( ' +
                 '    SELECT MAX(`times` * ' + timesLen + ' + `order`) As `flow`, `lid`, `sid` From ' + this.departTableName(stage.tid) +
                 '      WHERE (`times` < ? OR (`times` = ? AND `order` <= ?)) AND `sid` = ?' +
@@ -357,7 +377,7 @@ module.exports = app => {
         }
 
         async getSumTotalPriceFilter(stage, operate, filter) {
-            const sql = 'SELECT Sum(`contract_tp`) As `contract_tp`, Sum(`qc_tp`) As `qc_tp`' +
+            const sql = 'SELECT Sum(`contract_tp`) As `contract_tp`, Sum(`qc_tp`) As `qc_tp`, Sum(`positive_qc_tp`) As positive_qc_tp, Sum(`negative_qc_tp`) As negative_qc_tp' +
                 '  FROM ' + this.departTableName(stage.tid) + ' As Bills ' +
                 '  INNER JOIN ( ' +
                 '    SELECT MAX(`times` * ' + timesLen + ' + `order`) As `flow`, `lid` From ' + this.departTableName(stage.tid) +

+ 16 - 0
app/view/tender/detail.ejs

@@ -139,6 +139,22 @@
                                             </div>
                                         </div>
                                     </div>
+                                    <div class="col-auto pl-0">
+                                        <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
+                                            <div class="card-body">
+                                                <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.end_positive_qc_tp) %></h5>
+                                                <p class="card-text text-muted">截止本期负变更</p>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-auto pl-0">
+                                        <div class="card text-center <% if (!ctx.tender.info.display.dayMode) { %>bg-dark text-white<% } %>">
+                                            <div class="card-body">
+                                                <h5 class="card-title card-big-title"><%- ctx.helper.formatMoney(tender.end_negative_qc_tp) %></h5>
+                                                <p class="card-text text-muted">截止本期负变更</p>
+                                            </div>
+                                        </div>
+                                    </div>
                                 </div>
                             </div>
                         </div>

+ 189 - 24
db_script/change.js

@@ -4,7 +4,6 @@ const defaultInfo = require('../app/const/tender_info');
 const BaseUtil = require('./baseUtils');
 const querySql = BaseUtil.querySql;
 const ZhCalc = BaseUtil.ZhCalc;
-const audit = require('../app/const/audit');
 
 const checkChange = async function(change, decimal) {
     const changeBills = await querySql('Select * From zh_change_audit_list where cid = ?', [change.cid]);
@@ -22,33 +21,172 @@ const checkChange = async function(change, decimal) {
 };
 
 const checkStage = async function(stage, decimal, preStage) {
-    let stageChange;
-    if (stage.status === 3) {
-        stageChange = await querySql('Select scf.*, cal.unit_price From zh_stage_change_final scf Left Join zh_change_audit_list cal ON scf.cbid = cal.id where sid = ?', [stage.id]);
-    } else {
-        const stageChangeAll = await querySql('SELECT sc.*, cal.unit_price FROM zh_stage_change sc Left Join zh_change_audit_list cal ON sc.cbid = cal.id WHERE sid = ?', [stage.id]);
-        stageChange = BaseUtil.filterLastestData(stageChangeAll, ['lid', 'pid', 'cbid', 'no_value'], 'stimes', 'sorder');
+    const billsTable = 'zh_stage_bills_' + stage.tid % 10;
+    const stageBills = await querySql(`Select * From ${billsTable} Where sid = ?`, [stage.id]);
+
+    const history = stage.tp_history ? JSON.parse(stage.tp_history) : null;
+    if (history) {
+        for (const h of history) {
+            const sbFilter = stageBills.filter(x => {
+                return x.times < h.times || (x.times = h.times && x.order <= h.order);
+            });
+            const sbLatest = BaseUtil.filterLastestData(sbFilter, ['lid']);
+            history.positive_qc_tp = 0;
+            history.negative_qc_tp = 0;
+            for (const sbl of sbLatest) {
+                stage.positive_qc_tp = ZhCalc.add(sbl.positive_qc_tp, stage.positive_qc_tp);
+                stage.negative_qc_tp = ZhCalc.add(sbl.negative_qc_tp, stage.negative_qc_tp);
+            }
+        }
+        await querySql('Update zh_stage Set tp_history = ? Where id = ?', [JSON.stringify(history), stage.id]);
     }
-    if (stageChange.length === 0) return;
+
+    const stageBillsLatest = BaseUtil.filterLastestData(stageBills, ['lid']);
+    if (stageBillsLatest.length === 0) return;
 
     stage.positive_qc_tp = 0;
-    stage.pre_positive_qc_tp = preStage ? ZhCalc.add(stage.positive_qc_tp, stage.pre_positive_qc_tp) : 0;
+    stage.pre_positive_qc_tp = preStage ? ZhCalc.add(preStage.positive_qc_tp, preStage.pre_positive_qc_tp) : 0;
     stage.negative_qc_tp = 0;
-    stage.pre_negative_qc_tp = preStage ? ZhCalc.add(stage.negative_qc_tp, stage.pre_negative_qc_tp) : 0;
-    for (const sc of stageChange) {
-        if (sc.no_value || !sc.qty) continue;
-        const tp = ZhCalc.mul(sc.unit_price, sc.qty, decimal.tp);
-        if (sc.minus) {
-            stage.negative_qc_tp = ZhCalc.add(tp, stage.negative_qc_tp);
-        } else {
-            stage.positive_qc_tp = ZhCalc.add(tp, stage.positive_qc_tp);
-        }
+    stage.pre_negative_qc_tp = preStage ? ZhCalc.add(preStage.negative_qc_tp, preStage.pre_negative_qc_tp) : 0;
+    for (const sbl of stageBillsLatest) {
+        stage.positive_qc_tp = ZhCalc.add(sbl.positive_qc_tp, stage.positive_qc_tp);
+        stage.negative_qc_tp = ZhCalc.add(sbl.negative_qc_tp, stage.negative_qc_tp);
     }
 
     await querySql('Update zh_stage Set positive_qc_tp = ?, pre_positive_qc_tp = ?, negative_qc_tp = ?, pre_negative_qc_tp = ? Where id = ?', [stage.positive_qc_tp, stage.pre_positive_qc_tp, stage.negative_qc_tp, stage.pre_negative_qc_tp, stage.id]);
     console.log(`Update Stage ${stage.order}: p_tp(${stage.positive_qc_tp}), pre_p_tp(${stage.pre_positive_qc_tp}), n_tp(${stage.negative_qc_tp}), pre_n_tp(${stage.pre_negative_qc_tp})`);
 };
 
+const checkStagePos = async function (stage, decimal, preStage) {
+    const posTable = 'zh_stage_pos_' + stage.tid % 20;
+    const posFinalTable = 'zh_stage_pos_final_' + stage.tid % 20;
+    // 计算更新stagePos相关
+    const stageChange = await querySql('SELECT * FROM zh_stage_change WHERE sid = ?', [stage.id]);
+    const stagePos = await querySql(`SELECT * From ${posTable} where sid = ?`, [stage.id]);
+    for (const sp of stagePos) {
+        const filterTimesOrder = stageChange.filter(x => {
+            if (x.pid === sp.pid && !x.no_value) {
+                return x.times < sp.times || (x.stimes === sp.times && x.sorder <= sp.order);
+            } else {
+                return false;
+            }
+        });
+        const filterLatest = BaseUtil.filterLastestData(filterTimesOrder, ['cbid'], 'stimes', 'sorder');
+        if (filterLatest.length === 0) continue;
+
+        sp.positive_qc_qty = 0;
+        sp.negative_qc_qty = 0;
+        for (const fl of filterLatest) {
+            if (fl.minus) {
+                sp.negative_qc_qty = ZhCalc.add(sp.negative_qc_qty, fl.qty);
+            } else {
+                sp.positive_qc_qty = ZhCalc.add(sp.positive_qc_qty, fl.qty);
+            }
+        }
+        if (sp.positive_qc_qty || sp.negative_qc_qty)
+            await querySql(`Update ${posTable} Set positive_qc_qty = ?, negative_qc_qty = ? Where id = ?`, [sp.positive_qc_qty, sp.negative_qc_qty, sp.id]);
+    }
+    console.log(`Update StagePos ${stage.order}: ${stagePos.length}`);
+    // 计算更新stagePosFinal
+    const stagePosLatest = BaseUtil.filterLastestData(stagePos, ['pid']);
+    const stagePosLatestIndex = {};
+    stagePosLatest.forEach(x => { stagePosLatestIndex[x.pid] = x; });
+    const preStagePosFinal = preStage ? await querySql(`Select * From ${posFinalTable} Where sid = ?`, [preStage.id]) : [];
+    const preStagePosFinalIndex = {};
+    preStagePosFinal.forEach(x => { preStagePosFinalIndex[x.pid] = x; });
+    const stagePosFinal = await querySql(`Select * From ${posFinalTable} Where sid = ?`, [stage.id]);
+    for (const spf of stagePosFinal) {
+        const curSp = stagePosLatestIndex[spf.pid];
+        const preSp = preStagePosFinalIndex[spf.pid];
+        if (preSp) {
+            if (curSp) {
+                spf.positive_qc_qty = ZhCalc.add(preSp.positive_qc_qty, curSp.positive_qc_qty);
+                spf.negative_qc_qty = ZhCalc.add(preSp.negative_qc_qty, curSp.negative_qc_qty);
+            } else {
+                spf.positive_qc_qty = preSp.positive_qc_qty;
+                spf.negative_qc_qty = preSp.negative_qc_qty;
+            }
+        } else if (curSp) {
+            spf.positive_qc_qty = curSp.positive_qc_qty;
+            spf.negative_qc_qty = curSp.negative_qc_qty;
+        }
+        if (spf.positive_qc_qty || spf.negative_qc_qty)
+            await querySql(`Update ${posFinalTable} Set positive_qc_qty = ?, negative_qc_qty = ? Where id = ?`, [spf.positive_qc_qty, spf.negative_qc_qty, spf.id]);
+    }
+    console.log(`Update StagePosFinal ${stage.order}: ${stagePosFinal.length}`);
+};
+
+const checkStageBills = async function (stage, decimal, preStage) {
+    const billsTable = 'zh_stage_bills_' + stage.tid % 10;
+    const billsFinalTable = 'zh_stage_bills_final_' + stage.tid % 10;
+    // 计算更新stagePos相关
+    const stageChange = await querySql('SELECT sc.*, cal.unit_price FROM zh_stage_change sc Left Join zh_change_audit_list cal ON sc.cbid = cal.id WHERE sid = ?', [stage.id]);
+    const stageBills = await querySql(`SELECT * From ${billsTable} where sid = ?`, [stage.id]);
+    for (const sb of stageBills) {
+        const filterTimesOrder = stageChange.filter(x => {
+            if (x.lid === sb.lid && !x.no_value) {
+                return x.times < sb.times || (x.stimes === sb.times && x.sorder <= sb.order);
+            } else {
+                return false;
+            }
+        });
+        const filterLatest = BaseUtil.filterLastestData(filterTimesOrder, ['pid', 'cbid'], 'stimes', 'sorder');
+        if (filterLatest.length === 0) continue;
+
+        sb.positive_qc_qty = 0;
+        sb.negative_qc_qty = 0;
+        for (const fl of filterLatest) {
+            if (!sb.unit_price) sb.unit_price = fl.unit_price;
+            if (fl.minus) {
+                sb.negative_qc_qty = ZhCalc.add(sb.negative_qc_qty, fl.qty);
+            } else {
+                sb.positive_qc_qty = ZhCalc.add(sb.positive_qc_qty, fl.qty);
+            }
+        }
+        if (sb.positive_qc_qty || sb.negative_qc_qty) {
+            sb.positive_qc_tp = ZhCalc.mul(sb.unit_price, sb.positive_qc_qty, decimal.tp);
+            sb.negative_qc_tp = ZhCalc.mul(sb.unit_price, sb.negative_qc_qty, decimal.tp);
+            await querySql(`Update ${billsTable} Set positive_qc_qty = ?, positive_qc_tp = ?, negative_qc_qty = ?, negative_qc_tp = ? Where id = ?`,
+                [sb.positive_qc_qty, sb.positive_qc_tp, sb.negative_qc_qty, sb.negative_qc_tp, sb.id]);
+        }
+    }
+    console.log(`Update StageBills ${stage.order}: ${stageBills.length}`);
+    // 计算更新stagePosFinal
+    const stageBillsLatest = BaseUtil.filterLastestData(stageBills, ['lid']);
+    const stageBillsLatestIndex = {};
+    stageBillsLatest.forEach(x => { stageBillsLatestIndex[x.lid] = x; });
+    const preStageBillsFinal = preStage ? await querySql(`Select * From ${billsFinalTable} Where sid = ?`, [preStage.id]) : [];
+    const preStageBillsFinalIndex = {};
+    preStageBillsFinal.forEach(x => { preStageBillsFinalIndex[x.lid] = x; });
+    const stageBillsFinal = await querySql(`Select * From ${billsFinalTable} Where sid = ?`, [stage.id]);
+    for (const sbf of stageBillsFinal) {
+        const curSb = stageBillsLatestIndex[sbf.lid];
+        const preSb = preStageBillsFinalIndex[sbf.lid];
+        if (preSb) {
+            if (curSb) {
+                sbf.positive_qc_qty = ZhCalc.add(preSb.positive_qc_qty, curSb.positive_qc_qty);
+                sbf.positive_qc_tp = ZhCalc.add(preSb.positive_qc_tp, curSb.positive_qc_tp);
+                sbf.negative_qc_qty = ZhCalc.add(preSb.negative_qc_qty, curSb.negative_qc_qty);
+                sbf.negative_qc_tp = ZhCalc.add(preSb.negative_qc_tp, curSb.negative_qc_tp);
+            } else {
+                sbf.positive_qc_qty = preSb.positive_qc_qty;
+                sbf.positive_qc_tp = preSb.positive_qc_tp;
+                sbf.negative_qc_qty = preSb.negative_qc_qty;
+                sbf.negative_qc_tp = preSb.negative_qc_tp;
+            }
+        } else if (curSb) {
+            sbf.positive_qc_qty = curSb.positive_qc_qty;
+            sbf.positive_qc_tp = curSb.positive_qc_tp;
+            sbf.negative_qc_qty = curSb.negative_qc_qty;
+            sbf.negative_qc_tp = curSb.negative_qc_tp;
+        }
+        if (sbf.positive_qc_qty || sbf.negative_qc_qty)
+            await querySql(`Update ${billsFinalTable} Set positive_qc_qty = ?, positive_qc_tp = ?, negative_qc_qty = ?, negative_qc_tp = ? Where id = ?`,
+                [sbf.positive_qc_qty, sbf.positive_qc_tp, sbf.negative_qc_qty, sbf.negative_qc_tp, sbf.id]);
+    }
+    console.log(`Update StageBillsFinal ${stage.order}: ${stageBillsFinal.length}`);
+};
+
 const doComplete = async function() {
     try {
         const tender = await querySql('Select * From zh_tender');
@@ -57,13 +195,15 @@ const doComplete = async function() {
             const info = await querySql('Select * From zh_tender_info where tid = ?', [t.id]);
             const decimal = info[0].decimal ? JSON.parse(info[0].decimal) : defaultInfo.parseInfo.decimal;
 
-            const changes = await querySql('Select * From zh_change where tid = ?', [t.id]);
-            for (const c of changes) {
-                await checkChange(c, decimal);
-            }
+            // const changes = await querySql('Select * From zh_change where tid = ?', [t.id]);
+            // for (const c of changes) {
+            //     await checkChange(c, decimal);
+            // }
             const stage = await querySql('Select * From zh_stage where tid = ? order by `order` asc', [t.id]);
             for (const [i, s] of stage.entries()) {
-                await checkStage(s, decimal, i > 1 ? stage[i-1] : null);
+                // await checkStagePos(s, decimal, i > 0 ? stage[i-1] : null);
+                // await checkStageBills(s, decimal, i > 0 ? stage[i-1] : null);
+                await checkStage(s, decimal, i > 0 ? stage[i-1] : null);
             }
         }
     } catch (err) {
@@ -71,4 +211,29 @@ const doComplete = async function() {
     }
     BaseUtil.closePool();
 };
-doComplete();
+doComplete();
+// const doCompleteTest = async function() {
+//     try {
+//         const tender = await querySql('Select * From zh_tender where id = 860');
+//         for (const t of tender) {
+//             console.log(`Update Tender ${t.id}:`);
+//             const info = await querySql('Select * From zh_tender_info where tid = ?', [t.id]);
+//             const decimal = info[0].decimal ? JSON.parse(info[0].decimal) : defaultInfo.parseInfo.decimal;
+//
+//             const changes = await querySql('Select * From zh_change where tid = ?', [t.id]);
+//             for (const c of changes) {
+//                 await checkChange(c, decimal);
+//             }
+//             const stage = await querySql('Select * From zh_stage where tid = ? order by `order` asc', [t.id]);
+//             for (const [i, s] of stage.entries()) {
+//                 await checkStagePos(s, decimal, i > 1 ? stage[i-1] : null);
+//                 await checkStageBills(s, decimal, i > 1 ? stage[i-1] : null);
+//                 await checkStage(s, decimal, i > 1 ? stage[i-1] : null);
+//             }
+//         }
+//     } catch (err) {
+//         console.log(err);
+//     }
+//     BaseUtil.closePool();
+// };
+// doCompleteTest();

+ 19 - 1
publish.md

@@ -11,10 +11,28 @@
 如果没有特殊说明,则在第默认操作的第3步前,执行相关脚本,如果有特殊要求,需特别说明
 
 ### V3.6
+2022-08-03 ~ ...(uat) ~ ...(prod)
+3.1 change:
+    - 变更令正负变更金额,positive_tp, negative_tp
+    - 期计量,计量单元,正负变更数量,positive_qc_qty, negative_qc_qty
+    - 期计量,清单,正负变更数量、金额,positive_qc_qty, positive_qc_tp, negative_qc_qty, negative_qc_tp
+    - 期计量,截止本期缓存,计量单元,正负变更数量,positive_qc_qty, negative_qc_qty
+    - 期计量,截止本期缓存,清单,正负变更数量、金额,positive_qc_qty, positive_qc_tp, negative_qc_qty, negative_qc_tp
+    - 期计量,本期补差,无旧数据,不需兼容:positive_qc_pc_tp, negative_qc_pc_tp
+    - 期计量,本期正负变更金额,截止本期正负变更金额,positive_qc_tp, negative_qc_tp, pre_positive_qc_tp, pre_negative_pc_tp(补差无旧数据不兼容:positive_qc_pc_tp, negative_qc_pc_tp)
+
+### uat
+```bash
+$ node change uat
+```
+### prod
+```bash
+$ node change default
+```
 
 
 ### V3.5.24.0822
-2022-05-31 ~ 2022-08-22(uat) ~ ...(prod)
+2022-05-31 ~ 2022-08-02(uat) ~ 2022-08-03(prod)
 3.1. ledger_his_count: 更新ledger_history表中新增的bills_count和pos_count两个字段数据
 3.2. minus_no_value: 更新project.fun_rela.minusNoValue=false和tender_info.fun_rela.stage_change.minusNoValue=false
 

+ 60 - 20
sql/update.sql

@@ -252,65 +252,105 @@ ADD COLUMN `negative_tp`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '负变更金
 
 ALTER TABLE `zh_stage_bills_0`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_1`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_2`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_3`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_4`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_5`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_6`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_7`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_8`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_9`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 
 ALTER TABLE `zh_stage_bills_final_0`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_final_1`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_final_2`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_final_3`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_final_4`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_final_5`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_final_6`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_final_7`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_final_8`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 ALTER TABLE `zh_stage_bills_final_9`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,
-ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`;
+ADD COLUMN `positive_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_qty`,
+ADD COLUMN `negative_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `positive_qc_tp`,
+ADD COLUMN `negative_qc_tp`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `negative_qc_qty`;
 
 ALTER TABLE `zh_stage_pos_0`
 ADD COLUMN `positive_qc_qty`  decimal(24,8) NOT NULL DEFAULT 0 AFTER `qc_minus_qty`,