wx_category_template_msg.go 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056
  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. var configCode string
  403. //如果是研选的就推送给汪洋跟王芳,否则就推送给王芳
  404. configCode = utils.TPL_MSG_WANG_FANG_WANG_YANG
  405. cnf, e := models.GetConfigByCode(configCode)
  406. if e != nil {
  407. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  408. return
  409. }
  410. openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue)
  411. if e != nil && e.Error() != utils.ErrNoRow() {
  412. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  413. return err
  414. }
  415. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  416. if e != nil {
  417. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  418. return
  419. }
  420. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  421. if e != nil {
  422. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  423. return err
  424. }
  425. var keyword1 string
  426. var keyword2 string
  427. var keyword3 string
  428. var keyword4 string
  429. var keyword5 string
  430. keyword1 = specialItem.NickName
  431. keyword2 = specialItem.RealName + "-" + user.CompanyName
  432. keyword3 = specialItem.SpecialName
  433. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  434. keyword5 = "研选专栏提交了内容待审核"
  435. openIdArr := make([]string, 0)
  436. for _, v := range openIdList {
  437. openIdArr = append(openIdArr, v.OpenId)
  438. }
  439. redirectUrl := ""
  440. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_ENABLE_DETAIL + strconv.Itoa(specialId)
  441. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  442. sendInfo := new(SendWxCategoryTemplate)
  443. sendInfo.Keywords = keywords
  444. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  445. sendInfo.RedirectTarget = 4
  446. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  447. sendInfo.OpenIdArr = openIdArr
  448. sendInfo.RedirectUrl = redirectUrl
  449. err = SendCategoryTemplateMsg(sendInfo)
  450. if err != nil {
  451. return
  452. }
  453. return
  454. }
  455. // 研选专栏审核完成时,给提交人发送类目模板消息
  456. func SendWxCategoryMsgSpecialAuthor(specialId, status int) (err error) {
  457. defer func() {
  458. if err != nil {
  459. go utils.SendAlarmMsg(fmt.Sprint("研选专栏审核完成时,给提交人发送模板消息", specialId, ", specialId", err.Error()), 2)
  460. }
  461. }()
  462. var keyword1 string
  463. var keyword2 string
  464. var keyword3 string
  465. var keyword4 string
  466. var redirectUrl string
  467. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  468. if e != nil {
  469. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  470. return
  471. }
  472. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  473. if e != nil {
  474. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  475. return err
  476. }
  477. openIdList, err := models.GetUserRecordListByMobile(4, user.Mobile)
  478. if err != nil && err.Error() != utils.ErrNoRow() {
  479. return err
  480. }
  481. keyword1 = specialItem.Title
  482. keyword2 = specialItem.NickName
  483. if status == 1 {
  484. keyword3 = "文章已通过审核,点击查看详情"
  485. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  486. } else {
  487. keyword3 = "文章未通过审核,点击查看驳回原因"
  488. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_CENTER
  489. }
  490. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  491. openIdArr := make([]string, 0)
  492. for _, v := range openIdList {
  493. openIdArr = append(openIdArr, v.OpenId)
  494. }
  495. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  496. sendInfo := new(SendWxCategoryTemplate)
  497. sendInfo.Keywords = keywords
  498. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  499. sendInfo.RedirectTarget = 4
  500. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  501. sendInfo.OpenIdArr = openIdArr
  502. sendInfo.RedirectUrl = redirectUrl
  503. err = SendCategoryTemplateMsg(sendInfo)
  504. if err != nil {
  505. return
  506. }
  507. return
  508. }
  509. // 研选专栏有新内容审核通过时,给关注此专栏的客户发送模板消息
  510. func SendWxCategoryMsgSpecialFollow(specialId int) (err error) {
  511. defer func() {
  512. if err != nil {
  513. go utils.SendAlarmMsg(fmt.Sprint("研选专栏有新内容审核通过时,给关注此专栏的客户发送类目模板消息失败", specialId, ", specialId", err.Error()), 2)
  514. }
  515. }()
  516. var keyword1 string
  517. var keyword2 string
  518. var keyword3 string
  519. var keyword4 string
  520. followers, e := models.GetYanxuanSpecialFollowUserById(specialId)
  521. if e != nil {
  522. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  523. return
  524. }
  525. if len(followers) == 0 {
  526. return
  527. }
  528. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  529. if e != nil {
  530. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  531. return
  532. }
  533. var allInUserId string
  534. for _, v := range followers {
  535. allInUserId += strconv.Itoa(v) + ","
  536. }
  537. allInUserId = strings.TrimRight(allInUserId, ",")
  538. userList, err := models.GetWxUserListByUserIds(allInUserId)
  539. if err != nil && err.Error() != utils.ErrNoRow() {
  540. return err
  541. }
  542. mobile := ``
  543. for _, v := range userList {
  544. mobile += v.Mobile + ","
  545. }
  546. mobile = strings.TrimRight(mobile, ",")
  547. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  548. if e != nil {
  549. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  550. return
  551. }
  552. if len(openIdList) == 0 {
  553. return
  554. }
  555. keyword1 = specialItem.SpecialName
  556. keyword2 = "发布了新报告"
  557. keyword3 = specialItem.Title
  558. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  559. openIdArr := make([]string, 0)
  560. for _, v := range openIdList {
  561. openIdArr = append(openIdArr, v.OpenId)
  562. }
  563. redirectUrl := ""
  564. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  565. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  566. sendInfo := new(SendWxCategoryTemplate)
  567. sendInfo.Keywords = keywords
  568. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
  569. sendInfo.RedirectTarget = 4
  570. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  571. sendInfo.OpenIdArr = openIdArr
  572. sendInfo.RedirectUrl = redirectUrl
  573. err = SendCategoryTemplateMsg(sendInfo)
  574. if err != nil {
  575. return
  576. }
  577. return
  578. }
  579. // 文章互动相关类目模版消息
  580. func SendWxCategoryMsgInteractive(user *models.WxUserItem, interactive string, articleId int) (err error) {
  581. //30秒内阅读同一篇报告不做重复推送
  582. key := "CYGX_" + utils.CYGX_OBJ_RESEARCHSUMMARY + "_READ" + strconv.Itoa(articleId) + "_" + strconv.Itoa(user.UserId)
  583. if utils.Rc.IsExist(key) {
  584. return
  585. }
  586. utils.Rc.Put(key, 1, 30*time.Second)
  587. defer func() {
  588. if err != nil {
  589. go utils.SendAlarmMsg(fmt.Sprint("文章互动相关,类目模板消息推送 ,SendWxCategoryMsgInteractive"+err.Error(), "userId:", user.UserId, "互动类型:", interactive), 2)
  590. }
  591. }()
  592. countUser, err := models.GetUserRemind(user.UserId)
  593. if err != nil {
  594. return err
  595. }
  596. if countUser == 0 {
  597. return err
  598. }
  599. var keyword1 string
  600. var keyword2 string
  601. var keyword3 string
  602. var keyword4 string
  603. //获取销售手机号
  604. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  605. if err != nil && err.Error() != utils.ErrNoRow() {
  606. return err
  607. }
  608. if sellerItemQy != nil {
  609. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  610. if e != nil {
  611. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  612. return
  613. }
  614. if len(openIdList) == 0 {
  615. return
  616. }
  617. detail, e := models.GetCygxResearchSummaryInfoById(articleId)
  618. if e != nil {
  619. err = errors.New("GetCygxProductInteriorDetail, Err: " + e.Error())
  620. return
  621. }
  622. if detail == nil {
  623. return
  624. }
  625. keyword1 = user.RealName + "-" + user.CompanyName
  626. keyword1 = utils.TruncateActivityNameString(keyword1)
  627. keyword2 = fmt.Sprint("互动提醒:", interactive)
  628. keyword3 = detail.Title
  629. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  630. openIdArr := make([]string, 0)
  631. for _, v := range openIdList {
  632. openIdArr = append(openIdArr, v.OpenId)
  633. }
  634. redirectUrl := ``
  635. redirectUrl = utils.WX_MSG_PATH_YX_ARTICLE_DETAIL + strconv.Itoa(articleId)
  636. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  637. sendInfo := new(SendWxCategoryTemplate)
  638. sendInfo.Keywords = keywords
  639. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdActivityPublishApply
  640. sendInfo.RedirectTarget = 4
  641. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  642. sendInfo.OpenIdArr = openIdArr
  643. sendInfo.RedirectUrl = redirectUrl
  644. err = SendCategoryTemplateMsg(sendInfo)
  645. if err != nil {
  646. return
  647. }
  648. }
  649. return
  650. }
  651. // 用户搜索操作操作行为,类目模板消息推送
  652. func SearchKeywordUserRmindCategoryMsg(user *models.WxUserItem, keyWord string) (err error) {
  653. defer func() {
  654. if err != nil {
  655. fmt.Println(err)
  656. go utils.SendAlarmMsg(fmt.Sprint("用户搜索操作操作行为,类目模板消息推送失败"+err.Error(), "UserId:", user.UserId, "keyWord:", keyWord), 2)
  657. }
  658. }()
  659. countUser, e := models.GetUserRemind(user.UserId)
  660. if e != nil {
  661. err = errors.New("GetUserRemind, Err: " + e.Error())
  662. return
  663. }
  664. if countUser == 0 {
  665. return
  666. }
  667. var keyword1 string
  668. var keyword2 string
  669. var keyword3 string
  670. var keyword4 string
  671. //获取销售手机号
  672. sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  673. if e != nil && e.Error() != utils.ErrNoRow() {
  674. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  675. return
  676. }
  677. if sellerItemQy != nil {
  678. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  679. if e != nil {
  680. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  681. return
  682. }
  683. if len(openIdList) == 0 {
  684. return
  685. }
  686. keyword1 = user.RealName + "-" + user.CompanyName
  687. keyword2 = fmt.Sprint("互动提醒:搜索")
  688. keyword3 = keyWord
  689. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  690. openIdArr := make([]string, 0)
  691. for _, v := range openIdList {
  692. openIdArr = append(openIdArr, v.OpenId)
  693. }
  694. redirectUrl := ""
  695. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  696. sendInfo := new(SendWxCategoryTemplate)
  697. sendInfo.Keywords = keywords
  698. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  699. sendInfo.RedirectTarget = 4
  700. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  701. sendInfo.OpenIdArr = openIdArr
  702. sendInfo.RedirectUrl = redirectUrl
  703. err = SendCategoryTemplateMsg(sendInfo)
  704. if err != nil {
  705. return
  706. }
  707. }
  708. return
  709. }
  710. // 帮我带问的问题,会前1小时发送
  711. func SendEmailFileForAskMsgResearch(cont context.Context) (err error) {
  712. var msg string
  713. //var touser string
  714. defer func() {
  715. if err != nil {
  716. go utils.SendAlarmMsg("发送附件模版消息失败", 2)
  717. go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  718. }
  719. if msg != "" {
  720. go utils.SendAlarmMsg(msg, 2)
  721. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  722. }
  723. }()
  724. endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
  725. condition := `AND a.activity_type_id = 1 AND a.chart_permission_id = 31 `
  726. total, err := models.GetCountActivityResearchToSendFile(condition, endDate)
  727. if total == 0 {
  728. fmt.Println("发送附件完成0")
  729. return nil
  730. }
  731. if err != nil {
  732. msg = "发送附件模版消息失败 Err:" + err.Error()
  733. return
  734. }
  735. listActivity, err := models.GetActivityResearchToSendFile(condition, endDate)
  736. if err != nil {
  737. msg = "发送附件模版消息失败 Err:" + err.Error()
  738. return
  739. }
  740. for _, v := range listActivity {
  741. activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
  742. if activityInfo == nil {
  743. msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
  744. return
  745. }
  746. list, errFile := models.GetActivityMsgExport(v.ActivityId)
  747. if errFile != nil {
  748. msg = "获取失败,Err:" + errFile.Error()
  749. return
  750. }
  751. for _, v2 := range list {
  752. user, e := models.GetWxUserItemByUserId(v2.UserId)
  753. if e != nil && e.Error() != utils.ErrNoRow() {
  754. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  755. return err
  756. }
  757. //获取销售信息
  758. sellerItem, e := models.GetSellerByCompanyIdCheckFicc(v2.CompanyId, 2)
  759. if e != nil && e.Error() != utils.ErrNoRow() {
  760. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  761. return
  762. }
  763. //给所属销售推送消息
  764. if sellerItem != nil {
  765. openIpItem, _ := models.GetUserRecordByMobile(4, sellerItem.Mobile)
  766. openIdList := make([]*models.OpenIdList,0)
  767. openIdList = append(openIdList, openIpItem)
  768. SendWxCategoryMsgWithActivityAsk(user.CompanyName, user.RealName, sellerItem.RealName, time.Now().Format(utils.FormatDateTimeMinute2), v2.Content, openIdList, v2.AskId)
  769. }
  770. }
  771. errFile = models.UPdateActivityMsgToSendFile(v.ActivityId)
  772. if errFile != nil {
  773. msg = "获取失败,Err:" + errFile.Error()
  774. return
  775. }
  776. }
  777. return
  778. }
  779. // 发送报告提问消息提醒
  780. func SendWxCategoryMsgWithActivityAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, msgId int) (err error) {
  781. if len(openIdList) == 0 {
  782. return
  783. }
  784. var msg string
  785. defer func() {
  786. if err != nil {
  787. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  788. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒类目模版消息失败,用户名", realName, "留言ID:", msgId), 2)
  789. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  790. }
  791. fmt.Println("line 21", err, msg)
  792. }()
  793. var keyword1 string
  794. var keyword2 string
  795. var keyword3 string
  796. var keyword4 string
  797. var keyword5 string
  798. keyword1 = realName
  799. keyword2 = companyName
  800. keyword3 = sellerName
  801. keyword4 = askTime
  802. keyword5 = utils.TruncateActivityNameString("活动提问:" + askMsg)
  803. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  804. openIdArr := make([]string, 0)
  805. for _, v := range openIdList {
  806. openIdArr = append(openIdArr, v.OpenId)
  807. }
  808. redirectUrl := utils.WX_MSG_PATH_YX_ACTIVITY_DETAIL + strconv.Itoa(msgId)
  809. sendInfo := new(SendWxCategoryTemplate)
  810. sendInfo.Keywords = keywords
  811. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  812. sendInfo.RedirectTarget = 4
  813. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  814. sendInfo.OpenIdArr = openIdArr
  815. sendInfo.RedirectUrl = redirectUrl
  816. err = SendCategoryTemplateMsg(sendInfo)
  817. if err != nil {
  818. return
  819. }
  820. return
  821. }
  822. // 推送会议开始消息提醒60分钟前
  823. func SendActivityBeginMsg(cont context.Context) (err error) {
  824. //func SendActivityBeginMsg() (err error) {
  825. defer func() {
  826. if err != nil {
  827. go utils.SendAlarmMsg("60分钟会议消息提醒失败"+err.Error(), 2)
  828. fmt.Println("发送失败,Err:", err.Error())
  829. }
  830. }()
  831. endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
  832. listActivity, err := models.GetYxActivitySendMsgListAll(endDate)
  833. fmt.Println(len(listActivity))
  834. if err != nil {
  835. fmt.Println("GetActivitySendMsgListAll Err:", err.Error())
  836. return
  837. }
  838. if len(listActivity) == 0 {
  839. return
  840. }
  841. //var remark = "点击查看活动详情"
  842. var signupIds string
  843. for _, v := range listActivity {
  844. signupIds += strconv.Itoa(v.Id) + ","
  845. //var reserveResults string
  846. //var first string
  847. openIdItem := new(models.OpenIdList)
  848. openIdItem.OpenId = v.OpenId
  849. openIdItem.UserId = v.UserId
  850. openIdList := make([]*models.OpenIdList, 0)
  851. openIdList = append(openIdList, openIdItem)
  852. SendWxMsgWithFrequencyBycategory(v.ActivityName, v.ActivityTime, openIdList, v.ActivityId)
  853. }
  854. if len(signupIds) == 0 {
  855. return
  856. }
  857. signupIds = strings.TrimRight(signupIds, ",")
  858. err = models.UPdateSendedMsgStatus(signupIds)
  859. if err != nil {
  860. var msg string
  861. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  862. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  863. }
  864. return
  865. }
  866. // 推送会议开始消息提醒15分钟前
  867. func SendActivityBeginMsgMeeting(cont context.Context) (err error) {
  868. //func SendActivityBeginMsgMeeting() (err error) {
  869. defer func() {
  870. if err != nil {
  871. go utils.SendAlarmMsg("15分钟会议消息提醒失败", 2)
  872. fmt.Println("发送失败,Err:", err.Error())
  873. }
  874. }()
  875. var condition string
  876. var pars []interface{}
  877. endDate := time.Now().Add(+time.Minute * 15).Format(utils.FormatDateTime)
  878. condition = ` AND activity_time <= ? AND activity_time >= NOW() AND publish_status = 1 `
  879. pars = append(pars, endDate)
  880. listActivity, e := models.GetCygxActivityList(condition, pars, 0, 100000)
  881. if e != nil && e.Error() != utils.ErrNoRow() {
  882. err = errors.New("GetCygxActivityList, Err: " + e.Error())
  883. return
  884. }
  885. if len(listActivity) == 0 {
  886. return
  887. }
  888. //var signupIds string
  889. //var remark = "点击查看活动详情"
  890. var activityIds []int
  891. //同一时间举办的活动不多所以这里循环查询
  892. for _, v := range listActivity {
  893. activityIds = append(activityIds, v.ActivityId)
  894. var mobiles []string
  895. pars = make([]interface{}, 0)
  896. condition = ` AND activity_id = ? AND is_send_wx_msg = 0 `
  897. pars = append(pars, v.ActivityId)
  898. //获取设置消息提醒的用户列表
  899. listxReminder, e := models.GetCygxReminderListByUser(condition, pars)
  900. if e != nil {
  901. err = errors.New("GetCygxReminderListByUser, Err: " + e.Error())
  902. return
  903. }
  904. for _, vReminder := range listxReminder {
  905. mobiles = append(mobiles, vReminder.Mobile)
  906. }
  907. pars = make([]interface{}, 0)
  908. condition = ` AND do_fail_type = 0 AND activity_id = ? AND signup_type = 1 AND is_send_wx_msg = 0 `
  909. pars = append(pars, v.ActivityId)
  910. //获取设置预约外呼的用户列表
  911. listSignup, e := models.GetActivitySignupList(condition, pars)
  912. if e != nil && e.Error() != utils.ErrNoRow() {
  913. err = errors.New("GetActivitySignupList, Err: " + e.Error())
  914. return
  915. }
  916. for _, vSignup := range listSignup {
  917. mobiles = append(mobiles, vSignup.Mobile)
  918. }
  919. //获取这些手机号对应的Openid
  920. listOpenid, e := models.GetUserRecordListByMobileArr(mobiles)
  921. if e != nil && e.Error() != utils.ErrNoRow() {
  922. err = errors.New("GetUserRecordListByMobileArr, Err: " + e.Error())
  923. return
  924. }
  925. openIdList := make([]*models.OpenIdList, 0)
  926. for _, vOpenid := range listOpenid {
  927. openIdItem := new(models.OpenIdList)
  928. openIdItem.OpenId = vOpenid.OpenId
  929. openIdItem.UserId = vOpenid.UserId
  930. openIdList = append(openIdList, openIdItem)
  931. }
  932. //var reserveResults string
  933. //var keyword2 string
  934. //reserveResults = "--"
  935. //keyword2 = "将在15分钟后开始"
  936. //SendWxMsgWithFrequency(keyword2, v.ActivityName, reserveResults, v.ActivityTimeText, "--", remark, openIdList, v.ActivityId)
  937. SendWxMsgWithFrequencyBycategory(v.ActivityName, v.ActivityTime, openIdList, v.ActivityId)
  938. }
  939. err = models.UpdateSendedMsgMeetingSendWxMsg(activityIds)
  940. return
  941. }
  942. // 活动预开始模版消息通知(类目模版消息,暂时单独推送)
  943. func SendWxMsgWithFrequencyBycategory(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  944. if len(openIdList) == 0 {
  945. return
  946. }
  947. var msg string
  948. defer func() {
  949. if err != nil {
  950. go utils.SendAlarmMsg(fmt.Sprint("活动预开始模版消息通知消息失败SendWxMsgWithFrequencyBycategory ,activityId:", activityId, msg+";Err:"+err.Error()), 2)
  951. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  952. }
  953. }()
  954. accessToken, err := models.GetWxAccessTokenByXzs()
  955. if err != nil {
  956. msg = "GetWxAccessToken Err:" + err.Error()
  957. return
  958. }
  959. if accessToken == "" {
  960. msg = "accessToken is empty"
  961. return
  962. }
  963. keyWord1 = utils.TruncateActivityNameString(keyWord1)
  964. //keyword1 := keyWord2
  965. //keyword1 := keyWord2
  966. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  967. templateId := utils.WxMsgTemplateIdActivityChangeApplyXzs
  968. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  969. sendMap := make(map[string]interface{})
  970. sendData := make(map[string]interface{})
  971. sendMap["template_id"] = templateId
  972. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": redirectUrl}
  973. sendData["thing18"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  974. sendData["time23"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  975. sendMap["data"] = sendData
  976. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  977. return
  978. }