Browse Source

研报列表调整音频结构

xiexiaoyuan 2 years ago
parent
commit
218b49a921

+ 11 - 4
models/response/report.go

@@ -88,12 +88,19 @@ type ReportListItem struct {
 	Title              string `description:"标题" json:"title"`
 	Abstract           string `description:"摘要" json:"abstract"`
 	Author             string `description:"作者" json:"author"`
-	ReportImgUrl             string `description:"作者头像" json:"report_img_url"`
+	ReportImgUrl       string `description:"作者头像" json:"report_img_url"`
 	PublishTime        time.Time `description:"发布时间" json:"publish_time"`
 	Stage              int    `description:"期数" json:"stage"`
-	VideoUrl           string `description:"音频文件URL" json:"video_url"`
-	AuthOk              bool `json:"auth_ok"`
-	TitleInfo         string `json:"title_info"`
+	VideoList          []*VideoListItem `json:"video_list"`
+	AuthOk             bool   `json:"auth_ok"`
+	TitleInfo          string `json:"title_info"`
+}
+
+type VideoListItem struct {
+	VideoUrl            string `description:"音频文件URL" json:"video_url"`
+	Sort                int `description:"音频内容排序" json:"sort"`
+	VideoName           string    `json:"video_name"`               //音频文件名称
+	VideoPlaySeconds    string    `json:"video_play_seconds"`      //音频播放时长
 }
 
 type ReportList struct {

+ 24 - 0
models/tables/rddp/report_chapter/query.go

@@ -89,4 +89,28 @@ func GetTypeIdById(id int) (info *ReportChapter, err error)  {
 		err = nil
 	}
 	return
+}
+
+
+// GetByTypeIdsAndReportIds 根据章节ID和ReportIds查询报告
+func GetByTypeIdsAndReportIds(typeIds []int,  reportIds []int, classifyNameFirst string) (list []*ReportChapter, err error) {
+	var where string
+	if  classifyNameFirst == "周报"{
+		where = "report_id in (?) AND type_id in (?) AND is_edit = 1 AND publish_state = 2 "
+	}else{
+		where = "report_id in (?) AND type_id in (?) AND publish_state = 2 "
+	}
+
+	err = global.MYSQL["rddp"].Model(ReportChapter{}).
+		Select("report_id, report_chapter_id, classify_name_first, classify_id_first, video_url, video_name, video_play_seconds, video_size, sort").
+		Where(where, reportIds, typeIds).
+		Order("sort asc, report_chapter_id asc").
+		Scan(&list).Error
+	if err != nil {
+		return
+	}
+	for _, v := range list {
+		reportIds = append(reportIds, v.ReportId)
+	}
+	return
 }

+ 66 - 3
services/report/report.go

