wechat.js 10 KB

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