Browse Source

周报新增权限判断

xiexiaoyuan 3 years ago
parent
commit
cafd8ac3eb

+ 1 - 0
controller/purchase/purchase.go

@@ -63,6 +63,7 @@ func Detail(c *gin.Context)  {
 		response.Fail("无权操作", c)
 		return
 	}
+
 	list, err := purchase.GetDetail(userinfo, classifyNameFirst, activityId, pageSize, pageLimit)
 	if err != nil {
 		response.Fail(err.Error(), c)

+ 37 - 2
models/response/report.go

@@ -1,12 +1,47 @@
 package response
 
 import (
-	"hongze/hongze_yb/models/tables/rddp/report"
 	"hongze/hongze_yb/services/company"
+	"time"
 )
 
 type ReportDetail struct {
-	ReportInfo          *report.Report  `json:"report_info"`
+	ReportInfo          *ReportItem  `json:"report_info"`
+	ReportTypeList        []*ReportTypeListItem `json:"report_type_list"`
 	PermissionCheck     *company.PermissionCheckInfo    `json:"permission_check"`
 }
 
+type ReportTypeListItem struct {
+	ReportTypeId    uint64    `json:"report_type_id"`
+	ReportId        int    `json:"report_id"`
+	Title           string    `json:"title"`
+	TypeId                  int         `json:"type_id"`
+	Edit                    int8        `json:"edit"`
+	Trend                   string      `json:"trend"`
+	ReportChapterTypeKey    string      `json:"report_chapter_type_key"`
+	ReportChapterTypeThumb  string	    `json:"report_chapter_type_thumb"`
+	BannerUrl               string     	`json:"banner_url"`
+	ReportChapterTypeName   string       `json:"report_chapter_type_name"`
+	Sort                    int          `json:"sort"`
+	EditImgUrl              string       `json:"edit_img_url"`
+	PauseStartTime          time.Time    `json:"pause_start_time"`
+	PauseEndTime            time.Time    `json:"pause_end_time"`
+	PublishTime         time.Time    `json:"publish_time"`
+}
+
+type ReportItem struct {
+	ReportId           int    `json:"report_id"`
+	ClassifyNameFirst  string `description:"一级分类名称" json:"classify_name_first"`
+	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"`
+	PublishTime        time.Time `description:"发布时间" json:"publish_time"`
+	Stage              int    `description:"期数" json:"stage"`
+	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"`
+}

+ 2 - 2
models/tables/chart_permission_chapter_mapping/query.go

@@ -5,9 +5,9 @@ import (
 )
 
 // GetReportIdsByPermisssionIds 根据权限ID筛选报告ID, rddp 类型表示新后台新增的报告,区分老后台
-func GetReportIdsByPermisssionIds(permissionIds []int) (reportIds []int, err error)  {
+func GetReportIdsByPermisssionIds(permissionIds []int, researchType string) (reportIds []int, err error)  {
 	var charPermissionMapping []*ChartPermissionChapterMapping
-	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
+	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).Select("DISTINCT report_chapter_type_id ").Where("chart_permission_id in (?) AND research_type = ? ", permissionIds, researchType).Scan(&charPermissionMapping).Error
 	if err != nil {
 		return
 	}

+ 17 - 0
models/tables/rddp/report/query.go

@@ -53,8 +53,25 @@ func GetListByIDsAndClassID( ids []int, classifyNameFirst string,  offset , limi
 	return
 }
 
+// GetListByClass 按照类型分页查询
+func GetListByClass(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("classify_name_first=? and state = 2 ", classifyNameFirst).
+		Order("publish_time desc, id desc").
+		Offset(offset).
+		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
+}
+
+func GetLatestDay() (item *Report, err error) {
+	err = global.MYSQL["rddp"].Where("state = 2 and classify_name_first= 'day'").Order("publish_time desc, id desc").First(&item).Error
+	return
 }

+ 58 - 3
models/tables/rddp/report_chapter/query.go

@@ -1,6 +1,8 @@
 package report_chapter
 
-import "hongze/hongze_yb/global"
+import (
+	"hongze/hongze_yb/global"
+)
 
 func GetLatestChapterByReportId(reportID int, typeIds []int) (reportChapter *ReportChapter, err error) {
 	sql := `SELECT
@@ -12,14 +14,67 @@ func GetLatestChapterByReportId(reportID int, typeIds []int) (reportChapter *Rep
 	type_name,
 	report_chapter_id
 FROM
-	report_chapter_type
+	report_chapter
 WHERE
 	report_id = ?
 	AND type_id IN (?) 
 	AND publish_state = 2 
-	AND edit = 1
+	AND is_edit = 1
 ORDER BY
 	publish_time desc`
 	err = global.MYSQL["rddp"].Raw(sql, reportID, typeIds).First(&reportChapter).Error
 	return
+}
+
+
+func GetLatestChapterByIdsAndClass(typeIds []int, classifyNameFirst string) (reportChapter *ReportChapter, err error) {
+	sql := `SELECT
+	max( publish_time ) as publish_time,
+	classify_id_first,
+	classify_name_first,
+	title,
+	type_id,
+	type_name,
+	report_chapter_id
+FROM
+	report_chapter
+WHERE
+	type_id IN (?) 
+	AND publish_state = 2 
+	AND is_edit = 1
+	AND classify_name_first = ?
+ORDER BY
+	publish_time desc`
+	err = global.MYSQL["rddp"].Raw(sql, typeIds, classifyNameFirst).First(&reportChapter).Error
+	return
+}
+
+// GetListByReportId 根据报告ID获取章节列表
+func GetListByReportId(reportId int) (list []*ReportChapter, err error)  {
+	err = global.MYSQL["rddp"].Select("report_chapter_id, type_id, type_name, abstract, title, author, publish_time").
+		Where("report_id = ? and is_edit = 1 AND publish_state = 2 ", reportId).
+		Order("sort, report_chapter_id").
+		Scan(&list).Error
+	return
+}
+
+// GetDetailByReportId 根据报告ID获取章节详情
+func GetDetailByReportId(reportId int, typeId int) (info *ReportChapter, err error)  {
+	err = global.MYSQL["rddp"].Select("report_chapter_id, content, trend, type_id, type_name, abstract, title, author, publish_time").
+		Where("report_id = ? and type_id = ? and is_edit = 1 AND publish_state = 2 ", reportId, typeId).
+		First(&info).Error
+	return
+}
+
+// GetReportIdsByIdsAndClass 根据章节ID获取报告ID
+func GetReportIdsByIdsAndClass(typeIds []int, classifyNameFirst string) (reportIds []int, err error) {
+	var list []*ReportChapter
+	err = global.MYSQL["rddp"].Select("DISTINCT report_id").Where("type_id = (?) and publish_state = 2 AND is_edit = 1 AND classify_name_first= ? ", typeIds, classifyNameFirst).Scan(&list).Error
+	if err != nil {
+		return
+	}
+	for _, v := range list {
+		reportIds = append(reportIds, v.ReportId)
+	}
+	return
 }

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

@@ -19,7 +19,7 @@ type ReportChapter struct {
 	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"`                                   //排序:数值越小越靠前
-	PublishState        int       `gorm:"column:publish_state;type:int(4);not null;default:'0'"  json:"publish_state"`                 //发布状态1-待发布2-已发布
+	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
 	VideoName           string    `gorm:"column:video_name;type:varchar(255);not null;default:''"  json:"video_name"`                  //音频文件名称

+ 8 - 0
models/tables/rddp/report_view_record/create.go

@@ -0,0 +1,8 @@
+package report_view_record
+
+import "hongze/hongze_yb/global"
+
+func Create(record *ReportViewRecord) (err error)  {
+	err =  global.MYSQL["rddp"].Create(record).Error
+	return
+}

+ 18 - 0
models/tables/rddp/report_view_record/report_view_record.go

@@ -0,0 +1,18 @@
+package report_view_record
+
+import "time"
+
+type ReportViewRecord struct {
+	Id          int       `orm:"column(id);pk"`
+	UserId      int       `description:"用户id"`
+	ReportId    int       `description:"报告id"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	RealName    string    `description:"用户实际姓名"`
+	CompanyName string    `description:"公司名称"`
+	CreateTime  time.Time `description:"创建时间"`
+}
+
+func (r *ReportViewRecord) TableName() string  {
+	return "report_view_record"
+}

+ 8 - 1
models/tables/report_chapter_type/query.go

@@ -4,7 +4,7 @@ import "hongze/hongze_yb/global"
 
 func GetEffectTypeID() (chapterIds []int, err error ) {
 	var chapterList []*ReportChapterType
-	err = global.DEFAULT_MYSQL.Model(ReportChapterType{}).Select("report_chapter_type_id").Where("is_show=1").Scan(&chapterList).Error
+	err = global.DEFAULT_MYSQL.Model(ReportChapterType{}).Select("report_chapter_type_id ").Where("is_show=1").Scan(&chapterList).Error
 	if err != nil {
 		return
 	}
@@ -15,3 +15,10 @@ func GetEffectTypeID() (chapterIds []int, err error ) {
 	}
 	return
 }
+
+
+func GetEffectTypes() (list []*ReportChapterType, err error ) {
+	err = global.DEFAULT_MYSQL.Model(ReportChapterType{}).Select("report_chapter_type_id ").Where("is_show=1").Scan(&list).Error
+	return
+}
+

+ 8 - 0
models/tables/wx_user/update.go

@@ -30,3 +30,11 @@ func ModifyFirstLogin(userId uint64) (err error) {
 	}).Error
 	return
 }
+
+// SetWxUserReportLastViewTime 修改最新阅读时间
+func (wxUser *WxUser) SetWxUserReportLastViewTime() (err error) {
+	wxUser.ReportLastViewTime = time.Now()
+	var updateCols = []string{"ReportLastViewTime"}
+	err = wxUser.Update(updateCols)
+	return
+}

+ 1 - 1
models/tables/wx_user/wx_user.go

@@ -59,7 +59,7 @@ type WxUser struct {
 }
 
 // TableName get sql table name.获取数据库表名
-func (m *WxUser) TableName() string {
+func (wxUser *WxUser) TableName() string {
 	return "wx_user"
 }
 

+ 1 - 2
services/purchase/purchase.go

@@ -43,7 +43,7 @@ func GetDetail(user user.UserInfo, classifyNameFirst string, activityId, pageSiz
 	if err != nil {
 		return
 	}
-	if len(permissionIds) <= 0 {
+	if len(permissionIds) <= 0 && classifyNameFirst != "晨报" {
 		err = errors.New("用户无权限")
 		return
 	}
@@ -56,4 +56,3 @@ func GetDetail(user user.UserInfo, classifyNameFirst string, activityId, pageSiz
 	return
 }
 
-

+ 155 - 53
services/report/report.go

@@ -10,6 +10,7 @@ import (
 	"hongze/hongze_yb/models/tables/report_chapter_type"
 	"hongze/hongze_yb/services/company"
 	"hongze/hongze_yb/services/user"
+	"hongze/hongze_yb/utils"
 	"log"
 )
 
@@ -19,25 +20,48 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 	if err != nil {
 		return
 	}
-	if len(reportIds) > 0 {
-		reports, tErr := report.GetLatestClassReportsByIDs(reportIds)
-		if tErr != nil {
-			err = tErr
-			return
-		}
-		//查询有效的章节
-		var chapter *report_chapter.ReportChapter
-		typeIds, tErr := report_chapter_type.GetEffectTypeID()
-		if tErr != nil {
-			err = tErr
+	typeIds, tErr := report_chapter_type.GetEffectTypeID()
+	if tErr != nil {
+		err = tErr
+		return
+	}
+	//获取最新的晨报
+	dayReport, err := report.GetLatestDay()
+	if err != nil {
+		if err == utils.ErrNoRow {
+			dayReport = nil
+		}else{
 			return
 		}
-		//获取未读数
-		unReadItem, tErr := GetUnRead(reportIds, userId)
-		if tErr != nil {
-			err = tErr
+	}
+	//获取最新的有权限的周报
+	weekReport, err := GetLatestWeek(permissionIds, typeIds)
+	if err != nil {
+		return
+	}
+
+	var reports []*report.Report
+	if len(reportIds) > 0 {
+		reports, err = report.GetLatestClassReportsByIDs(reportIds)
+		if err != nil {
 			return
 		}
+	}
+	if dayReport != nil {
+		reports = append(reports, dayReport)
+
+	}
+	if weekReport != nil {
+		reports = append(reports, weekReport)
+	}
+
+	//获取未读数
+	unReadItem, tErr := GetUnRead(reportIds, userId)
+	if tErr != nil {
+		err = tErr
+		return
+	}
+	if len(reports) > 0 {
 		for _, v := range reports {
 			temp := new(purchase.PurchaseListItem)
 			temp.ReportId = v.Id
@@ -48,14 +72,7 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 			temp.ClassifyIdSecond = v.ClassifyIdSecond
 			temp.ClassifyNameSecond = v.ClassifyNameSecond
 			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)
+				temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
 			}else{
 				if temp.ClassifyIdSecond > 0 {     //包含二级分类
 					temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", temp.Stage, temp.ClassifyNameSecond, temp.ClassifyNameFirst)
@@ -67,19 +84,17 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 			temp.Time = v.PublishTime
 			temp.Unread = unReadItem[temp.ClassifyNameFirst]
 			purchaseList = append(purchaseList, temp)
-			}
+		}
 	}
 	return
 }
 
 // GetReportIdsByPermissionIds 获取所有和权限绑定的报告
 func GetReportIdsByPermissionIds(permissionIds []int) (reportIds []int, err error)   {
-	reportIds, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds)
+	reportIds, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds, "rddp")
 	return
 }
 
-
-
 // GetListByClassName 根据分类类型,分页获取报告
 func GetListByClassName(reportIds []int, className string, offset, limit int ) (list []*report.Report, err error)  {
 	list, err = report.GetListByIDsAndClassID(reportIds, className, offset, limit)
@@ -89,28 +104,56 @@ 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, err := GetReportIdsByPermissionIds(permissionIds)
-	if err != nil {
-		return
-	}
-
-	if len(reportIds) > 0 {
+	var reports []*report.Report
+	var reportIds []int
+	if classifyNameFirst == "晨报" {
 		//分类获取
-		reports, tErr := GetListByClassName(reportIds, classifyNameFirst, offset, pageLimit)
-		if tErr != nil {
-			err = tErr
+		reports, err = report.GetListByClass(classifyNameFirst, offset, pageLimit)
+		if err != nil {
 			return
 		}
+		for _, v := range reports {
+			reportIds = append(reportIds, v.Id)
+		}
+	}else {
+		if classifyNameFirst == "周报" {
+			ids, tErr := GetReportChapterIdsByPermissionIds(permissionIds)
+			if tErr != nil {
+				return
+			}
+			typeIds, tErr := report_chapter_type.GetEffectTypeID()
+			if tErr != nil {
+				err = tErr
+				return
+			}
 
-		//查询有效的章节
-		var chapter *report_chapter.ReportChapter
-		typeIds, tErr := report_chapter_type.GetEffectTypeID()
-		if tErr != nil {
-			err = tErr
-			return
+			var newTypeIds []int
+
+			for _, v1 := range typeIds {
+				for _, v2 := range ids {
+					if v1 == v2 {
+						newTypeIds = append(newTypeIds, v2)
+					}
+				}
+			}
+			reportIds, err = report_chapter.GetReportIdsByIdsAndClass(newTypeIds, classifyNameFirst)
+		} else {
+			reportIds, err = GetReportIdsByPermissionIds(permissionIds)
+			if err != nil {
+				return
+			}
 		}
-		var viewReportIds []int
 
+		if len(reportIds) > 0 {
+			//分类获取
+			reports, err = GetListByClassName(reportIds, classifyNameFirst, offset, pageLimit)
+			if err != nil {
+				return
+			}
+		}
+	}
+	if len(reports) > 0 {
+		var viewReportIds []int
 		for _, v := range reports {
 			viewReportIds = append(viewReportIds, v.Id)
 			temp := new(purchase.Detail)
@@ -121,14 +164,7 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyNameFirst str
 			temp.ClassifyIdSecond = v.ClassifyIdSecond
 			temp.ClassifyNameSecond = v.ClassifyNameSecond
 			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)
+				temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
 				temp.TopName = temp.Title
 			}else{
 				if temp.ClassifyIdSecond > 0 {     //包含二级分类
@@ -140,7 +176,6 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyNameFirst str
 				}
 			}
 			temp.Time = v.PublishTime
-
 			list = append(list, temp)
 		}
 	}
@@ -154,19 +189,86 @@ func GetPurchaseDetail(permissionIds []int, userId uint64, classifyNameFirst str
 	return
 }
 
+
 // 获取报告详情
 func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail response.ReportDetail, err error) {
 	reportInfo, err := report.GetByReportId(reportId)
 	if err != nil {
 		return
 	}
+	if reportInfo.Id == 0 {
+		return
+	}
 
 	//判断权限
 	permissionCheckInfo, err := CheckReportPermission(userinfo, reportId)
 	if err != nil {
 		return
 	}
-	reportDetail.ReportInfo = reportInfo
+	reportItem := new(response.ReportItem)
+	reportItem.ReportId = reportInfo.Id
+	reportItem.Title = reportInfo.Title
+	reportItem.PublishTime = reportInfo.PublishTime
+	reportItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
+	reportItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
+	reportItem.Stage = reportInfo.Stage
+	reportItem.Abstract = reportInfo.Abstract
+	reportItem.ContentSub = reportInfo.ContentSub
+	reportItem.Frequency = reportInfo.Frequency
+	reportItem.VideoName = reportInfo.VideoName
+	reportItem.VideoPlaySeconds = reportInfo.VideoPlaySeconds
+	reportItem.Author = reportInfo.Author
+
+	var reportTypeList []*response.ReportTypeListItem
+	if reportInfo.ClassifyNameFirst == "晨报" || reportInfo.ClassifyNameFirst == "周报" {
+		//查询有效的章节
+		typeList, tErr := report_chapter_type.GetEffectTypes()
+		if tErr != nil {
+			err = tErr
+			return
+		}
+		typeMap := make(map[uint64]*report_chapter_type.ReportChapterType)
+		for _, v := range typeList {
+			typeMap[v.ReportChapterTypeId] = v
+		}
+		//获取所有当前研报的章节
+		chapterList, tErr := report_chapter.GetListByReportId(reportInfo.Id)
+		if tErr != nil {
+			err = tErr
+			return
+		}
+
+		for _, item := range chapterList {
+			// TODO 只展示有权限的章节
+
+			if typeItem, ok := typeMap[uint64(item.TypeId)]; ok {
+				temp := new(response.ReportTypeListItem)
+				temp.TypeId = item.TypeId
+				temp.Title = item.Title
+				temp.ReportId = item.ReportId
+				temp.Sort = item.Sort
+				temp.PublishTime = item.PublishTime
+
+				temp.BannerUrl = typeItem.BannerUrl
+				temp.PauseEndTime = typeItem.PauseEndTime
+				temp.PauseStartTime = typeItem.PauseStartTime
+				temp.EditImgUrl = typeItem.EditImgUrl
+				temp.ReportChapterTypeKey = typeItem.ReportChapterTypeKey
+				temp.ReportChapterTypeName = typeItem.ReportChapterTypeName
+				temp.ReportChapterTypeThumb = typeItem.ReportChapterTypeThumb
+				reportTypeList = append(reportTypeList, temp)
+			}
+		}
+
+	}
+	//如果有权限则展示content
+	if permissionCheckInfo.AuthOk == 1  {
+		AddViewRecord(userinfo, reportInfo.Id)
+		reportItem.Content = reportInfo.Content
+		reportItem.VideoUrl = reportInfo.VideoUrl
+	}
+	reportDetail.ReportInfo = reportItem
+	reportDetail.ReportTypeList = reportTypeList
 	reportDetail.PermissionCheck = &permissionCheckInfo
 	return
 }

+ 40 - 0
services/report/report_chapter.go

@@ -0,0 +1,40 @@
+package report
+
+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/utils"
+)
+
+// GetReportChapterIdsByPermissionIds 获取所有和权限绑定的报告章节ID
+func GetReportChapterIdsByPermissionIds(permissionIds []int) (ids []int, err error)   {
+	ids, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds, "week")
+	return
+}
+
+func GetLatestWeek(permissionIds []int, typeIds []int) (reportInfo *report.Report, err error) {
+	ids, err := GetReportChapterIdsByPermissionIds(permissionIds)
+	if err != nil {
+		return
+	}
+	var newTypeIds []int
+
+	for _, v1 := range typeIds {
+		for _, v2 := range ids {
+			if v1 == v2 {
+				newTypeIds = append(newTypeIds, v2)
+			}
+		}
+	}
+
+	chapter, err := report_chapter.GetLatestChapterByIdsAndClass(newTypeIds,"week")
+	if err != nil {
+		return
+	}
+	reportInfo, err = report.GetByReportId(chapter.ReportId)
+	if err == utils.ErrNoRow {
+		return nil, nil
+	}
+	return
+}

+ 30 - 0
services/report/report_view_record.go

@@ -0,0 +1,30 @@
+package report
+
+import (
+	"hongze/hongze_yb/models/tables/company"
+	"hongze/hongze_yb/models/tables/rddp/report_view_record"
+	"hongze/hongze_yb/services/user"
+	"time"
+)
+
+func AddViewRecord(user user.UserInfo, reportId int) (err error) {
+	companyInfo, err := company.GetByCompanyId(user.CompanyID)
+	if err != nil {
+		return
+	}
+	record := new(report_view_record.ReportViewRecord)
+	record.UserId = int(user.UserID)
+	record.ReportId = reportId
+	record.Mobile = user.Mobile
+	record.Email = user.Email
+	record.RealName = user.RealName
+	record.CompanyName = companyInfo.CompanyName
+	record.CreateTime = time.Now()
+	err = report_view_record.Create(record)
+	if err != nil {
+		return
+	}
+	//修改联系人最后一次阅读报告时间
+	err = user.WxUser.SetWxUserReportLastViewTime()
+	return
+}