wx_template_msg.go 33 KB

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