@@ -11,6 +11,7 @@ import (
 	"hongze/hongze_yb/models/tables/chart_permission"
 	"hongze/hongze_yb/models/tables/chart_permission_chapter_mapping"
 	"hongze/hongze_yb/models/tables/chart_permission_search_key_word_mapping"
+	"hongze/hongze_yb/models/tables/company_product"
 	"hongze/hongze_yb/models/tables/daily_base_column"
 	"hongze/hongze_yb/models/tables/rddp/classify"
 	"hongze/hongze_yb/models/tables/rddp/report"
@@ -26,6 +27,7 @@ import (
 	"html"
 	"sort"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -452,6 +454,23 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 	chartPermissionImageMap := make(map[int]string)
 	var classifyIdSeconds []int
     var reportImgUrl string
+	var dayAuth bool
+
+	//如果是晨报列表,判断用户是否有查看晨报的权限
+	if classifyParent.ClassifyName == "晨报"  {
+		// 判断用户状态是否是正常和永续
+		companyProduct, tErr := company_product.GetByCompany2ProductId(user.CompanyID, 1)
+		if tErr != nil && tErr != utils.ErrNoRow {
+			errMsg = tErr.Error()
+			err = errors.New("用户状态查询出错")
+			return
+		}
+		// 已购仅付费用户可见
+		if tErr == nil && strings.Contains("永续,正式,试用", companyProduct.Status) {
+			dayAuth = true
+		}
+	}
+
     chartPermissionList, err := chart_permission.GetFiccListExceptTacticByProductId()
 	if err != nil {
 		errMsg = err.Error()
@@ -627,6 +646,30 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 
 	var reportList []*response.ReportListItem
 	if len(list) > 0 {
+		var videoReportIds []int
+		videoMap := make(map[int][]*response.VideoListItem)
+		weekAuthMap := make(map[int]bool)
+		if classifyParent.ClassifyName == "晨报" && dayAuth {
+			for _, reportInfo := range list {
+				videoReportIds = append(videoReportIds, reportInfo.Id)
+			}
+			//获取晨报的音频列表
+			videoMap, _, errMsg, err = GetReportChapterVideoList(validPermissionIdList, classifyParent.ClassifyName, videoReportIds)
+			if err != nil {
+				return
+			}
+		} else if classifyParent.ClassifyName == "周报" {
+			//查询所有权限typeID
+			//如果存在可以查看的章节ID
+			for _, reportInfo := range list {
+				videoReportIds = append(videoReportIds, reportInfo.Id)
+			}
+			// 判断周报权限\查询周报的音频列表
+			videoMap, weekAuthMap, errMsg, err = GetReportChapterVideoList(validPermissionIdList, classifyParent.ClassifyName, videoReportIds)
+			if err != nil {
+				return
+			}
+		}
 		for _, reportInfo := range list {
 			reportItem := new(response.ReportListItem)
 			reportItem.ReportId = reportInfo.Id
@@ -650,9 +693,29 @@ func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classify
 			} else if url,ok := permissionImageMap[reportInfo.ClassifyNameSecond]; ok {
 				reportItem.ReportImgUrl = utils.ALIYUN_YBIMG_HOST + url
 			}
-			
-			if authOk,ok := checkPermissionMap[reportInfo.ClassifyNameSecond]; ok && authOk {
-				reportItem.VideoUrl = reportInfo.VideoUrl
+
+			if classifyParent.ClassifyName == "晨报" && dayAuth {
+				// 查询当前晨报的所有音频
+				if vList, ok := videoMap[reportInfo.Id]; ok {
+					reportItem.VideoList = vList
+				}
+				reportItem.AuthOk = dayAuth
+			}else if classifyParent.ClassifyName == "周报" {
+				if wAuth, ok := weekAuthMap[reportInfo.Id]; ok {
+					reportItem.AuthOk = wAuth
+					if wAuth {
+						// 查询当前晨报的所有音频
+						if vList, ok2 := videoMap[reportInfo.Id]; ok2 {
+							reportItem.VideoList = vList
+						}
+					}
+				}
+			}else if authOk,ok := checkPermissionMap[reportInfo.ClassifyNameSecond]; ok && authOk {
+				videoTemp := new(response.VideoListItem)
+				videoTemp.VideoUrl = reportInfo.VideoUrl
+				videoTemp.VideoName = reportInfo.VideoName
+				videoTemp.VideoPlaySeconds = reportInfo.VideoPlaySeconds
+				reportItem.VideoList = append(reportItem.VideoList, videoTemp)
 				reportItem.AuthOk = authOk
 			}
 

+ 47 - 0
services/report/report_chapter.go

@@ -315,5 +315,52 @@ func CheckDayReportPermission(userInfo user.UserInfo) (authOk bool, permissionCh
 		return
 	}
 	authOk, permissionCheckInfo,_, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), []int{})
+	return
+}
+
+
+// GetReportChapterVideoList 根据报告获取章节的音频列表
+func GetReportChapterVideoList(permissionIds []int, classifyName string, reportIds []int) (videoMap map[int][]*response.VideoListItem, weekAuthMap map[int]bool, errMsg string, err error) {
+	videoMap = make(map[int][]*response.VideoListItem)
+	weekAuthMap = make(map[int]bool)
+	// 查询有效的章节
+	typeIds, err := report_chapter_type_cache.GetEffectTypeID()
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("查询章节类型出错")
+		return
+	}
+	var chapters []*report_chapter.ReportChapter
+	if classifyName == "周报" {
+		// 查询用户有权限的章节ID
+		newTypeIds, tErr := GetWeekTypeIdsByPermissionIds(permissionIds, typeIds)
+		if tErr != nil {
+			errMsg = tErr.Error()
+			err = errors.New("查询章节类型权限出错")
+			return
+		}
+		// 查询章节列表
+		chapters, err = report_chapter.GetByTypeIdsAndReportIds(newTypeIds, reportIds, classifyName)
+	}else{
+		// 查询章节列表
+		chapters, err = report_chapter.GetByTypeIdsAndReportIds(typeIds, reportIds, classifyName)
+	}
+	if err != nil {
+		errMsg = err.Error()
+		err = errors.New("查询章节出错")
+		return
+	}
+	for _, v := range chapters {
+		if classifyName == "周报" {
+			weekAuthMap[v.ReportId] = true
+		}
+		videoItem := new(response.VideoListItem)
+		videoItem.VideoPlaySeconds = v.VideoPlaySeconds
+		videoItem.VideoName = v.VideoName
+		videoItem.VideoUrl = v.VideoUrl
+		videoItem.Sort = v.Sort
+		videoMap[v.ReportId] = append(videoMap[v.ReportId], videoItem)
+	}
+
 	return
 }