Browse Source

合同支付相关

MaiXinRong 1 year ago
parent
commit
f64f75c2bb
3 changed files with 84 additions and 2 deletions
  1. 1 0
      app/service/stage_audit.js
  2. 6 2
      app/service/stage_pay.js
  3. 77 0
      db_script/stage_pay_recover.js

+ 1 - 0
app/service/stage_audit.js

@@ -949,6 +949,7 @@ module.exports = app => {
                 await transaction.insert(this.tableName, checkingAuditors);
 
                 // 复制一份最新数据给下一人
+                await this.ctx.service.stagePay.clearCacheOrder(this.ctx.stage, transaction);
                 await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times, finalAudit.order + 1, transaction);
                 await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times, finalAudit.order + 2, transaction);
                 await this.ctx.service.stageJgcl.updateHistory4CheckAgain(this.ctx.stage, transaction);

+ 6 - 2
app/service/stage_pay.js

@@ -299,9 +299,9 @@ module.exports = app => {
             if (!stage || !transaction || !times || order === undefined) {
                 throw '数据错误';
             }
-            const sql = 'INSERT INTO ?? (`tid`, `sid`, `pid`, `stimes`, `sorder`, `porder`, `name`, `tp`, `expr`, `pause`,' +
+            const sql = 'INSERT INTO ?? (`tid`, `sid`, `pid`, `stimes`, `sorder`, `name`, `tp`, `expr`, `pause`,' +
                         '    `pre_tp`, `end_tp`, `pre_used`, `pre_finish`, `start_stage_order`, `postil`) ' +
-                        '  SELECT SP.`tid`, SP.`sid`, SP.`pid`, ?, ?, SP.`porder`, SP.name, SP.`tp`, SP.`expr`, SP.`pause`,' +
+                        '  SELECT SP.`tid`, SP.`sid`, SP.`pid`, ?, ?, SP.name, SP.`tp`, SP.`expr`, SP.`pause`,' +
                         '     SP.`pre_tp`, SP.`end_tp`, SP.`pre_used`, SP.`pre_finish`, SP.`start_stage_order`, SP.`postil` ' +
                         '  FROM ?? As SP' +
                         '  WHERE SP.`sid` = ? AND SP.`stimes` = ? AND SP.`sorder` = ?';
@@ -501,6 +501,10 @@ module.exports = app => {
             const sql = `UPDATE ${this.tableName} sp LEFT JOIN ${this.ctx.service.pay.tableName} p ON sp.pid = p.id SET sp.porder = p.\`order\` Where sp.sid = ? AND p.valid`;
             await transaction.query(sql, [stage.id]);
         }
+
+        async clearCacheOrder(stage, transaction) {
+            await transaction.update(this.tableName, { porder: 1}, { sid: stage.id });
+        }
     }
 
     return StagePay;

+ 77 - 0
db_script/stage_pay_recover.js

@@ -0,0 +1,77 @@
+const BaseUtil = require('./baseUtils');
+const querySql = BaseUtil.querySql;
+
+const recoverStagePayOrder = async function (pays, stage) {
+    const timesOrder = await querySql('SELECT stimes, sorder FROM zh_stage_pay WHERE sid = ? GROUP BY stimes, sorder', [stage.id]);
+    for (const to of timesOrder) {
+        const stagePays = await querySql('SELECT * FROM zh_stage_pay WHERE sid = ? and stimes = ? and sorder = ? and porder > 0 ORDER BY porder', [stage.id, to.stimes, to.sorder]);
+        if (stagePays.length === 0) continue;
+
+        const maxOrder = stagePays[stagePays.length - 1].porder;
+        let activeMaxOrder = 0;
+        for (let i = 1; i <= maxOrder; i++) {
+            const relaPays = stagePays.filter(x => { return x.porder === i; });
+            if (i > activeMaxOrder + 1) {
+                for (const rp of relaPays) {
+                    await querySql('UPDATE zh_stage_pay SET porder = 0 WHERE id = ?', [rp.id]);
+                }
+            } else {
+                if (relaPays.length > 0) activeMaxOrder = i;
+                if (relaPays.length === 1) continue;
+                const recoverPays = [];
+                for (const rp of relaPays) {
+                    const pay = pays.find(x => { return x.id === rp.pid; });
+                    if (!pay.valid) recoverPays.push(rp);
+                }
+                if (recoverPays.length === relaPays.length) recoverPays.shift();
+                for (const rp of recoverPays) {
+                    await querySql('UPDATE zh_stage_pay SET porder = 0 WHERE id = ?', [rp.id]);
+                }
+            }
+        }
+    }
+    for (const [i, pay] of pays.entries()) {
+        if (pay.order !== i + 1) await querySql('Update zh_pay Set `order` = ? Where id = ?', [i+1, pay.id]);
+    }
+};
+
+const recoverTender = async function(tid) {
+    const pays = await querySql('SELECT * FROM zh_pay WHERE tid = ? order by `order`', [tid]);
+    const stages = await querySql('SELECT * FROM zh_stage WHERE tid = ?', [tid]);
+    for (const s of stages) {
+        await recoverStagePayOrder(pays, s);
+    }
+};
+
+const doComplete = async function() {
+    try {
+        const tender = await querySql('Select * From zh_tender');
+        for (const t of tender) {
+            console.log(`Update Tender ${t.id}`);
+            await recoverTender(t.id);
+        }
+    } catch (err) {
+        console.log(err);
+    }
+    BaseUtil.closePool();
+};
+const doCompleteTest = async function(tid) {
+    try {
+        const tender = await querySql('Select * From zh_tender where id = ?', [tid]);
+        for (const t of tender) {
+            console.log(`Update Tender ${t.id}`);
+            await recoverTender(t.id);
+        }
+    } catch (err) {
+        console.log(err);
+    }
+    BaseUtil.closePool();
+};
+
+const tenderId = process.argv[3];
+if (tenderId) {
+    console.log(tenderId);
+    doCompleteTest(tenderId);
+} else {
+    doComplete()
+}