wx_template_msg.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. package services
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "hongze/hongze_clpt/models"
  8. "hongze/hongze_clpt/utils"
  9. "io/ioutil"
  10. "net/http"
  11. "strconv"
  12. "time"
  13. )
  14. // 发送报告提问消息提醒
  15. func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.OpenIdList, articleId int) (err error) {
  16. var msg string
  17. defer func() {
  18. if err != nil {
  19. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  20. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,用户名", name, "文章ID:", articleId), 2)
  21. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  22. }
  23. fmt.Println("line 21", err, msg)
  24. }()
  25. utils.FileLog.Info("%s", "services SendMsg")
  26. //accessToken, err := models.GetWxAccessToken()
  27. accessToken, err := models.GetWxAccessTokenByXzs()
  28. if err != nil {
  29. msg = "GetWxAccessToken Err:" + err.Error()
  30. return
  31. }
  32. if accessToken == "" {
  33. msg = "accessToken is empty"
  34. return
  35. }
  36. var first string
  37. var keyword1 string
  38. var keyword3 string
  39. var keyword4 string
  40. var remark string
  41. first = "研选报告有新的提问,请及时处理"
  42. keyword1 = name
  43. keyword3 = askTime
  44. keyword4 = askMsg
  45. remark = title
  46. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  47. //templateId := utils.WxMsgTemplateIdAskMsg
  48. templateId := utils.WxMsgTemplateIdAskMsgXzs
  49. sendMap := make(map[string]interface{})
  50. sendData := make(map[string]interface{})
  51. sendMap["template_id"] = templateId
  52. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pages/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
  53. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "path": "article/detail?ArticleId=1000001"}
  54. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  55. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  56. sendData["keyword2"] = map[string]interface{}{"value": "", "color": "#173177"}
  57. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
  58. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
  59. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  60. sendMap["data"] = sendData
  61. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  62. return
  63. }
  64. func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList, resource string, sendType int) (err error) {
  65. for _, v := range items {
  66. sendMap["touser"] = v.OpenId
  67. data, err := json.Marshal(sendMap)
  68. if err != nil {
  69. fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
  70. return err
  71. }
  72. utils.FileLog.Info("One SendData:%s", string(data))
  73. fmt.Println(string(data))
  74. err = SendTemplateMsg(sendUrl, data, resource, sendType, v)
  75. if err != nil {
  76. fmt.Println("send err:", err.Error())
  77. return err
  78. }
  79. }
  80. return
  81. }
  82. func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
  83. client := http.Client{}
  84. resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
  85. if err != nil {
  86. return
  87. }
  88. defer resp.Body.Close()
  89. body, _ := ioutil.ReadAll(resp.Body)
  90. utils.FileLog.Info("SendResult:%s", string(body))
  91. var templateResponse SendTemplateResponse
  92. err = json.Unmarshal(body, &templateResponse)
  93. fmt.Println(templateResponse.Errcode)
  94. fmt.Println(templateResponse.Errmsg)
  95. if err != nil {
  96. return err
  97. }
  98. //新增模板消息推送记录
  99. {
  100. tr := new(models.UserTemplateRecord)
  101. tr.UserId = dataItem.UserId
  102. tr.OpenId = dataItem.OpenId
  103. tr.Resource = resource
  104. tr.SendData = string(data)
  105. tr.Result = string(body)
  106. tr.CreateDate = time.Now().Format(utils.FormatDate)
  107. tr.CreateTime = time.Now().Format(utils.FormatDateTime)
  108. if templateResponse.Errcode == 0 {
  109. tr.SendStatus = 1
  110. } else {
  111. tr.SendStatus = 0
  112. }
  113. tr.SendType = sendType
  114. go func() {
  115. err = models.AddUserTemplateRecord(tr)
  116. if err != nil {
  117. utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
  118. }
  119. }()
  120. }
  121. return
  122. }
  123. // 活动带问提醒
  124. func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, remark string, itemOpenid *models.OpenIdList, itemAct *models.ActivityDetail, msgId int) (err error) {
  125. var msg string
  126. defer func() {
  127. if err != nil {
  128. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  129. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+remark, 2)
  130. }
  131. if msg != "" {
  132. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  133. }
  134. }()
  135. activityId := itemAct.ActivityId
  136. var redirectUrl string
  137. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  138. openIdArr := make([]string, 0)
  139. openIdArr = append(openIdArr, itemOpenid.OpenId)
  140. sendInfo := new(SendWxTemplate)
  141. sendInfo.Keyword1 = keyword1
  142. sendInfo.Keyword2 = keyword2
  143. sendInfo.Keyword3 = keyword3
  144. sendInfo.Keyword4 = keyword4
  145. sendInfo.Remark = remark
  146. sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
  147. sendInfo.RedirectUrl = redirectUrl
  148. sendInfo.RedirectTarget = 3
  149. sendInfo.Resource = strconv.Itoa(activityId)
  150. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  151. if utils.RunMode != "release" {
  152. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
  153. } else {
  154. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=2"
  155. }
  156. sendInfo.OpenIdArr = openIdArr
  157. err = PublicSendTemplateMsg(sendInfo)
  158. return
  159. }
  160. // 微路演新增留言提问消息提醒
  161. func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.WxUserItem, resourceId, msgId int, title string, isResearch bool) (err error) {
  162. var msg string
  163. defer func() {
  164. if err != nil || msg != "" {
  165. go utils.SendAlarmMsg(fmt.Sprint("发送微路演新增留言提问消息提醒失败,用户名", req.Title, "ID:", req.SourceId), 2)
  166. }
  167. }()
  168. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  169. if e != nil {
  170. return
  171. }
  172. if companyItem == nil {
  173. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  174. }
  175. var first string
  176. var keyword1 string
  177. var keyword2 string
  178. var keyword3 string
  179. var keyword4 string
  180. var remark string
  181. var mobile string
  182. first = req.Title + "有新的留言,请及时处理"
  183. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  184. keyword3 = time.Now().Format(utils.FormatDateTime)
  185. keyword2 = title
  186. keyword4 = req.Content
  187. if isResearch {
  188. //研选报告添加汪洋
  189. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  190. } else {
  191. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  192. }
  193. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  194. if e != nil {
  195. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  196. return
  197. }
  198. openIdArr := make([]string, 0)
  199. for _, v := range openIdList {
  200. openIdArr = append(openIdArr, v.OpenId)
  201. }
  202. mapSource := make(map[int]string)
  203. mapSource[1] = "5"
  204. mapSource[2] = "4"
  205. mapSource[3] = "3"
  206. if mapSource[resourceId] == "" {
  207. err = errors.New("留言消息类型错误, resourceId: " + strconv.Itoa(resourceId))
  208. return
  209. }
  210. //SourceType int `description:"视频来源: 1-音频; 2-活动视频; 3-微路演视频 (不传默认为1)"`
  211. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  212. redirectUrl := ""
  213. if utils.RunMode != "release" {
  214. if req.SourceType == 3 {
  215. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(resourceId)
  216. remark = "点击进入产业资源包详情页"
  217. } else {
  218. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(resourceId)
  219. remark = "点击查看活动详情"
  220. }
  221. } else {
  222. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=" + mapSource[resourceId]
  223. }
  224. sendInfo := new(SendWxTemplate)
  225. sendInfo.First = first
  226. sendInfo.Keyword1 = keyword1
  227. sendInfo.Keyword2 = keyword2
  228. sendInfo.Keyword3 = keyword3
  229. sendInfo.Keyword4 = keyword4
  230. sendInfo.Remark = remark
  231. sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
  232. sendInfo.RedirectUrl = redirectUrl
  233. sendInfo.RedirectTarget = 3
  234. sendInfo.Resource = strconv.Itoa(req.SourceId)
  235. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  236. sendInfo.OpenIdArr = openIdArr
  237. err = PublicSendTemplateMsg(sendInfo)
  238. if err != nil {
  239. return
  240. }
  241. return
  242. }
  243. // 发送用户留言提醒
  244. func SendCommentWxTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail, msgId int) (err error) {
  245. var msg string
  246. defer func() {
  247. if err != nil {
  248. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  249. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  250. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  251. }
  252. }()
  253. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  254. if e != nil {
  255. return
  256. }
  257. if companyItem == nil {
  258. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  259. }
  260. var first string
  261. var keyword1 string
  262. var keyword2 string
  263. var keyword3 string
  264. var keyword4 string
  265. var remark string
  266. var redirectUrl string
  267. var mobile string
  268. first = "【" + articleInfo.Title + "】有新的留言,请及时处理"
  269. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  270. keyword2 = "留言:" + articleInfo.Title
  271. keyword3 = time.Now().Format(utils.FormatDateTime)
  272. keyword4 = req.Content
  273. remark = "点击查看报告详情"
  274. if articleInfo.ArticleTypeId > 0 {
  275. //研选报告添加汪洋
  276. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  277. } else {
  278. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  279. }
  280. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  281. if e != nil {
  282. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  283. return
  284. }
  285. openIdArr := make([]string, 0)
  286. for _, v := range openIdList {
  287. openIdArr = append(openIdArr, v.OpenId)
  288. }
  289. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  290. if utils.RunMode != "release" {
  291. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
  292. } else {
  293. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=1"
  294. }
  295. sendInfo := new(SendWxTemplate)
  296. sendInfo.First = first
  297. sendInfo.Keyword1 = keyword1
  298. sendInfo.Keyword2 = keyword2
  299. sendInfo.Keyword3 = keyword3
  300. sendInfo.Keyword4 = keyword4
  301. sendInfo.Remark = remark
  302. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  303. sendInfo.RedirectUrl = redirectUrl
  304. sendInfo.RedirectTarget = 3
  305. sendInfo.Resource = strconv.Itoa(req.ArticleId)
  306. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  307. sendInfo.OpenIdArr = openIdArr
  308. err = PublicSendTemplateMsg(sendInfo)
  309. if err != nil {
  310. return
  311. }
  312. return
  313. }
  314. // 发送用户操作活动消息提醒
  315. func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  316. var msg string
  317. defer func() {
  318. if err != nil {
  319. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  320. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  321. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  322. }
  323. }()
  324. accessToken, err := models.GetWxAccessTokenByXzs()
  325. if err != nil {
  326. msg = "GetWxAccessToken Err:" + err.Error()
  327. return
  328. }
  329. if accessToken == "" {
  330. msg = "accessToken is empty"
  331. return
  332. }
  333. //var first string
  334. //first = keyWord1
  335. //keyword1 := keyWord2
  336. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  337. templateId := utils.WxMsgTemplateIdArticleUserRemind
  338. sendMap := make(map[string]interface{})
  339. sendData := make(map[string]interface{})
  340. sendMap["template_id"] = templateId
  341. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  342. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  343. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  344. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  345. sendMap["data"] = sendData
  346. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  347. return
  348. }
  349. // 发送用户阅读报告消息提醒
  350. func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, articleId int) (err error) {
  351. var msg string
  352. defer func() {
  353. if err != nil {
  354. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  355. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  356. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  357. }
  358. }()
  359. accessToken, err := models.GetWxAccessTokenByXzs()
  360. if err != nil {
  361. msg = "GetWxAccessToken Err:" + err.Error()
  362. return
  363. }
  364. if accessToken == "" {
  365. msg = "accessToken is empty"
  366. return
  367. }
  368. //var first string
  369. //first = keyWord1
  370. //keyword1 := keyWord2
  371. remark := "点击查看报告详情"
  372. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  373. templateId := utils.WxMsgTemplateIdArticleUserRemind
  374. sendMap := make(map[string]interface{})
  375. sendData := make(map[string]interface{})
  376. sendMap["template_id"] = templateId
  377. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)}
  378. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  379. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  380. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  381. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  382. sendMap["data"] = sendData
  383. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  384. return
  385. }
  386. // SendActivitieCancelSignTemplateMsg 取消活动给销售和内容组四人发模版消息
  387. func SendActivitieCancelSignTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  388. defer func() {
  389. if err != nil {
  390. go utils.SendAlarmMsg(fmt.Sprint("取消活动给销售和内容组四人发模版消息Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
  391. }
  392. }()
  393. //获取销售手机号
  394. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  395. if err != nil {
  396. return
  397. }
  398. configCode := utils.TPL_MSG_NEI_RONG_ZU
  399. cnf, e := models.GetConfigByCode(configCode)
  400. if e != nil {
  401. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  402. return
  403. }
  404. openIdList, e := models.GetWxOpenIdByMobileList(cnf.ConfigValue + "," + sellerItemQy.Mobile)
  405. if e != nil && e.Error() != utils.ErrNoRow() {
  406. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  407. return
  408. }
  409. keyword1 := user.RealName + "--" + user.CompanyName + "(" + sellerItemQy.RealName + ")"
  410. keyword2 := user.Mobile
  411. keyword3 := time.Now().Format(utils.FormatDateTime)
  412. keyword4 := "取消报名" + "【" + activityDetail.ActivityName + "】"
  413. openIdArr := make([]string, 0)
  414. for _, v := range openIdList {
  415. openIdArr = append(openIdArr, v.OpenId)
  416. }
  417. sendInfo := new(SendWxTemplate)
  418. sendInfo.Keyword1 = keyword1
  419. sendInfo.Keyword2 = keyword2
  420. sendInfo.Keyword3 = keyword3
  421. sendInfo.Keyword4 = keyword4
  422. sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
  423. sendInfo.RedirectTarget = 3
  424. sendInfo.Resource = user.Mobile
  425. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  426. sendInfo.OpenIdArr = openIdArr
  427. err = PublicSendTemplateMsg(sendInfo)
  428. return
  429. }
  430. // SendNeiRongZuActivitieSignTemplateMsg 报名活动给销售和内容组四人发模版消息
  431. func SendNeiRongZuActivitieSignTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  432. defer func() {
  433. if err != nil {
  434. go utils.SendAlarmMsg(fmt.Sprint("取消活动给销售和内容组四人发模版消息Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
  435. }
  436. }()
  437. //获取销售手机号
  438. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  439. if err != nil && err.Error() != utils.ErrNoRow() {
  440. return
  441. }
  442. configCode := utils.TPL_MSG_NEI_RONG_ZU
  443. cnf, e := models.GetConfigByCode(configCode)
  444. if e != nil {
  445. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  446. return
  447. }
  448. openIdList, e := models.GetWxOpenIdByMobileList(cnf.ConfigValue + "," + sellerItemQy.Mobile)
  449. if e != nil && e.Error() != utils.ErrNoRow() {
  450. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  451. return err
  452. }
  453. keyword1 := user.RealName + "--" + user.CompanyName + "(" + sellerItemQy.RealName + ")"
  454. keyword2 := user.Mobile
  455. keyword3 := time.Now().Format(utils.FormatDateTime)
  456. keyword4 := "报名" + "【" + activityDetail.ActivityName + "】"
  457. openIdArr := make([]string, 0)
  458. for _, v := range openIdList {
  459. openIdArr = append(openIdArr, v.OpenId)
  460. }
  461. sendInfo := new(SendWxTemplate)
  462. sendInfo.Keyword1 = keyword1
  463. sendInfo.Keyword2 = keyword2
  464. sendInfo.Keyword3 = keyword3
  465. sendInfo.Keyword4 = keyword4
  466. sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
  467. sendInfo.RedirectTarget = 3
  468. sendInfo.Resource = user.Mobile
  469. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  470. sendInfo.OpenIdArr = openIdArr
  471. err = PublicSendTemplateMsg(sendInfo)
  472. return
  473. }