wechat.js 9.9 KB

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