Quellcode durchsuchen

Merge branch 'eta/1.8.3' into debug

Roc vor 8 Monaten
Ursprung
Commit
f705fe0d64

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

@@ -32,6 +32,7 @@ type Classify struct {
 	YbListImg         string    `gorm:"column:yb_list_img" db:"yb_list_img" json:"yb_list_img" form:"yb_list_img"`                             //研报小程序端报告列表封面图
 	YbShareBgImg      string    `gorm:"column:yb_share_bg_img;" db:"yb_share_bg_img" json:"yb_share_bg_img" form:"yb_share_bg_img"`
 	YbRightBanner     string    `gorm:"column:yb_right_banner;" db:"yb_right_banner" json:"yb_right_banner" form:"yb_right_banner"` // 研报小程序-报告分享背景图
+	Level             int       `gorm:"column:level" db:"level" json:"level" form:"level"`                                          // 层级
 	HasChild          int       `gorm:"column:has_child" db:"has_child" json:"has_child" form:"has_child"`                          //是否有子级别,0:下面没有子分类,1:下面有子分类;默认:0
 }
 

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

@@ -146,3 +146,14 @@ func GetByClassifyIdFirst(classifyId int) (item *Classify, err error) {
 
 	return
 }
+
+// GetListByClassifyIdList
+// @Description: 根据ID列表获取所有的分类
+// @param idList
+// @return list
+// @return err
+func GetListByClassifyIdList(idList []int) (list []*Classify, err error) {
+	err = global.MYSQL["rddp"].Model(Classify{}).Where("id in (?) AND is_show = 1 AND enabled = 1", idList).Find(&list).Error
+	return
+
+}

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

@@ -6,6 +6,7 @@ import (
 	"hongze/hongze_yb/models/response"
 	"hongze/hongze_yb/models/response/pc"
 	"hongze/hongze_yb/utils"
+	"strings"
 )
 
 // GetLatestClassReportsByClassifyIdSeconds 根据用户已购买的分类权限查询个分类最新的报告
@@ -468,7 +469,29 @@ func GetListByReportIds(reportIds []int) (list []*Report, err error) {
 // @param limit int
 // @return list []*response.ReportCollectListItem
 // @return err error
-func GetReportCollectListByPermissionV1(chartPermissionId int, classifyIdSeconds []int, offset, limit int) (list []*response.ReportCollectListItem, err error) {
+func GetReportCollectListByPermissionV1(chartPermissionId int, firstClassifyIdList, secondClassifyIdList, thirdClassifyIdList []int, offset, limit int) (list []*response.ReportCollectListItem, err error) {
+	conditionList := make([]string, 0)
+	pars := make([]interface{}, 0)
+	if len(firstClassifyIdList) > 0 {
+		conditionList = append(conditionList, "classify_id_first in ?")
+		pars = append(pars, firstClassifyIdList)
+	}
+	if len(secondClassifyIdList) > 0 {
+		conditionList = append(conditionList, "classify_id_second in ?")
+		pars = append(pars, secondClassifyIdList)
+	}
+	if len(thirdClassifyIdList) > 0 {
+		conditionList = append(conditionList, "classify_id_third in ?")
+		pars = append(pars, thirdClassifyIdList)
+	}
+
+	condition := " classify_id_first = 0 "
+	if len(conditionList) > 0 {
+		condition = strings.Join(conditionList, " OR ")
+	}
+
+	pars = append(pars, chartPermissionId, limit, offset)
+
 	sql := `( SELECT
 id AS report_id,
 0 AS report_chapter_id,
@@ -484,7 +507,7 @@ FROM
 	report
 WHERE
 	has_chapter != 1 
-	AND classify_id_second in ?
+	AND ( ` + condition + ` )
 	AND state IN (2, 6)
 	)
 UNION
@@ -509,7 +532,7 @@ AND b.chart_permission_id = ?
 	)
 	ORDER BY publish_time DESC, report_id desc LIMIT ? OFFSET ?
 	`
-	err = global.MYSQL["rddp"].Raw(sql, classifyIdSeconds, chartPermissionId, limit, offset).Scan(&list).Error
+	err = global.MYSQL["rddp"].Raw(sql, pars...).Scan(&list).Error
 	return
 }
 

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

@@ -254,3 +254,23 @@ ORDER BY
 	err = global.MYSQL["rddp"].Raw(sql, reportId, minClassifyId).Scan(&items).Error
 	return
 }
+
+// GetByPermissionIdListAndReportList
+// @Description: 根据报告id和品种权限获取所有的章节
+// @param permissionIdList
+// @param reportIds
+// @return list
+// @return err
+func GetByPermissionIdListAndReportList(permissionIdList, reportIds []int) (list []*ReportChapter, err error) {
+	sql := ` SELECT a.report_id, a.type_id, a.report_chapter_id, a.classify_name_first, a.classify_id_first, a.video_url, a.video_name, a.video_play_seconds, a.video_size, a.sort FROM report_chapter a
+            INNER JOIN  report_chapter_permission_mapping b ON a.report_chapter_id = b.report_chapter_id
+            WHERE a.report_id in (?) AND b.chart_permission_id IN (?) AND a.is_edit = 1 AND a.publish_state = 2 `
+
+	sql += ` order by a.sort asc,a.report_chapter_id asc `
+	err = global.MYSQL["rddp"].Raw(sql, reportIds, permissionIdList).Scan(&list).Error
+
+	for _, v := range list {
+		reportIds = append(reportIds, v.ReportId)
+	}
+	return
+}

+ 24 - 3
services/report/report.go

@@ -1084,20 +1084,41 @@ func GetCollectReportList(user user.UserInfo, chartPermissionId, pageIndex, page
 		return
 	}
 	// 除了晨报和周报以外的其他报告
-	classifySecondIds, err := chart_permission_search_key_word_mapping.GetClassifyIdsByChartPermissionId(chartPermissionId, "rddp")
+	classifyIdList, err := chart_permission_search_key_word_mapping.GetClassifyIdsByChartPermissionId(chartPermissionId, "rddp")
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("查询权限对应的分类出错")
 		return
 	}
 
