wechat.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. 'use strict';
  2. /**
  3. * 微信模板信息发送相关接口
  4. *
  5. * @author ellisran
  6. * @date 2018/1/25
  7. * @version
  8. */
  9. // const xmlReader = require('xmlreader');
  10. const moment = require('moment');
  11. const wxConst = require('../const/wechat_template.js');
  12. class WX {
  13. /**
  14. * 构造函数
  15. *
  16. * @param {Object} ctx - egg全局变量
  17. * @return {void}
  18. */
  19. constructor(ctx) {
  20. this.ctx = ctx;
  21. }
  22. /**
  23. * 发送微信审批通知模板
  24. *
  25. * @param {Array} wx_openid - 发送的微信账号
  26. * @param {String} template - 模板id
  27. * @param {Object} data - 一些模板展示数据
  28. * @return {Boolean} - 发送结果
  29. */
  30. async Send(wx_openid, template, data) {
  31. let flag = false;
  32. try {
  33. const templateId = template;
  34. const sck = 'https://scn.ink/';
  35. for (const openid of wx_openid) {
  36. let url = '';
  37. let msgData = '';
  38. let remark = '';
  39. switch (templateId) {
  40. case wxConst.template.stage :
  41. url = this.ctx.protocol + '://' + this.ctx.host + '/wx/url2wap?project=' + data.code + '&url=' + sck + data.wap_url;
  42. msgData = {
  43. first: {
  44. value: '您好,本期计量' + data.tips,
  45. },
  46. keyword1: {
  47. value: data.projectName,
  48. },
  49. keyword2: {
  50. value: data.tenderName,
  51. },
  52. keyword3: {
  53. value: '第' + data.qi + '期',
  54. },
  55. keyword4: {
  56. value: data.status,
  57. },
  58. remark: {
  59. value: '查看审批详情,请登录PC端系统。',
  60. },
  61. };
  62. break;
  63. case wxConst.template.change:
  64. url = this.ctx.protocol + '://' + this.ctx.host + '/wx/url2wap?project=' + data.code + '&url=' + sck + data.wap_url;
  65. remark = data.status === wxConst.status.check ? '微信可快速审批,如需进行详细审批' :
  66. (data.status === wxConst.status.success ? '审批已通过,查看审批结果' : '审批被退回,查看退回结果');
  67. msgData = {
  68. first: {
  69. value: '您好,工程变更申请' + data.tips,
  70. },
  71. keyword1: {
  72. value: data.projectName,
  73. },
  74. keyword2: {
  75. value: data.tenderName,
  76. },
  77. keyword3: {
  78. value: data.c_name,
  79. },
  80. remark: {
  81. value: remark + ',请登录PC端系统。',
  82. },
  83. };
  84. break;
  85. case wxConst.template.ledger:
  86. remark = data.status === wxConst.status.check ? '微信暂无法在线审批' :
  87. (data.status === wxConst.status.success ? '审批已通过,查看审批结果' : '审批被退回,查看退回结果');
  88. msgData = {
  89. first: {
  90. value: '您好,台帐' + data.tips,
  91. },
  92. keyword1: {
  93. value: data.projectName,
  94. },
  95. keyword2: {
  96. value: data.tenderName,
  97. },
  98. keyword3: {
  99. value: moment(new Date(data.begin_time)).format('YYYY-MM-DD'),
  100. },
  101. remark: {
  102. value: remark + ',请登录PC端系统。',
  103. },
  104. };
  105. break;
  106. case wxConst.template.revise:
  107. remark = data.status === wxConst.status.check ? '微信暂无法在线审批' :
  108. (data.status === wxConst.status.success ? '审批已通过,查看审批结果' :
  109. (data.status === wxConst.status.back ? '审批被退回,查看退回结果' : '审批已上报,查看审批结果'));
  110. msgData = {
  111. first: {
  112. value: '您好,台帐修订' + data.tips,
  113. },
  114. keyword1: {
  115. value: data.projectName,
  116. },
  117. keyword2: {
  118. value: data.tenderName,
  119. },
  120. keyword3: {
  121. value: moment(new Date(data.begin_time)).format('YYYY-MM-DD'),
  122. },
  123. remark: {
  124. value: remark + ',请登录PC端系统。',
  125. },
  126. };
  127. break;
  128. case wxConst.template.material:
  129. remark = data.status === wxConst.status.check ? '微信暂无法在线审批' :
  130. (data.status === wxConst.status.success ? '审批已通过,查看审批结果' : '审批被退回,查看退回结果');
  131. msgData = {
  132. first: {
  133. value: '您好,第' + data.qi + '期材料调差申请' + data.tips,
  134. },
  135. keyword1: {
  136. value: data.projectName,
  137. },
  138. keyword2: {
  139. value: data.tenderName,
  140. },
  141. keyword3: {
  142. value: moment(new Date(data.begin_time)).format('YYYY-MM-DD'),
  143. },
  144. keyword4: {
  145. value: data.m_tp,
  146. },
  147. keyword5: {
  148. value: data.hs_m_tp,
  149. },
  150. remark: {
  151. value: remark + ',请登录PC端系统。',
  152. },
  153. };
  154. break;
  155. default:break;
  156. }
  157. if (msgData !== '') {
  158. // console.log(openid, templateId, url, msgData);
  159. await this.ctx.app.wechat.api.sendTemplate(openid, templateId, url, '', msgData);
  160. }
  161. }
  162. flag = true;
  163. } catch (e) {
  164. console.log(e);
  165. flag = false;
  166. }
  167. return flag;
  168. }
  169. /**
  170. * 关键字转换,并限制20个字以内
  171. *
  172. * @param {String} content - 内容
  173. * @return {Object} - 解析结果
  174. */
  175. async contentChange(content) {
  176. let str = content.replace(/【/g, '(');
  177. str = str.replace(/】/g, ')');
  178. str = str.replace(/工程款/g, '***');
  179. str = str.length > 20 ? str.substring(0, 17) + '...' : str;
  180. return str;
  181. }
  182. }
  183. module.exports = WX;