wx_template_msg.go 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841
  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. //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": keyWord2, "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. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  273. sendMap["data"] = sendData
  274. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  275. return
  276. }
  277. // 发送用户操作专项调研活动消息提醒
  278. func SendWxMsgWithSpecialActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  279. var msg string
  280. defer func() {
  281. if err != nil {
  282. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  283. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  284. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  285. }
  286. }()
  287. accessToken, err := models.GetWxAccessTokenByXzs()
  288. if err != nil {
  289. msg = "GetWxAccessToken Err:" + err.Error()
  290. return
  291. }
  292. if accessToken == "" {
  293. msg = "accessToken is empty"
  294. return
  295. }
  296. var first string
  297. first = keyWord1
  298. keyword1 := keyWord2
  299. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  300. templateId := utils.WxMsgTemplateIdArticleUserRemind
  301. sendMap := make(map[string]interface{})
  302. sendData := make(map[string]interface{})
  303. sendMap["template_id"] = templateId
  304. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/specialDetail/specialDetail?id=" + strconv.Itoa(activityId)}
  305. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  306. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  307. sendMap["data"] = sendData
  308. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  309. return
  310. }
  311. // 活动带问提醒
  312. func SendActivityAskApplyTemplateMsg(applyName, applyTime, askContent, activityName string, activityId int, itemOpenid *models.OpenIdList) (err error) {
  313. var msg string
  314. defer func() {
  315. if err != nil {
  316. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  317. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+activityName, 2)
  318. }
  319. if msg != "" {
  320. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  321. }
  322. }()
  323. var accessToken string
  324. if utils.RunMode == "release" {
  325. accessToken, err = models.GetWxAccessTokenByXzs()
  326. if err != nil {
  327. msg = "GetWxAccessToken Err:" + err.Error()
  328. return
  329. }
  330. if accessToken == "" {
  331. msg = "accessToken is empty"
  332. return
  333. }
  334. } else {
  335. accessToken, err = models.GetWxAccessToken()
  336. if err != nil {
  337. msg = "GetWxAccessToken Err:" + err.Error()
  338. return
  339. }
  340. if accessToken == "" {
  341. msg = "accessToken is empty"
  342. return
  343. }
  344. }
  345. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  346. sendMap := make(map[string]interface{})
  347. sendData := make(map[string]interface{})
  348. first := "有新的客户提问"
  349. keyword1 := applyName
  350. keyword2 := "-"
  351. keyword3 := applyTime
  352. keyword4 := askContent
  353. remark := activityName
  354. fontColor := "#D9001B"
  355. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  356. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  357. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  358. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  359. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  360. sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
  361. if utils.RunMode == "release" {
  362. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  363. } else {
  364. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  365. }
  366. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  367. sendMap["data"] = sendData
  368. sendTemplateMsg(sendUrl, sendMap, itemOpenid, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  369. fmt.Println("send end")
  370. return
  371. }
  372. // 活动带问提醒
  373. func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, remark string, itemOpenid *models.OpenIdList, itemAct *models.ActivityDetail) (err error) {
  374. var msg string
  375. defer func() {
  376. if err != nil {
  377. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  378. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+remark, 2)
  379. }
  380. if msg != "" {
  381. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  382. }
  383. }()
  384. var accessToken string
  385. if utils.RunMode == "release" {
  386. accessToken, err = models.GetWxAccessTokenByXzs()
  387. if err != nil {
  388. msg = "GetWxAccessToken Err:" + err.Error()
  389. return
  390. }
  391. if accessToken == "" {
  392. msg = "accessToken is empty"
  393. return
  394. }
  395. } else {
  396. accessToken, err = models.GetWxAccessToken()
  397. if err != nil {
  398. msg = "GetWxAccessToken Err:" + err.Error()
  399. return
  400. }
  401. if accessToken == "" {
  402. msg = "accessToken is empty"
  403. return
  404. }
  405. }
  406. activityId := itemAct.ActivityId
  407. //fmt.Println("itemAct.Host", itemAct.Host)
  408. //if itemAct.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN && itemAct.Host != "" {
  409. // keyword2 += ",会议主持人:" + itemAct.Host
  410. //}
  411. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  412. sendMap := make(map[string]interface{})
  413. sendData := make(map[string]interface{})
  414. first := "有新的客户提问"
  415. //keyword1 := applyName
  416. //keyword2 := "-"
  417. //keyword3 := applyTime
  418. //keyword4 := askContent
  419. //remark := activityName
  420. fontColor := "#D9001B"
  421. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  422. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  423. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  424. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  425. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  426. sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
  427. if utils.RunMode == "release" {
  428. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  429. } else {
  430. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  431. }
  432. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  433. sendMap["data"] = sendData
  434. sendTemplateMsg(sendUrl, sendMap, itemOpenid, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  435. fmt.Println("send end")
  436. return
  437. }
  438. // 专项产业调研模板消息推送
  439. func SendSpecialTemplateMsg(applyName, applyTime, mobile, activityName, resource string, itemOpenid *models.OpenIdList) (err error) {
  440. var msg string
  441. defer func() {
  442. if err != nil {
  443. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  444. go utils.SendAlarmMsg("专项产业调研模板消息推送消息失败"+activityName, 2)
  445. }
  446. if msg != "" {
  447. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  448. }
  449. }()
  450. var accessToken string
  451. if utils.RunMode == "release" {
  452. accessToken, err = models.GetWxAccessTokenByXzs()
  453. if err != nil {
  454. msg = "GetWxAccessToken Err:" + err.Error()
  455. return
  456. }
  457. if accessToken == "" {
  458. msg = "accessToken is empty"
  459. return
  460. }
  461. } else {
  462. accessToken, err = models.GetWxAccessToken()
  463. if err != nil {
  464. msg = "GetWxAccessToken Err:" + err.Error()
  465. return
  466. }
  467. if accessToken == "" {
  468. msg = "accessToken is empty"
  469. return
  470. }
  471. }
  472. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  473. sendMap := make(map[string]interface{})
  474. sendData := make(map[string]interface{})
  475. var first string
  476. if resource == "sale" {
  477. first = "有客户对专项调研感兴趣"
  478. } else {
  479. first = "有5家公司预报名专项调研"
  480. }
  481. keyword1 := applyName
  482. keyword2 := mobile
  483. keyword3 := applyTime
  484. keyword4 := activityName
  485. fontColor := "#D9001B"
  486. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  487. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  488. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  489. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  490. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  491. if utils.RunMode == "release" {
  492. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  493. } else {
  494. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  495. }
  496. sendMap["data"] = sendData
  497. sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  498. return
  499. }
  500. //弘则投资:
  501. //Y59n_AHg-RLCKaz293geW76KDHpGL1qOnE7eF_lxelY 活动预约通知
  502. //CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM 项目状态变更通知
  503. //
  504. //
  505. //弘则研究:
  506. //MwZ5wxfd0O1Yt0Pkf6OkfWP4USQzZbiEo5SkZ26735s 活动预约通知
  507. //dYg6iHooRq74PyCXmw_Ns7qdJZmbtLoKS2p2FKeaXl0 项目状态变更通知
  508. func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList, resource string, sendType int) (err error) {
  509. for _, v := range items {
  510. sendMap["touser"] = v.OpenId
  511. data, err := json.Marshal(sendMap)
  512. if err != nil {
  513. fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
  514. return err
  515. }
  516. utils.FileLog.Info("One SendData:%s", string(data))
  517. fmt.Println(string(data))
  518. err = SendTemplateMsg(sendUrl, data, resource, sendType, v)
  519. if err != nil {
  520. fmt.Println("send err:", err.Error())
  521. return err
  522. }
  523. }
  524. return
  525. }
  526. func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
  527. client := http.Client{}
  528. resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
  529. if err != nil {
  530. return
  531. }
  532. defer resp.Body.Close()
  533. body, _ := ioutil.ReadAll(resp.Body)
  534. utils.FileLog.Info("SendResult:%s", string(body))
  535. var templateResponse models.SendTemplateResponse
  536. err = json.Unmarshal(body, &templateResponse)
  537. fmt.Println(templateResponse.Errcode)
  538. fmt.Println(templateResponse.Errmsg)
  539. if err != nil {
  540. return err
  541. }
  542. //新增模板消息推送记录
  543. {
  544. tr := new(models.UserTemplateRecord)
  545. tr.UserId = dataItem.UserId
  546. tr.OpenId = dataItem.OpenId
  547. tr.Resource = resource
  548. tr.SendData = string(data)
  549. tr.Result = string(body)
  550. tr.CreateDate = time.Now().Format(utils.FormatDate)
  551. tr.CreateTime = time.Now().Format(utils.FormatDateTime)
  552. if templateResponse.Errcode == 0 {
  553. tr.SendStatus = 1
  554. } else {
  555. tr.SendStatus = 0
  556. }
  557. tr.SendType = sendType
  558. go func() {
  559. err = models.AddUserTemplateRecord(tr)
  560. if err != nil {
  561. utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
  562. }
  563. }()
  564. }
  565. return
  566. }
  567. // 发送报告更新的消息给预约的用户
  568. func SendWxMsgWithArticleUpdate(first, keyWord1, keyWord2, keyWord3, keyWord4 string, item *models.OpenIdList, articleId int) (err error) {
  569. var msg string
  570. defer func() {
  571. if err != nil {
  572. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  573. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  574. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  575. }
  576. }()
  577. accessToken, err := models.GetWxAccessTokenByXzs()
  578. if err != nil {
  579. msg = "GetWxAccessToken Err:" + err.Error()
  580. return
  581. }
  582. if accessToken == "" {
  583. msg = "accessToken is empty"
  584. return
  585. }
  586. var openIdList []*models.OpenIdList
  587. openIdList = append(openIdList, item)
  588. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  589. templateId := utils.TemplateIdByProductXzs
  590. sendMap := make(map[string]interface{})
  591. sendData := make(map[string]interface{})
  592. sendMap["template_id"] = templateId
  593. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId) + "&IsSendWx=1"}
  594. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  595. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  596. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  597. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  598. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  599. sendData["remark"] = map[string]interface{}{"value": "点击查看报告详情", "color": "#173177"}
  600. sendMap["data"] = sendData
  601. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  602. return
  603. }
  604. // 周日下午4点半,推送全部活动
  605. func SendActivityOnenIdWxTemplateMsg(first, keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList) (err error) {
  606. var msg string
  607. defer func() {
  608. if err != nil {
  609. go utils.SendEmail("周日下午4点半,推送全部活"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  610. go utils.SendAlarmMsg(fmt.Sprint("发送周日下午4点半,推送全部活模版消息失败,"), 2)
  611. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  612. }
  613. }()
  614. accessToken, err := models.GetWxAccessTokenByXzs()
  615. if err != nil {
  616. msg = "GetWxAccessToken Err:" + err.Error()
  617. return
  618. }
  619. if accessToken == "" {
  620. msg = "accessToken is empty"
  621. return
  622. }
  623. //var openIdList []*models.OpenIdList
  624. //openIdList = append(openIdList, item)
  625. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  626. templateId := utils.WxMsgTemplateIdArticleUserRemind
  627. sendMap := make(map[string]interface{})
  628. sendData := make(map[string]interface{})
  629. sendMap["template_id"] = templateId
  630. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pages/activity/activity"}
  631. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
  632. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  633. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  634. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  635. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  636. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  637. sendData["remark"] = map[string]interface{}{"value": "点击查看下周活动列表", "color": "#173177"}
  638. sendMap["data"] = sendData
  639. WxSendTemplateMsg(sendUrl, sendMap, openIdList, "", utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  640. return
  641. }
  642. // 发送用户留言提醒
  643. // func SendCommentWxTemplateMsg(title, companyName, userName, sellerName, createTime, content string, openIdList []*models.OpenIdList, articleId int) (err error) {
  644. func SendCommentWxTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail) (err error) {
  645. var msg string
  646. defer func() {
  647. if err != nil {
  648. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  649. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  650. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  651. }
  652. }()
  653. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  654. if e != nil {
  655. return
  656. }
  657. if companyItem == nil {
  658. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  659. }
  660. var first string
  661. var keyword1 string
  662. var keyword2 string
  663. var keyword3 string
  664. var keyword4 string
  665. var remark string
  666. var redirectUrl string
  667. var mobile string
  668. first = "【" + articleInfo.Title + "】有新的留言,请及时处理"
  669. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  670. keyword2 = "-"
  671. keyword3 = time.Now().Format(utils.FormatDateTime)
  672. keyword4 = req.Content
  673. remark = "点击查看报告详情"
  674. if articleInfo.ArticleId >= utils.SummaryArticleId {
  675. //研选报告添加汪洋
  676. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  677. } else {
  678. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  679. }
  680. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  681. if e != nil {
  682. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  683. return
  684. }
  685. openIdArr := make([]string, 0)
  686. for _, v := range openIdList {
  687. openIdArr = append(openIdArr, v.OpenId)
  688. }
  689. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
  690. sendInfo := new(SendWxTemplate)
  691. sendInfo.First = first
  692. sendInfo.Keyword1 = keyword1
  693. sendInfo.Keyword2 = keyword2
  694. sendInfo.Keyword3 = keyword3
  695. sendInfo.Keyword4 = keyword4
  696. sendInfo.Remark = remark
  697. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  698. sendInfo.RedirectUrl = redirectUrl
  699. sendInfo.RedirectTarget = 3
  700. sendInfo.Resource = strconv.Itoa(req.ArticleId)
  701. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  702. sendInfo.OpenIdArr = openIdArr
  703. err = PublicSendTemplateMsg(sendInfo)
  704. if err != nil {
  705. return
  706. }
  707. //accessToken, err := models.GetWxAccessTokenByXzs()
  708. //if err != nil {
  709. // msg = "GetWxAccessToken Err:" + err.Error()
  710. // return
  711. //}
  712. //if accessToken == "" {
  713. // msg = "accessToken is empty"
  714. // return
  715. //}
  716. //var first string
  717. //first = "【" + title + "】有新的留言,请及时处理"
  718. //keyword1 := companyName + "--" + userName + "(" + sellerName + ")"
  719. //keyword2 := "-"
  720. //keyword3 := createTime
  721. //keyword4 := content
  722. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  723. //templateId := utils.WxMsgTemplateIdAskMsgXzs
  724. //sendMap := make(map[string]interface{})
  725. //sendData := make(map[string]interface{})
  726. //sendMap["template_id"] = templateId
  727. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)}
  728. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  729. //sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  730. //sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  731. //sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
  732. //sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
  733. //sendMap["data"] = sendData
  734. //WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_COMMENT)
  735. return
  736. }
  737. // 微路演新增留言提问消息提醒
  738. func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.WxUserItem, resourceId int) (err error) {
  739. var msg string
  740. defer func() {
  741. if err != nil || msg != "" {
  742. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  743. go utils.SendAlarmMsg(fmt.Sprint("发送微路演新增留言提问消息提醒失败,用户名", req.Title, "ID:", req.Id), 2)
  744. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  745. }
  746. }()
  747. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  748. if e != nil {
  749. return
  750. }
  751. if companyItem == nil {
  752. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  753. }
  754. var first string
  755. var keyword1 string
  756. var keyword2 string
  757. var keyword3 string
  758. var keyword4 string
  759. var remark string
  760. first = req.Title + "有新的留言,请及时处理"
  761. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  762. keyword3 = time.Now().Format(utils.FormatDateTime)
  763. keyword2 = ""
  764. keyword4 = req.Content
  765. mobile := companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  766. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  767. if e != nil {
  768. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  769. return
  770. }
  771. openIdArr := make([]string, 0)
  772. for _, v := range openIdList {
  773. openIdArr = append(openIdArr, v.OpenId)
  774. }
  775. //SourceType int `description:"视频来源: 1-音频; 2-活动视频; 3-微路演视频 (不传默认为1)"`
  776. redirectUrl := ""
  777. if req.SourceType == 3 {
  778. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(resourceId)
  779. remark = "点击进入产业资源包详情页"
  780. } else {
  781. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(resourceId)
  782. remark = "点击查看活动详情"
  783. }
  784. sendInfo := new(SendWxTemplate)
  785. sendInfo.First = first
  786. sendInfo.Keyword1 = keyword1
  787. sendInfo.Keyword2 = keyword2
  788. sendInfo.Keyword3 = keyword3
  789. sendInfo.Keyword4 = keyword4
  790. sendInfo.Remark = remark
  791. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  792. sendInfo.RedirectUrl = redirectUrl
  793. sendInfo.RedirectTarget = 3
  794. sendInfo.Resource = strconv.Itoa(req.Id)
  795. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  796. sendInfo.OpenIdArr = openIdArr
  797. err = PublicSendTemplateMsg(sendInfo)
  798. if err != nil {
  799. return
  800. }
  801. return
  802. }