+	var firstClassifyIdList, secondClassifyIdList, thirdClassifyIdList []int
+	{
+		classifyList, tmpErr := classify.GetListByClassifyIdList(classifyIdList)
+		if tmpErr != nil {
+			errMsg = tmpErr.Error()
+			err = errors.New("查询分类信息失败")
+			return
+		}
+
+		for _, v := range classifyList {
+			switch v.Level {
+			case 1:
+				firstClassifyIdList = append(firstClassifyIdList, v.Id)
+			case 2:
+				secondClassifyIdList = append(secondClassifyIdList, v.Id)
+			case 3:
+				thirdClassifyIdList = append(thirdClassifyIdList, v.Id)
+			}
+		}
+	}
+
 	var reportList []*response.ReportCollectListItem
 	list := response.ReportCollectListResp{}
 	var total int64
 
 	{
 		offset := (pageIndex - 1) * pageSize
-		reportList, err = report.GetReportCollectListByPermissionV1(chartPermissionId, classifySecondIds, offset, pageSize)
+		reportList, err = report.GetReportCollectListByPermissionV1(chartPermissionId, firstClassifyIdList, secondClassifyIdList, thirdClassifyIdList, offset, pageSize)
 		if err != nil {
 			errMsg = err.Error()
 			err = errors.New("查询报告信息出错")
@@ -1116,7 +1137,7 @@ func GetCollectReportList(user user.UserInfo, chartPermissionId, pageIndex, page
 		for _, v := range listMap {
 			list = append(list, v)
 		}
-		total, err = report.GetReportCollectCountByPermissionV1(chartPermissionId, classifySecondIds)
+		total, err = report.GetReportCollectCountByPermissionV1(chartPermissionId, classifyIdList)
 		if err != nil {
 			errMsg = err.Error()
 			err = errors.New("查询报告总数出错")

+ 42 - 37
services/report/report_chapter.go

@@ -493,6 +493,7 @@ func GetReportChapterVideoList(permissionIds []int, classifyName string, list []
 
 	typeMap := make(map[int]*report_chapter_type.ReportChapterType)
 	var typeIds []int
+	typeIds = append(typeIds, 0)
 	for _, v := range typeList {
 		typeMap[int(v.ReportChapterTypeId)] = v
 		typeIds = append(typeIds, int(v.ReportChapterTypeId))
@@ -501,18 +502,10 @@ func GetReportChapterVideoList(permissionIds []int, classifyName string, list []
 	var chapters []*report_chapter.ReportChapter
 	setMap := make(map[int]int)
 	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)
+		// 查询用户有权限的章节列表
+		chapters, err = report_chapter.GetByPermissionIdListAndReportList(permissionIds, reportIds)
 		//获取音频设置章节
 		setList, _ := user_report_chapter_set.GetUserReportChapterSet(userId)
-
 		for _, v := range setList {
 			if v.IsClose == 0 {
 				setMap[v.TypeId] = v.TypeId
@@ -531,37 +524,49 @@ func GetReportChapterVideoList(permissionIds []int, classifyName string, list []
 		if classifyName != "晨报" {
 			weekAuthMap[v.ReportId] = true
 		}
-		if temp, ok := typeMap[v.TypeId]; ok && v.VideoUrl != "" {
-			if reportDetail, ok1 := reportMap[v.ReportId]; ok1 {
-				reportDate := reportDetail.CreateTime
-				if reportDate.Before(temp.PauseStartTime) || reportDate.After(temp.PauseEndTime) {
-					if classifyName != "晨报" {
-						if _, sok := setMap[v.TypeId]; sok {
-							videoItem := new(response.VideoListItem)
-							videoItem.VideoPlaySeconds = v.VideoPlaySeconds
-							videoItem.VideoName = v.VideoName
-							if v.VideoName == "" {
-								videoItem.VideoName = v.Title
-							}
-							videoItem.VideoUrl = v.VideoUrl
-							videoItem.Sort = v.Sort
-							videoMap[v.ReportId] = append(videoMap[v.ReportId], videoItem)
-						}
-					} else {
-						videoItem := new(response.VideoListItem)
-						videoItem.VideoPlaySeconds = v.VideoPlaySeconds
-						videoItem.VideoName = v.VideoName
-						if v.VideoName == "" {
-							videoItem.VideoName = v.Title
-						}
-						videoItem.VideoUrl = v.VideoUrl
-						videoItem.Sort = v.Sort
-						videoMap[v.ReportId] = append(videoMap[v.ReportId], videoItem)
-					}
+
+		// 各种过滤条件
+		{
+			if v.VideoUrl == `` {
+				continue
+			}
+			// 报告校验
+			reportDetail, ok := reportMap[v.ReportId]
+			if !ok { // 不是当前报告,那么过滤不处理
+				continue
+			}
+			reportDate := reportDetail.CreateTime
+
+			// 如果是系统配置的章节类型,那么需要额外校验时间
+			if v.TypeId > 0 {
+				// 如果不存在该类型的章节类型,那么就过滤,直接下一个循环
+				temp, ok := typeMap[v.TypeId]
+				if !ok {
+					continue
+				}
+
+				// 如果晚于开始日期同时早于结束日期;或者等于开始日期;或者等于结束日期,那么就过滤,直接下一个循环
+				if (reportDate.After(temp.PauseStartTime) && reportDate.Before(temp.PauseEndTime)) || reportDate.Equal(temp.PauseStartTime) || reportDate.Equal(temp.PauseEndTime) {
+					continue
 				}
 			}
 
+			if classifyName != "晨报" {
+				if _, sok := setMap[v.TypeId]; !sok {
+					continue
+				}
+			}
+		}
+
+		videoItem := new(response.VideoListItem)
+		videoItem.VideoPlaySeconds = v.VideoPlaySeconds
+		videoItem.VideoName = v.VideoName
+		if v.VideoName == "" {
+			videoItem.VideoName = v.Title
 		}
+		videoItem.VideoUrl = v.VideoUrl
+		videoItem.Sort = v.Sort
+		videoMap[v.ReportId] = append(videoMap[v.ReportId], videoItem)
 	}
 
 	return