Просмотр исходного кода

已购列表页面统计未读数

xiexiaoyuan 3 лет назад
Родитель
Сommit
0cf3f2dc67

+ 6 - 4
models/tables/rddp/report/query.go

@@ -1,6 +1,8 @@
 package report
 
-import "hongze/hongze_yb/global"
+import (
+	"hongze/hongze_yb/global"
+)
 
 func GetLatestClassReportsByIDs(reportIDs []int) (reportList []*Report, err error) {
 	sql := `SELECT
@@ -23,8 +25,8 @@ GROUP BY
 	return
 }
 
-// GetByIds 根据id获取报告信息
-func GetByIds( ids []int) (reportList []*Report, err error) {
-	err = global.MYSQL["rddp"].Model(Report{}).Where("id in (?) ", ids).Scan(reportList).Error
+// GetReportsByIDsAndDate 根据时间和报告ID筛选出合适的记录
+func GetReportsByIDsAndDate( ids []int, publishTime string) (reportList []*Report, err error) {
+	err = global.MYSQL["rddp"].Model(Report{}).Where("id in (?) and state = 2 and create_time > ? ", ids, publishTime).Scan(&reportList).Error
 	return
 }

+ 6 - 0
models/tables/rddp/report/report.go

@@ -27,6 +27,12 @@ type Report struct {
 	ThsMsgIsSend       int    `description:"客户群消息是否已发送,0:否,1:是"`
 }
 
+type UnReadItem struct {
+	ReportID           int
+	ClassifyNameFirst  string
+}
+
+
 func (r *Report) TableName() string {
 	return "report"
 }

+ 6 - 6
models/tables/rddp/report_chapter/report_chapter.go

@@ -4,21 +4,21 @@ import "time"
 
 type ReportChapter struct {
 	ReportChapterId     int       `gorm:"primaryKey;column:report_chapter_id;type:int(10) unsigned;not null" json:"-"`
-	ReportId            int       `gorm:"column:report_id;type:int(10);not null;default:'0'"  json:"report_id"`                        //报告ID
+	ReportId            int       `gorm:"column:report_id;type:int(10);not null;default:0"  json:"report_id"`                        //报告ID
 	ReportCode          string    `gorm:"column:report_code;type:varchar(255);not null;default:''"  json:"report_code"`                //报告唯一编码
 	ReportType          string    `gorm:"column:report_type;type:varchar(255);not null;default:''"  json:"report_type"`                //晨报-day;周报-week;
-	ClassifyIdFirst     int       `gorm:"column:classify_id_first;type:int(10);default:'0'"  json:"classify_id_first"`                 //一级分类id
+	ClassifyIdFirst     int       `gorm:"column:classify_id_first;type:int(10);default:0"  json:"classify_id_first"`                 //一级分类id
 	ClassifyNameFirst   string    `gorm:"column:classify_name_first;type:varchar(255);default:''"  json:"classify_name_first"`         //一级分类名称
-	TypeId				int       `gorm:"column:type_id;type:int(10);not null;default:'0'"  json:"type_id"`                            //品种ID
+	TypeId				int       `gorm:"column:type_id;type:int(10);not null;default:0"  json:"type_id"`                            //品种ID
 	TypeName            string    `gorm:"column:type_name;type:varchar(255);not null;default:''"  json:"type_name"`                    //品种名称
 	Title               string	  `gorm:"column:title;type:varchar(255);not null;default:''"  json:"title"`                            //章节标题
 	Abstract            string    `gorm:"column:abstract;type:varchar(255);not null;default:''"  json:"abstract"`                      //摘要
-	AddType             int       `gorm:"column:add_type;type:int(10);not null;default:'0'"  json:"add_type"`                          //是否为继承报告1-空白报告2-继承报告
+	AddType             int       `gorm:"column:add_type;type:int(10);not null;default:0"  json:"add_type"`                          //是否为继承报告1-空白报告2-继承报告
 	Author              string    `gorm:"column:author;type:varchar(255);not null;default:''"  json:"author"`                          //作者
 	Content             string    `gorm:"column:content;type:longtext;"  json:"content"`                                               //内容
-	Stage				int       `gorm:"column:stage;type:int(10);not null;default:'0'"  json:"stage"`                                 //期数
+	Stage				int       `gorm:"column:stage;type:int(10);not null;default:0"  json:"stage"`                                 //期数
 	Trend               string    `gorm:"column:trend;type:varchar(255);not null;default:''"  json:"trend"`                             //趋势观点
-	Sort				int       `gorm:"column:sort;type:int(10);not null;default:'0'"  json:"sort"`                                   //排序:数值越小越靠前
+	Sort				int       `gorm:"column:sort;type:int(10);not null;default:0"  json:"sort"`                                   //排序:数值越小越靠前
 	PublishState        int       `gorm:"column:publish_state;type:int(4);not null;default:'0'"  json:"publish_state"`                 //发布状态1-待发布2-已发布
 	PublishTime         time.Time `gorm:"column:publish_time;type:datetime"  json:"publish_time"`                                      //发布时间
 	Videourl            string    `gorm:"column:video_url;type:varchar(255);not null;default:''"  json:"video_url"`                    //音频文件URL

+ 19 - 0
models/tables/rddp/report_view_log/query.go

@@ -0,0 +1,19 @@
+package report_view_log
+
+import "hongze/hongze_yb/global"
+
+// GetByReportIdsAndUserIdAndTime 根据用户id和 报告id,创建时间筛选出用户已经浏览过的记录
+func GetByReportIdsAndUserIdAndTime(reportIds []int, userId uint64, createTime string) (repIds []int, err error)   {
+	var viewLog []*ReportViewLog
+	err = global.MYSQL["rddp"].Model(ReportViewLog{}).Where("report_id in (?) and user_id = ? and create_time > ?", reportIds, userId, createTime).Scan(&viewLog).Error
+	if err != nil {
+		return
+	}
+
+	if len(viewLog) > 0 {
+		for _, v := range viewLog {
+			repIds = append(repIds, v.ReportId)
+		}
+	}
+	return
+}

+ 16 - 0
models/tables/rddp/report_view_log/report_view_log.go

@@ -0,0 +1,16 @@
+package report_view_log
+
+import (
+	"time"
+)
+
+type ReportViewLog struct {
+	Id                  int          `gorm:"primaryKey;column:id;type:int(11) unsigned;not null" json:"-"`
+	UserId              uint64          `gorm:"column:user_id;type:int(11)"  json:"user_id"`
+	ReportId            int 		 `gorm:"column:report_id;type:int(11)"  json:"report_id"`
+	CreateTime          time.Time    `gorm:"column:create_time;type:datetime"  json:"create_time"`
+}
+
+func (r *ReportViewLog) TableName() string  {
+	return "report_view_log"
+}

+ 1 - 1
services/purchase/purchase.go

@@ -29,7 +29,7 @@ func GetLatestReportAndActivity(user user.UserInfo) (list purchase.PurchaseList,
 		return
 	}
 
-	list, tempErr = report.GetLatestClassReport(permissionIds)
+	list, tempErr = report.GetLatestClassReport(permissionIds, user.UserID)
 	if tempErr != nil {
 		return
 	}

+ 50 - 1
services/report/report.go

@@ -6,10 +6,11 @@ import (
 	"hongze/hongze_yb/models/tables/chart_permission_chapter_mapping"
 	"hongze/hongze_yb/models/tables/rddp/report"
 	"hongze/hongze_yb/models/tables/rddp/report_chapter"
+	"hongze/hongze_yb/models/tables/rddp/report_view_log"
 	"hongze/hongze_yb/models/tables/report_chapter_type"
 )
 
-func GetLatestClassReport(permissionIds []int) (purchaseList []*purchase.PurchaseListItem, err error)  {
+func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*purchase.PurchaseListItem, err error)  {
 	//获取所有和权限绑定的报告
 	reportIds, err := chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds)
 	if err != nil {
@@ -28,6 +29,12 @@ func GetLatestClassReport(permissionIds []int) (purchaseList []*purchase.Purchas
 			err = tErr
 			return
 		}
+		//获取未读数
+		unReadItem, tErr := GetUnRead(reportIds, userId)
+		if tErr != nil {
+			err = tErr
+			return
+		}
 		for _, v := range reports {
 			temp := new(purchase.PurchaseListItem)
 			temp.ReportId = v.Id
@@ -55,9 +62,51 @@ func GetLatestClassReport(permissionIds []int) (purchaseList []*purchase.Purchas
 			}
 
 			temp.Time = v.PublishTime
+			temp.Unread = unReadItem[temp.ClassifyNameFirst]
 			purchaseList = append(purchaseList, temp)
 			}
 	}
 	return
 }
 
+// GetUnRead 获取未读数
+func GetUnRead(reportIds []int, userId uint64) (unReadItem map[string]int, err error) {
+	firstDay := "2022-01-01"
+	newReports, err := report.GetReportsByIDsAndDate(reportIds, firstDay)
+	if err != nil {
+		return
+	}
+	var newIds []int
+	reportMap := make(map[int]*report.UnReadItem)
+	if len(newReports) > 0 {
+		for _, v := range newReports {
+			newIds = append(newIds, v.Id)
+			temp := new(report.UnReadItem)
+			temp.ReportID = v.Id
+			temp.ClassifyNameFirst = v.ClassifyNameFirst
+			reportMap[v.Id] = temp
+		}
+
+		//获取用户的浏览记录
+		viewReportIds, tErr := report_view_log.GetByReportIdsAndUserIdAndTime(newIds, userId, firstDay)
+		if tErr != nil {
+			err = tErr
+			return
+		}
+
+		//过滤已经浏览过的报告ID
+		if len(viewReportIds) > 0 {
+			for _, item := range viewReportIds {
+				if _, ok := reportMap[item]; ok {
+					delete(reportMap, item)
+				}
+			}
+		}
+		
+		unReadItem =make(map[string]int)
+		for _, v := range reportMap {
+			unReadItem[v.ClassifyNameFirst] +=1
+		}
+	}
+	return
+}