wx_template_msg.go 20 KB

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