wx_category_template_msg.go 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049
  1. package services
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "hongze/hongze_mfyx/models"
  8. "hongze/hongze_mfyx/utils"
  9. "io/ioutil"
  10. "net/http"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. type SendWxCategoryTemplate struct {
  16. WxAppId string `description:"公众号appId"`
  17. Keywords []string `description:"模板消息keyword字段"`
  18. TemplateId string `description:"模板id"`
  19. RedirectUrl string `description:"跳转地址"`
  20. RedirectTarget int `description:"小程序跳转目标:1:弘则研报小程序,2:随手办公小程序,3:查研观向,4:买方研选"`
  21. Resource string `description:"资源唯一标识"`
  22. SendType int `description:"发送的消息类型:1:报告,2:指标更新提醒,3:审批通知,4:销售领取客户通知,5:活动取消通知,6活动更改时间通知,7:关注的作者发布报告通知,8:发送日报(周报、双周报、月报)模板消息,9:活动预约/报名时间通知"`
  23. OpenIdArr []string `description:"消息接收者openid"`
  24. }
  25. // 推送类目模板消息
  26. func SendCategoryTemplateMsg(sendInfo *SendWxCategoryTemplate) (err error) {
  27. postData, err := json.Marshal(sendInfo)
  28. if err != nil {
  29. go utils.SendAlarmMsg("SendCategoryTemplateMsg json.Marshal Err:"+err.Error(), 1)
  30. return err
  31. }
  32. body := ioutil.NopCloser(strings.NewReader(string(postData)))
  33. client := &http.Client{}
  34. req, err := http.NewRequest("POST", utils.SendWxCategoryTemplateMsgUrl, body)
  35. if err != nil {
  36. go utils.SendAlarmMsg("SendCategoryTemplateMsg http.NewRequest Err:"+err.Error(), 1)
  37. return err
  38. }
  39. contentType := "application/json;charset=utf-8"
  40. req.Header.Set("Content-Type", contentType)
  41. req.Header.Set("Authorization", utils.SendTemplateMsgAuthorization)
  42. resp, err := client.Do(req)
  43. if err != nil {
  44. fmt.Println("http client.Do Err:" + err.Error())
  45. return err
  46. }
  47. defer resp.Body.Close()
  48. b, err := ioutil.ReadAll(resp.Body)
  49. if err != nil {
  50. return err
  51. }
  52. result := new(models.BaseResponse)
  53. err = json.Unmarshal(b, &result)
  54. if err != nil {
  55. return err
  56. }
  57. if result.Ret != 200 {
  58. err = errors.New(string(b))
  59. return err
  60. }
  61. return
  62. }
  63. // 发送用户操作活动消息提醒
  64. func SendWxCategoryMsgWithActivityUserRemind(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  65. if len(openIdList) == 0 {
  66. return
  67. }
  68. var msg string
  69. defer func() {
  70. if err != nil {
  71. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  72. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  73. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  74. }
  75. }()
  76. keyWord1 = utils.TruncateActivityNameString(keyWord1)
  77. accessToken, err := models.GetWxAccessTokenByXzs()
  78. if err != nil {
  79. msg = "GetWxAccessToken Err:" + err.Error()
  80. return
  81. }
  82. if accessToken == "" {
  83. msg = "accessToken is empty"
  84. return
  85. }
  86. openIdArr := make([]string, 0)
  87. for _, v := range openIdList {
  88. openIdArr = append(openIdArr, v.OpenId)
  89. }
  90. var keywords []string
  91. keywords = append(keywords, keyWord1, keyWord2, keyWord3, keyWord4)
  92. sendInfo := new(SendWxCategoryTemplate)
  93. sendInfo.Keywords = keywords
  94. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
  95. sendInfo.RedirectTarget = 4
  96. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  97. sendInfo.OpenIdArr = openIdArr
  98. err = SendCategoryTemplateMsg(sendInfo)
  99. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  100. return
  101. }
  102. // 试用申请模板消息
  103. func SendPermissionApplyCategoryTemplateMsg(realName, companyName, mobile, applyMethod string, itemOpenid *models.OpenIdList) (err error) {
  104. defer func() {
  105. if err != nil {
  106. go utils.SendAlarmMsg(fmt.Sprint("权限申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile, ";Err:"+err.Error()), 2)
  107. }
  108. }()
  109. var keyword1 string
  110. var keyword2 string
  111. var keyword3 string
  112. var keyword4 string
  113. var keyword5 string
  114. var redirectUrl string
  115. detail, e := models.GetCygxApplyRecordByMobile(mobile)
  116. if e != nil {
  117. err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
  118. return
  119. }
  120. //如果是潜在客户就推送可查看详情的模版消息
  121. if detail.ApplyMethod == 2 {
  122. redirectUrl = utils.WX_MSG_PATH_APPLY_DETAIL + strconv.Itoa(detail.ApplyRecordId)
  123. }
  124. openIdArr := make([]string, 0)
  125. openIdArr = append(openIdArr, itemOpenid.OpenId)
  126. sendInfo := new(SendWxCategoryTemplate)
  127. keyword1 = realName
  128. keyword2 = companyName
  129. keyword3 = "权限申请"
  130. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  131. keyword5 = applyMethod
  132. sendInfo.Keywords = []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  133. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  134. sendInfo.RedirectUrl = redirectUrl
  135. sendInfo.RedirectTarget = 4
  136. sendInfo.Resource = mobile
  137. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  138. sendInfo.OpenIdArr = openIdArr
  139. err = SendCategoryTemplateMsg(sendInfo)
  140. return
  141. }
  142. // 发送用户操作活动消息提醒
  143. func SendNeiRongZuActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  144. var msg string
  145. defer func() {
  146. if err != nil {
  147. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  148. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityDetail.ActivityId), 2)
  149. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  150. }
  151. }()
  152. accessToken, err := models.GetWxAccessTokenByXzs()
  153. if err != nil {
  154. msg = "GetWxAccessToken Err:" + err.Error()
  155. return
  156. }
  157. if accessToken == "" {
  158. msg = "accessToken is empty"
  159. return
  160. }
  161. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  162. if err != nil && err.Error() != utils.ErrNoRow() {
  163. return
  164. }
  165. configCode := utils.TPL_MSG_NEI_RONG_ZU
  166. cnf, e := models.GetConfigByCode(configCode)
  167. if e != nil {
  168. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  169. return
  170. }
  171. openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile+utils.MobileShenTao)
  172. if e != nil && e.Error() != utils.ErrNoRow() {
  173. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  174. return
  175. }
  176. openIdArr := make([]string, 0)
  177. for _, v := range openIdList {
  178. openIdArr = append(openIdArr, v.OpenId)
  179. }
  180. var keywords []string
  181. keywords = append(keywords, user.RealName, user.CompanyName,
  182. sellerItemQy.RealName, time.Now().Format(utils.FormatDateTimeMinute2),
  183. "报名:"+activityDetail.ActivityName)
  184. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityDetail.ActivityId)}
  185. sendInfo := new(SendWxCategoryTemplate)
  186. sendInfo.Keywords = keywords
  187. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  188. sendInfo.RedirectTarget = 4
  189. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  190. sendInfo.OpenIdArr = openIdArr
  191. err = SendCategoryTemplateMsg(sendInfo)
  192. return
  193. }
  194. func SendActivitieCancelSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  195. var msg string
  196. defer func() {
  197. if err != nil {
  198. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  199. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityDetail.ActivityId), 2)
  200. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  201. }
  202. }()
  203. accessToken, err := models.GetWxAccessTokenByXzs()
  204. if err != nil {
  205. msg = "GetWxAccessToken Err:" + err.Error()
  206. return
  207. }
  208. if accessToken == "" {
  209. msg = "accessToken is empty"
  210. return
  211. }
  212. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  213. if err != nil && err.Error() != utils.ErrNoRow() {
  214. return
  215. }
  216. configCode := utils.TPL_MSG_NEI_RONG_ZU
  217. cnf, e := models.GetConfigByCode(configCode)
  218. if e != nil {
  219. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  220. return
  221. }
  222. openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile+utils.MobileShenTao)
  223. if e != nil && e.Error() != utils.ErrNoRow() {
  224. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  225. return
  226. }
  227. openIdArr := make([]string, 0)
  228. for _, v := range openIdList {
  229. openIdArr = append(openIdArr, v.OpenId)
  230. }
  231. var keywords []string
  232. keywords = append(keywords, user.RealName, user.CompanyName,
  233. sellerItemQy.RealName, time.Now().Format(utils.FormatDateTimeMinute2),
  234. "取消报名"+"【"+activityDetail.ActivityName+"】")
  235. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
  236. sendInfo := new(SendWxCategoryTemplate)
  237. sendInfo.WxAppId = utils.WxAppId
  238. sendInfo.Keywords = keywords
  239. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  240. sendInfo.RedirectTarget = 4
  241. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  242. sendInfo.OpenIdArr = openIdArr
  243. err = SendCategoryTemplateMsg(sendInfo)
  244. return
  245. }
  246. // 发送用户留言提醒
  247. func SendCommentWxCategoryTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail, msgId int) (err error) {
  248. var msg string
  249. defer func() {
  250. if err != nil {
  251. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  252. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  253. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  254. }
  255. }()
  256. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  257. if e != nil {
  258. return
  259. }
  260. if companyItem == nil {
  261. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  262. }
  263. var keyword1 string
  264. var keyword2 string
  265. var keyword3 string
  266. var keyword4 string
  267. var keyword5 string
  268. var redirectUrl string
  269. var mobile string
  270. var keywords []string
  271. keyword1 = user.RealName
  272. keyword2 = companyItem.CompanyName
  273. keyword3 = companyItem.SellerName
  274. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  275. keyword5 = "报告留言:" + req.Content
  276. keyword5 = utils.TruncateActivityNameString(keyword5)
  277. keywords = append(keywords, keyword1, keyword2, keyword3, keyword4, keyword5)
  278. if articleInfo.ArticleTypeId > 0 {
  279. //研选报告添加汪洋
  280. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  281. } else {
  282. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  283. }
  284. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  285. if e != nil {
  286. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  287. return
  288. }
  289. openIdArr := make([]string, 0)
  290. for _, v := range openIdList {
  291. openIdArr = append(openIdArr, v.OpenId)
  292. }
  293. redirectUrl = utils.WX_MSG_PATH_YX_COMMENT_DETAIL + strconv.Itoa(msgId) + "&type=文章"
  294. sendInfo := new(SendWxCategoryTemplate)
  295. sendInfo.Keywords = keywords
  296. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  297. sendInfo.RedirectTarget = 4
  298. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  299. sendInfo.OpenIdArr = openIdArr
  300. sendInfo.RedirectUrl = redirectUrl
  301. err = SendCategoryTemplateMsg(sendInfo)
  302. return
  303. }
  304. // 发送报告提问消息提醒
  305. func SendWxCategoryMsgWithAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, articleId int) (err error) {
  306. if len(openIdList) == 0 {
  307. return
  308. }
  309. var msg string
  310. defer func() {
  311. if err != nil {
  312. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  313. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒类目模版消息失败,用户名", realName, "文章ID:", articleId), 2)
  314. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  315. }
  316. fmt.Println("line 21", err, msg)
  317. }()
  318. var keyword1 string
  319. var keyword2 string
  320. var keyword3 string
  321. var keyword4 string
  322. var keyword5 string
  323. keyword1 = realName
  324. keyword2 = companyName
  325. keyword3 = sellerName
  326. keyword4 = askTime
  327. keyword4 = "活动提问:" + askMsg
  328. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  329. openIdArr := make([]string, 0)
  330. for _, v := range openIdList {
  331. openIdArr = append(openIdArr, v.OpenId)
  332. }
  333. redirectUrl := utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
  334. sendInfo := new(SendWxCategoryTemplate)
  335. sendInfo.Keywords = keywords
  336. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  337. sendInfo.RedirectTarget = 4
  338. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  339. sendInfo.OpenIdArr = openIdArr
  340. sendInfo.RedirectUrl = redirectUrl
  341. err = SendCategoryTemplateMsg(sendInfo)
  342. return
  343. }
  344. // SendActivitieSignCategoryTemplateMsg 线下调研活动扫码签到给对应销售发类目模班消息
  345. func SendActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  346. defer func() {
  347. if err != nil {
  348. go utils.SendAlarmMsg(fmt.Sprint("线下调研活动扫码签到给对应销售发模班消息推送失败Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
  349. }
  350. }()
  351. var mobiles []string
  352. //获取销售信息
  353. sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  354. if err != nil && err.Error() != utils.ErrNoRow() {
  355. return
  356. }
  357. if sellerItem != nil {
  358. mobiles = append(mobiles, sellerItem.Mobile, utils.MobileWuAngDi, utils.MobileDongHeng, utils.MobileShenTao)
  359. }
  360. var keyword1 string
  361. var keyword2 string
  362. var keyword3 string
  363. var keyword4 string
  364. var keyword5 string
  365. var redirectUrl string
  366. keyword1 = user.RealName
  367. keyword2 = user.CompanyName
  368. keyword3 = sellerItem.RealName
  369. keyword4 = activityDetail.ActivityName
  370. keyword5 = time.Now().Format(utils.FormatDateTimeMinute2)
  371. openIdList, e := models.GetWxOpenIdByMobileSliceList(mobiles)
  372. if e != nil {
  373. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  374. return
  375. }
  376. openIdArr := make([]string, 0)
  377. for _, v := range openIdList {
  378. openIdArr = append(openIdArr, v.OpenId)
  379. }
  380. redirectUrl = utils.WX_MSG_PATH_YX_SIGNUP_DETAIL + strconv.Itoa(activityDetail.ActivityId)
  381. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  382. sendInfo := new(SendWxCategoryTemplate)
  383. sendInfo.Keywords = keywords
  384. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdActivitySign
  385. sendInfo.RedirectTarget = 4
  386. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  387. sendInfo.OpenIdArr = openIdArr
  388. sendInfo.RedirectUrl = redirectUrl
  389. err = SendCategoryTemplateMsg(sendInfo)
  390. if err != nil {
  391. return
  392. }
  393. return
  394. }
  395. // SendReviewCategoryTemplateMsgAdmin 提交审核时给王芳,汪洋发消息
  396. func SendReviewCategoryTemplateMsgAdmin(specialId int) (err error) {
  397. defer func() {
  398. if err != nil {
  399. go utils.SendAlarmMsg(fmt.Sprint("处理试用申请给王芳,汪洋发消息失败, specialId:", specialId, "ErrMsg", err.Error()), 2)
  400. }
  401. }()
  402. //王芳、葛琳和沈涛
  403. openIdList, e := models.GetUserRecordListByMobile(4, utils.WxMsgTemplateIdYXSpecialReview)
  404. if e != nil && e.Error() != utils.ErrNoRow() {
  405. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error())
  406. return err
  407. }
  408. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  409. if e != nil {
  410. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  411. return
  412. }
  413. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  414. if e != nil {
  415. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  416. return err
  417. }
  418. var keyword1 string
  419. var keyword2 string
  420. var keyword3 string
  421. var keyword4 string
  422. var keyword5 string
  423. keyword1 = specialItem.NickName
  424. keyword2 = specialItem.RealName + "-" + user.CompanyName
  425. keyword3 = specialItem.SpecialName
  426. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  427. keyword5 = "研选专栏提交了内容待审核"
  428. openIdArr := make([]string, 0)
  429. for _, v := range openIdList {
  430. openIdArr = append(openIdArr, v.OpenId)
  431. }
  432. redirectUrl := ""
  433. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_ENABLE_DETAIL + strconv.Itoa(specialId)
  434. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  435. sendInfo := new(SendWxCategoryTemplate)
  436. sendInfo.Keywords = keywords
  437. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  438. sendInfo.RedirectTarget = 4
  439. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  440. sendInfo.OpenIdArr = openIdArr
  441. sendInfo.RedirectUrl = redirectUrl
  442. err = SendCategoryTemplateMsg(sendInfo)
  443. if err != nil {
  444. return
  445. }
  446. return
  447. }
  448. // 研选专栏审核完成时,给提交人发送类目模板消息
  449. func SendWxCategoryMsgSpecialAuthor(specialId, status int) (err error) {
  450. defer func() {
  451. if err != nil {
  452. go utils.SendAlarmMsg(fmt.Sprint("研选专栏审核完成时,给提交人发送模板消息", specialId, ", specialId", err.Error()), 2)
  453. }
  454. }()
  455. var keyword1 string
  456. var keyword2 string
  457. var keyword3 string
  458. var keyword4 string
  459. var redirectUrl string
  460. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  461. if e != nil {
  462. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  463. return
  464. }
  465. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  466. if e != nil {
  467. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  468. return err
  469. }
  470. openIdList, err := models.GetUserRecordListByMobile(4, user.Mobile)
  471. if err != nil && err.Error() != utils.ErrNoRow() {
  472. return err
  473. }
  474. keyword1 = specialItem.Title
  475. keyword2 = specialItem.NickName
  476. if status == 1 {
  477. keyword3 = "文章已通过审核,点击查看详情"
  478. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  479. } else {
  480. keyword3 = "文章未通过审核,点击查看驳回原因"
  481. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_CENTER
  482. }
  483. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  484. openIdArr := make([]string, 0)
  485. for _, v := range openIdList {
  486. openIdArr = append(openIdArr, v.OpenId)
  487. }
  488. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  489. sendInfo := new(SendWxCategoryTemplate)
  490. sendInfo.Keywords = keywords
  491. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  492. sendInfo.RedirectTarget = 4
  493. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  494. sendInfo.OpenIdArr = openIdArr
  495. sendInfo.RedirectUrl = redirectUrl
  496. err = SendCategoryTemplateMsg(sendInfo)
  497. if err != nil {
  498. return
  499. }
  500. return
  501. }
  502. // 研选专栏有新内容审核通过时,给关注此专栏的客户发送模板消息
  503. func SendWxCategoryMsgSpecialFollow(specialId int) (err error) {
  504. defer func() {
  505. if err != nil {
  506. go utils.SendAlarmMsg(fmt.Sprint("研选专栏有新内容审核通过时,给关注此专栏的客户发送类目模板消息失败", specialId, ", specialId", err.Error()), 2)
  507. }
  508. }()
  509. var keyword1 string
  510. var keyword2 string
  511. var keyword3 string
  512. var keyword4 string
  513. followers, e := models.GetYanxuanSpecialFollowUserById(specialId)
  514. if e != nil {
  515. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  516. return
  517. }
  518. if len(followers) == 0 {
  519. return
  520. }
  521. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  522. if e != nil {
  523. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  524. return
  525. }
  526. var allInUserId string
  527. for _, v := range followers {
  528. allInUserId += strconv.Itoa(v) + ","
  529. }
  530. allInUserId = strings.TrimRight(allInUserId, ",")
  531. userList, err := models.GetWxUserListByUserIds(allInUserId)
  532. if err != nil && err.Error() != utils.ErrNoRow() {
  533. return err
  534. }
  535. mobile := ``
  536. for _, v := range userList {
  537. mobile += v.Mobile + ","
  538. }
  539. mobile = strings.TrimRight(mobile, ",")
  540. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  541. if e != nil {
  542. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  543. return
  544. }
  545. if len(openIdList) == 0 {
  546. return
  547. }
  548. keyword1 = specialItem.SpecialName
  549. keyword2 = "发布了新报告"
  550. keyword3 = specialItem.Title
  551. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  552. openIdArr := make([]string, 0)
  553. for _, v := range openIdList {
  554. openIdArr = append(openIdArr, v.OpenId)
  555. }
  556. redirectUrl := ""
  557. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  558. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  559. sendInfo := new(SendWxCategoryTemplate)
  560. sendInfo.Keywords = keywords
  561. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
  562. sendInfo.RedirectTarget = 4
  563. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  564. sendInfo.OpenIdArr = openIdArr
  565. sendInfo.RedirectUrl = redirectUrl
  566. err = SendCategoryTemplateMsg(sendInfo)
  567. if err != nil {
  568. return
  569. }
  570. return
  571. }
  572. // 文章互动相关类目模版消息
  573. func SendWxCategoryMsgInteractive(user *models.WxUserItem, interactive string, articleId int) (err error) {
  574. //30秒内阅读同一篇报告不做重复推送
  575. key := "CYGX_" + utils.CYGX_OBJ_RESEARCHSUMMARY + "_READ" + strconv.Itoa(articleId) + "_" + strconv.Itoa(user.UserId)
  576. if utils.Rc.IsExist(key) {
  577. return
  578. }
  579. utils.Rc.Put(key, 1, 30*time.Second)
  580. defer func() {
  581. if err != nil {
  582. go utils.SendAlarmMsg(fmt.Sprint("文章互动相关,类目模板消息推送 ,SendWxCategoryMsgInteractive"+err.Error(), "userId:", user.UserId, "互动类型:", interactive), 2)
  583. }
  584. }()
  585. countUser, err := models.GetUserRemind(user.UserId)
  586. if err != nil {
  587. return err
  588. }
  589. if countUser == 0 {
  590. return err
  591. }
  592. var keyword1 string
  593. var keyword2 string
  594. var keyword3 string
  595. var keyword4 string
  596. //获取销售手机号
  597. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  598. if err != nil && err.Error() != utils.ErrNoRow() {
  599. return err
  600. }
  601. if sellerItemQy != nil {
  602. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  603. if e != nil {
  604. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  605. return
  606. }
  607. if len(openIdList) == 0 {
  608. return
  609. }
  610. detail, e := models.GetCygxResearchSummaryInfoById(articleId)
  611. if e != nil {
  612. err = errors.New("GetCygxProductInteriorDetail, Err: " + e.Error())
  613. return
  614. }
  615. if detail == nil {
  616. return
  617. }
  618. keyword1 = user.RealName + "-" + user.CompanyName
  619. keyword1 = utils.TruncateActivityNameString(keyword1)
  620. keyword2 = fmt.Sprint("互动提醒:", interactive)
  621. keyword3 = detail.Title
  622. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  623. openIdArr := make([]string, 0)
  624. for _, v := range openIdList {
  625. openIdArr = append(openIdArr, v.OpenId)
  626. }
  627. redirectUrl := ``
  628. redirectUrl = utils.WX_MSG_PATH_YX_ARTICLE_DETAIL + strconv.Itoa(articleId)
  629. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  630. sendInfo := new(SendWxCategoryTemplate)
  631. sendInfo.Keywords = keywords
  632. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
  633. sendInfo.RedirectTarget = 4
  634. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  635. sendInfo.OpenIdArr = openIdArr
  636. sendInfo.RedirectUrl = redirectUrl
  637. err = SendCategoryTemplateMsg(sendInfo)
  638. if err != nil {
  639. return
  640. }
  641. }
  642. return
  643. }
  644. // 用户搜索操作操作行为,类目模板消息推送
  645. func SearchKeywordUserRmindCategoryMsg(user *models.WxUserItem, keyWord string) (err error) {
  646. defer func() {
  647. if err != nil {
  648. fmt.Println(err)
  649. go utils.SendAlarmMsg(fmt.Sprint("用户搜索操作操作行为,类目模板消息推送失败"+err.Error(), "UserId:", user.UserId, "keyWord:", keyWord), 2)
  650. }
  651. }()
  652. countUser, e := models.GetUserRemind(user.UserId)
  653. if e != nil {
  654. err = errors.New("GetUserRemind, Err: " + e.Error())
  655. return
  656. }
  657. if countUser == 0 {
  658. return
  659. }
  660. var keyword1 string
  661. var keyword2 string
  662. var keyword3 string
  663. var keyword4 string
  664. //获取销售手机号
  665. sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  666. if e != nil && e.Error() != utils.ErrNoRow() {
  667. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  668. return
  669. }
  670. if sellerItemQy != nil {
  671. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  672. if e != nil {
  673. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  674. return
  675. }
  676. if len(openIdList) == 0 {
  677. return
  678. }
  679. keyword1 = user.RealName + "-" + user.CompanyName
  680. keyword2 = fmt.Sprint("互动提醒:搜索")
  681. keyword3 = keyWord
  682. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  683. openIdArr := make([]string, 0)
  684. for _, v := range openIdList {
  685. openIdArr = append(openIdArr, v.OpenId)
  686. }
  687. redirectUrl := ""
  688. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  689. sendInfo := new(SendWxCategoryTemplate)
  690. sendInfo.Keywords = keywords
  691. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  692. sendInfo.RedirectTarget = 4
  693. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  694. sendInfo.OpenIdArr = openIdArr
  695. sendInfo.RedirectUrl = redirectUrl
  696. err = SendCategoryTemplateMsg(sendInfo)
  697. if err != nil {
  698. return
  699. }
  700. }
  701. return
  702. }
  703. // 帮我带问的问题,会前1小时发送
  704. func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
  705. var msg string
  706. //var touser string
  707. defer func() {
  708. if err != nil {
  709. go utils.SendAlarmMsg("发送附件模版消息失败", 2)
  710. go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  711. }
  712. if msg != "" {
  713. go utils.SendAlarmMsg(msg, 2)
  714. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  715. }
  716. }()
  717. endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
  718. condition := `AND a.activity_type_id = 1 AND a.chart_permission_id = 31 `
  719. total, err := models.GetCountActivityResearchToSendFile(condition, endDate)
  720. if total == 0 {
  721. fmt.Println("发送附件完成0")
  722. return nil
  723. }
  724. if err != nil {
  725. msg = "发送附件模版消息失败 Err:" + err.Error()
  726. return
  727. }
  728. listActivity, err := models.GetActivityResearchToSendFile(condition, endDate)
  729. if err != nil {
  730. msg = "发送附件模版消息失败 Err:" + err.Error()
  731. return
  732. }
  733. for _, v := range listActivity {
  734. activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
  735. if activityInfo == nil {
  736. msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
  737. return
  738. }
  739. list, errFile := models.GetActivityMsgExport(v.ActivityId)
  740. if errFile != nil {
  741. msg = "获取失败,Err:" + errFile.Error()
  742. return
  743. }
  744. for _, v2 := range list {
  745. user, e := models.GetWxUserItemByUserId(v2.UserId)
  746. if e != nil && e.Error() != utils.ErrNoRow() {
  747. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  748. return err
  749. }
  750. //获取销售信息
  751. sellerItem, e := models.GetSellerByCompanyIdCheckFicc(v2.CompanyId, 2)
  752. if e != nil && e.Error() != utils.ErrNoRow() {
  753. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  754. return
  755. }
  756. //给所属销售推送消息
  757. if sellerItem != nil {
  758. openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
  759. openIdList := make([]*models.OpenIdList,0)
  760. openIdList = append(openIdList, openIpItem)
  761. SendWxCategoryMsgWithActivityAsk(user.CompanyName, user.RealName, sellerItem.RealName, time.Now().Format(utils.FormatDateTimeMinute2), v2.Content, openIdList, v2.AskId)
  762. }
  763. }
  764. errFile = models.UPdateActivityMsgToSendFile(v.ActivityId)
  765. if errFile != nil {
  766. msg = "获取失败,Err:" + errFile.Error()
  767. return
  768. }
  769. }
  770. return
  771. }
  772. // 发送报告提问消息提醒
  773. func SendWxCategoryMsgWithActivityAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, msgId int) (err error) {
  774. if len(openIdList) == 0 {
  775. return
  776. }
  777. var msg string
  778. defer func() {
  779. if err != nil {
  780. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  781. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒类目模版消息失败,用户名", realName, "留言ID:", msgId), 2)
  782. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  783. }
  784. fmt.Println("line 21", err, msg)
  785. }()
  786. var keyword1 string
  787. var keyword2 string
  788. var keyword3 string
  789. var keyword4 string
  790. var keyword5 string
  791. keyword1 = realName
  792. keyword2 = companyName
  793. keyword3 = sellerName
  794. keyword4 = askTime
  795. keyword5 = utils.TruncateActivityNameString("活动提问:" + askMsg)
  796. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  797. openIdArr := make([]string, 0)
  798. for _, v := range openIdList {
  799. openIdArr = append(openIdArr, v.OpenId)
  800. }
  801. redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(msgId)
  802. sendInfo := new(SendWxCategoryTemplate)
  803. sendInfo.Keywords = keywords
  804. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  805. sendInfo.RedirectTarget = 4
  806. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  807. sendInfo.OpenIdArr = openIdArr
  808. sendInfo.RedirectUrl = redirectUrl
  809. err = SendCategoryTemplateMsg(sendInfo)
  810. if err != nil {
  811. return
  812. }
  813. return
  814. }
  815. // 推送会议开始消息提醒60分钟前
  816. func SendActivityBeginMsg(cont context.Context) (err error) {
  817. //func SendActivityBeginMsg() (err error) {
  818. defer func() {
  819. if err != nil {
  820. go utils.SendAlarmMsg("60分钟会议消息提醒失败"+err.Error(), 2)
  821. fmt.Println("发送失败,Err:", err.Error())
  822. }
  823. }()
  824. endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
  825. listActivity, err := models.GetYxActivitySendMsgListAll(endDate)
  826. fmt.Println(len(listActivity))
  827. if err != nil {
  828. fmt.Println("GetActivitySendMsgListAll Err:", err.Error())
  829. return
  830. }
  831. if len(listActivity) == 0 {
  832. return
  833. }
  834. //var remark = "点击查看活动详情"
  835. var signupIds string
  836. for _, v := range listActivity {
  837. signupIds += strconv.Itoa(v.Id) + ","
  838. //var reserveResults string
  839. //var first string
  840. openIdItem := new(models.OpenIdList)
  841. openIdItem.OpenId = v.OpenId
  842. openIdItem.UserId = v.UserId
  843. openIdList := make([]*models.OpenIdList, 0)
  844. openIdList = append(openIdList, openIdItem)
  845. SendWxMsgWithFrequencyBycategory(v.ActivityName, v.ActivityTime, openIdList, v.ActivityId)
  846. }
  847. if len(signupIds) == 0 {
  848. return
  849. }
  850. signupIds = strings.TrimRight(signupIds, ",")
  851. err = models.UPdateSendedMsgStatus(signupIds)
  852. if err != nil {
  853. var msg string
  854. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  855. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  856. }
  857. return
  858. }
  859. // 推送会议开始消息提醒15分钟前
  860. func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
  861. //func SendActivityBeginMsgMeeting() (err error) {
  862. defer func() {
  863. if err != nil {
  864. go utils.SendAlarmMsg("15分钟会议消息提醒失败", 2)
  865. fmt.Println("发送失败,Err:", err.Error())
  866. }
  867. }()
  868. var condition string
  869. var pars []interface{}
  870. endDate := time.Now().Add(+time.Minute * 15).Format(utils.FormatDateTime)
  871. condition = ` AND activity_time <= ? AND activity_time >= NOW() AND publish_status = 1 `
  872. pars = append(pars, endDate)
  873. listActivity, e := models.GetCygxActivityList(condition, pars, 0, 100000)
  874. if e != nil && e.Error() != utils.ErrNoRow() {
  875. err = errors.New("GetCygxActivityList, Err: " + e.Error())
  876. return
  877. }
  878. if len(listActivity) == 0 {
  879. return
  880. }
  881. //var signupIds string
  882. //var remark = "点击查看活动详情"
  883. var activityIds []int
  884. //同一时间举办的活动不多所以这里循环查询
  885. for _, v := range listActivity {
  886. activityIds = append(activityIds, v.ActivityId)
  887. var mobiles []string
  888. pars = make([]interface{}, 0)
  889. condition = ` AND activity_id = ? AND is_send_wx_msg = 0 `
  890. pars = append(pars, v.ActivityId)
  891. //获取设置消息提醒的用户列表
  892. listxReminder, e := models.GetCygxReminderListByUser(condition, pars)
  893. if e != nil {
  894. err = errors.New("GetCygxReminderListByUser, Err: " + e.Error())
  895. return
  896. }
  897. for _, vReminder := range listxReminder {
  898. mobiles = append(mobiles, vReminder.Mobile)
  899. }
  900. pars = make([]interface{}, 0)
  901. condition = ` AND do_fail_type = 0 AND activity_id = ? AND signup_type = 1 AND is_send_wx_msg = 0 `
  902. pars = append(pars, v.ActivityId)
  903. //获取设置预约外呼的用户列表
  904. listSignup, e := models.GetActivitySignupList(condition, pars)
  905. if e != nil && e.Error() != utils.ErrNoRow() {
  906. err = errors.New("GetActivitySignupList, Err: " + e.Error())
  907. return
  908. }
  909. for _, vSignup := range listSignup {
  910. mobiles = append(mobiles, vSignup.Mobile)
  911. }
  912. //获取这些手机号对应的Openid
  913. listOpenid, e := models.GetUserRecordListByMobileArr(mobiles)
  914. if e != nil && e.Error() != utils.ErrNoRow() {
  915. err = errors.New("GetUserRecordListByMobileArr, Err: " + e.Error())
  916. return
  917. }
  918. openIdList := make([]*models.OpenIdList, 0)
  919. for _, vOpenid := range listOpenid {
  920. openIdItem := new(models.OpenIdList)
  921. openIdItem.OpenId = vOpenid.OpenId
  922. openIdItem.UserId = vOpenid.UserId
  923. openIdList = append(openIdList, openIdItem)
  924. }
  925. //var reserveResults string
  926. //var keyword2 string
  927. //reserveResults = "--"
  928. //keyword2 = "将在15分钟后开始"
  929. //SendWxMsgWithFrequency(keyword2, v.ActivityName, reserveResults, v.ActivityTimeText, "--", remark, openIdList, v.ActivityId)
  930. SendWxMsgWithFrequencyBycategory(v.ActivityName, v.ActivityTime, openIdList, v.ActivityId)
  931. }
  932. err = models.UpdateSendedMsgMeetingSendWxMsg(activityIds)
  933. return
  934. }
  935. // 活动预开始模版消息通知(类目模版消息,暂时单独推送)
  936. func SendWxMsgWithFrequencyBycategory(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  937. if len(openIdList) == 0 {
  938. return
  939. }
  940. var msg string
  941. defer func() {
  942. if err != nil {
  943. go utils.SendAlarmMsg(fmt.Sprint("活动预开始模版消息通知消息失败SendWxMsgWithFrequencyBycategory ,activityId:", activityId, msg+";Err:"+err.Error()), 2)
  944. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  945. }
  946. }()
  947. accessToken, err := models.GetWxAccessTokenByXzs()
  948. if err != nil {
  949. msg = "GetWxAccessToken Err:" + err.Error()
  950. return
  951. }
  952. if accessToken == "" {
  953. msg = "accessToken is empty"
  954. return
  955. }
  956. keyWord1 = utils.TruncateActivityNameString(keyWord1)
  957. //keyword1 := keyWord2
  958. //keyword1 := keyWord2
  959. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  960. templateId := utils.WxMsgTemplateIdActivityChangeApplyXzs
  961. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  962. sendMap := make(map[string]interface{})
  963. sendData := make(map[string]interface{})
  964. sendMap["template_id"] = templateId
  965. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": redirectUrl}
  966. sendData["thing18"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  967. sendData["time23"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  968. sendMap["data"] = sendData
  969. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  970. return
  971. }