article_red.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package services
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_clpt/models"
  6. "hongze/hongze_clpt/utils"
  7. "time"
  8. )
  9. //处理文章小红点
  10. func GetShowTimeLineIsRed(user *models.WxUserItem, industrialManagementId int) (isRed bool, err error) {
  11. //时间线
  12. timeLineItem := models.IndustrialToArticleCategoryRep{
  13. CategoryId: 99999,
  14. MatchTypeName: "时间线",
  15. }
  16. timeLineList, e := models.GetTimeLineReportIndustrialListRed(user.UserId, industrialManagementId, 0, 30)
  17. if e != nil {
  18. err = errors.New("GetTimeLineReportIndustrialListRed, Err: " + e.Error())
  19. return
  20. }
  21. //查询用户今天是否看过时间线
  22. haveMorningMeeting := false
  23. var morningMeetingTime string
  24. count, e := models.GetTimeLineRecordCount(user.UserId, industrialManagementId)
  25. if e != nil {
  26. err = errors.New("GetTimeLineRecordCount, Err: " + e.Error())
  27. return
  28. }
  29. var recordItem *models.CygxPageHistoryRecord
  30. if count > 1 {
  31. recordItem, e = models.GetTimeLineRecordItem(user.UserId, industrialManagementId)
  32. if e != nil {
  33. err = errors.New("GetTimeLineRecordCount, Err: " + e.Error())
  34. return
  35. }
  36. }
  37. for _, v := range timeLineList {
  38. if v.Readnum == 0 && user.CreatedTime.Before(utils.StrTimeToTime(v.PublishDate)) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(v.PublishDate)) {
  39. if v.SubCategoryName == "时间线" {
  40. haveMorningMeeting = true
  41. morningMeetingTime = v.PublishDate
  42. continue
  43. }
  44. timeLineItem.IsRed = true
  45. }
  46. }
  47. //因为无法记录用户是否看过晨会点评,所以用用户今天是否看过时间线来判断是否显示小红点,这里是判断分类的小红点
  48. timeLineRed := false
  49. if count < 2 {
  50. timeLineRed = true
  51. } else if count > 1 && recordItem.CreateTime.Before(utils.StrTimeToTime(morningMeetingTime)) {
  52. timeLineRed = true
  53. }
  54. if !timeLineItem.IsRed && timeLineRed && haveMorningMeeting {
  55. timeLineItem.IsRed = true
  56. }
  57. isRed = timeLineItem.IsRed
  58. return
  59. }
  60. // UserViewRedisData 阅读数据
  61. type UserViewRedisData struct {
  62. Mobile string `json:"mobile"`
  63. Email string `json:"email"`
  64. RealName string `json:"real_name"`
  65. CompanyName string `json:"company_name"`
  66. ViewTime string `json:"view_time" description:"阅读时间,格式:2022-02-17 13:06:13"`
  67. ProductId int `json:"product_id" description:"报告所属产品,ficc:1,权益:2"`
  68. CompanyId int `json:"company_id" description:"客户id"`
  69. }
  70. type ReportViewRecord struct {
  71. Id int `orm:"column(id);pk"`
  72. UserId int `description:"用户id"`
  73. ReportId int `description:"报告id"`
  74. Mobile string `description:"手机号"`
  75. Email string `description:"邮箱"`
  76. RealName string `description:"用户实际姓名"`
  77. CompanyName string `description:"公司名称"`
  78. CreateTime time.Time `description:"创建时间"`
  79. }
  80. // PushViewRecordNewRedisData 阅读数据加入到redis
  81. func PushViewRecordNewRedisData(reportViewRecord *ReportViewRecord, companyId int) bool {
  82. data := &UserViewRedisData{
  83. Mobile: reportViewRecord.Mobile,
  84. Email: reportViewRecord.Email,
  85. RealName: reportViewRecord.RealName,
  86. CompanyName: reportViewRecord.CompanyName,
  87. ViewTime: reportViewRecord.CreateTime.Format(utils.FormatDateTime),
  88. ProductId: 2,
  89. CompanyId: companyId,
  90. }
  91. if utils.Re == nil {
  92. err := utils.Rc.LPush(utils.CACHE_KEY_USER_VIEW, data)
  93. if err != nil {
  94. fmt.Println("PushViewRecordNewRedisData LPush Err:" + err.Error())
  95. }
  96. return true
  97. }
  98. return false
  99. }
  100. // 记录用户文章浏览记录
  101. func ArticleHistory(articleId int, user *models.WxUserItem) (err error) {
  102. defer func() {
  103. if err != nil {
  104. go utils.SendAlarmMsg("记录用户文章浏览记录,失败"+err.Error(), 2)
  105. }
  106. }()
  107. uid := user.UserId
  108. if uid == 0 {
  109. return
  110. }
  111. record := new(models.CygxArticleHistoryRecordNewpv)
  112. record.UserId = uid
  113. record.ArticleId = articleId
  114. record.CreateTime = time.Now()
  115. record.ModifyTime = time.Now()
  116. record.Mobile = user.Mobile
  117. record.Email = user.Email
  118. record.CompanyId = user.CompanyId
  119. record.CompanyName = user.CompanyName
  120. record.StopTime = 0
  121. record.OutType = 1
  122. record.Source = "WEB"
  123. recordRedis := new(ReportViewRecord)
  124. recordRedis.UserId = user.UserId
  125. recordRedis.ReportId = articleId
  126. recordRedis.Mobile = user.Mobile
  127. recordRedis.Email = user.Email
  128. recordRedis.RealName = user.RealName
  129. recordRedis.CompanyName = user.CompanyName
  130. recordRedis.CreateTime = time.Now()
  131. go PushViewRecordNewRedisData(recordRedis, user.CompanyId)
  132. _, err = models.AddCygxArticleViewRecordNewpv(record)
  133. return
  134. }
  135. // GetUserArticleHistoryRecord 获取用户已经阅读的文章ID
  136. func GetUserArticleHistoryRecord(user *models.WxUserItem) (articleIdMap map[int]bool, err error) {
  137. var condition string
  138. var pars []interface{}
  139. condition = " AND user_id = ? "
  140. pars = append(pars, user.UserId)
  141. articleIdMap = make(map[int]bool, 0)
  142. list, err := models.GetArticleHistoryRecord(condition, pars)
  143. if err != nil && err.Error() != utils.ErrNoRow() {
  144. return
  145. }
  146. for _, v := range list {
  147. articleIdMap[v.ArticleId] = true
  148. }
  149. return
  150. }