Sfoglia il codice sorgente

已购详情页面:已购报告详情,已购活动详情

xiexiaoyuan 3 anni fa
parent
commit
01713512f4

+ 29 - 0
controller/purchase/purchase.go

@@ -5,6 +5,7 @@ import (
 	"hongze/hongze_yb/controller/response"
 	"hongze/hongze_yb/services/purchase"
 	userService "hongze/hongze_yb/services/user"
+	"strconv"
 )
 
 func List(c *gin.Context) {
@@ -20,5 +21,33 @@ func List(c *gin.Context) {
 		return
 	}
 
+	response.OkData("获取成功", list, c)
+}
+
+func Detail(c *gin.Context)  {
+	classifyNameFirst := c.DefaultQuery("classify_name_first", "")
+	reqPageSize := c.DefaultQuery("page_size", "1")
+	reqPageLimit := c.DefaultQuery("page_limit", "10")
+	reqActivityId := c.DefaultQuery("activity_id", "")
+
+	pageSize, _ := strconv.Atoi(reqPageSize)
+	pageLimit, _ := strconv.Atoi(reqPageLimit)
+	activityId, _ := strconv.Atoi(reqActivityId)
+	if classifyNameFirst == "" && activityId == 0 {
+		response.Fail("请输入分类类型或者活动类型", c)
+		return
+	}
+	// 判断用户是否有已购权限
+	userinfo := userService.GetInfoByClaims(c)
+	if userinfo.CompanyID == 0 {
+		response.Fail("无权操作", c)
+		return
+	}
+	list, err := purchase.GetDetail(userinfo, classifyNameFirst, activityId, pageSize, pageLimit)
+	if err !=nil {
+		response.Fail("获取已购列表失败", c)
+		return
+	}
+
 	response.OkData("获取成功", list, c)
 }

+ 10 - 1
models/response/purchase/purchase.go

@@ -6,6 +6,16 @@ import (
 )
 
 type PurchaseListItem struct {
+	item
+	Unread             int    `description:"未读数" json:"unread"`
+}
+
+type Detail struct {
+	item
+	ReportImgUrl    string
+}
+
+type item struct {
 	ReportId           int    `description:"报告Id" json:"report_id"`
 	ReportChapterId    int    `description:"报告章节Id" json:"report_chapter_id"`
 	ActivityId		   int 	  `description:"活动ID" json:"activity_id"`
@@ -16,7 +26,6 @@ type PurchaseListItem struct {
 	Title              string `description:"标题" json:"title"`
 	Content            string `description:"简介" json:"content"`
 	Stage              int	  `description:"期数" json:"stage"`
-	Unread             int    `description:"未读数" json:"unread"`
 	Time               time.Time `description:"更新时间" json:"time"`
 }
 

+ 27 - 0
models/tables/rddp/classify/classify.go

@@ -0,0 +1,27 @@
+package classify
+
+import "time"
+
+type Classify struct {
+	Id               int
+	ClassifyName     string
+	Sort			 int8
+	ParentId		 int
+	CreateTime       time.Time
+	ModifyTime       time.Time
+	Abstract         string
+	Descript         string
+	ReportAuthor     string
+	AuthorDescript   string
+	ReportImgUrl     string
+	HeadImgUrl       string
+	AvatarImgUrl     string
+	ColumnImgUrl     string
+	IsHomeColumn     int8
+	HomeImgUrl       string
+	ClassifyLabel    string
+}
+
+func (c *Classify) TableName() string  {
+	return "classify"
+}

+ 8 - 0
models/tables/rddp/classify/query.go

@@ -0,0 +1,8 @@
+package classify
+
+import "hongze/hongze_yb/global"
+
+func GetAll()(list []*Classify, err error)  {
+	err = global.MYSQL["rddp"].Model(Classify{}).Scan(&list).Error
+	return
+}

+ 23 - 1
models/tables/rddp/report/query.go

@@ -27,6 +27,28 @@ GROUP BY
 
 // 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
+	err = global.MYSQL["rddp"].Model(Report{}).
+		Select("id, classify_name_first").
+		Where("id in (?) and state = 2 and create_time > ? ", ids, publishTime).Scan(&reportList).Error
 	return
 }
