wx_category_template_msg.go 35 KB

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