浏览代码

新增报告浏览记录,查询研报详情

xiexiaoyuan 3 年之前
父节点
当前提交
a6f0f15c52

+ 31 - 10
controller/purchase/purchase.go

@@ -1,8 +1,10 @@
 package purchase
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
 	"hongze/hongze_yb/controller/response"
+	"hongze/hongze_yb/global"
 	"hongze/hongze_yb/services/purchase"
 	userService "hongze/hongze_yb/services/user"
 	"strconv"
@@ -17,7 +19,8 @@ func List(c *gin.Context) {
 	}
 	list, err := purchase.GetLatestReportAndActivity(userinfo)
 	if err !=nil {
-		response.Fail("获取已购列表失败", c)
+		response.Fail(err.Error(), c)
+		global.LOG.Critical(fmt.Sprintf("userId=%d, errMsg:%s", userinfo.UserID, err.Error()))
 		return
 	}
 
@@ -25,16 +28,33 @@ func List(c *gin.Context) {
 }
 
 func Detail(c *gin.Context)  {
-	classifyNameFirst := c.DefaultQuery("classify_name_first", "")
-	reqPageSize := c.DefaultQuery("page_size", "1")
-	reqPageLimit := c.DefaultQuery("page_limit", "10")
+    classifyNameFirst := c.DefaultQuery("classify_name_first", "")
+	reqPageSize := c.DefaultQuery("page", "1")
+	reqPageLimit := c.DefaultQuery("limit", "10")
 	reqActivityId := c.DefaultQuery("activity_id", "")
 
-	pageSize, _ := strconv.Atoi(reqPageSize)
-	pageLimit, _ := strconv.Atoi(reqPageLimit)
-	activityId, _ := strconv.Atoi(reqActivityId)
+	pageSize, err := strconv.Atoi(reqPageSize)
+	if err != nil {
+		response.Fail("请输入正确的页码", c)
+		return
+	}
+	pageLimit, err := strconv.Atoi(reqPageLimit)
+	if err != nil {
+		response.Fail("请输入正确的条数限制", c)
+		return
+	}
+
+	var activityId int
+	if reqActivityId != "" {
+		activityId, err = strconv.Atoi(reqActivityId)
+		if err != nil {
+			response.Fail("请输入正确的活动序号", c)
+			return
+		}
+	}
+
 	if classifyNameFirst == "" && activityId == 0 {
-		response.Fail("请输入分类类型或者活动类型", c)
+		response.Fail("请输入分类类型或者活动序号", c)
 		return
 	}
 	// 判断用户是否有已购权限
@@ -44,8 +64,9 @@ func Detail(c *gin.Context)  {
 		return
 	}
 	list, err := purchase.GetDetail(userinfo, classifyNameFirst, activityId, pageSize, pageLimit)
-	if err !=nil {
-		response.Fail("获取已购列表失败", c)
+	if err != nil {
+		response.Fail(err.Error(), c)
+		global.LOG.Critical(fmt.Sprintf("userId=%d, errMsg:%s", userinfo.UserID, err.Error()))
 		return
 	}
 

+ 30 - 0
controller/report/report.go

@@ -1 +1,31 @@
 package report
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/response"
+	"hongze/hongze_yb/services/report"
+	userService "hongze/hongze_yb/services/user"
+	"strconv"
+)
+
+func Detail(c *gin.Context)  {
+	reqReportId := c.DefaultQuery("report_id", "")
+	if reqReportId == ""{
+		response.Fail("请输入报告ID", c)
+		return
+	}
+	reportId, err := strconv.Atoi(reqReportId)
+	if err != nil {
+		response.Fail("报告ID格式有误", c)
+		return
+	}
+	userinfo := userService.GetInfoByClaims(c)
+
+	reportDetail, err := report.GetReportDetail(userinfo, reportId)
+	if err != nil {
+		response.Fail(err.Error(), c)
+		return
+	}
+	response.OkData("查询成功", reportDetail, c )
+	return
+}

+ 2 - 1
init_serve/router.go

@@ -47,6 +47,7 @@ func InitRouter() (r *gin.Engine) {
 	routers.InitCompany(r)
 	// 已购页面相关路由
 	routers.InitPurchase(r)
-
+	// 研报相关路由
+	routers.InitReport(r)
 	return
 }

+ 12 - 0
models/response/report.go

@@ -0,0 +1,12 @@
+package response
+
+import (
+	"hongze/hongze_yb/models/tables/rddp/report"
+	"hongze/hongze_yb/services/company"
+)
+
+type ReportDetail struct {
+	ReportInfo          *report.Report  `json:"report_info"`
+	PermissionCheck     *company.PermissionCheckInfo    `json:"permission_check"`
+}
+

+ 17 - 1
models/tables/chart_permission_chapter_mapping/query.go

@@ -7,7 +7,7 @@ import (
 // GetReportIdsByPermisssionIds 根据权限ID筛选报告ID, rddp 类型表示新后台新增的报告,区分老后台
 func GetReportIdsByPermisssionIds(permissionIds []int) (reportIds []int, err error)  {
 	var charPermissionMapping []*ChartPermissionChapterMapping
-	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).Where("chart_permission_id in (?) AND research_type = 'rddp' ", permissionIds).Scan(&charPermissionMapping).Error
+	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).Select("DISTINCT report_chapter_type_id ").Where("chart_permission_id in (?) AND research_type = 'rddp' ", permissionIds).Scan(&charPermissionMapping).Error
 	if err != nil {
 		return
 	}
@@ -15,4 +15,20 @@ func GetReportIdsByPermisssionIds(permissionIds []int) (reportIds []int, err err
 		reportIds = append(reportIds, v.ReportChapterTypeId)
 	}
 	return
+}
+
+// GetPermissionIdsByReportId 根据报告ID筛选出对应的权限
+func GetPermissionIdsByReportId(reportId int) (permissionIds []int, err error)  {
+	var charPermissionMapping []*ChartPermissionChapterMapping
+	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).
+		Select("DISTINCT chart_permission_id").
+		Where("report_chapter_type_id = ?", reportId).
+		Scan(&charPermissionMapping).Error
+	if err != nil {
+		return
+	}
+	for _, v := range charPermissionMapping {
+		permissionIds = append(permissionIds, v.ChartPermissionId)
+	}
+	return
 }

