material_audit_order.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. const BaseUtil = require('./baseUtils');
  2. const querySql = BaseUtil.querySql;
  3. const sp_status = {
  4. sqspr: 1, // 授权审批人
  5. gdspl: 2, // 固定审批流
  6. gdzs: 3, // 固定终审
  7. };
  8. // 审批类型
  9. const sp_type = {
  10. advance: 1,
  11. ledger: 2,
  12. revise: 3,
  13. stage: 4,
  14. change: 5,
  15. material: 6,
  16. };
  17. const updateShenpiAudit = async function(tender, type) {
  18. const shenpiData = await querySql('Select * From zh_shenpi_audit where tid = ? AND sp_type = ? AND sp_status = ? ORDER BY id', [tender.id, type, sp_status.gdspl]);
  19. if (shenpiData.length === 0) return;
  20. for (const [i, spd] of shenpiData.entries()) {
  21. if (spd.audit_order > 0) continue;
  22. await querySql('UPDATE zh_shenpi_audit SET audit_order = ? WHERE id = ?', [i+1, spd.id]);
  23. }
  24. };
  25. const updateShenpi = async function(tender) {
  26. // updateShenpiAudit(tender, sp_type.advance);
  27. // updateShenpiAudit(tender, sp_type.ledger);
  28. // updateShenpiAudit(tender, sp_type.revise);
  29. // updateShenpiAudit(tender, sp_type.stage);
  30. // updateShenpiAudit(tender, sp_type.change);
  31. await updateShenpiAudit(tender, sp_type.material);
  32. };
  33. const errorStageTimes = [];
  34. const updateMaterialTimes = async function(material, times) {
  35. const auditData = await querySql('SELECT * FROM zh_material_audit WHERE mid = ? AND times = ? ORDER BY `order`', [material.id, times]);
  36. if (auditData.length === 0) return;
  37. const auditIds = [], filterIds = [];
  38. for (const ad of auditData) {
  39. if (ad.audit_order) {
  40. if (filterIds.indexOf(ad.aid) < 0) filterIds.push(ad.aid);
  41. } else {
  42. const auditId = auditIds.find(x => { return x.aid === ad.aid});
  43. if (auditId) {
  44. auditId.ids.push(ad.id);
  45. } else {
  46. auditIds.push({ aid: ad.aid, ids: [ad.id] });
  47. }
  48. }
  49. }
  50. if (auditIds.length === 0) return;
  51. if (filterIds.length > 0 && auditIds.length > 0) errorStageTimes.push({ tid: material.tid, mid: material.id, times });
  52. for (const [i, aid] of auditIds.entries()) {
  53. for (const id of aid.ids) {
  54. await querySql('UPDATE zh_material_audit SET audit_order = ? WHERE id = ?', [i+1, id]);
  55. }
  56. }
  57. };
  58. const updateMaterial = async function (material) {
  59. for (let i = 1; i <= material.times; i++) {
  60. await updateMaterialTimes(material, i);
  61. }
  62. };
  63. const doCompleteTest = async function(id) {
  64. try {
  65. const tender = await querySql('Select * From zh_tender where id > ?', [id]);
  66. for (const t of tender) {
  67. console.log(`Update Tender ${t.name}(${t.id}):`);
  68. await updateShenpi(t);
  69. // const materials = await querySql('Select * From zh_material where tid = ?', [t.id]);
  70. // for (const s of materials) {
  71. // await updateMaterial(s);
  72. // }
  73. }
  74. } catch (err) {
  75. console.log(err);
  76. }
  77. BaseUtil.closePool();
  78. if (errorStageTimes.length > 0) {
  79. console.log('ERROR material info: ');
  80. console.log(errorStageTimes);
  81. }
  82. };
  83. const doComplete = async function() {
  84. try {
  85. const tenders = await querySql('Select * From zh_tender');
  86. for (const t of tenders) {
  87. console.log(`Update Tender ${t.name}(${t.id}):`);
  88. await updateShenpi(t);
  89. // const materials = await querySql('Select * From zh_material where tid = ?', [t.id]);
  90. // for (const s of materials) {
  91. // await updateMaterial(s);
  92. // }
  93. }
  94. } catch (err) {
  95. console.log(err);
  96. }
  97. BaseUtil.closePool();
  98. if (errorStageTimes.length > 0) {
  99. console.log('ERROR material info: ');
  100. console.log(errorStageTimes);
  101. }
  102. };
  103. const tenderId = process.argv[3];
  104. if (tenderId) {
  105. doCompleteTest(tenderId);
  106. } else {
  107. doComplete();
  108. }