wx_template_msg.go 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830
  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. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=2"
  422. }
  423. sendInfo.OpenIdArr = openIdArr
  424. err = PublicSendTemplateMsg(sendInfo)
  425. return
  426. }
  427. // 专项产业调研模板消息推送
  428. func SendSpecialTemplateMsg(applyName, applyTime, mobile, activityName, resource string, itemOpenid *models.OpenIdList) (err error) {
  429. var msg string
  430. defer func() {
  431. if err != nil {
  432. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  433. go utils.SendAlarmMsg("专项产业调研模板消息推送消息失败"+activityName, 2)
  434. }
  435. if msg != "" {
  436. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  437. }
  438. }()
  439. var accessToken string
  440. if utils.RunMode == "release" {
  441. accessToken, err = models.GetWxAccessTokenByXzs()
  442. if err != nil {
  443. msg = "GetWxAccessToken Err:" + err.Error()
  444. return
  445. }
  446. if accessToken == "" {
  447. msg = "accessToken is empty"
  448. return
  449. }
  450. } else {
  451. accessToken, err = models.GetWxAccessToken()
  452. if err != nil {
  453. msg = "GetWxAccessToken Err:" + err.Error()
  454. return
  455. }
  456. if accessToken == "" {
  457. msg = "accessToken is empty"
  458. return
  459. }
  460. }
  461. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  462. sendMap := make(map[string]interface{})
  463. sendData := make(map[string]interface{})
  464. var first string
  465. if resource == "sale" {
  466. first = "有客户对专项调研感兴趣"
  467. } else {
  468. first = "有5家公司预报名专项调研"
  469. }
  470. keyword1 := applyName
  471. keyword2 := mobile
  472. keyword3 := applyTime
  473. keyword4 := activityName
  474. fontColor := "#D9001B"
  475. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  476. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  477. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  478. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  479. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  480. if utils.RunMode == "release" {
  481. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  482. } else {
  483. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  484. }
  485. sendMap["data"] = sendData
  486. sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  487. return
  488. }
  489. //弘则投资:
  490. //Y59n_AHg-RLCKaz293geW76KDHpGL1qOnE7eF_lxelY 活动预约通知
  491. //CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM 项目状态变更通知
  492. //
  493. //
  494. //弘则研究:
  495. //MwZ5wxfd0O1Yt0Pkf6OkfWP4USQzZbiEo5SkZ26735s 活动预约通知
  496. //dYg6iHooRq74PyCXmw_Ns7qdJZmbtLoKS2p2FKeaXl0 项目状态变更通知
  497. func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList, resource string, sendType int) (err error) {
  498. for _, v := range items {
  499. sendMap["touser"] = v.OpenId
  500. data, err := json.Marshal(sendMap)
  501. if err != nil {
  502. fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
  503. return err
  504. }
  505. utils.FileLog.Info("One SendData:%s", string(data))
  506. fmt.Println(string(data))
  507. err = SendTemplateMsg(sendUrl, data, resource, sendType, v)
  508. if err != nil {
  509. fmt.Println("send err:", err.Error())
  510. return err
  511. }
  512. }
  513. return
  514. }
  515. func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
  516. client := http.Client{}
  517. resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
  518. if err != nil {
  519. return
  520. }
  521. defer resp.Body.Close()
  522. body, _ := ioutil.ReadAll(resp.Body)
  523. utils.FileLog.Info("SendResult:%s", string(body))
  524. var templateResponse models.SendTemplateResponse
  525. err = json.Unmarshal(body, &templateResponse)
  526. fmt.Println(templateResponse.Errcode)
  527. fmt.Println(templateResponse.Errmsg)
  528. if err != nil {
  529. return err
  530. }
  531. //新增模板消息推送记录
  532. {
  533. tr := new(models.UserTemplateRecord)
  534. tr.UserId = dataItem.UserId
  535. tr.OpenId = dataItem.OpenId
  536. tr.Resource = resource
  537. tr.SendData = string(data)
  538. tr.Result = string(body)
  539. tr.CreateDate = time.Now().Format(utils.FormatDate)
  540. tr.CreateTime = time.Now().Format(utils.FormatDateTime)
  541. if templateResponse.Errcode == 0 {
  542. tr.SendStatus = 1
  543. } else {
  544. tr.SendStatus = 0
  545. }
  546. tr.SendType = sendType
  547. go func() {
  548. err = models.AddUserTemplateRecord(tr)
  549. if err != nil {
  550. utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
  551. }
  552. }()
  553. }
  554. return
  555. }
  556. // 发送报告更新的消息给预约的用户
  557. func SendWxMsgWithArticleUpdate(first, keyWord1, keyWord2, keyWord3, keyWord4 string, item *models.OpenIdList, articleId int) (err error) {
  558. var msg string
  559. defer func() {
  560. if err != nil {
  561. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  562. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  563. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  564. }
  565. }()
  566. accessToken, err := models.GetWxAccessTokenByXzs()
  567. if err != nil {
  568. msg = "GetWxAccessToken Err:" + err.Error()
  569. return
  570. }
  571. if accessToken == "" {
  572. msg = "accessToken is empty"
  573. return
  574. }
  575. var openIdList []*models.OpenIdList
  576. openIdList = append(openIdList, item)
  577. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  578. templateId := utils.TemplateIdByProductXzs
  579. sendMap := make(map[string]interface{})
  580. sendData := make(map[string]interface{})
  581. sendMap["template_id"] = templateId
  582. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId) + "&IsSendWx=1"}
  583. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  584. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  585. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  586. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  587. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  588. sendData["remark"] = map[string]interface{}{"value": "点击查看报告详情", "color": "#173177"}
  589. sendMap["data"] = sendData
  590. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  591. return
  592. }
  593. // 周日下午4点半,推送全部活动
  594. func SendActivityOnenIdWxTemplateMsg(first, keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList) (err error) {
  595. var msg string
  596. defer func() {
  597. if err != nil {
  598. go utils.SendEmail("周日下午4点半,推送全部活"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  599. go utils.SendAlarmMsg(fmt.Sprint("发送周日下午4点半,推送全部活模版消息失败,"), 2)
  600. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  601. }
  602. }()
  603. accessToken, err := models.GetWxAccessTokenByXzs()
  604. if err != nil {
  605. msg = "GetWxAccessToken Err:" + err.Error()
  606. return
  607. }
  608. if accessToken == "" {
  609. msg = "accessToken is empty"
  610. return
  611. }
  612. //var openIdList []*models.OpenIdList
  613. //openIdList = append(openIdList, item)
  614. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  615. templateId := utils.WxMsgTemplateIdArticleUserRemind
  616. sendMap := make(map[string]interface{})
  617. sendData := make(map[string]interface{})
  618. sendMap["template_id"] = templateId
  619. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pages/activity/activity"}
  620. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
  621. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  622. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  623. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  624. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  625. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  626. sendData["remark"] = map[string]interface{}{"value": "点击查看下周活动列表", "color": "#173177"}
  627. sendMap["data"] = sendData
  628. WxSendTemplateMsg(sendUrl, sendMap, openIdList, "", utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  629. return
  630. }
  631. // 发送用户留言提醒
  632. // func SendCommentWxTemplateMsg(title, companyName, userName, sellerName, createTime, content string, openIdList []*models.OpenIdList, articleId int) (err error) {
  633. func SendCommentWxTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail, msgId int) (err error) {
  634. var msg string
  635. defer func() {
  636. if err != nil {
  637. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  638. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  639. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  640. }
  641. }()
  642. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  643. if e != nil {
  644. return
  645. }
  646. if companyItem == nil {
  647. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  648. }
  649. var first string
  650. var keyword1 string
  651. var keyword2 string
  652. var keyword3 string
  653. var keyword4 string
  654. var remark string
  655. var redirectUrl string
  656. var mobile string
  657. first = "【" + articleInfo.Title + "】有新的留言,请及时处理"
  658. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  659. keyword2 = "留言:" + articleInfo.Title
  660. keyword3 = time.Now().Format(utils.FormatDateTime)
  661. keyword4 = req.Content
  662. remark = "点击查看报告详情"
  663. if articleInfo.ArticleTypeId > 0 {
  664. //研选报告添加汪洋
  665. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  666. } else {
  667. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  668. }
  669. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  670. if e != nil {
  671. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  672. return
  673. }
  674. openIdArr := make([]string, 0)
  675. for _, v := range openIdList {
  676. openIdArr = append(openIdArr, v.OpenId)
  677. }
  678. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  679. if utils.RunMode != "release" {
  680. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
  681. } else {
  682. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=1"
  683. }
  684. sendInfo := new(SendWxTemplate)
  685. sendInfo.First = first
  686. sendInfo.Keyword1 = keyword1
  687. sendInfo.Keyword2 = keyword2
  688. sendInfo.Keyword3 = keyword3
  689. sendInfo.Keyword4 = keyword4
  690. sendInfo.Remark = remark
  691. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  692. sendInfo.RedirectUrl = redirectUrl
  693. sendInfo.RedirectTarget = 3
  694. sendInfo.Resource = strconv.Itoa(req.ArticleId)
  695. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  696. sendInfo.OpenIdArr = openIdArr
  697. err = PublicSendTemplateMsg(sendInfo)
  698. if err != nil {
  699. return
  700. }
  701. return
  702. }
  703. // 微路演新增留言提问消息提醒
  704. func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.WxUserItem, resourceId, msgId int, title string, isResearch bool) (err error) {
  705. var msg string
  706. defer func() {
  707. if err != nil || msg != "" {
  708. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  709. go utils.SendAlarmMsg(fmt.Sprint("发送微路演新增留言提问消息提醒失败,用户名", req.Title, "ID:", req.Id), 2)
  710. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  711. }
  712. }()
  713. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  714. if e != nil {
  715. return
  716. }
  717. if companyItem == nil {
  718. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  719. }
  720. var first string
  721. var keyword1 string
  722. var keyword2 string
  723. var keyword3 string
  724. var keyword4 string
  725. var remark string
  726. var mobile string
  727. first = req.Title + "有新的留言,请及时处理"
  728. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  729. keyword3 = time.Now().Format(utils.FormatDateTime)
  730. keyword2 = "留言:" + title
  731. keyword4 = req.Content
  732. if isResearch {
  733. //研选报告添加汪洋
  734. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  735. } else {
  736. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  737. }
  738. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  739. if e != nil {
  740. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  741. return
  742. }
  743. openIdArr := make([]string, 0)
  744. for _, v := range openIdList {
  745. openIdArr = append(openIdArr, v.OpenId)
  746. }
  747. mapSource := make(map[int]string)
  748. mapSource[1] = "5"
  749. mapSource[2] = "4"
  750. mapSource[3] = "3"
  751. if mapSource[resourceId] == "" {
  752. err = errors.New("留言消息类型错误, resourceId: " + strconv.Itoa(resourceId))
  753. return
  754. }
  755. //SourceType int `description:"视频来源: 1-音频; 2-活动视频; 3-微路演视频 (不传默认为1)"`
  756. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  757. redirectUrl := ""
  758. if utils.RunMode != "release" {
  759. if req.SourceType == 3 {
  760. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(resourceId)
  761. remark = "点击进入产业资源包详情页"
  762. } else {
  763. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(resourceId)
  764. remark = "点击查看活动详情"
  765. }
  766. } else {
  767. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=" + mapSource[resourceId]
  768. }
  769. sendInfo := new(SendWxTemplate)
  770. sendInfo.First = first
  771. sendInfo.Keyword1 = keyword1
  772. sendInfo.Keyword2 = keyword2
  773. sendInfo.Keyword3 = keyword3
  774. sendInfo.Keyword4 = keyword4
  775. sendInfo.Remark = remark
  776. sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
  777. sendInfo.RedirectUrl = redirectUrl
  778. sendInfo.RedirectTarget = 3
  779. sendInfo.Resource = strconv.Itoa(req.Id)
  780. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  781. sendInfo.OpenIdArr = openIdArr
  782. err = PublicSendTemplateMsg(sendInfo)
  783. if err != nil {
  784. return
  785. }
  786. return
  787. }