| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | 'use strict';/** * * * @author Mai * @date * @version */const audit = require('../app/const/audit');const mysql = require('mysql');const config = process.argv.splice(2);const mysqlOptions = require(`../config/config.${config}`)({ baseDir: __dirname + '/app', root: __dirname, name: 'calc' }).mysql;const pool = mysql.createPool(mysqlOptions);const querySql = async function (sql, sqlParam) {    return new Promise(function (resolve, reject) {        pool.getConnection(function (err, conn) {            if (err) {                reject(err);            } else {                conn.query(sql, sqlParam, function (err, rows, fields) {                    //释放连接                    conn.release();                    //传递Promise回调对象                    resolve({"err": err, "rows": rows, "fields": fields});                });            }        });    });};const timesLen = 100;const filterLastestData = function(data, keyFields) {    const dataIndex = {};    for (const d of data) {        let key = 'd';        for (const kf of keyFields) {            key = key + '.' + (d[kf] || '');        }        const di = dataIndex[key];        if (di) {            if ((di.times * timesLen + di.order) < (d.times * timesLen + d.order)) dataIndex[key] = d;        } else {            dataIndex[key] = d;        }    }    const result = [];    for (const prop in dataIndex) {        result.push(dataIndex[prop]);    }    return result;};const doComplete = async function () {    const tenders = await querySql('Select * From zh_tender where ledger_status = ?', [audit.ledger.status.checked]);    for (const t of tenders.rows) {        const stages = await querySql('Select * From zh_stage where tid = ? and status = ?', [t.id, audit.stage.status.checked]);        for (const s of stages.rows) {            const stageChange = await querySql('Select * From zh_stage_change where sid = ?', [s.id]);            const validStageChange = filterLastestData(stageChange.rows, ['lid', 'pid', 'cid', 'cbid']);            const stageChangeFinal = [];            for (const vsc of validStageChange) {                if (!vsc.qty) continue;                stageChangeFinal.push([                    vsc.tid, vsc.sid,                    vsc.lid, vsc.pid, vsc.cid, vsc.cbid,                    vsc.qty,                ]);            }            const result = await querySql('Insert Into zh_stage_change_final(tid, sid, lid, pid, cid, cbid, qty) Values ?', [stageChangeFinal]);        }    }    pool.end();};doComplete();
 |