spec_msg.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const pushOperate = require('../const/spec_3f').pushOperate;
  10. module.exports = app => {
  11. class SpecPull extends app.BaseService {
  12. /**
  13. * 构造函数
  14. *
  15. * @param {Object} ctx - egg全局变量
  16. * @return {void}
  17. */
  18. constructor(ctx) {
  19. super(ctx);
  20. this.tableName = 's2b_spec_msg';
  21. }
  22. async tenderNeedMsg(pid, tid, timing) {
  23. const specProj = await this.db.get('zh_s2b_spec_proj', { id: pid });
  24. if (!specProj || !specProj.is_push) return false;
  25. switch (specProj.push_tender_type) {
  26. case 1:
  27. const filter = specProj.filter_tender ? specProj.filter_tender.split(',') : [];
  28. if (filter.indexOf(tid + '') >= 0) return false;
  29. break;
  30. case 2:
  31. const access = specProj.access_tender ? specProj.access_tender.split(',') : [];
  32. if (access.indexOf(tid + '') < 0) return false;
  33. break;
  34. }
  35. const soleTender = await this.db.get('zh_s2b_spec_tender', { id: tid, is_valid: 1 });
  36. const specPush = await this.db.get('zh_s2b_spec_push', { pid, tid: soleTender ? tid : 0, valid: 1, push_timing: timing });
  37. return !!specPush;
  38. }
  39. async addLedgerMsg(transaction, pid, tender, timing) {
  40. const needMsg = await this.tenderNeedMsg(pid, tender.id, timing);
  41. if (!needMsg) return;
  42. await transaction.insert(this.tableName, { pid, tid: tender.id, timing });
  43. }
  44. async addReviseMsg(transaction, pid, revise, timing) {
  45. const needMsg = await this.tenderNeedMsg(pid, revise.tid, timing);
  46. if (!needMsg) return;
  47. await transaction.insert(this.tableName, { pid, tid: revise.tid, rid: revise.id, timing });
  48. }
  49. async addStageMsg(transaction, pid, stage, timing) {
  50. const needMsg = await this.tenderNeedMsg(pid, stage.tid, timing);
  51. if (!needMsg) return;
  52. await transaction.insert(this.tableName, { pid, tid: stage.tid, sid: stage.id, timing });
  53. }
  54. async addAdvanceMsg(transaction, pid, advance, timing) {
  55. const needMsg = await this.tenderNeedMsg(pid, advance.id, timing);
  56. if (!needMsg) return;
  57. await transaction.insert(this.tableName, { pid, tid: advance.tid, advance_id: advance.id, timing });
  58. }
  59. async addMaterialMsg(transaction, pid, material, timing) {
  60. const needMsg = await this.tenderNeedMsg(pid, material.tid, timing);
  61. if (!needMsg) return;
  62. await transaction.insert(this.tableName, { pid, tid: material.tid, material_id: material.id, timing });
  63. }
  64. async addSettleMsg(transaction, pid, settle, timing) {
  65. const needMsg = await this.tenderNeedMsg(pid, settle.tid, timing);
  66. if (!needMsg) return;
  67. await transaction.insert(this.tableName, { pid, tid: settle.tid, settle_id: settle.id, timing });
  68. }
  69. async addChangeMsg(transaction, pid, change, timing) {
  70. const needMsg = await this.tenderNeedMsg(pid, change.tid, timing);
  71. if (!needMsg) return;
  72. await transaction.insert(this.tableName, { pid, tid: change.tid, cid: change.cid, timing });
  73. }
  74. async addChangeApplyMsg(transaction, pid, change_apply, timing) {
  75. const needMsg = await this.tenderNeedMsg(pid, change_apply.tid, timing);
  76. if (!needMsg) return;
  77. await transaction.insert(this.tableName, { pid, tid: change_apply.tid, c_apply_id: change_apply.id, timing });
  78. }
  79. async addChangeProjectMsg(transaction, pid, change_project, timing) {
  80. const needMsg = await this.tenderNeedMsg(pid, change_project.tid, timing);
  81. if (!needMsg) return;
  82. await transaction.insert(this.tableName, { pid, tid: change_project.tid, c_proj_id: change_project.id, timing });
  83. }
  84. async addChangePlanMsg(transaction, pid, change_plan, timing) {
  85. const needMsg = await this.tenderNeedMsg(pid, change_plan.tid, timing);
  86. if (!needMsg) return;
  87. await transaction.insert(this.tableName, { pid, tid: change_plan.tid, c_plan_id: change_plan.id, timing });
  88. }
  89. async addReportMsg(transaction, pid, tender, stage, timing, subInfo) {
  90. const needMsg = await this.tenderNeedMsg(pid, stage.tid, timing);
  91. if (!needMsg) return;
  92. if (transaction) {
  93. await transaction.insert(this.tableName, { pid, tid: tender.id, sid: stage ? stage.id : 0, timing, extra_info: JSON.stringify(subInfo || {}) });
  94. } else {
  95. await this.db.insert(this.tableName, { pid, tid: tender.id, sid: stage ? stage.id : 0, timing, extra_info: JSON.stringify(subInfo || {}) });
  96. }
  97. }
  98. async _getOtherMsgBaseData(id, timing) {
  99. switch(timing) {
  100. case pushOperate.report.change_file:
  101. const change = await this.ctx.service.change.getAllDataByCondition({ where: { cid: id } });
  102. return change.map(x => { return { cid: x.cid } });
  103. case pushOperate.report.change_plan_file:
  104. const changePlan = await this.ctx.service.changePlan.getAllDataByCondition({ where: { id } });
  105. return changePlan.map(x => { return { c_plan_id: x.id } });
  106. case pushOperate.report.change_apply_file:
  107. const changeApply = await this.ctx.service.changeApply.getAllDataByCondition({ where: { id } });
  108. return changeApply.map(x => { return { c_apply_id: x.id } });
  109. default:
  110. return [];
  111. }
  112. }
  113. async addOtherReportMsg(transaction, pid, tender, id, timing, subInfo) {
  114. const needMsg = await this.tenderNeedMsg(pid, tender.id, timing);
  115. if (!needMsg) return;
  116. const data = await this._getOtherMsgBaseData(id, timing);
  117. const insertMsg = data.map(x => {
  118. return { pid, tid: tender.id, timing, extra_info: JSON.stringify(subInfo || {}), ...x };
  119. });
  120. if (transaction) {
  121. await transaction.insert(this.tableName, insertMsg);
  122. } else {
  123. await this.db.insert(this.tableName, insertMsg);
  124. }
  125. }
  126. }
  127. return SpecPull;
  128. };