wx_category_template_msg.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  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.WxAppId = utils.WxAppId
  239. sendInfo.Keywords = keywords
  240. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  241. sendInfo.RedirectTarget = 3
  242. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  243. sendInfo.OpenIdArr = openIdArr
  244. err = SendCategoryTemplateMsg(sendInfo)
  245. return
  246. }
  247. // 发送用户留言提醒
  248. func SendCommentWxCategoryTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail, msgId int) (err error) {
  249. var msg string
  250. defer func() {
  251. if err != nil {
  252. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  253. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  254. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  255. }
  256. }()
  257. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  258. if e != nil {
  259. return
  260. }
  261. if companyItem == nil {
  262. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  263. }
  264. var keyword1 string
  265. var keyword2 string
  266. var keyword3 string
  267. var keyword4 string
  268. var keyword5 string
  269. var redirectUrl string
  270. var mobile string
  271. var keywords []string
  272. keyword1 = user.RealName
  273. keyword2 = companyItem.CompanyName
  274. keyword3 = companyItem.SellerName
  275. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  276. keyword5 = "报告留言:" + req.Content
  277. keywords = append(keywords, keyword1, keyword2, keyword3, keyword4, keyword5)
  278. if articleInfo.ArticleTypeId > 0 {
  279. //研选报告添加汪洋
  280. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  281. } else {
  282. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  283. }
  284. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  285. if e != nil {
  286. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  287. return
  288. }
  289. openIdArr := make([]string, 0)
  290. for _, v := range openIdList {
  291. openIdArr = append(openIdArr, v.OpenId)
  292. }
  293. //mapSource留言跳转类型,1:文章、2:活动、3:微路演视频、4:活动视频、5:活动音频
  294. if utils.RunMode != "release" {
  295. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
  296. } else {
  297. redirectUrl = utils.WX_MSG_PATH_TEMPLATE_MSG + "SourceId=" + strconv.Itoa(msgId) + "&SourceType=1"
  298. }
  299. sendInfo := new(SendWxCategoryTemplate)
  300. sendInfo.Keywords = keywords
  301. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  302. sendInfo.RedirectTarget = 3
  303. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_APPLY
  304. sendInfo.OpenIdArr = openIdArr
  305. sendInfo.RedirectUrl = redirectUrl
  306. err = SendCategoryTemplateMsg(sendInfo)
  307. return
  308. }
  309. // 发送报告提问消息提醒
  310. func SendWxCategoryMsgWithAsk(companyName, realName, sellerName, askTime, askMsg string, openIdList []*models.OpenIdList, articleId int) (err error) {
  311. if len(openIdList) == 0 {
  312. return
  313. }
  314. var msg string
  315. defer func() {
  316. if err != nil {
  317. go utils.SendEmail("发送类目模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  318. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒类目模版消息失败,用户名", realName, "文章ID:", articleId), 2)
  319. utils.FileLog.Info("发送类目模版消息失败,Err:%s", err.Error())
  320. }
  321. fmt.Println("line 21", err, msg)
  322. }()
  323. var keyword1 string
  324. var keyword2 string
  325. var keyword3 string
  326. var keyword4 string
  327. var keyword5 string
  328. keyword1 = realName
  329. keyword2 = companyName
  330. keyword3 = sellerName
  331. keyword4 = askTime
  332. keyword4 = "活动提问:" + askMsg
  333. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  334. openIdArr := make([]string, 0)
  335. for _, v := range openIdList {
  336. openIdArr = append(openIdArr, v.OpenId)
  337. }
  338. redirectUrl := utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
  339. sendInfo := new(SendWxCategoryTemplate)
  340. sendInfo.Keywords = keywords
  341. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  342. sendInfo.RedirectTarget = 3
  343. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  344. sendInfo.OpenIdArr = openIdArr
  345. sendInfo.RedirectUrl = redirectUrl
  346. err = SendCategoryTemplateMsg(sendInfo)
  347. return
  348. }
  349. // SendActivitieSignCategoryTemplateMsg 线下调研活动扫码签到给对应销售发类目模班消息
  350. func SendActivitieSignCategoryTemplateMsg(user *models.WxUserItem, activityDetail *models.ActivityDetail) (err error) {
  351. defer func() {
  352. if err != nil {
  353. go utils.SendAlarmMsg(fmt.Sprint("线下调研活动扫码签到给对应销售发模班消息推送失败Err:", err.Error(), "活动ID:", activityDetail.ActivityId, "手机号:", user.Mobile), 2)
  354. }
  355. }()
  356. var mobiles []string
  357. //获取销售信息
  358. sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  359. if err != nil && err.Error() != utils.ErrNoRow() {
  360. return
  361. }
  362. if sellerItem != nil {
  363. mobiles = append(mobiles, sellerItem.Mobile, utils.MobileWuAngDi, utils.MobileDongHeng, utils.MobileShenTao)
  364. }
  365. var keyword1 string
  366. var keyword2 string
  367. var keyword3 string
  368. var keyword4 string
  369. var keyword5 string
  370. var redirectUrl string
  371. keyword1 = user.RealName
  372. keyword2 = user.CompanyName
  373. keyword3 = sellerItem.RealName
  374. keyword4 = activityDetail.ActivityName
  375. keyword5 = time.Now().Format(utils.FormatDateTimeMinute2)
  376. openIdList, e := models.GetWxOpenIdByMobileSliceList(mobiles)
  377. if e != nil {
  378. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  379. return
  380. }
  381. openIdArr := make([]string, 0)
  382. for _, v := range openIdList {
  383. openIdArr = append(openIdArr, v.OpenId)
  384. }
  385. if utils.RunMode != "release" {
  386. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityDetail.ActivityId)
  387. } else {
  388. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_SIGN + strconv.Itoa(activityDetail.ActivityId)
  389. }
  390. keywords := []string{keyword1, keyword2, keyword3, keyword4, keyword5}
  391. sendInfo := new(SendWxCategoryTemplate)
  392. sendInfo.Keywords = keywords
  393. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdActivitySign
  394. sendInfo.RedirectTarget = 3
  395. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  396. sendInfo.OpenIdArr = openIdArr
  397. sendInfo.RedirectUrl = redirectUrl
  398. err = SendCategoryTemplateMsg(sendInfo)
  399. if err != nil {
  400. return
  401. }
  402. return
  403. }
  404. // SendReviewCategoryTemplateMsgAdmin 提交审核时给王芳,汪洋发消息
  405. func SendReviewCategoryTemplateMsgAdmin(specialId int) (err error) {
  406. defer func() {
  407. if err != nil {
  408. go utils.SendAlarmMsg(fmt.Sprint("处理试用申请给王芳,汪洋发消息失败, specialId:", specialId, "ErrMsg", err.Error()), 2)
  409. }
  410. }()
  411. var configCode string
  412. //如果是研选的就推送给汪洋跟王芳,否则就推送给王芳
  413. configCode = utils.TPL_MSG_WANG_FANG_WANG_YANG
  414. cnf, e := models.GetConfigByCode(configCode)
  415. if e != nil {
  416. err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
  417. return
  418. }
  419. openIdList, e := models.GetUserRecordListByMobile(4, cnf.ConfigValue)
  420. if e != nil && e.Error() != utils.ErrNoRow() {
  421. err = errors.New("GetUserRecordListByMobile, Err: " + e.Error() + cnf.ConfigValue)
  422. return err
  423. }
  424. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  425. if e != nil {
  426. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  427. return
  428. }
  429. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  430. if e != nil {
  431. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  432. return err
  433. }
  434. var keyword1 string
  435. var keyword2 string
  436. var keyword3 string
  437. var keyword4 string
  438. keyword1 = specialItem.NickName
  439. keyword2 = specialItem.RealName + "-" + user.CompanyName
  440. keyword3 = specialItem.SpecialName
  441. keyword3 = time.Now().Format(utils.FormatDateTimeMinute2)
  442. keyword4 = "研选专栏提交了内容待审核"
  443. openIdArr := make([]string, 0)
  444. for _, v := range openIdList {
  445. openIdArr = append(openIdArr, v.OpenId)
  446. }
  447. redirectUrl := ""
  448. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_ENABLE_DETAIL + strconv.Itoa(specialId)
  449. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  450. sendInfo := new(SendWxCategoryTemplate)
  451. sendInfo.Keywords = keywords
  452. sendInfo.TemplateId = utils.WxCategoryMsgTemplateIdApplyXzs
  453. sendInfo.RedirectTarget = 3
  454. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  455. sendInfo.OpenIdArr = openIdArr
  456. sendInfo.RedirectUrl = redirectUrl
  457. err = SendCategoryTemplateMsg(sendInfo)
  458. if err != nil {
  459. return
  460. }
  461. return
  462. }
  463. // 研选专栏审核完成时,给提交人发送类目模板消息
  464. func SendWxCategoryMsgSpecialAuthor(specialId, status int) (err error) {
  465. defer func() {
  466. if err != nil {
  467. go utils.SendAlarmMsg(fmt.Sprint("研选专栏审核完成时,给提交人发送模板消息", specialId, ", specialId", err.Error()), 2)
  468. }
  469. }()
  470. var keyword1 string
  471. var keyword2 string
  472. var keyword3 string
  473. var keyword4 string
  474. var redirectUrl string
  475. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  476. if e != nil {
  477. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  478. return
  479. }
  480. user, e := models.GetWxUserItemByUserId(specialItem.UserId)
  481. if e != nil {
  482. err = errors.New("GetWxUserItemByUserId, Err: " + e.Error())
  483. return err
  484. }
  485. openIdList, err := models.GetUserRecordListByMobile(4, user.Mobile)
  486. if err != nil && err.Error() != utils.ErrNoRow() {
  487. return err
  488. }
  489. keyword1 = specialItem.Title
  490. keyword2 = specialItem.NickName
  491. if status == 1 {
  492. keyword3 = "文章已通过审核,点击查看详情"
  493. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  494. } else {
  495. keyword3 = "文章未通过审核,点击查看驳回原因"
  496. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_CENTER
  497. }
  498. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  499. openIdArr := make([]string, 0)
  500. for _, v := range openIdList {
  501. openIdArr = append(openIdArr, v.OpenId)
  502. }
  503. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  504. sendInfo := new(SendWxCategoryTemplate)
  505. sendInfo.Keywords = keywords
  506. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  507. sendInfo.RedirectTarget = 3
  508. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  509. sendInfo.OpenIdArr = openIdArr
  510. sendInfo.RedirectUrl = redirectUrl
  511. err = SendCategoryTemplateMsg(sendInfo)
  512. if err != nil {
  513. return
  514. }
  515. return
  516. }
  517. // 研选专栏有新内容审核通过时,给关注此专栏的客户发送模板消息
  518. func SendWxCategoryMsgSpecialFollow(specialId int) (err error) {
  519. defer func() {
  520. if err != nil {
  521. go utils.SendAlarmMsg(fmt.Sprint("研选专栏有新内容审核通过时,给关注此专栏的客户发送类目模板消息失败", specialId, ", specialId", err.Error()), 2)
  522. }
  523. }()
  524. var keyword1 string
  525. var keyword2 string
  526. var keyword3 string
  527. var keyword4 string
  528. followers, e := models.GetYanxuanSpecialFollowUserById(specialId)
  529. if e != nil {
  530. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  531. return
  532. }
  533. if len(followers) == 0 {
  534. return
  535. }
  536. specialItem, e := models.GetYanxuanSpecialItemById(specialId)
  537. if e != nil {
  538. err = errors.New("GetYanxuanSpecialFollowUserById, Err: " + e.Error())
  539. return
  540. }
  541. var allInUserId string
  542. for _, v := range followers {
  543. allInUserId += strconv.Itoa(v) + ","
  544. }
  545. allInUserId = strings.TrimRight(allInUserId, ",")
  546. userList, err := models.GetWxUserListByUserIds(allInUserId)
  547. if err != nil && err.Error() != utils.ErrNoRow() {
  548. return err
  549. }
  550. mobile := ``
  551. for _, v := range userList {
  552. mobile += v.Mobile + ","
  553. }
  554. mobile = strings.TrimRight(mobile, ",")
  555. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  556. if e != nil {
  557. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  558. return
  559. }
  560. if len(openIdList) == 0 {
  561. return
  562. }
  563. keyword1 = specialItem.SpecialName
  564. keyword2 = "发布了新报告"
  565. keyword3 = specialItem.Title
  566. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  567. openIdArr := make([]string, 0)
  568. for _, v := range openIdList {
  569. openIdArr = append(openIdArr, v.OpenId)
  570. }
  571. redirectUrl := ""
  572. redirectUrl = utils.WX_MSG_PATH_YX_SPECIAL_DETAIL + strconv.Itoa(specialId)
  573. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  574. sendInfo := new(SendWxCategoryTemplate)
  575. sendInfo.Keywords = keywords
  576. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  577. sendInfo.RedirectTarget = 3
  578. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  579. sendInfo.OpenIdArr = openIdArr
  580. sendInfo.RedirectUrl = redirectUrl
  581. err = SendCategoryTemplateMsg(sendInfo)
  582. if err != nil {
  583. return
  584. }
  585. return
  586. }
  587. // 文章互动相关类目模版消息
  588. func SendWxCategoryMsgInteractive(user *models.WxUserItem, interactive string, articleId int) (err error) {
  589. //30秒内阅读同一篇报告不做重复推送
  590. key := "CYGX_" + utils.CYGX_OBJ_RESEARCHSUMMARY + "_READ" + strconv.Itoa(articleId) + "_" + strconv.Itoa(user.UserId)
  591. if utils.Rc.IsExist(key) {
  592. return
  593. }
  594. utils.Rc.Put(key, 1, 30*time.Second)
  595. defer func() {
  596. if err != nil {
  597. go utils.SendAlarmMsg(fmt.Sprint("文章互动相关,类目模板消息推送 ,SendWxCategoryMsgInteractive"+err.Error(), "userId:", user.UserId, "互动类型:", interactive), 2)
  598. }
  599. }()
  600. countUser, err := models.GetUserRemind(user.UserId)
  601. if err != nil {
  602. return err
  603. }
  604. if countUser == 0 {
  605. return err
  606. }
  607. var keyword1 string
  608. var keyword2 string
  609. var keyword3 string
  610. var keyword4 string
  611. //获取销售手机号
  612. sellerItemQy, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  613. if err != nil && err.Error() != utils.ErrNoRow() {
  614. return err
  615. }
  616. if sellerItemQy != nil {
  617. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  618. if e != nil {
  619. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  620. return
  621. }
  622. if len(openIdList) == 0 {
  623. return
  624. }
  625. detail, e := models.GetCygxResearchSummaryInfoById(articleId)
  626. if e != nil {
  627. err = errors.New("GetCygxProductInteriorDetail, Err: " + e.Error())
  628. return
  629. }
  630. if detail == nil {
  631. return
  632. }
  633. keyword1 = user.RealName + "-" + user.CompanyName
  634. keyword2 = fmt.Sprint("互动提醒:", interactive)
  635. keyword3 = detail.Title
  636. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  637. openIdArr := make([]string, 0)
  638. for _, v := range openIdList {
  639. openIdArr = append(openIdArr, v.OpenId)
  640. }
  641. redirectUrl := ``
  642. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
  643. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  644. sendInfo := new(SendWxCategoryTemplate)
  645. sendInfo.Keywords = keywords
  646. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  647. sendInfo.RedirectTarget = 3
  648. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  649. sendInfo.OpenIdArr = openIdArr
  650. sendInfo.RedirectUrl = redirectUrl
  651. err = SendCategoryTemplateMsg(sendInfo)
  652. if err != nil {
  653. return
  654. }
  655. }
  656. return
  657. }
  658. // 用户搜索操作操作行为,类目模板消息推送
  659. func SearchKeywordUserRmindCategoryMsg(user *models.WxUserItem, keyWord string) (err error) {
  660. defer func() {
  661. if err != nil {
  662. fmt.Println(err)
  663. go utils.SendAlarmMsg(fmt.Sprint("用户搜索操作操作行为,类目模板消息推送失败"+err.Error(), "UserId:", user.UserId, "keyWord:", keyWord), 2)
  664. }
  665. }()
  666. countUser, e := models.GetUserRemind(user.UserId)
  667. if e != nil {
  668. err = errors.New("GetUserRemind, Err: " + e.Error())
  669. return
  670. }
  671. if countUser == 0 {
  672. return
  673. }
  674. var keyword1 string
  675. var keyword2 string
  676. var keyword3 string
  677. var keyword4 string
  678. //获取销售手机号
  679. sellerItemQy, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
  680. if e != nil && e.Error() != utils.ErrNoRow() {
  681. err = errors.New("GetSellerByCompanyIdCheckFicc, Err: " + e.Error())
  682. return
  683. }
  684. if sellerItemQy != nil {
  685. openIdList, e := models.GetWxOpenIdByMobileList(sellerItemQy.Mobile)
  686. if e != nil {
  687. err = errors.New("GetSellerByAdminId, Err: " + e.Error())
  688. return
  689. }
  690. if len(openIdList) == 0 {
  691. return
  692. }
  693. keyword1 = user.RealName+ "-"+ user.CompanyName
  694. keyword2 = fmt.Sprint("互动提醒:搜索" )
  695. keyword3 = keyWord
  696. keyword4 = time.Now().Format(utils.FormatDateTimeMinute2)
  697. openIdArr := make([]string, 0)
  698. for _, v := range openIdList {
  699. openIdArr = append(openIdArr, v.OpenId)
  700. }
  701. redirectUrl := ""
  702. keywords := []string{keyword1, keyword2, keyword3, keyword4}
  703. sendInfo := new(SendWxCategoryTemplate)
  704. sendInfo.Keywords = keywords
  705. sendInfo.TemplateId = utils.WxMsgCategoryTemplateIdCompanyApprovalMessageRai
  706. sendInfo.RedirectTarget = 3
  707. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  708. sendInfo.OpenIdArr = openIdArr
  709. sendInfo.RedirectUrl = redirectUrl
  710. err = SendCategoryTemplateMsg(sendInfo)
  711. if err != nil {
  712. return
  713. }
  714. }
  715. return
  716. }