+
+// GetReportsByIDsAndDateAndClass 根据时间和报告ID筛选出合适的记录
+func GetReportsByIDsAndDateAndClass( ids []int, classifyNameFirst string, publishTime string) (reportList []*Report, err error) {
+	err = global.MYSQL["rddp"].Model(Report{}).
+		Select("id, classify_name_first").
+		Where("id in (?) and state = 2 and classify_name_first = ? and create_time > ? ", ids, classifyNameFirst, publishTime).Scan(&reportList).Error
+	return
+}
+
+//分页查询
+func GetListByIDsAndClassID( ids []int, classifyNameFirst string,  offset , limit int) (reportList []*Report, err error) {
+	err = global.MYSQL["rddp"].Model(Report{}).
+		Select("id, classify_id_first, classify_name_first, classify_id_second, classify_name_second, title, stage, publish_time").
+		Where("id in (?) and classify_name_first=? and state = 2 ", ids, classifyNameFirst).
+		Order("publish_time desc, id desc").
+		Offset(offset).
+		Limit(limit).
+		Scan(&reportList).Error
+	return
+}

+ 9 - 0
models/tables/rddp/report_view_log/create.go

@@ -0,0 +1,9 @@
+package report_view_log
+
+import "hongze/hongze_yb/global"
+
+// CreateInBatches 批量新增
+func CreateInBatches(reportLogs []*ReportViewLog) (err error) {
+	err = global.MYSQL["rddp"].Model(ReportViewLog{}).CreateInBatches(reportLogs, len(reportLogs)).Error
+	return
+}

+ 1 - 1
models/tables/rddp/report_view_log/report_view_log.go

@@ -11,6 +11,6 @@ type ReportViewLog struct {
 	CreateTime          time.Time    `gorm:"column:create_time;type:datetime"  json:"create_time"`
 }
 
-func (r *ReportViewLog) TableName() string  {
+func (reportLog *ReportViewLog) TableName() string  {
 	return "report_view_log"
 }

+ 12 - 0
models/tables/yb_activity/query.go

@@ -73,7 +73,19 @@ func GetOneById(activityId int) (activity *YbActivity, err error) {
 	return
 }
 
+// GetLatestByIds 获取最新的活动
 func GetLatestByIds(activityids []int) (activity *YbActivity, err error)  {
 	err = global.DEFAULT_MYSQL.Model(YbActivity{}).Where("activity_id in (?) and is_delete = 0 and publish_status = 1", activityids).Order("create_time desc").First(&activity).Error
 	return
+}
+
+// GetListByIds 分页查询活动列表
+func GetListByIds(activityids []int, offset , limit int) (activitys []*YbActivity, err error)  {
+	err = global.DEFAULT_MYSQL.Model(YbActivity{}).
+		Where("activity_id in (?) and is_delete = 0 and publish_status = 1", activityids).
+		Order("create_time desc").
+		Offset(offset).
+		Limit(limit).
+		Scan(&activitys).Error
+	return
 }

+ 1 - 0
routers/purchase.go

@@ -10,4 +10,5 @@ func InitPurchase(r *gin.Engine)  {
 	rGroup := r.Group("purchase").Use(middleware.Token())
 
 	rGroup.GET("/list", purchase.List)
+	rGroup.GET("/detail", purchase.Detail)
 }

+ 31 - 0
services/activity/activity.go

@@ -224,5 +224,36 @@ func GetLatestActivity(permissionIds []int) (purchaseItem *purchase.PurchaseList
 		purchaseItem.Time = activityItem.ModifyTime
 	}
 
+	return
+}
+
+
+// GetList 从用户有权限参与的活动中,筛选出最新的活动
+func GetPurchaseList(permissionIds []int, offset, pageLimit int) (list []*purchase.Detail, err error)  {
+	// 获取用户权限可参与的活动ID
+	var artivityIds []int
+	permissions, err := yb_activity_permission.GetPermissionsByPermissionIds(permissionIds)
+	if err != nil {
+		return
+	}
+	for _, v := range permissions {
+		artivityIds = append(artivityIds, int(v.ActivityID))
+	}
+
+	activityList, err := yb_activity.GetListByIds(artivityIds, offset, pageLimit)
+	if err != nil {
+		return
+	}
+
+	for _, item := range activityList {
+		temp := new(purchase.Detail)
+		temp.ActivityId = item.ActivityID
+		temp.Title = fmt.Sprintf("主讲:%s", item.Speaker)
+		temp.Content = fmt.Sprintf("活动时间:%s  %s", item.ModifyTime, item.ModifyTime)
+		temp.Time = item.ModifyTime
+
+		list = append(list, temp)
+	}
+
 	return
 }

+ 24 - 18
services/purchase/purchase.go

