ledger_his.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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 oss = require('ali-oss');
  12. const config = process.argv.splice(2)[0];
  13. if (['local', 'uat', 'default'].indexOf(config) < 0) throw `参数错误: ${config}`;
  14. const options = require(`../config/config.${config}`)({ baseDir: __dirname + '/app', root: __dirname, name: 'calc' });
  15. const pool = mysql.createPool(options.mysql.client);
  16. const ossOption = {
  17. bucket: options.oss.clients.his.bucket,
  18. accessKeyId: options.oss.default.accessKeyId,
  19. accessKeySecret: options.oss.default.accessKeySecret,
  20. endpoint: options.oss.default.endpoint,
  21. timeout: options.oss.default.timeout,
  22. };
  23. const ossClient = new oss(ossOption);
  24. const querySql = async function(sql, sqlParam) {
  25. return new Promise(function(resolve, reject) {
  26. pool.getConnection(function(err, conn) {
  27. if (err) {
  28. if (err) console.log(err);
  29. reject(err);
  30. } else {
  31. conn.query(sql, sqlParam, function(err, rows, fields) {
  32. if (err) console.log(err);
  33. // 释放连接
  34. conn.release();
  35. // 传递Promise回调对象
  36. resolve(rows);
  37. });
  38. }
  39. });
  40. });
  41. };
  42. const getTableName = function(tender, table) {
  43. // switch(table) {
  44. // case 'ledger': return 'zh_ledger_' + (tender.id % 10);
  45. // case 'pos': return 'zh_pos_' + (tender.id % 20);
  46. // case 'revise_bills': return 'zh_revise_bills_' + (tender.id % 10);
  47. // case 'revise_pos': return 'zh_revise_pos_' + (tender.id % 20);
  48. // }
  49. return table.indexOf('pos') > 0 ? `zh_${table}_${tender.id % 20}` : `zh_${table}_${tender.id % 10}`;
  50. };
  51. const saveLedgerHis = async function(tender) {
  52. const now = new Date();
  53. const timestamp = (now).getTime();
  54. const billsHis = `${tender.project_id}/${tender.id}/ledger/bills${timestamp}.json`;
  55. const bills = await querySql('Select * From ?? where tender_id = ?', [getTableName(tender, 'ledger'), tender.id]);
  56. console.log(`saveBillsFile: ${billsHis}(${bills.length})`);
  57. await ossClient.put(options.hisOssPath + billsHis, Buffer.from(JSON.stringify(bills), 'utf8'));
  58. const posHis = `${tender.project_id}/${tender.id}/ledger/pos${timestamp}.json`;
  59. const pos = await querySql('Select * From ?? where tid = ?', [getTableName(tender, 'pos'), tender.id]);
  60. console.log(`savePosFile: ${posHis}(${pos.length})`);
  61. await ossClient.put(options.hisOssPath + posHis, Buffer.from(JSON.stringify(pos), 'utf8'));
  62. const result = await querySql('Insert Into zh_ledger_history(pid, tid, in_time, bills_file, pos_file) Values(?, ?, ?, ?, ?)',
  63. [tender.project_id, tender.id, now, billsHis, posHis]);
  64. if (!result) throw 'err';
  65. return result.insertId;
  66. };
  67. const saveReviseLedgerHis = async function (tender, revise) {
  68. const now = new Date();
  69. const billsHis = revise.bills_file;
  70. const posHis = revise.pos_file;
  71. const result = await querySql('Insert Into zh_ledger_history(pid, tid, in_time, bills_file, pos_file, rid, rorder) Values(?, ?, ?, ?, ?)',
  72. [tender.project_id, tender.id, now, billsHis, posHis, revise.id, revise.corder]);
  73. console.log(result);
  74. if (!result) throw 'err';
  75. return result.insertId;
  76. };
  77. const doCompleteTender = async function(t) {
  78. const revise = await querySql('Select * From zh_ledger_revise where tid = ? order By in_time asc', [t.id]);
  79. if (revise.length > 0) {
  80. let his_id;
  81. for (const r of revise) {
  82. const preRevise = revise.find(x => { return x.status === audit.revise.status.checked && x.corder === r.corder - 1});
  83. if (preRevise) {
  84. await querySql('Update zh_stage Set pre_his_id = ? Where id = ?', [preRevise.his_id, r.id]);
  85. }
  86. if (r.bills_file) {
  87. r.his_id = saveReviseLedgerHis(t, r);
  88. his_id = r.his_id;
  89. }
  90. }
  91. if (!his_id) his_id = await saveLedgerHis(t);
  92. await querySql('Update zh_tender Set his_id = ? Where id = ?', [his_id, t.id]);
  93. const stages = await querySql('Select * From zh_stage where tid = ? and status = ?', [t.id, audit.stage.status.checked]);
  94. for (const s of stages) {
  95. if (s.status === audit.stage.status.checked) {
  96. await querySql('Update zh_stage Set his_id = ? Where id = ?', [his_id, s.id]);
  97. }
  98. }
  99. } else {
  100. const ledgerHis = await saveLedgerHis(t);
  101. console.log(`saveLedgerHis: ${t.name}(${t.id})`);
  102. await querySql('Update zh_tender Set his_id = ? Where id = ?', [ledgerHis, t.id]);
  103. const stages = await querySql('Select * From zh_stage where tid = ? and status = ?', [t.id, audit.stage.status.checked]);
  104. for (const s of stages) {
  105. if (s.status === audit.stage.status.checked) {
  106. await querySql('Update zh_stage Set his_id = ? Where id = ?', [ledgerHis, s.id]);
  107. }
  108. }
  109. }
  110. };
  111. const doComplete = async function() {
  112. try {
  113. const tenders = await querySql('Select * From zh_tender where ledger_status <> ?', [audit.ledger.status.uncheck]);
  114. for (const t of tenders) {
  115. await doCompleteTender(t);
  116. }
  117. } catch (err) {
  118. console.log(err);
  119. }
  120. pool.end();
  121. };
  122. doComplete();
  123. // const doCompeletTest = async function() {
  124. // try {
  125. // const t = await querySql('Select * From zh_tender where id = ?', [1003]);
  126. // await doCompleteTender(t[0]);
  127. // } catch (err) {
  128. // console.log(err);
  129. // }
  130. // pool.end();
  131. // };
  132. // doCompeletTest();