+ 2 - 2
models/tables/rddp/classify/classify.go

@@ -3,8 +3,8 @@ package classify
 import "time"
 
 type Classify struct {
-	Id               int
-	ClassifyName     string
+	Id               int  	`gorm:"primaryKey;column:report_chapter_id;type:int(10) unsigned;not null" json:"-"`
+	ClassifyName     string `gorm:"column:class_name" json:"classify_name"`
 	Sort			 int8
 	ParentId		 int
 	CreateTime       time.Time

+ 9 - 3
models/tables/rddp/report/query.go

@@ -29,7 +29,7 @@ GROUP BY
 func GetReportsByIDsAndDate( ids []int, publishTime string) (reportList []*Report, err 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
+		Where("id in (?) and state = 2 and publish_time > ? ", ids, publishTime).Scan(&reportList).Error
 	return
 }
 
@@ -37,11 +37,11 @@ func GetReportsByIDsAndDate( ids []int, publishTime string) (reportList []*Repor
 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
+		Where("id in (?) and state = 2 and classify_name_first = ? and publish_time > ? ", ids, classifyNameFirst, publishTime).Scan(&reportList).Error
 	return
 }
 
-//分页查询
+// GetListByIDsAndClassID 分页查询
 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").
@@ -51,4 +51,10 @@ func GetListByIDsAndClassID( ids []int, classifyNameFirst string,  offset , limi
 		Limit(limit).
 		Scan(&reportList).Error
 	return
+}
+
+// GetByReportId 根据id获取报告
+func GetByReportId(id int) (item *Report, err error) {
+	err = global.MYSQL["rddp"].Where("id = ? and state = 2", id).First(&item).Error
+	return
 }

+ 22 - 22
models/tables/rddp/report/report.go

@@ -3,28 +3,28 @@ package report
 import "time"
 
 type Report struct {
-	Id                 int    `orm:"column(id)" description:"报告Id"`
-	AddType            int    `description:"新增方式:1:新增报告,2:继承报告"`
-	ClassifyIdFirst    int    `description:"一级分类id"`
-	ClassifyNameFirst  string `description:"一级分类名称"`
-	ClassifyIdSecond   int    `description:"二级分类id"`
-	ClassifyNameSecond string `description:"二级分类名称"`
-	Title              string `description:"标题"`
-	Abstract           string `description:"摘要"`
-	Author             string `description:"作者"`
-	Frequency          string `description:"频度"`
-	CreateTime         string `description:"创建时间"`
-	ModifyTime         time.Time `description:"修改时间"`
-	State              int    `description:"1:未发布,2:已发布"`
-	PublishTime        time.Time `description:"发布时间"`
-	Stage              int    `description:"期数"`
-	MsgIsSend          int    `description:"消息是否已发送,0:否,1:是"`
-	Content            string `description:"内容"`
-	VideoUrl           string `description:"音频文件URL"`
-	VideoName          string `description:"音频文件名称"`
-	VideoPlaySeconds   string `description:"音频播放时长"`
-	ContentSub         string `description:"内容前两个章节"`
-	ThsMsgIsSend       int    `description:"客户群消息是否已发送,0:否,1:是"`
+	Id                 int    `orm:"column(id)" description:"报告Id" json:"_"`
+	AddType            int    `description:"新增方式:1:新增报告,2:继承报告" json:"add_type"`
+	ClassifyIdFirst    int    `description:"一级分类id" json:"classify_id_first"`
+	ClassifyNameFirst  string `description:"一级分类名称" json:"classify_name_first"`
+	ClassifyIdSecond   int    `description:"二级分类id" json:"classify_id_second"`
+	ClassifyNameSecond string `description:"二级分类名称" json:"classify_name_second"`
+	Title              string `description:"标题" json:"title"`
+	Abstract           string `description:"摘要" json:"abstract"`
+	Author             string `description:"作者" json:"author"`
+	Frequency          string `description:"频度" json:"frequency"`
+	CreateTime         string `description:"创建时间" json:"create_time"`
+	ModifyTime         time.Time `description:"修改时间" json:"modify_time"`
+	State              int    `description:"1:未发布,2:已发布" json:"state"`
+	PublishTime        time.Time `description:"发布时间" json:"publish_time"`
+	Stage              int    `description:"期数" json:"stage"`
+	MsgIsSend          int    `description:"消息是否已发送,0:否,1:是" json:"msg_is_send"`
+	Content            string `description:"内容" json:"content"`
+	VideoUrl           string `description:"音频文件URL" json:"video_url"`
+	VideoName          string `description:"音频文件名称" json:"video_name"`
+	VideoPlaySeconds   string `description:"音频播放时长" json:"video_play_seconds"`
+	ContentSub         string `description:"内容前两个章节" json:"content_sub"`
+	ThsMsgIsSend       int    `description:"客户群消息是否已发送,0:否,1:是" json:"ths_msg_is_send"`
 }
 
 type UnReadItem struct {

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

@@ -73,6 +73,14 @@ func GetOneById(activityId int) (activity *YbActivity, err error) {
 	return
 }
 
+// GetActivityByIDsAndDate 根据时间和活动ID筛选出合适的记录
+func GetActivityByIDsAndDate( ids []int, publishTime string) (list []*YbActivity, err error) {
+	err = global.DEFAULT_MYSQL.Model(YbActivity{}).
+		Select("DISTINCT activity_id").
+		Where("activity_id in (?) and publish_status = 1 and create_time > ? and is_delete = 0", ids, publishTime).Scan(&list).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

+ 9 - 0
models/tables/yb_activity_view_log/create.go

@@ -0,0 +1,9 @@
+package yb_activity_view_log
+
+import "hongze/hongze_yb/global"
+
+// CreateInBatches 批量新增活动提醒记录
+func CreateInBatches(activityLogs []*YbActivityViewLog) (err error) {
+	err = global.DEFAULT_MYSQL.Model(YbActivityViewLog{}).CreateInBatches(activityLogs, len(activityLogs)).Error
+	return
+}

+ 19 - 0
models/tables/yb_activity_view_log/query.go

@@ -0,0 +1,19 @@
+package yb_activity_view_log
+
+import "hongze/hongze_yb/global"
+
+// GetByActivityIdsAndUserIdAndTime 根据用户id和 活动id,创建时间筛选出用户已经浏览过的记录
+func GetByActivityIdsAndUserIdAndTime( activityIds []int, userId uint64, createTime string) (actIds []int, err error)   {
+	var viewLog []*YbActivityViewLog
+	err = global.DEFAULT_MYSQL.Model(YbActivityViewLog{}).Where("activity_id in (?) and user_id = ? and create_time > ?", activityIds, userId, createTime).Scan(&viewLog).Error
+	if err != nil {
+		return
+	}
+
+	if len(viewLog) > 0 {
+		for _, v := range viewLog {
+			actIds = append(actIds, v.ActivityId)
+		}
+	}
+	return
+}

+ 16 - 0
models/tables/yb_activity_view_log/yb_activity_view_log.go

@@ -0,0 +1,16 @@
+package yb_activity_view_log
+
+import (
+	"time"
+)
+
+type YbActivityViewLog 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"`
+	ActivityId          int 		 `gorm:"column:activity_id;type:int(11)"  json:"activity_id"`
+	CreateTime          time.Time    `gorm:"column:create_time;type:datetime"  json:"create_time"`
+}
+
+func (activityLog *YbActivityViewLog) TableName() string  {
+	return "yb_activity_view_log"
+}

+ 12 - 0
routers/report.go

@@ -0,0 +1,12 @@
+package routers
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/report"
+	"hongze/hongze_yb/middleware"
+)
+
+func InitReport(r *gin.Engine)  {
+	rGroup := r.Group("report").Use(middleware.Token())
+	rGroup.GET("/detail", report.Detail)
+}

+ 71 - 9
services/activity/activity.go

@@ -5,6 +5,8 @@ import (
 	"gorm.io/gorm"
 	"hongze/hongze_yb/models/response/purchase"
 	"hongze/hongze_yb/models/tables/company_product"
+	"hongze/hongze_yb/models/tables/rddp/report"
+	"hongze/hongze_yb/models/tables/rddp/report_view_log"
 	"hongze/hongze_yb/models/tables/yb_activity"
 	"hongze/hongze_yb/models/tables/yb_activity_permission"
 	"hongze/hongze_yb/models/tables/yb_activity_register"
@@ -200,28 +202,33 @@ func GetUserAuthActivityIds(userInfo user.UserInfo) (acrivityIds []int, err erro
 }
 
 // GetLatestActivity 从用户有权限参与的活动中,筛选出最新的活动
-func GetLatestActivity(permissionIds []int) (purchaseItem *purchase.PurchaseListItem, err error)  {
+func GetLatestActivity(permissionIds []int, userId uint64) (purchaseItem *purchase.PurchaseListItem, err error)  {
 	// 获取用户权限可参与的活动ID
-	var artivityIds []int
+	var activityIds []int
 	permissions, err := yb_activity_permission.GetPermissionsByPermissionIds(permissionIds)
 	if err != nil {
 		return
 	}
 	for _, v := range permissions {
-		artivityIds = append(artivityIds, int(v.ActivityID))
+		activityIds = append(activityIds, int(v.ActivityID))
 	}
 
-	activityItem, err := yb_activity.GetLatestByIds(artivityIds)
+	activityItem, err := yb_activity.GetLatestByIds(activityIds)
 	if err != nil {
 		return
 	}
-
+	//统计未读数
+	unRead, err := GetUnRead(activityIds, userId)
+	if err != nil{
+		return
+	}
 	purchaseItem = new(purchase.PurchaseListItem)
 	if activityItem.ActivityID > 0 {
 		purchaseItem.ActivityId = activityItem.ActivityID
 		purchaseItem.Title = activityItem.ActivityName
 		purchaseItem.Content = fmt.Sprintf("主讲:%s", activityItem.Speaker)
 		purchaseItem.Time = activityItem.ModifyTime
+		purchaseItem.Unread = unRead
 	}
 
 	return
@@ -229,18 +236,18 @@ func GetLatestActivity(permissionIds []int) (purchaseItem *purchase.PurchaseList
 
 
 // GetList 从用户有权限参与的活动中,筛选出最新的活动
-func GetPurchaseList(permissionIds []int, offset, pageLimit int) (list []*purchase.Detail, err error)  {
+func GetPurchaseDetail(permissionIds []int, userId uint64,  offset, pageLimit int) (list []*purchase.Detail, err error)  {
 	// 获取用户权限可参与的活动ID
-	var artivityIds []int
+	var activityIds []int
 	permissions, err := yb_activity_permission.GetPermissionsByPermissionIds(permissionIds)
 	if err != nil {
 		return
 	}
 	for _, v := range permissions {
-		artivityIds = append(artivityIds, int(v.ActivityID))
+		activityIds = append(activityIds, int(v.ActivityID))
 	}
 
-	activityList, err := yb_activity.GetListByIds(artivityIds, offset, pageLimit)
+	activityList, err := yb_activity.GetListByIds(activityIds, offset, pageLimit)
 	if err != nil {
 		return
 	}
@@ -274,5 +281,60 @@ func GetPurchaseList(permissionIds []int, offset, pageLimit int) (list []*purcha
 		list = append(list, temp)
 	}
 
+	num, tErr := BatchInsertActivityView(activityIds, userId)
+	log.Printf("新增活动浏览记录:%d", num)
+	if tErr != nil {
+		err = tErr
+		return
+	}
+	return
+}
+
+
+// BatchInsertReportView 批量新增活动已读记录
+func BatchInsertReportView(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
 }

+ 95 - 0
services/activity/activity_view_log.go

@@ -0,0 +1,95 @@
+package activity
+
+import (
+	"hongze/hongze_yb/models/tables/yb_activity"
+	"hongze/hongze_yb/models/tables/yb_activity_view_log"
+	"time"
+)
+
+// GetUnRead 获取未读数
+func GetUnRead( activityIds []int, userId uint64) (unRead int, err error) {
+	firstDay := "2022-01-01"
+	newActivityList, err := yb_activity.GetActivityByIDsAndDate(activityIds, firstDay)
+	if err != nil {
+		return
+	}
+	var newIds []int
+	activityMap := make(map[int]bool)
+	if len(newActivityList) > 0 {
+		for _, v := range newActivityList {
+			newIds = append(newIds, v.ActivityID)
+			activityMap[v.ActivityID] = true
+		}
+
+		//获取用户的浏览记录
+		viewActivityIds, tErr := yb_activity_view_log.GetByActivityIdsAndUserIdAndTime(newIds, userId, firstDay)
+		if tErr != nil {
+			err = tErr
+			return
+		}
+
+		//过滤已经浏览过的活动ID
+		if len(viewActivityIds) > 0 {
+			for _, item := range viewActivityIds {
+				if _, ok := activityMap[item]; ok {
+					delete(activityMap, item)
+				}
+			}
+		}
+
+		unRead = len(activityMap)
+	}
+	return
+}
+
+// BatchInsertActivityView 批量新增报告已读记录
+func BatchInsertActivityView(activityIds []int, userId uint64) (num int, err error)  {
+	firstDay := "2022-01-01"
+	newActivityList, err := yb_activity.GetActivityByIDsAndDate(activityIds, firstDay)
+	if err != nil {
+		return
+	}
+	var newIds []int
+	activityMap := make(map[int]bool)
+	if len(newActivityList) > 0 {
+		for _, v := range newActivityList {
+			newIds = append(newIds, v.ActivityID)
+			activityMap[v.ActivityID] = true
+		}
+
+		//获取用户的浏览记录
+		viewActivityIds, tErr := yb_activity_view_log.GetByActivityIdsAndUserIdAndTime(newIds, userId, firstDay)
+		if tErr != nil {
+			err = tErr
+			return
+		}
+
+		//过滤已经浏览过的活动ID
+		if len(viewActivityIds) > 0 {
+			for _, item := range viewActivityIds {
+				if _, ok := activityMap[item]; ok {
+					delete(activityMap, item)
+				}
+			}
+		}
+
+		var logs []*yb_activity_view_log.YbActivityViewLog
+		for k, _ := range activityMap{
+			temp := new(yb_activity_view_log.YbActivityViewLog)
+			temp.ActivityId = k
+			temp.UserId = userId
+			temp.CreateTime = time.Now()
+			logs = append(logs, temp)
+		}
+		tErr = yb_activity_view_log.CreateInBatches(logs)
+		if tErr != nil {
+			err = tErr
+			return
+		}
+		num = len(logs)
+	}
+	return
+}
+
+
+

+ 1 - 0
services/company/permission.go

@@ -71,6 +71,7 @@ type PermissionCheckInfo struct {
 	Mobile       string       `json:"mobile" description:"手机号"`
 	Type         string       `json:"type" description:"校验失败,没有权限,需要让前端处理的类型,枚举值:apply,contact"`
 	CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
+	AuthOk       int8          `json:"auth_ok" description:"是有有权限: 1:有,0:没有"`
 }
 
 // CustomerInfo 客户信息

+ 2 - 3
services/purchase/purchase.go

@@ -19,13 +19,12 @@ func GetLatestReportAndActivity(user user.UserInfo) (list purchase.PurchaseList,
 		err = errors.New("用户无权限")
 		return
 	}
-
 	list, err = report.GetLatestClassReport(permissionIds, user.UserID)
 	if err != nil {
 		return
 	}
 
-	purItem, err := activity2.GetLatestActivity(permissionIds)
+	purItem, err := activity2.GetLatestActivity(permissionIds, user.UserID)
 	if err != nil {
 		return
 	}
@@ -52,7 +51,7 @@ func GetDetail(user user.UserInfo, classifyNameFirst string, activityId, pageSiz
 	if classifyNameFirst != "" {
 		list, err = report.GetPurchaseDetail(permissionIds, user.UserID, classifyNameFirst, offset, pageLimit)
 	}else if activityId > 0 {
-		list, err = activity2.GetPurchaseList(permissionIds, offset, pageLimit)
+		list, err = activity2.GetPurchaseDetail(permissionIds, user.UserID, offset, pageLimit)
 	}
 	return
 }

+ 43 - 50
services/report/report.go

@@ -2,19 +2,20 @@ package report
 
 import (
 	"fmt"
+	"hongze/hongze_yb/models/response"
 	"hongze/hongze_yb/models/response/purchase"
 	"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"
-	report_view_log2 "hongze/hongze_yb/services/report_view_log"
+	"hongze/hongze_yb/services/company"
+	"hongze/hongze_yb/services/user"
 	"log"
 )
 
 func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*purchase.PurchaseListItem, err error)  {
 	//获取所有和权限绑定的报告
-	reportIds, err := GetReportIdsByPermisssionIds(permissionIds)
+	reportIds, err := GetReportIdsByPermissionIds(permissionIds)
 	if err != nil {
 		return
 	}
@@ -71,53 +72,13 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 	return
 }
 
-// GetReportIdsByPermisssionIds 获取所有和权限绑定的报告
-func GetReportIdsByPermisssionIds(permissionIds []int) (reportIds []int, err error)   {
+// GetReportIdsByPermissionIds 获取所有和权限绑定的报告
+func GetReportIdsByPermissionIds(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"
-	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
-}
 
 // GetListByClassName 根据分类类型,分页获取报告
 func GetListByClassName(reportIds []int, className string, offset, limit int ) (list []*report.Report, err error)  {
@@ -128,9 +89,8 @@ func GetListByClassName(reportIds []int, className string, offset, limit int ) (
 
 // 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
+	reportIds, err := GetReportIdsByPermissionIds(permissionIds)
+	if err != nil {
 		return
 	}
 
@@ -185,11 +145,44 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyNameFirst str
 		}
 	}
 
-	num, tErr := report_view_log2.BatchInsertReport(reportIds, userId, classifyNameFirst)
-	log.Printf("新增记录:%d", num)
+	num, tErr := BatchInsertReportView(reportIds, userId, classifyNameFirst)
+	log.Printf("新增报告浏览记录:%d", num)
 	if tErr != nil {
 		err = tErr
 		return
 	}
 	return
 }
+
+// 获取报告详情
+func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail response.ReportDetail, err error) {
+	reportInfo, err := report.GetByReportId(reportId)
+	if err != nil {
+		return
+	}
+
+	//判断权限
+	permissionCheckInfo, err := CheckReportPermission(userinfo, reportId)
+	if err != nil {
+		return
+	}
+	reportDetail.ReportInfo = reportInfo
+	reportDetail.PermissionCheck = &permissionCheckInfo
+	return
+}
+
+// CheckReportPermission 验证用户的活动参与权限
+func CheckReportPermission(userInfo user.UserInfo, reportId int) (permissionCheckInfo company.PermissionCheckInfo, err error) {
+	permissionIds, err := chart_permission_chapter_mapping.GetPermissionIdsByReportId(reportId)
+	if err != nil {
+		return
+	}
+	ok, permissionCheckInfo, err := company.CheckPermissionByPermissionIdList2Ficc(userInfo.CompanyID, int(userInfo.UserID), permissionIds)
+	if err != nil {
+		return
+	}
+	if ok {
+		permissionCheckInfo.AuthOk = 1
+	}
+	return
+}

+ 100 - 0
services/report/report_view_log.go

@@ -0,0 +1,100 @@
+package report
+
+import (
+	"hongze/hongze_yb/models/tables/rddp/report"
+	"hongze/hongze_yb/models/tables/rddp/report_view_log"
+	"time"
+)
+
+
+// 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
+}
+
+// BatchInsertReportView 批量新增报告已读记录
+func BatchInsertReportView(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
+}
+
+

+ 0 - 58
services/report_view_log/report_view_log.go

@@ -1,58 +0,0 @@
-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
-}
-
-