wx_template_msg.go 18 KB

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