stage-change-final.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const audit = require('../app/const/audit');
  10. const mysql = require('mysql');
  11. const config = process.argv.splice(2);
  12. const mysqlOptions = require(`../config/config.${config}`)({ baseDir: __dirname + '/app', root: __dirname, name: 'calc' }).mysql;
  13. const pool = mysql.createPool(mysqlOptions);
  14. const querySql = async function (sql, sqlParam) {
  15. return new Promise(function (resolve, reject) {
  16. pool.getConnection(function (err, conn) {
  17. if (err) {
  18. reject(err);
  19. } else {
  20. conn.query(sql, sqlParam, function (err, rows, fields) {
  21. //释放连接
  22. conn.release();
  23. //传递Promise回调对象
  24. resolve({"err": err, "rows": rows, "fields": fields});
  25. });
  26. }
  27. });
  28. });
  29. };
  30. const timesLen = 100;
  31. const filterLastestData = function(data, keyFields) {
  32. const dataIndex = {};
  33. for (const d of data) {
  34. let key = 'd';
  35. for (const kf of keyFields) {
  36. key = key + '.' + (d[kf] || '');
  37. }
  38. const di = dataIndex[key];
  39. if (di) {
  40. if ((di.times * timesLen + di.order) < (d.times * timesLen + d.order)) dataIndex[key] = d;
  41. } else {
  42. dataIndex[key] = d;
  43. }
  44. }
  45. const result = [];
  46. for (const prop in dataIndex) {
  47. result.push(dataIndex[prop]);
  48. }
  49. return result;
  50. };
  51. const doComplete = async function () {
  52. const tenders = await querySql('Select * From zh_tender where ledger_status = ?', [audit.ledger.status.checked]);
  53. for (const t of tenders.rows) {
  54. const stages = await querySql('Select * From zh_stage where tid = ? and status = ?', [t.id, audit.stage.status.checked]);
  55. for (const s of stages.rows) {
  56. const stageChange = await querySql('Select * From zh_stage_change where sid = ?', [s.id]);
  57. const validStageChange = filterLastestData(stageChange.rows, ['lid', 'pid', 'cid', 'cbid']);
  58. const stageChangeFinal = [];
  59. for (const vsc of validStageChange) {
  60. if (!vsc.qty) continue;
  61. stageChangeFinal.push([
  62. vsc.tid, vsc.sid,
  63. vsc.lid, vsc.pid, vsc.cid, vsc.cbid,
  64. vsc.qty,
  65. ]);
  66. }
  67. const result = await querySql('Insert Into zh_stage_change_final(tid, sid, lid, pid, cid, cbid, qty) Values ?', [stageChangeFinal]);
  68. }
  69. }
  70. pool.end();
  71. };
  72. doComplete();