@@ -7,21 +7,12 @@ import (
 	"hongze/hongze_yb/services/company"
 	"hongze/hongze_yb/services/report"
 	"hongze/hongze_yb/services/user"
-	"log"
 	"sort"
 )
 
 func GetLatestReportAndActivity(user user.UserInfo) (list purchase.PurchaseList, err error)  {
-	var tempErr error
-	defer func() {
-		if tempErr != nil {
-			err = tempErr
-			log.Print(err)
-			return
-		}
-	}()
-	permissionIds, tempErr := company.GetPurchasePermissionIdsByCompany2ProductId(user.CompanyID, 1)
-	if tempErr != nil {
+	permissionIds, err := company.GetPurchasePermissionIdsByCompany2ProductId(user.CompanyID, 1)
+	if err != nil {
 		return
 	}
 	if len(permissionIds) <= 0 {
@@ -29,13 +20,13 @@ func GetLatestReportAndActivity(user user.UserInfo) (list purchase.PurchaseList,
 		return
 	}
 
-	list, tempErr = report.GetLatestClassReport(permissionIds, user.UserID)
-	if tempErr != nil {
+	list, err = report.GetLatestClassReport(permissionIds, user.UserID)
+	if err != nil {
 		return
 	}
 
-	purItem, tempErr := activity2.GetLatestActivity(permissionIds)
-	if tempErr != nil {
+	purItem, err := activity2.GetLatestActivity(permissionIds)
+	if err != nil {
 		return
 	}
 
@@ -47,8 +38,23 @@ func GetLatestReportAndActivity(user user.UserInfo) (list purchase.PurchaseList,
 	return
 }
 
-
-
-
+// GetDetail 已购详情页面
+func GetDetail(user user.UserInfo, classifyNameFirst string, activityId, pageSize, pageLimit int) (list []*purchase.Detail, err error)  {
+	permissionIds, err := company.GetPurchasePermissionIdsByCompany2ProductId(user.CompanyID, 1)
+	if err != nil {
+		return
+	}
+	if len(permissionIds) <= 0 {
+		err = errors.New("用户无权限")
+		return
+	}
+	offset := (pageSize - 1) * pageLimit
+	if classifyNameFirst != "" {
+		list, err = report.GetPurchaseDetail(permissionIds, user.UserID, classifyNameFirst, offset, pageLimit)
+	}else if activityId > 0 {
+		list, err = activity2.GetPurchaseList(permissionIds, offset, pageLimit)
+	}
+	return
+}
 
 

+ 97 - 5
services/report/report.go

@@ -4,15 +4,18 @@ import (
 	"fmt"
 	"hongze/hongze_yb/models/response/purchase"
 	"hongze/hongze_yb/models/tables/chart_permission_chapter_mapping"
+	"hongze/hongze_yb/models/tables/rddp/classify"
 	"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"
+	report_view_log2 "hongze/hongze_yb/services/report_view_log"
+	"log"
 )
 
 func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*purchase.PurchaseListItem, err error)  {
 	//获取所有和权限绑定的报告
-	reportIds, err := chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds)
+	reportIds, err := GetReportIdsByPermisssionIds(permissionIds)
 	if err != nil {
 		return
 	}
@@ -52,7 +55,7 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 				if err != nil {
 					return
 				}
-				temp.Content = fmt.Sprintf("【第%d期|FICC|%s】%s", temp.Stage, chapter.TypeName, temp.ClassifyNameFirst)
+				temp.Content = fmt.Sprintf("【第%d期|FICC|%s】%s", temp.Stage, chapter.TypeName, temp.Title)
 			}else{
 				if temp.ClassifyIdSecond > 0 {     //包含二级分类
 					temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", temp.Stage, temp.ClassifyNameSecond, temp.ClassifyNameFirst)
@@ -69,6 +72,12 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 	return
 }
 
+// GetReportIdsByPermisssionIds 获取所有和权限绑定的报告
+func GetReportIdsByPermisssionIds(permissionIds []int) (reportIds []int, err error)   {
+	reportIds, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds)
+	return
+}
+
 // GetUnRead 获取未读数
 func GetUnRead(reportIds []int, userId uint64) (unReadItem map[string]int, err error) {
 	firstDay := "2022-01-01"
@@ -102,11 +111,94 @@ func GetUnRead(reportIds []int, userId uint64) (unReadItem map[string]int, err e
 				}
 			}
 		}
-		
-		unReadItem =make(map[string]int)
+
+		unReadItem = make(map[string]int)
 		for _, v := range reportMap {
-			unReadItem[v.ClassifyNameFirst] +=1
+			unReadItem[v.ClassifyNameFirst] += 1
 		}
 	}
 	return
 }
