wx_category_template_msg.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_mfyx/models"
  7. "hongze/hongze_mfyx/utils"
  8. "io/ioutil"
  9. "net/http"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. type SendWxCategoryTemplate struct {
  15. WxAppId string `description:"公众号appId"`
  16. Keywords []string `description:"模板消息keyword字段"`
  17. TemplateId string `description:"模板id"`
  18. RedirectUrl string `description:"跳转地址"`
  19. RedirectTarget int `description:"小程序跳转目标:1:弘则研报小程序,2:随手办公小程序,3:查研观向"`
  20. Resource string `description:"资源唯一标识"`
  21. SendType int `description:"发送的消息类型:1:报告,2:指标更新提醒,3:审批通知,4:销售领取客户通知,5:活动取消通知,6活动更改时间通知,7:关注的作者发布报告通知,8:发送日报(周报、双周报、月报)模板消息,9:活动预约/报名时间通知"`
  22. OpenIdArr []string `description:"消息接收者openid"`
  23. }
  24. // 推送类目模板消息
  25. func SendCategoryTemplateMsg(sendInfo *SendWxCategoryTemplate) (err error) {
  26. postData, err := json.Marshal(sendInfo)
  27. if err != nil {
  28. go utils.SendAlarmMsg("SendCategoryTemplateMsg json.Marshal Err:"+err.Error(), 1)
  29. return err
  30. }
  31. body := ioutil.NopCloser(strings.NewReader(string(postData)))
  32. client := &http.Client{}
  33. req, err := http.NewRequest("POST", utils.SendWxCategoryTemplateMsgUrl, body)
  34. if err != nil {
  35. go utils.SendAlarmMsg("SendCategoryTemplateMsg http.NewRequest Err:"+err.Error(), 1)
  36. return err
  37. }
  38. contentType := "application/json;charset=utf-8"
  39. req.Header.Set("Content-Type", contentType)
  40. req.Header.Set("Authorization", utils.SendTemplateMsgAuthorization)
  41. resp, err := client.Do(req)
  42. if err != nil {
  43. fmt.Println("http client.Do Err:" + err.Error())
  44. return err
  45. }
  46. defer resp.Body.Close()
  47. b, err := ioutil.ReadAll(resp.Body)
  48. if err != nil {
  49. return err
  50. }
  51. result := new(models.BaseResponse)
  52. err = json.Unmarshal(b, &result)
  53. if err != nil {
  54. return err
  55. }
  56. if result.Ret != 200 {
  57. err = errors.New(string(b))
  58. return err
  59. }
  60. return
  61. }
  62. // 发送用户操作活动消息提醒
  63. func SendWxCategoryMsgWithActivityUserRemind(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  64. if len(openIdList) == 0 {
  65. return
  66. }
  67. var msg string
  68. defer func() {
  69. if err != nil {
  70. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  71. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  72. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  73. }
  74. }()
  75. accessToken, err := models.GetWxAccessTokenByXzs()
  76. if err != nil {
  77. msg = "GetWxAccessToken Err:" + err.Error()
  78. return
  79. }
  80. if accessToken == "" {
  81. msg = "accessToken is empty"
  82. return
  83. }
  84. openIdArr := make([]string, 0)
  85. for _, v := range openIdList {
  86. openIdArr = append(openIdArr, v.OpenId)
  87. }
  88. var keywords []string
  89. keywords = append(keywords, keyWord1, keyWord2)
  90. sendInfo := new(SendWxCategoryTemplate)
  91. sendInfo.Keywords = keywords
  92. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdArticleUserRemind
  93. sendInfo.RedirectTarget = 3
  94. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  95. sendInfo.OpenIdArr = openIdArr
  96. err = SendCategoryTemplateMsg(sendInfo)
  97. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  98. return
  99. }
  100. func SendPermissionApplyCategoryTemplateMsg(realName, companyName, mobile, applyMethod string, itemOpenid *models.OpenIdList) (err error) {
  101. defer func() {
  102. if err != nil {
  103. go utils.SendAlarmMsg(fmt.Sprint("权限申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile, ";Err:"+err.Error()), 2)
  104. }
  105. }()
  106. var keyword1 string
  107. var keyword2 string
  108. var keyword3 string
  109. var keyword4 string
  110. var keyword5 string
  111. var redirectUrl string
  112. detail, e := models.GetCygxApplyRecordByMobile(mobile)
  113. if e != nil {
  114. err = errors.New("GetActivitySignupNomeetingCountList" + e.Error())
  115. return
  116. }
  117. //如果是潜在客户就推送可查看详情的模版消息
  118. if detail.ApplyMethod == 2 {
  119. redirectUrl = utils.WX_MSG_PATH_APPLY_DETAIL + strconv.Itoa(detail.ApplyRecordId)
  120. }
  121. keyword1 = "权限申请:" + realName + "【" + companyName + "】"
  122. keyword2 = mobile
  123. keyword3 = time.Now().Format(utils.FormatDateTime)
  124. keyword4 = applyMethod
  125. openIdArr := make([]string, 0)
  126. openIdArr = append(openIdArr, itemOpenid.OpenId)
  127. sendInfo := new(SendWxCategoryTemplate)
  128. keyword1 = realName
  129. keyword2 = companyName
  130. keyword3 = "权限申请"
  131. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  132. keyword5 = applyMethod
  133. sendInfo.Keywords = []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  134. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  135. sendInfo.RedirectUrl = redirectUrl
  136. sendInfo.RedirectTarget = 3
  137. sendInfo.Resource = mobile
  138. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  139. sendInfo.OpenIdArr = openIdArr
  140. err = SendCategoryTemplateMsg(sendInfo)
  141. return
  142. }
  143. // 发送用户操作活动消息提醒
  144. func SendNeiRongZuActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  145. var msg string
  146. defer func() {
  147. if err != nil {
  148. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  149. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityDetail.ActivityId), 2)
  150. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  151. }
  152. }()
  153. accessToken, err := models.GetWxAccessTokenByXzs()
  154. if err != nil {
  155. msg = "GetWxAccessToken Err:" + err.Error()
  156. return
  157. }
  158. if accessToken == "" {
  159. msg = "accessToken is empty"
  160. return
  161. }
  162. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  163. if err != nil && err.Error() != utils.ErrNoRow() {
  164. return
  165. }
  166. configCode := utils.TPL_MSG_NEI_RONG_ZU
  167. cnf, e := models.GetConfigByCode(configCode)
  168. if e != nil {
  169. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  170. return
  171. }
  172. openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile+utils.MobileShenTao)
  173. if e != nil && e.Error() != utils.ErrNoRow() {
  174. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  175. return
  176. }
  177. openIdArr := make([]string, 0)
  178. for _, v := range openIdList {
  179. openIdArr = append(openIdArr, v.OpenId)
  180. }
  181. var keywords []string
  182. keywords = append(keywords, user.RealName, user.CompanyName,
  183. sellerItemQy.RealName, time.Now().Format(utils.FormatDateTimeMinute2),
  184. "报名:"+activityDetail.ActivityName)
  185. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityDetail.ActivityId)}
  186. sendInfo := new(SendWxCategoryTemplate)
  187. sendInfo.Keywords = keywords
  188. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  189. sendInfo.RedirectTarget = 3
  190. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  191. sendInfo.OpenIdArr = openIdArr
  192. err = SendCategoryTemplateMsg(sendInfo)
  193. return
  194. }
  195. func SendActivitieCancelSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  196. var msg string
  197. defer func() {
  198. if err != nil {
  199. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  200. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityDetail.ActivityId), 2)
  201. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  202. }
  203. }()
  204. accessToken, err := models.GetWxAccessTokenByXzs()
  205. if err != nil {
  206. msg = "GetWxAccessToken Err:" + err.Error()
  207. return
  208. }
  209. if accessToken == "" {
  210. msg = "accessToken is empty"
  211. return
  212. }
  213. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  214. if err != nil && err.Error() != utils.ErrNoRow() {
  215. return
  216. }
  217. configCode := utils.TPL_MSG_NEI_RONG_ZU
  218. cnf, e := models.GetConfigByCode(configCode)
  219. if e != nil {
  220. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  221. return
  222. }
  223. openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue+","+sellerItemQy.Mobile+utils.MobileShenTao)
  224. if e != nil && e.Error() != utils.ErrNoRow() {
  225. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  226. return
  227. }
  228. openIdArr := make([]string, 0)
  229. for _, v := range openIdList {
  230. openIdArr = append(openIdArr, v.OpenId)
  231. }
  232. var keywords []string
  233. keywords = append(keywords, user.RealName, user.CompanyName,
  234. sellerItemQy.RealName, time.Now().Format(utils.FormatDateTimeMinute2),
  235. "取消报名"+"【"+activityDetail.ActivityName+"】")
  236. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
  237. sendInfo := new(SendWxCategoryTemplate)
  238. sendInfo.Keywords = keywords
  239. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  240. sendInfo.RedirectTarget = 3
  241. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  242. sendInfo.OpenIdArr = openIdArr
  243. err = SendCategoryTemplateMsg(sendInfo)
  244. return
  245. }
  246. // 发送用户留言提醒
  247. func SendCommentWxCategoryTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail, msgId int) (err error) {
  248. var msg string
  249. defer func() {
  250. if err != nil {
  251. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  252. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  253. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  254. }
  255. }()
  256. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  257. if e != nil {
  258. return
  259. }
  260. if companyItem == nil {
  261. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  262. }
  263. var keyword1 string
  264. var keyword2 string
  265. var keyword3 string
  266. var keyword4 string
  267. var redirectUrl string
  268. var mobile string
  269. var keywords []string
  270. keyword1 = user.RealName
  271. keyword2 = companyItem.SellerName
  272. keyword3 = time.Now().Format(utils.FormatDateTimeMinute2)
  273. keyword4 = "报告留言:" + req.Content
  274. keywords = append(keywords, keyword1, keyword2, keyword3, keyword4)
  275. if articleInfo.ArticleTypeId > 0 {
  276. //研选报告添加汪洋
  277. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  278. } else {
  279. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  280. }
  281. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  282. if e != nil {
  283. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  284. return
  285. }
  286. openIdArr := make([]string, 0)
  287. for _, v := range openIdList {
  288. openIdArr = append(openIdArr, v.OpenId)
  289. }
  290. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  291. if utils.RunMode != "release" {
  292. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
  293. } else {
  294. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=1"
  295. }
  296. sendInfo := new(SendWxCategoryTemplate)
  297. sendInfo.Keywords = keywords
  298. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  299. sendInfo.RedirectTarget = 3
  300. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  301. sendInfo.OpenIdArr = openIdArr
  302. sendInfo.RedirectUrl = redirectUrl
  303. err = SendCategoryTemplateMsg(sendInfo)
  304. return
  305. }
  306. // 发送报告提问消息提醒
  307. func SendWxCategoryMsgWithAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, articleId int) (err error) {
  308. if len(openIdList) == 0 {
  309. return
  310. }
  311. var msg string
  312. defer func() {
  313. if err != nil {
  314. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  315. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒类目模版消息失败,用户名", realName, "文章ID:", articleId), 2)
  316. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  317. }
  318. fmt.Println("line 21", err, msg)
  319. }()
  320. var keyword1 string
  321. var keyword2 string
  322. var keyword3 string
  323. var keyword4 string
  324. var keyword5 string
  325. keyword1 = realName
  326. keyword2 = companyName
  327. keyword3 = sellerName
  328. keyword4 = askTime
  329. keyword4 = "活动提问:" + askMsg
  330. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  331. openIdArr := make([]string, 0)
  332. for _, v := range openIdList {
  333. openIdArr = append(openIdArr, v.OpenId)
  334. }
  335. redirectUrl := utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
  336. sendInfo := new(SendWxCategoryTemplate)
  337. sendInfo.Keywords = keywords
  338. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  339. sendInfo.RedirectTarget = 3
  340. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  341. sendInfo.OpenIdArr = openIdArr
  342. sendInfo.RedirectUrl = redirectUrl
  343. err = SendCategoryTemplateMsg(sendInfo)
  344. return
  345. }
  346. // SendActivitieSignCategoryTemplateMsg 线下调研活动扫码签到给对应销售发类目模班消息
  347. func SendActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  348. defer func() {
  349. if err != nil {
  350. go utils.SendAlarmMsg(fmt.Sprint("线下调研活动扫码签到给对应销售发模班消息推送失败Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
  351. }
  352. }()
  353. var mobiles []string
  354. //获取销售信息
  355. sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  356. if err != nil && err.Error() != utils.ErrNoRow() {
  357. return
  358. }
  359. if sellerItem != nil {
  360. mobiles = append(mobiles, sellerItem.Mobile, utils.MobileWuAngDi, utils.MobileDongHeng, utils.MobileShenTao)
  361. }
  362. var keyword1 string
  363. var keyword2 string
  364. var keyword3 string
  365. var keyword4 string
  366. var keyword5 string
  367. var redirectUrl string
  368. keyword1 = user.RealName
  369. keyword2 = user.CompanyName
  370. keyword3 = sellerItem.RealName
  371. keyword4 = activityDetail.ActivityName
  372. keyword5 = time.Now().Format(utils.FormatDateTimeMinute2)
  373. openIdList, e := models.GetWxOpenIdByMobileSliceList(mobiles)
  374. if e != nil {
  375. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  376. return
  377. }
  378. openIdArr := make([]string, 0)
  379. for _, v := range openIdList {
  380. openIdArr = append(openIdArr, v.OpenId)
  381. }
  382. if utils.RunMode != "release" {
  383. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityDetail.ActivityId)
  384. } else {
  385. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_SIGN + strconv.Itoa(activityDetail.ActivityId)
  386. }
  387. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  388. sendInfo := new(SendWxCategoryTemplate)
  389. sendInfo.Keywords = keywords
  390. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdActivitySign
  391. sendInfo.RedirectTarget = 3
  392. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  393. sendInfo.OpenIdArr = openIdArr
  394. sendInfo.RedirectUrl = redirectUrl
  395. err = SendCategoryTemplateMsg(sendInfo)
  396. if err != nil {
  397. return
  398. }
  399. return
  400. }
  401. // SendReviewCategoryTemplateMsgAdmin 提交审核时给王芳,汪洋发消息
  402. func SendReviewCategoryTemplateMsgAdmin(specialId int) (err error) {
  403. defer func() {
  404. if err != nil {
  405. go utils.SendAlarmMsg(fmt.Sprint("处理试用申请给王芳,汪洋发消息失败, specialId:", specialId, "ErrMsg", err.Error()), 2)
  406. }
  407. }()
  408. var configCode string
  409. //如果是研选的就推送给汪洋跟王芳,否则就推送给王芳
  410. configCode = utils.TPL_MSG_WANG_FANG_WANG_YANG
  411. cnf, e := models.GetConfigByCode(configCode)
  412. if e != nil {
  413. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  414. return
  415. }
  416. openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue)
  417. if e != nil && e.Error() != utils.ErrNoRow() {
  418. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  419. return err
  420. }
  421. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  422. if e != nil {
  423. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  424. return
  425. }
  426. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  427. if e != nil {
  428. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  429. return err
  430. }
  431. var keyword1 string
  432. var keyword2 string
  433. var keyword3 string
  434. var keyword4 string
  435. keyword1 = specialItem.NickName
  436. keyword2 = specialItem.RealName + "-" + user.CompanyName
  437. keyword3 = specialItem.SpecialName
  438. keyword3 = time.Now().Format(utils.FormatDateTimeMinute2)
  439. keyword4 = "研选专栏提交了内容待审核"
  440. openIdArr := make([]string, 0)
  441. for _, v := range openIdList {
  442. openIdArr = append(openIdArr, v.OpenId)
  443. }
  444. redirectUrl := ""
  445. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_ENABLE_DETAIL + strconv.Itoa(specialId)
  446. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  447. sendInfo := new(SendWxCategoryTemplate)
  448. sendInfo.Keywords = keywords
  449. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  450. sendInfo.RedirectTarget = 3
  451. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  452. sendInfo.OpenIdArr = openIdArr
  453. sendInfo.RedirectUrl = redirectUrl
  454. err = SendCategoryTemplateMsg(sendInfo)
  455. if err != nil {
  456. return
  457. }
  458. return
  459. }
  460. // 研选专栏审核完成时,给提交人发送类目模板消息
  461. func SendWxCategoryMsgSpecialAuthor(specialId, status int) (err error) {
  462. defer func() {
  463. if err != nil {
  464. go utils.SendAlarmMsg(fmt.Sprint("研选专栏审核完成时,给提交人发送模板消息", specialId, ", specialId", err.Error()), 2)
  465. }
  466. }()
  467. var keyword1 string
  468. var keyword2 string
  469. var keyword3 string
  470. var keyword4 string
  471. var redirectUrl string
  472. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  473. if e != nil {
  474. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  475. return
  476. }
  477. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  478. if e != nil {
  479. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  480. return err
  481. }
  482. openIdList, err := models.GetUserRecordListByMobile(4, user.Mobile)
  483. if err != nil && err.Error() != utils.ErrNoRow() {
  484. return err
  485. }
  486. keyword1 = specialItem.Title
  487. keyword2 = specialItem.NickName
  488. if status == 1 {
  489. keyword3 = "文章已通过审核,点击查看详情"
  490. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  491. } else {
  492. keyword3 = "文章未通过审核,点击查看驳回原因"
  493. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_CENTER
  494. }
  495. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  496. openIdArr := make([]string, 0)
  497. for _, v := range openIdList {
  498. openIdArr = append(openIdArr, v.OpenId)
  499. }
  500. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  501. sendInfo := new(SendWxCategoryTemplate)
  502. sendInfo.Keywords = keywords
  503. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  504. sendInfo.RedirectTarget = 3
  505. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  506. sendInfo.OpenIdArr = openIdArr
  507. sendInfo.RedirectUrl = redirectUrl
  508. err = SendCategoryTemplateMsg(sendInfo)
  509. if err != nil {
  510. return
  511. }
  512. return
  513. }
  514. // 研选专栏有新内容审核通过时,给关注此专栏的客户发送模板消息
  515. func SendWxCategoryMsgSpecialFollow(specialId int) (err error) {
  516. defer func() {
  517. if err != nil {
  518. go utils.SendAlarmMsg(fmt.Sprint("研选专栏有新内容审核通过时,给关注此专栏的客户发送类目模板消息失败", specialId, ", specialId", err.Error()), 2)
  519. }
  520. }()
  521. var keyword1 string
  522. var keyword2 string
  523. var keyword3 string
  524. var keyword4 string
  525. followers, e := models.GetYanxuanSpecialFollowUserById(specialId)
  526. if e != nil {
  527. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  528. return
  529. }
  530. if len(followers) == 0 {
  531. return
  532. }
  533. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  534. if e != nil {
  535. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  536. return
  537. }
  538. var allInUserId string
  539. for _, v := range followers {
  540. allInUserId += strconv.Itoa(v) + ","
  541. }
  542. allInUserId = strings.TrimRight(allInUserId, ",")
  543. userList, err := models.GetWxUserListByUserIds(allInUserId)
  544. if err != nil && err.Error() != utils.ErrNoRow() {
  545. return err
  546. }
  547. mobile := ``
  548. for _, v := range userList {
  549. mobile += v.Mobile + ","
  550. }
  551. mobile = strings.TrimRight(mobile, ",")
  552. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  553. if e != nil {
  554. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  555. return
  556. }
  557. if len(openIdList) == 0 {
  558. return
  559. }
  560. keyword1 = specialItem.SpecialName
  561. keyword2 = "发布了新报告"
  562. keyword3 = specialItem.Title
  563. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  564. openIdArr := make([]string, 0)
  565. for _, v := range openIdList {
  566. openIdArr = append(openIdArr, v.OpenId)
  567. }
  568. redirectUrl := ""
  569. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  570. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  571. sendInfo := new(SendWxCategoryTemplate)
  572. sendInfo.Keywords = keywords
  573. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  574. sendInfo.RedirectTarget = 3
  575. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  576. sendInfo.OpenIdArr = openIdArr
  577. sendInfo.RedirectUrl = redirectUrl
  578. err = SendCategoryTemplateMsg(sendInfo)
  579. if err != nil {
  580. return
  581. }
  582. return
  583. }
  584. // 文章互动相关类目模版消息
  585. func SendWxCategoryMsgInteractive(user *models.WxUserItem, interactive string, articleId int) (err error) {
  586. //30秒内阅读同一篇报告不做重复推送
  587. key := "CYGX_" + utils.CYGX_OBJ_RESEARCHSUMMARY + "_READ" + strconv.Itoa(articleId) + "_" + strconv.Itoa(user.UserId)
  588. if utils.Rc.IsExist(key) {
  589. return
  590. }
  591. utils.Rc.Put(key, 1, 30*time.Second)
  592. defer func() {
  593. if err != nil {
  594. go utils.SendAlarmMsg(fmt.Sprint("文章互动相关,类目模板消息推送 ,SendWxCategoryMsgInteractive"+err.Error(), "userId:", user.UserId, "互动类型:", interactive), 2)
  595. }
  596. }()
  597. countUser, err := models.GetUserRemind(user.UserId)
  598. if err != nil {
  599. return err
  600. }
  601. if countUser == 0 {
  602. return err
  603. }
  604. var keyword1 string
  605. var keyword2 string
  606. var keyword3 string
  607. var keyword4 string
  608. //获取销售手机号
  609. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  610. if err != nil && err.Error() != utils.ErrNoRow() {
  611. return err
  612. }
  613. if sellerItemQy != nil {
  614. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  615. if e != nil {
  616. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  617. return
  618. }
  619. if len(openIdList) == 0 {
  620. return
  621. }
  622. detail, e := models.GetCygxResearchSummaryInfoById(articleId)
  623. if e != nil {
  624. err = errors.New("GetCygxProductInteriorDetail, Err: " + e.Error())
  625. return
  626. }
  627. if detail == nil {
  628. return
  629. }
  630. keyword1 = user.RealName + "-" + user.CompanyName
  631. keyword2 = fmt.Sprint("互动提醒:", interactive)
  632. keyword3 = detail.Title
  633. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  634. openIdArr := make([]string, 0)
  635. for _, v := range openIdList {
  636. openIdArr = append(openIdArr, v.OpenId)
  637. }
  638. redirectUrl := ``
  639. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
  640. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  641. sendInfo := new(SendWxCategoryTemplate)
  642. sendInfo.Keywords = keywords
  643. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  644. sendInfo.RedirectTarget = 3
  645. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  646. sendInfo.OpenIdArr = openIdArr
  647. sendInfo.RedirectUrl = redirectUrl
  648. err = SendCategoryTemplateMsg(sendInfo)
  649. if err != nil {
  650. return
  651. }
  652. }
  653. return
  654. }
  655. // 用户搜索操作操作行为,类目模板消息推送
  656. func SearchKeywordUserRmindCategoryMsg(user *models.WxUserItem, keyWord string) (err error) {
  657. defer func() {
  658. if err != nil {
  659. fmt.Println(err)
  660. go utils.SendAlarmMsg(fmt.Sprint("用户搜索操作操作行为,类目模板消息推送失败"+err.Error(), "UserId:", user.UserId, "keyWord:", keyWord), 2)
  661. }
  662. }()
  663. countUser, e := models.GetUserRemind(user.UserId)
  664. if e != nil {
  665. err = errors.New("GetUserRemind, Err: " + e.Error())
  666. return
  667. }
  668. if countUser == 0 {
  669. return
  670. }
  671. var keyword1 string
  672. var keyword2 string
  673. var keyword3 string
  674. var keyword4 string
  675. //获取销售手机号
  676. sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  677. if e != nil && e.Error() != utils.ErrNoRow() {
  678. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  679. return
  680. }
  681. if sellerItemQy != nil {
  682. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  683. if e != nil {
  684. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  685. return
  686. }
  687. if len(openIdList) == 0 {
  688. return
  689. }
  690. keyword1 = user.RealName+ "-"+ user.CompanyName
  691. keyword2 = fmt.Sprint("互动提醒:搜索" )
  692. keyword3 = keyWord
  693. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  694. openIdArr := make([]string, 0)
  695. for _, v := range openIdList {
  696. openIdArr = append(openIdArr, v.OpenId)
  697. }
  698. redirectUrl := ""
  699. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  700. sendInfo := new(SendWxCategoryTemplate)
  701. sendInfo.Keywords = keywords
  702. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  703. sendInfo.RedirectTarget = 3
  704. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  705. sendInfo.OpenIdArr = openIdArr
  706. sendInfo.RedirectUrl = redirectUrl
  707. err = SendCategoryTemplateMsg(sendInfo)
  708. if err != nil {
  709. return
  710. }
  711. }
  712. return
  713. }