wx_template_msg.go 33 KB

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