+
+// GetListByClassName 根据分类类型,分页获取报告
+func GetListByClassName(reportIds []int, className string, offset, limit int ) (list []*report.Report, err error)  {
+	list, err = report.GetListByIDsAndClassID(reportIds, className, offset, limit)
+	return
+}
+
+
+// GetPurchaseDetail 已购详情页面
+func GetPurchaseDetail(permissionIds []int, userId uint64, classifyNameFirst string, offset, pageLimit int) (list []*purchase.Detail, err error)  {
+	reportIds, tErr := GetReportIdsByPermisssionIds(permissionIds)
+	if tErr != nil {
+		err = tErr
+		return
+	}
+
+	if len(reportIds) > 0 {
+		//分类获取
+		reports, tErr := GetListByClassName(reportIds, classifyNameFirst, offset, pageLimit)
+		if tErr != nil {
+			err = tErr
+			return
+		}
+
+		//获取所有分类
+		classifys, tErr := classify.GetAll()
+		if tErr != nil {
+			err = tErr
+			return
+		}
+		classMap := make(map[int]string)
+		for _, v := range classifys {
+			classMap[v.Id] = v.ReportImgUrl
+		}
+		//查询有效的章节
+		var chapter *report_chapter.ReportChapter
+		typeIds, tErr := report_chapter_type.GetEffectTypeID()
+		if tErr != nil {
+			err = tErr
+			return
+		}
+		var viewReportIds []int
+
+		for _, v := range reports {
+			viewReportIds = append(viewReportIds, v.Id)
+			temp := new(purchase.Detail)
+			temp.ReportId = v.Id
+			temp.ClassifyIdFirst = v.ClassifyIdFirst
+			temp.ClassifyNameFirst = v.ClassifyNameFirst
+			temp.Title = v.Title
+			temp.ClassifyIdSecond = v.ClassifyIdSecond
+			temp.ClassifyNameSecond = v.ClassifyNameSecond
+			temp.ReportImgUrl, _ = classMap[temp.ClassifyIdFirst]
+			if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" {  //晨报或者周报,查询最新的章节信息
+				if len(typeIds) <= 0 {
+					continue
+				}
+				chapter, err = report_chapter.GetLatestChapterByReportId(v.Id, typeIds)
+				if err != nil {
+					return
+				}
+				temp.Content = fmt.Sprintf("【第%d期|FICC|%s】%s", temp.Stage, chapter.TypeName, temp.Title)
+			}else{
+				if temp.ClassifyIdSecond > 0 {     //包含二级分类
+					temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", temp.Stage, temp.ClassifyNameSecond, temp.ClassifyNameFirst)
+					temp.ReportImgUrl, _ = classMap[temp.ClassifyIdSecond]
+				} else {                   //无二级分类
+					temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.ClassifyNameFirst)
+				}
+			}
+			temp.Time = v.PublishTime
+			list = append(list, temp)
+		}
+	}
+
+	num, tErr := report_view_log2.BatchInsertReport(reportIds, userId, classifyNameFirst)
+	log.Printf("新增记录:%d", num)
+	if tErr != nil {
+		err = tErr
+		return
+	}
+	return
+}

+ 58 - 0
services/report_view_log/report_view_log.go

@@ -0,0 +1,58 @@
+package report_view_log
+
+import (
+	"hongze/hongze_yb/models/tables/rddp/report"
+	"hongze/hongze_yb/models/tables/rddp/report_view_log"
+	"time"
+)
+
+
+// BatchInsertReport 根据分类类型,分页获取报告
+func BatchInsertReport(reportIds []int, userId uint64, classifyNameFirst string) (num int, err error)  {
+	firstDay := "2022-01-01"
+	newReports, err := report.GetReportsByIDsAndDateAndClass(reportIds, classifyNameFirst, firstDay)
+	if err != nil {
+		return
+	}
+	var newIds []int
+	reportMap := make(map[int]int)
+	if len(newReports) > 0 {
+		for _, v := range newReports {
+			newIds = append(newIds, v.Id)
+			reportMap[v.Id] = v.Id
+		}
+		//获取用户的浏览记录
+		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)
+				}
+			}
+		}
+
+		var reportLogs []*report_view_log.ReportViewLog
+		for _, v := range reportMap{
+			temp := new(report_view_log.ReportViewLog)
+			temp.ReportId = v
+			temp.UserId = userId
+			temp.CreateTime = time.Now()
+			reportLogs = append(reportLogs, temp)
+		}
+		tErr = report_view_log.CreateInBatches(reportLogs)
+		if tErr != nil {
+			err = tErr
+			return
+		}
+		num = len(reportLogs)
+	}
+	return
+}
+
+