wx_template_msg.go 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831
  1. package services
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "hongze/hongze_cygx/models"
  8. "hongze/hongze_cygx/utils"
  9. "io/ioutil"
  10. "net/http"
  11. "strconv"
  12. "time"
  13. )
  14. // 活动预开始模版消息通知
  15. func SendWxMsgWithFrequency(keyword2, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId 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. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  21. }
  22. fmt.Println("line 21", err, msg)
  23. }()
  24. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  25. sendInfo := new(SendWxTemplate)
  26. sendInfo.Keyword1 = activityName
  27. sendInfo.Keyword2 = keyword2
  28. openIdArr := make([]string, 0)
  29. for _, v := range openIdList {
  30. openIdArr = append(openIdArr, v.OpenId)
  31. }
  32. sendInfo.Remark = remark
  33. sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
  34. sendInfo.RedirectUrl = redirectUrl
  35. sendInfo.RedirectTarget = 3
  36. sendInfo.Resource = strconv.Itoa(activityId)
  37. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
  38. sendInfo.OpenIdArr = openIdArr
  39. err = PublicSendTemplateMsg(sendInfo)
  40. return
  41. }
  42. // 专项调研活动预开始消息通知
  43. func SendWxMsgWithFrequencySpecial(first, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
  44. var msg string
  45. defer func() {
  46. if err != nil {
  47. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  48. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  49. }
  50. }()
  51. //accessToken, err := models.GetWxAccessTokenByXzs()
  52. //if err != nil {
  53. // msg = "GetWxAccessToken Err:" + err.Error()
  54. // return
  55. //}
  56. //if accessToken == "" {
  57. // msg = "accessToken is empty"
  58. // return
  59. //}
  60. //
  61. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  62. //templateId := utils.WxMsgTemplateIdActivityApplyXzs
  63. //sendMap := make(map[string]interface{})
  64. //sendData := make(map[string]interface{})
  65. //sendMap["template_id"] = templateId
  66. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)}
  67. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  68. //sendData["keyword1"] = map[string]interface{}{"value": activityName, "color": "#173177"}
  69. //sendData["keyword2"] = map[string]interface{}{"value": activityTime, "color": "#173177"}
  70. //sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  71. //sendMap["data"] = sendData
  72. //WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  73. //var first string
  74. var keyword1 string
  75. var keyword2 string
  76. var keyword3 string
  77. var keyword4 string
  78. first = ""
  79. keyword1 = activityName
  80. keyword3 = activityTime
  81. openIdArr := make([]string, 0)
  82. for _, v := range openIdList {
  83. openIdArr = append(openIdArr, v.OpenId)
  84. }
  85. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)
  86. sendInfo := new(SendWxTemplate)
  87. sendInfo.First = first
  88. sendInfo.Keyword1 = keyword1
  89. sendInfo.Keyword2 = keyword2
  90. sendInfo.Keyword3 = keyword3
  91. sendInfo.Keyword4 = keyword4
  92. sendInfo.Remark = remark
  93. sendInfo.TemplateId = utils.WxMsgTemplateIdActivityApplyXzs
  94. sendInfo.RedirectUrl = redirectUrl
  95. sendInfo.RedirectTarget = 3
  96. sendInfo.Resource = strconv.Itoa(activityId)
  97. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
  98. sendInfo.OpenIdArr = openIdArr
  99. err = PublicSendTemplateMsg(sendInfo)
  100. return
  101. }
  102. // 发送报告提问消息提醒
  103. func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.OpenIdList, articleId int) (err error) {
  104. var msg string
  105. defer func() {
  106. if err != nil {
  107. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  108. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,用户名", name, "文章ID:", articleId), 2)
  109. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  110. }
  111. fmt.Println("line 21", err, msg)
  112. }()
  113. var first string
  114. var keyword1 string
  115. var keyword2 string
  116. var keyword3 string
  117. var keyword4 string
  118. var remark string
  119. first = "研选报告有新的提问,请及时处理"
  120. keyword1 = name
  121. keyword3 = askTime
  122. keyword2 = ""
  123. keyword4 = askMsg
  124. remark = title
  125. openIdArr := make([]string, 0)
  126. for _, v := range openIdList {
  127. openIdArr = append(openIdArr, v.OpenId)
  128. }
  129. redirectUrl := utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
  130. sendInfo := new(SendWxTemplate)
  131. sendInfo.First = first
  132. sendInfo.Keyword1 = keyword1
  133. sendInfo.Keyword2 = keyword2
  134. sendInfo.Keyword3 = keyword3
  135. sendInfo.Keyword4 = keyword4
  136. sendInfo.Remark = remark
  137. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  138. sendInfo.RedirectUrl = redirectUrl
  139. sendInfo.RedirectTarget = 3
  140. sendInfo.Resource = strconv.Itoa(articleId)
  141. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  142. sendInfo.OpenIdArr = openIdArr
  143. err = PublicSendTemplateMsg(sendInfo)
  144. if err != nil {
  145. return
  146. }
  147. return
  148. }
  149. // 到期提醒模板消息
  150. func SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark string, openIdList []*models.OpenIdList) (err error) {
  151. var msg string
  152. defer func() {
  153. if err != nil {
  154. fmt.Println(err)
  155. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  156. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  157. }
  158. }()
  159. accessToken, err := models.GetWxAccessToken()
  160. if err != nil {
  161. msg = "GetWxAccessToken Err:" + err.Error()
  162. return
  163. }
  164. if accessToken == "" {
  165. msg = "accessToken is empty"
  166. return
  167. }
  168. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  169. sendMap := make(map[string]interface{})
  170. sendData := make(map[string]interface{})
  171. sendMap["template_id"] = utils.WxMsgTemplateIdActivityChange
  172. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  173. sendData["productname"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  174. sendData["date"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  175. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  176. sendMap["data"] = sendData
  177. fmt.Println(accessToken)
  178. fmt.Println(sendUrl)
  179. //WxSendTemplateMsg(sendUrl, sendMap, openIdList)
  180. return
  181. }
  182. // 发送报告提问消息提醒
  183. func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, articleId int) (err error) {
  184. var msg string
  185. defer func() {
  186. if err != nil {
  187. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  188. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  189. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  190. }
  191. }()
  192. accessToken, err := models.GetWxAccessTokenByXzs()
  193. if err != nil {
  194. msg = "GetWxAccessToken Err:" + err.Error()
  195. return
  196. }
  197. if accessToken == "" {
  198. msg = "accessToken is empty"
  199. return
  200. }
  201. var first string
  202. first = keyWord1
  203. keyword1 := keyWord2
  204. keyword2 := keyWord3
  205. keyword3 := keyWord4
  206. keyword4 := ""
  207. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  208. templateId := utils.TemplateIdByProductXzs
  209. sendMap := make(map[string]interface{})
  210. sendData := make(map[string]interface{})
  211. sendMap["template_id"] = templateId
  212. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
  213. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  214. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  215. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  216. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
  217. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
  218. sendMap["data"] = sendData
  219. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  220. return
  221. }
  222. // 发送用户阅读报告消息提醒
  223. func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, articleId int) (err error) {
  224. var msg string
  225. defer func() {
  226. if err != nil {
  227. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  228. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  229. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  230. }
  231. }()
  232. accessToken, err := models.GetWxAccessTokenByXzs()
  233. if err != nil {
  234. msg = "GetWxAccessToken Err:" + err.Error()
  235. return
  236. }
  237. if accessToken == "" {
  238. msg = "accessToken is empty"
  239. return
  240. }
  241. var first string
  242. first = keyWord1
  243. //keyword1 := keyWord2
  244. //keyword1 := keyWord2
  245. remark := "点击查看报告详情"
  246. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  247. templateId := utils.WxMsgTemplateIdArticleUserRemind
  248. sendMap := make(map[string]interface{})
  249. sendData := make(map[string]interface{})
  250. sendMap["template_id"] = templateId
  251. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)}
  252. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  253. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  254. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  255. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  256. sendMap["data"] = sendData
  257. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  258. return
  259. }
  260. // 发送用户操作活动消息提醒
  261. func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  262. var msg string
  263. defer func() {
  264. if err != nil {
  265. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  266. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  267. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  268. }
  269. }()
  270. accessToken, err := models.GetWxAccessTokenByXzs()
  271. if err != nil {
  272. msg = "GetWxAccessToken Err:" + err.Error()
  273. return
  274. }
  275. if accessToken == "" {
  276. msg = "accessToken is empty"
  277. return
  278. }
  279. var first string
  280. //first = keyWord1
  281. //keyword1 := keyWord2
  282. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  283. templateId := utils.WxMsgTemplateIdArticleUserRemind
  284. sendMap := make(map[string]interface{})
  285. sendData := make(map[string]interface{})
  286. sendMap["template_id"] = templateId
  287. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  288. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  289. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  290. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  291. sendMap["data"] = sendData
  292. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  293. return
  294. }
  295. // 发送用户操作专项调研活动消息提醒
  296. func SendWxMsgWithSpecialActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  297. var msg string
  298. defer func() {
  299. if err != nil {
  300. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  301. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  302. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  303. }
  304. }()
  305. accessToken, err := models.GetWxAccessTokenByXzs()
  306. if err != nil {
  307. msg = "GetWxAccessToken Err:" + err.Error()
  308. return
  309. }
  310. if accessToken == "" {
  311. msg = "accessToken is empty"
  312. return
  313. }
  314. var first string
  315. first = keyWord1
  316. keyword1 := keyWord2
  317. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  318. templateId := utils.WxMsgTemplateIdArticleUserRemind
  319. sendMap := make(map[string]interface{})
  320. sendData := make(map[string]interface{})
  321. sendMap["template_id"] = templateId
  322. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/specialDetail/specialDetail?id=" + strconv.Itoa(activityId)}
  323. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  324. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  325. sendMap["data"] = sendData
  326. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  327. return
  328. }
  329. // 活动带问提醒
  330. func SendActivityAskApplyTemplateMsg(applyName, applyTime, askContent, activityName string, activityId int, itemOpenid *models.OpenIdList) (err error) {
  331. var msg string
  332. defer func() {
  333. if err != nil {
  334. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  335. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+activityName, 2)
  336. }
  337. if msg != "" {
  338. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  339. }
  340. }()
  341. var accessToken string
  342. if utils.RunMode == "release" {
  343. accessToken, err = models.GetWxAccessTokenByXzs()
  344. if err != nil {
  345. msg = "GetWxAccessToken Err:" + err.Error()
  346. return
  347. }
  348. if accessToken == "" {
  349. msg = "accessToken is empty"
  350. return
  351. }
  352. } else {
  353. accessToken, err = models.GetWxAccessToken()
  354. if err != nil {
  355. msg = "GetWxAccessToken Err:" + err.Error()
  356. return
  357. }
  358. if accessToken == "" {
  359. msg = "accessToken is empty"
  360. return
  361. }
  362. }
  363. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  364. sendMap := make(map[string]interface{})
  365. sendData := make(map[string]interface{})
  366. first := "有新的客户提问"
  367. keyword1 := applyName
  368. keyword2 := "-"
  369. keyword3 := applyTime
  370. keyword4 := askContent
  371. remark := activityName
  372. fontColor := "#D9001B"
  373. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  374. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  375. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  376. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  377. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  378. sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
  379. if utils.RunMode == "release" {
  380. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  381. } else {
  382. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  383. }
  384. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  385. sendMap["data"] = sendData
  386. sendTemplateMsg(sendUrl, sendMap, itemOpenid, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  387. fmt.Println("send end")
  388. return
  389. }
  390. // 活动带问提醒
  391. func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, remark string, itemOpenid *models.OpenIdList, itemAct *models.ActivityDetail, msgId int) (err error) {
  392. var msg string
  393. defer func() {
  394. if err != nil {
  395. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  396. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+remark, 2)
  397. }
  398. if msg != "" {
  399. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  400. }
  401. }()
  402. activityId := itemAct.ActivityId
  403. var redirectUrl string
  404. //redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  405. openIdArr := make([]string, 0)
  406. openIdArr = append(openIdArr, itemOpenid.OpenId)
  407. sendInfo := new(SendWxTemplate)
  408. sendInfo.Keyword1 = keyword1
  409. sendInfo.Keyword2 = keyword2
  410. sendInfo.Keyword3 = keyword3
  411. sendInfo.Keyword4 = keyword4
  412. sendInfo.Remark = remark
  413. sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
  414. sendInfo.RedirectUrl = redirectUrl
  415. sendInfo.RedirectTarget = 3
  416. sendInfo.Resource = strconv.Itoa(activityId)
  417. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  418. //if utils.RunMode != "release" {
  419. // sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
  420. //} else {
  421. //
  422. //}
  423. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=2"
  424. sendInfo.OpenIdArr = openIdArr
  425. err = PublicSendTemplateMsg(sendInfo)
  426. return
  427. }
  428. // 专项产业调研模板消息推送
  429. func SendSpecialTemplateMsg(applyName, applyTime, mobile, activityName, resource string, itemOpenid *models.OpenIdList) (err error) {
  430. var msg string
  431. defer func() {
  432. if err != nil {
  433. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  434. go utils.SendAlarmMsg("专项产业调研模板消息推送消息失败"+activityName, 2)
  435. }
  436. if msg != "" {
  437. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  438. }
  439. }()
  440. var accessToken string
  441. if utils.RunMode == "release" {
  442. accessToken, err = models.GetWxAccessTokenByXzs()
  443. if err != nil {
  444. msg = "GetWxAccessToken Err:" + err.Error()
  445. return
  446. }
  447. if accessToken == "" {
  448. msg = "accessToken is empty"
  449. return
  450. }
  451. } else {
  452. accessToken, err = models.GetWxAccessToken()
  453. if err != nil {
  454. msg = "GetWxAccessToken Err:" + err.Error()
  455. return
  456. }
  457. if accessToken == "" {
  458. msg = "accessToken is empty"
  459. return
  460. }
  461. }
  462. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  463. sendMap := make(map[string]interface{})
  464. sendData := make(map[string]interface{})
  465. var first string
  466. if resource == "sale" {
  467. first = "有客户对专项调研感兴趣"
  468. } else {
  469. first = "有5家公司预报名专项调研"
  470. }
  471. keyword1 := applyName
  472. keyword2 := mobile
  473. keyword3 := applyTime
  474. keyword4 := activityName
  475. fontColor := "#D9001B"
  476. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  477. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  478. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  479. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  480. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  481. if utils.RunMode == "release" {
  482. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  483. } else {
  484. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  485. }
  486. sendMap["data"] = sendData
  487. sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  488. return
  489. }
  490. //弘则投资:
  491. //Y59n_AHg-RLCKaz293geW76KDHpGL1qOnE7eF_lxelY 活动预约通知
  492. //CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM 项目状态变更通知
  493. //
  494. //
  495. //弘则研究:
  496. //MwZ5wxfd0O1Yt0Pkf6OkfWP4USQzZbiEo5SkZ26735s 活动预约通知
  497. //dYg6iHooRq74PyCXmw_Ns7qdJZmbtLoKS2p2FKeaXl0 项目状态变更通知
  498. func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList, resource string, sendType int) (err error) {
  499. for _, v := range items {
  500. sendMap["touser"] = v.OpenId
  501. data, err := json.Marshal(sendMap)
  502. if err != nil {
  503. fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
  504. return err
  505. }
  506. utils.FileLog.Info("One SendData:%s", string(data))
  507. fmt.Println(string(data))
  508. err = SendTemplateMsg(sendUrl, data, resource, sendType, v)
  509. if err != nil {
  510. fmt.Println("send err:", err.Error())
  511. return err
  512. }
  513. }
  514. return
  515. }
  516. func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
  517. client := http.Client{}
  518. resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
  519. if err != nil {
  520. return
  521. }
  522. defer resp.Body.Close()
  523. body, _ := ioutil.ReadAll(resp.Body)
  524. utils.FileLog.Info("SendResult:%s", string(body))
  525. var templateResponse models.SendTemplateResponse
  526. err = json.Unmarshal(body, &templateResponse)
  527. fmt.Println(templateResponse.Errcode)
  528. fmt.Println(templateResponse.Errmsg)
  529. if err != nil {
  530. return err
  531. }
  532. //新增模板消息推送记录
  533. {
  534. tr := new(models.UserTemplateRecord)
  535. tr.UserId = dataItem.UserId
  536. tr.OpenId = dataItem.OpenId
  537. tr.Resource = resource
  538. tr.SendData = string(data)
  539. tr.Result = string(body)
  540. tr.CreateDate = time.Now().Format(utils.FormatDate)
  541. tr.CreateTime = time.Now().Format(utils.FormatDateTime)
  542. if templateResponse.Errcode == 0 {
  543. tr.SendStatus = 1
  544. } else {
  545. tr.SendStatus = 0
  546. }
  547. tr.SendType = sendType
  548. go func() {
  549. err = models.AddUserTemplateRecord(tr)
  550. if err != nil {
  551. utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
  552. }
  553. }()
  554. }
  555. return
  556. }
  557. // 发送报告更新的消息给预约的用户
  558. func SendWxMsgWithArticleUpdate(first, keyWord1, keyWord2, keyWord3, keyWord4 string, item *models.OpenIdList, articleId int) (err error) {
  559. var msg string
  560. defer func() {
  561. if err != nil {
  562. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  563. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  564. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  565. }
  566. }()
  567. accessToken, err := models.GetWxAccessTokenByXzs()
  568. if err != nil {
  569. msg = "GetWxAccessToken Err:" + err.Error()
  570. return
  571. }
  572. if accessToken == "" {
  573. msg = "accessToken is empty"
  574. return
  575. }
  576. var openIdList []*models.OpenIdList
  577. openIdList = append(openIdList, item)
  578. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  579. templateId := utils.TemplateIdByProductXzs
  580. sendMap := make(map[string]interface{})
  581. sendData := make(map[string]interface{})
  582. sendMap["template_id"] = templateId
  583. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId) + "&IsSendWx=1"}
  584. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  585. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  586. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  587. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  588. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  589. sendData["remark"] = map[string]interface{}{"value": "点击查看报告详情", "color": "#173177"}
  590. sendMap["data"] = sendData
  591. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  592. return
  593. }
  594. // 周日下午4点半,推送全部活动
  595. func SendActivityOnenIdWxTemplateMsg(first, keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList) (err error) {
  596. var msg string
  597. defer func() {
  598. if err != nil {
  599. go utils.SendEmail("周日下午4点半,推送全部活"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  600. go utils.SendAlarmMsg(fmt.Sprint("发送周日下午4点半,推送全部活模版消息失败,"), 2)
  601. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  602. }
  603. }()
  604. accessToken, err := models.GetWxAccessTokenByXzs()
  605. if err != nil {
  606. msg = "GetWxAccessToken Err:" + err.Error()
  607. return
  608. }
  609. if accessToken == "" {
  610. msg = "accessToken is empty"
  611. return
  612. }
  613. //var openIdList []*models.OpenIdList
  614. //openIdList = append(openIdList, item)
  615. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  616. templateId := utils.WxMsgTemplateIdArticleUserRemind
  617. sendMap := make(map[string]interface{})
  618. sendData := make(map[string]interface{})
  619. sendMap["template_id"] = templateId
  620. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pages/activity/activity"}
  621. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
  622. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  623. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  624. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  625. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  626. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  627. sendData["remark"] = map[string]interface{}{"value": "点击查看下周活动列表", "color": "#173177"}
  628. sendMap["data"] = sendData
  629. WxSendTemplateMsg(sendUrl, sendMap, openIdList, "", utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  630. return
  631. }
  632. // 发送用户留言提醒
  633. // func SendCommentWxTemplateMsg(title, companyName, userName, sellerName, createTime, content string, openIdList []*models.OpenIdList, articleId int) (err error) {
  634. func SendCommentWxTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail, msgId int) (err error) {
  635. var msg string
  636. defer func() {
  637. if err != nil {
  638. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  639. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  640. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  641. }
  642. }()
  643. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  644. if e != nil {
  645. return
  646. }
  647. if companyItem == nil {
  648. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  649. }
  650. var first string
  651. var keyword1 string
  652. var keyword2 string
  653. var keyword3 string
  654. var keyword4 string
  655. var remark string
  656. var redirectUrl string
  657. var mobile string
  658. first = "【" + articleInfo.Title + "】有新的留言,请及时处理"
  659. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  660. keyword2 = "留言:" + articleInfo.Title
  661. keyword3 = time.Now().Format(utils.FormatDateTime)
  662. keyword4 = req.Content
  663. remark = "点击查看报告详情"
  664. if articleInfo.ArticleTypeId > 0 {
  665. //研选报告添加汪洋
  666. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  667. } else {
  668. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  669. }
  670. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  671. if e != nil {
  672. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  673. return
  674. }
  675. openIdArr := make([]string, 0)
  676. for _, v := range openIdList {
  677. openIdArr = append(openIdArr, v.OpenId)
  678. }
  679. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  680. if utils.RunMode != "release" {
  681. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
  682. } else {
  683. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=1"
  684. }
  685. sendInfo := new(SendWxTemplate)
  686. sendInfo.First = first
  687. sendInfo.Keyword1 = keyword1
  688. sendInfo.Keyword2 = keyword2
  689. sendInfo.Keyword3 = keyword3
  690. sendInfo.Keyword4 = keyword4
  691. sendInfo.Remark = remark
  692. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  693. sendInfo.RedirectUrl = redirectUrl
  694. sendInfo.RedirectTarget = 3
  695. sendInfo.Resource = strconv.Itoa(req.ArticleId)
  696. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  697. sendInfo.OpenIdArr = openIdArr
  698. err = PublicSendTemplateMsg(sendInfo)
  699. if err != nil {
  700. return
  701. }
  702. return
  703. }
  704. // 微路演新增留言提问消息提醒
  705. func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.WxUserItem, resourceId, msgId int, title string, isResearch bool) (err error) {
  706. var msg string
  707. defer func() {
  708. if err != nil || msg != "" {
  709. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  710. go utils.SendAlarmMsg(fmt.Sprint("发送微路演新增留言提问消息提醒失败,用户名", req.Title, "ID:", req.Id), 2)
  711. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  712. }
  713. }()
  714. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  715. if e != nil {
  716. return
  717. }
  718. if companyItem == nil {
  719. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  720. }
  721. var first string
  722. var keyword1 string
  723. var keyword2 string
  724. var keyword3 string
  725. var keyword4 string
  726. var remark string
  727. var mobile string
  728. first = req.Title + "有新的留言,请及时处理"
  729. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  730. keyword3 = time.Now().Format(utils.FormatDateTime)
  731. keyword2 = "留言:" + title
  732. keyword4 = req.Content
  733. if isResearch {
  734. //研选报告添加汪洋
  735. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  736. } else {
  737. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  738. }
  739. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  740. if e != nil {
  741. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  742. return
  743. }
  744. openIdArr := make([]string, 0)
  745. for _, v := range openIdList {
  746. openIdArr = append(openIdArr, v.OpenId)
  747. }
  748. mapSource := make(map[int]string)
  749. mapSource[1] = "5"
  750. mapSource[2] = "4"
  751. mapSource[3] = "3"
  752. if mapSource[resourceId] == "" {
  753. err = errors.New("留言消息类型错误, resourceId: " + strconv.Itoa(resourceId))
  754. return
  755. }
  756. //SourceType int `description:"视频来源: 1-音频; 2-活动视频; 3-微路演视频 (不传默认为1)"`
  757. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  758. redirectUrl := ""
  759. if utils.RunMode != "release" {
  760. if req.SourceType == 3 {
  761. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(resourceId)
  762. remark = "点击进入产业资源包详情页"
  763. } else {
  764. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(resourceId)
  765. remark = "点击查看活动详情"
  766. }
  767. } else {
  768. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=" + mapSource[resourceId]
  769. }
  770. sendInfo := new(SendWxTemplate)
  771. sendInfo.First = first
  772. sendInfo.Keyword1 = keyword1
  773. sendInfo.Keyword2 = keyword2
  774. sendInfo.Keyword3 = keyword3
  775. sendInfo.Keyword4 = keyword4
  776. sendInfo.Remark = remark
  777. sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
  778. sendInfo.RedirectUrl = redirectUrl
  779. sendInfo.RedirectTarget = 3
  780. sendInfo.Resource = strconv.Itoa(req.Id)
  781. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  782. sendInfo.OpenIdArr = openIdArr
  783. err = PublicSendTemplateMsg(sendInfo)
  784. if err != nil {
  785. return
  786. }
  787. return
  788. }