wechat.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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. let templateId = '';
  35. const sck = 'https://scn.ink/';
  36. for (const openid of wx_openid) {
  37. let url = '';
  38. let msgData = '';
  39. let remark = '';
  40. switch (template) {
  41. case wxConst.template.stage :
  42. templateId = wxConst.templateId.stage;
  43. url = this.ctx.protocol + '://' + this.ctx.host + '/wx/url2wap?project=' + data.code + '&url=' + sck + data.wap_url;
  44. msgData = {
  45. first: {
  46. value: '您好,本期计量' + data.tips,
  47. },
  48. keyword1: {
  49. value: data.projectName,
  50. },
  51. keyword2: {
  52. value: data.tenderName,
  53. },
  54. keyword3: {
  55. value: '第' + data.qi + '期',
  56. },
  57. keyword4: {
  58. value: data.status,
  59. },
  60. remark: {
  61. value: '查看审批详情,请登录PC端系统。',
  62. },
  63. };
  64. break;
  65. case wxConst.template.change:
  66. templateId = wxConst.templateId.change;
  67. url = this.ctx.protocol + '://' + this.ctx.host + '/wx/url2wap?project=' + data.code + '&url=' + sck + data.wap_url;
  68. remark = data.status === wxConst.status.check ? '微信可快速审批,如需进行详细审批' :
  69. (data.status === wxConst.status.success ? '审批已通过,查看审批结果' : '审批被退回,查看退回结果');
  70. msgData = {
  71. first: {
  72. value: '您好,工程变更申请' + data.tips,
  73. },
  74. keyword1: {
  75. value: data.projectName,
  76. },
  77. keyword2: {
  78. value: data.tenderName,
  79. },
  80. keyword3: {
  81. value: data.c_name,
  82. },
  83. remark: {
  84. value: remark + ',请登录PC端系统。',
  85. },
  86. };
  87. break;
  88. case wxConst.template.ledger:
  89. templateId = wxConst.templateId.ledger;
  90. remark = data.status === wxConst.status.check ? '微信暂无法在线审批' :
  91. (data.status === wxConst.status.success ? '审批已通过,查看审批结果' : '审批被退回,查看退回结果');
  92. msgData = {
  93. first: {
  94. value: '您好,台账' + data.tips,
  95. },
  96. keyword1: {
  97. value: data.projectName,
  98. },
  99. keyword2: {
  100. value: data.tenderName,
  101. },
  102. keyword3: {
  103. value: moment(new Date(data.begin_time)).format('YYYY-MM-DD'),
  104. },
  105. remark: {
  106. value: remark + ',请登录PC端系统。',
  107. },
  108. };
  109. break;
  110. case wxConst.template.revise:
  111. templateId = wxConst.templateId.revise;
  112. remark = data.status === wxConst.status.check ? '微信暂无法在线审批' :
  113. (data.status === wxConst.status.success ? '审批已通过,查看审批结果' :
  114. (data.status === wxConst.status.back ? '审批被退回,查看退回结果' : '审批已上报,查看审批结果'));
  115. msgData = {
  116. first: {
  117. value: '您好,台账修订' + data.tips,
  118. },
  119. keyword1: {
  120. value: data.projectName,
  121. },
  122. keyword2: {
  123. value: data.tenderName,
  124. },
  125. keyword3: {
  126. value: moment(new Date(data.begin_time)).format('YYYY-MM-DD'),
  127. },
  128. remark: {
  129. value: remark + ',请登录PC端系统。',
  130. },
  131. };
  132. break;
  133. case wxConst.template.material:
  134. templateId = wxConst.templateId.material;
  135. remark = data.status === wxConst.status.check ? '微信暂无法在线审批' :
  136. (data.status === wxConst.status.success ? '审批已通过,查看审批结果' : '审批被退回,查看退回结果');
  137. msgData = {
  138. first: {
  139. value: '您好,第' + data.qi + '期材料调差申请' + data.tips,
  140. },
  141. keyword1: {
  142. value: data.projectName,
  143. },
  144. keyword2: {
  145. value: data.tenderName,
  146. },
  147. keyword3: {
  148. value: moment(new Date(data.begin_time)).format('YYYY-MM-DD'),
  149. },
  150. keyword4: {
  151. value: data.m_tp ? data.m_tp.toString() : null,
  152. },
  153. keyword5: {
  154. value: data.hs_m_tp ? data.hs_m_tp.toString() : null,
  155. },
  156. remark: {
  157. value: remark + ',请登录PC端系统。',
  158. },
  159. };
  160. break;
  161. default:break;
  162. }
  163. if (msgData !== '' && templateId) {
  164. // console.log(openid, templateId, url, msgData);
  165. await this.ctx.app.wechat.api.sendTemplate(openid, templateId, url, '', msgData);
  166. }
  167. }
  168. flag = true;
  169. } catch (e) {
  170. console.log(e);
  171. flag = false;
  172. }
  173. return flag;
  174. }
  175. /**
  176. * 关键字转换,并限制20个字以内
  177. *
  178. * @param {String} content - 内容
  179. * @return {Object} - 解析结果
  180. */
  181. async contentChange(content) {
  182. let str = content.replace(/【/g, '(');
  183. str = str.replace(/】/g, ')');
  184. str = str.replace(/工程款/g, '***');
  185. str = str.length > 20 ? str.substring(0, 17) + '...' : str;
  186. return str;
  187. }
  188. }
  189. module.exports = WX;