wechat.js 10 KB

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