Kaynağa Gözat

研报订阅

kobe6258 4 ay önce
ebeveyn
işleme
bd7f2d7a6c

+ 1 - 1
controllers/media/media_controller.go

@@ -116,7 +116,7 @@ func (m *MediaController) List(mediaType string, permissionIds string) {
 			pageRes.Total = m.PageInfo.Total
 		}
 		pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
-		list, err := media.GetMediaPageByIds(mediaType, m.PageInfo, mediaIds, isLogin(detailType))
+		list, err := media.GetMediaPageByIds(mediaType, m.PageInfo, mediaIds, isLogin(detailType), userInfo.Id)
 		if err != nil {
 			m.FailedResult("分页查询媒体列表失败", result)
 			return

+ 70 - 7
domian/media/media_service.go

@@ -11,8 +11,11 @@ import (
 	reportService "eta/eta_mini_ht_api/domian/report"
 	"eta/eta_mini_ht_api/models"
 	mediaDao "eta/eta_mini_ht_api/models/media"
+	productDao "eta/eta_mini_ht_api/models/merchant"
+	"fmt"
 	"sort"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -53,6 +56,10 @@ type MediaDTO struct {
 	Highlight             []string `json:"highlight,omitempty"`
 	Login                 bool     `json:"login"`
 	RiskLevelStatus       string   `json:"riskLevelStatus"`
+	IsFree                bool     `json:"isFree"`
+	Price                 string   `json:"price"`
+	IsSubscribe           bool     `json:"isSubscribe"`
+	RiskLevel             string   `json:"riskLevel"`
 }
 
 func SearchMediaList(_ string, key string, mediaIds []int, from int, size int, max int64) (reports []MediaDTO, err error) {
@@ -115,17 +122,71 @@ func SearchMaxMediaId(mediaType string, key string) (total int64, latestId int64
 	}
 	return
 }
-func GetMediaPermissionMappingByPermissionIds(mediaType string, permissionIds []int) (total int64, latestId int64, ids []int) {
+func GetMediaPermissionMappingByPermissionIds(mediaType string, permissionIds []int, riskLevel string) (total int64, latestId int64, orgIds []int) {
 	ids, err := mediaDao.GetMediaPermissionMappingByPermissionId(mediaType, permissionIds)
 	if err != nil {
-		logger.Error("获取当前最大媒体id失败:%v", err)
+		logger.Error("获取配置品种的媒体列表信息失败:%v", err)
 		return 0, 0, ids
 	}
-	sort.Slice(ids, func(i, j int) bool {
-		return ids[i] > ids[j]
-	})
-	return int64(len(ids)), int64(ids[0]), ids
+	if riskLevel != "" {
+		var productList []productDao.MerchantProduct
+		//现加入没有产品的报告
+		productList, err = productDao.GetProductListBySourceIds(ids, productDao.Audio, productDao.Video)
+		for _, mediaId := range ids {
+			find := false
+			for _, product := range productList {
+				if product.SourceID == mediaId {
+					find = true
+					break
+				}
+			}
+			if !find {
+				orgIds = append(orgIds, mediaId)
+			}
+		}
+		riskNum, parseErr := parseRiskLevel(riskLevel)
+		if parseErr != nil {
+			logger.Error("解析风险等级失败:%v", err)
+			return
+		}
+		//再把符合风险等级的产品报告加入
+		for _, mediaId := range ids {
+			for _, product := range productList {
+				if product.SourceID == mediaId {
+					pdRiskNum, pdErr := parseRiskLevel(product.RiskLevel)
+					if pdErr != nil {
+						logger.Error("解析产品风险等级失败:%v,产品id:%v", pdErr, product.ID)
+						continue
+					}
+					if pdRiskNum <= riskNum {
+						orgIds = append(orgIds, mediaId)
+					}
+				}
+			}
+		}
+	}
+	if len(orgIds) > 0 {
+		sort.Slice(orgIds, func(i, j int) bool {
+			return orgIds[i] > orgIds[j]
+		})
+		return int64(len(orgIds)), int64(orgIds[0]), orgIds
+	}
+	return 0, 0, []int{}
 }
+
+func parseRiskLevel(level string) (int, error) {
+	parts := strings.Split(level, "R")
+	if len(parts) < 2 {
+		return 0, fmt.Errorf("无效的风险等级: %s", level)
+	}
+	numberStr := parts[1]
+	number, err := strconv.Atoi(numberStr)
+	if err != nil {
+		return 0, fmt.Errorf("无法将风险等级转换为数字: %s", err)
+	}
+	return number, nil
+}
+
 func GetAnalystMediaPermissionMappingByPermissionIds(mediaType string, permissionIds []int, analystId int) (total int64, latestId int64, ids []int) {
 	ids, err := mediaDao.GetMediaPermissionMappingByPermissionId(mediaType, permissionIds)
 	if err != nil {
@@ -218,7 +279,9 @@ func GetMediaById(mediaType string, mediaId int) (mediaDTO MediaDTO, err error)
 func GetPermissionsByIds(ids []int) (permissionDTOs []configService.PermissionDTO, err error) {
 	return reportService.GetFirstPermissionsByIds(ids)
 }
-
+func GetSecondPermissionsByIds(ids []int) (permissionDTOs []configService.PermissionDTO, err error) {
+	return reportService.GetPermissionsByPermissionIds(ids)
+}
 func matchAllByCondition(sorts []string, key string, column string, value string) (request *es.ESQueryRequest) {
 	req := new(es.ESQueryRequest)
 	//return req.CreateESQueryRequest(htConfig.GetMediaIndex(), ESColumn, key, 0, 1, sorts, es.MatchAllByCondition).ByCondition(column, value)

+ 7 - 2
domian/report/eta_report_service.go

@@ -84,12 +84,17 @@ func GetETAReportIdsByPermissionIdsWithRiskLevel(permissionIds []int, riskLevel
 	//现加入没有产品的报告
 	productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
 	for _, report := range reports {
+		find := false
 		for _, product := range productList {
 			if product.SourceID == report.ID {
-				continue
+				find = true
+				break
 			}
+		}
+		if !find {
 			orgIds = append(orgIds, report.OrgID)
 		}
+
 	}
 	riskNum, err := parseRiskLevel(riskLevel)
 	if err != nil {
@@ -97,7 +102,7 @@ func GetETAReportIdsByPermissionIdsWithRiskLevel(permissionIds []int, riskLevel
 		return
 	}
 	//再把符合风险等级的产品报告加入
-	productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
+	//productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
 	for _, report := range reports {
 		for _, product := range productList {
 			if product.SourceID == report.ID {

+ 1 - 1
domian/report/ht_report_service.go

@@ -64,7 +64,7 @@ func GetHTReportIdsByPermissionIdsWithRiskLevel(permissionIds []int, riskLevel s
 		return
 	}
 	//再把符合风险等级的产品报告加入
-	productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
+	//productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
 	for _, report := range reports {
 		for _, product := range productList {
 			if product.SourceID == report.ID {

+ 11 - 0
domian/report/permission_service.go

@@ -14,6 +14,17 @@ func GetPermissionNamesByPermissionIds(permissionIds []int) (permissionNames []s
 	return permissionDao.GetPermissionNamesByPermissionIds(permissionIds)
 	//return etaDao.GetPermissionNamesByPermissionIds(permissionIds)
 }
+func GetPermissionsByPermissionIds(permissionIds []int) (permissionDTOs []configService.PermissionDTO, err error) {
+	permission, err := permissionDao.GetPermissionsByPermissionIds(permissionIds)
+	if err != nil {
+		return
+	}
+	for _, node := range permission {
+		permissionDTOs = append(permissionDTOs, convertPermissionDTO(node))
+	}
+	return
+	//return etaDao.GetPermissionNamesByPermissionIds(permissionIds)
+}
 
 func GetFirstPermissionsByIds(ids []int) (permissionDTOS []configService.PermissionDTO, err error) {
 	//list, err := etaDao.GetFirstPermissionsByIds(ids)

+ 5 - 0
models/config/permission.go

@@ -68,6 +68,11 @@ func GetPermissionNamesByPermissionIds(ids []int) (permissionNames []string, err
 	return
 }
 
+func GetPermissionsByPermissionIds(ids []int) (permissions []Permission, err error) {
+	db := models.Main()
+	err = db.Model(&Permission{}).Select(Columns).Where("permission_id in ?", ids).Find(&permissions).Error
+	return
+}
 func GetFirstPermissionsByIds(ids []int) (permissionList []Permission, err error) {
 	db := models.Main()
 	err = db.Model(&Permission{}).Select("permission_id, name").Where("permission_id in (select parent_id from permissions WHERE permission_id in ?)", ids).Find(&permissionList).Error

+ 0 - 5
models/media/media_permission_mapping.go

@@ -17,8 +17,3 @@ func GetMediaPermissionMappingByPermissionId(mediaType string, permissionIds []i
 	err = db.Model(&MediaPermissionMapping{}).Select("DISTINCT media_id").Where("media_type = ? and deleted =? and permission_id in ?", mediaType, false, permissionIds).Scan(&mediaIds).Error
 	return
 }
-func InsertMediaPermissionMapping(mediaType MediaPermissionMapping) {
-	db := models.Main()
-	_ = db.Create(&mediaType).Error
-	return
-}

+ 24 - 4
models/merchant/merchant_product.go

@@ -60,14 +60,34 @@ func GetMerchantProductById(id int) (product MerchantProduct, err error) {
 	return
 }
 
-func GetMerchantProductBySourceId(sourceId int, productType MerchantProductType) (product MerchantProduct, err error) {
+func GetMerchantProductBySourceId(sourceId int, productType ...MerchantProductType) (product MerchantProduct, err error) {
 	db := models.Main()
-	err = db.Select(detailColumns).Where("source_id =? and type = ? and deleted =?", sourceId, productType, false).First(&product).Error
+	if len(productType) > 0 {
+		if len(productType) == 1 {
+			err = db.Select(detailColumns).Where("source_id =? and type = ? and deleted =?", sourceId, productType[0], false).First(&product).Error
+		} else {
+			err = db.Select(detailColumns).Where("source_id =? and type in (?) and deleted =?", sourceId, productType, false).First(&product).Error
+		}
+
+	} else {
+		err = db.Select(detailColumns).Where("source_id =? and deleted =?", sourceId, false).First(&product).Error
+	}
+
 	return
 }
 
-func GetProductListBySourceIds(ids []int, productType MerchantProductType) (productList []MerchantProduct, err error) {
+func GetProductListBySourceIds(ids []int, productType ...MerchantProductType) (productList []MerchantProduct, err error) {
 	db := models.Main()
-	err = db.Select(sourceIdColumn).Where("source_id in ? and type = ? and deleted =? ", ids, productType, false).Find(&productList).Error
+	if len(productType) > 0 {
+		if len(productType) == 1 {
+			err = db.Select(sourceIdColumn).Where("source_id in ? and type = ? and deleted =? ", ids, productType[0], false).Find(&productList).Error
+		} else {
+			err = db.Select(sourceIdColumn).Where("source_id in ? and type in (?) and deleted =? ", ids, productType, false).Find(&productList).Error
+		}
+
+	} else {
+		err = db.Select(sourceIdColumn).Where("source_id in ?  and deleted =? ", ids, productType, false).Find(&productList).Error
+	}
+
 	return
 }

+ 65 - 17
service/media/media_service.go

@@ -6,9 +6,14 @@ import (
 	"eta/eta_mini_ht_api/common/exception"
 	"eta/eta_mini_ht_api/common/utils/page"
 	stringUtils "eta/eta_mini_ht_api/common/utils/string"
+	configService "eta/eta_mini_ht_api/domian/config"
 	permissionService "eta/eta_mini_ht_api/domian/config"
 	mediaService "eta/eta_mini_ht_api/domian/media"
+	productService "eta/eta_mini_ht_api/domian/merchant"
 	userService "eta/eta_mini_ht_api/domian/user"
+	mediaDao "eta/eta_mini_ht_api/models/media"
+	productDao "eta/eta_mini_ht_api/models/merchant"
+	userDao "eta/eta_mini_ht_api/models/user"
 	"eta/eta_mini_ht_api/service/user"
 	"fmt"
 	"gorm.io/gorm"
@@ -18,10 +23,11 @@ import (
 )
 
 const (
-	RiskLevelUnMatch = "unMatch"
-	RiskLevelUnTest  = "unTest"
-	RiskLevelExpired = "expired"
-	RiskLevelMatch   = "match"
+	RiskLevelUnMatch    = "unMatch"
+	RiskLevelUnTest     = "unTest"
+	RiskLevelExpired    = "expired"
+	RiskLevelMatch      = "match"
+	defaultProductPrice = "0"
 )
 
 type RecordCount struct {
@@ -147,7 +153,7 @@ func RangeSearch(mediaType string, isLogin bool, userId int) (total int64, lates
 		for _, permission := range permissionList {
 			filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
 		}
-		return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds)
+		return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds, mapping.ProductRiskLevel)
 	} else { //没有登录的时候展示所有设置了风险等级的品种报告,筛选的时候过滤传入ID中没有设置风险等级的品种
 		var permissionList []permissionService.PermissionDTO
 		//获取所有设置风险等级的品种
@@ -160,7 +166,7 @@ func RangeSearch(mediaType string, isLogin bool, userId int) (total int64, lates
 			filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
 		}
 		//查询品种
-		return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds)
+		return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds, "")
 	}
 }
 func GetTotalPageCountByPermissionIds(mediaType string, permissionIds []int, isLogin bool, userId int) (total int64, latestId int64, ids []int) {
@@ -210,7 +216,7 @@ func GetTotalPageCountByPermissionIds(mediaType string, permissionIds []int, isL
 		for _, permission := range permissionList {
 			filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
 		}
-		return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds)
+		return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds, mapping.ProductRiskLevel)
 	} else { //没有登录的时候展示所有设置了风险等级的品种报告,筛选的时候过滤传入ID中没有设置风险等级的品种
 		var permissionList []permissionService.PermissionDTO
 		if len(permissionIds) == 0 {
@@ -228,14 +234,8 @@ func GetTotalPageCountByPermissionIds(mediaType string, permissionIds []int, isL
 			filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
 		}
 		//查询品种
-		return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds)
-	}
-	//if len(permissionIds) == 0 {
-	//	total, latestId = mediaService.GetTotalPageCount(mediaType)
-	//	ids = []int{}
-	//	return
-	//}
-	//return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, permissionIds)
+		return mediaService.GetMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds, "")
+	}
 }
 func parseRiskLevel(level string) (int, error) {
 	parts := strings.Split(level, "R")
@@ -415,8 +415,10 @@ func GetMediaPageByAnalystId(mediaType string, pageInfo page.PageInfo, analystId
 	}
 	return
 }
-
-func GetMediaPageByIds(mediaType string, pageInfo page.PageInfo, mediaIds []int, isLogin bool) (list []mediaService.MediaDTO, err error) {
+func getMediaSecondPermissions(ids []int) (permissionDTOs []configService.PermissionDTO, err error) {
+	return mediaService.GetSecondPermissionsByIds(ids)
+}
+func GetMediaPageByIds(mediaType string, pageInfo page.PageInfo, mediaIds []int, isLogin bool, userId int) (list []mediaService.MediaDTO, err error) {
 	list, err = mediaService.GetMediaPageByIds(mediaType, pageInfo, mediaIds)
 	if err != nil {
 		err = exception.New(exception.GetMediaListFailed)
@@ -435,9 +437,55 @@ func GetMediaPageByIds(mediaType string, pageInfo page.PageInfo, mediaIds []int,
 				logger.Error("品种名称列表转换失败:%v", err)
 			}
 			media.PermissionNames = getMediaPermissionNames(ids)
+			//permissions, err := getMediaSecondPermissions(ids)
 			if !isLogin {
 				media.Src = ""
 			}
+			media.Login = isLogin
+			var productType productDao.MerchantProductType
+			switch media.MediaType {
+			case string(mediaDao.Audio):
+				productType = productDao.Audio
+			case string(mediaDao.Video):
+				productType = productDao.Video
+			default:
+				logger.Error("未知媒体类型:%s", media.MediaType)
+				productType = ""
+			}
+			product, pdErr := productService.GetProductBySourceId(media.MediaId, productType)
+			if pdErr != nil {
+				if errors.Is(pdErr, gorm.ErrRecordNotFound) {
+					media.Price = defaultProductPrice
+					media.IsFree = true
+					media.IsSubscribe = false
+				} else {
+					media.Price = defaultProductPrice
+					media.IsFree = false
+					media.IsSubscribe = false
+				}
+				return
+			}
+			media.Price = product.Price.String()
+			media.IsFree = false
+			if isLogin {
+				subscribe, subscribeErr := userService.GetUserSubscribe(product.Id, userId)
+				if subscribeErr != nil {
+					media.IsSubscribe = false
+				} else {
+					media.IsSubscribe = subscribe.Status == userDao.SubscribeValid
+				}
+			}
+			pdRiskNum, parseErr := parseRiskLevel(product.RiskLevel)
+			if parseErr != nil {
+				return
+			}
+			rpRiskNum, parseErr := parseRiskLevel(media.RiskLevel)
+			if parseErr != nil {
+				return
+			}
+			if rpRiskNum <= pdRiskNum {
+				media.RiskLevel = product.RiskLevel
+			}
 		}(&list[i])
 	}
 	wg.Wait()

+ 76 - 46
service/report/report_service.go

@@ -362,8 +362,9 @@ func parseRiskLevel(level string) (int, error) {
 	return number, nil
 }
 
-func SearchReportList(key string, Ids []int, pageInfo page.PageInfo, isLogin bool, userId int) (reports []reportService.ReportDTO, err error) {
+func SearchReportList(key string, Ids []int, pageInfo page.PageInfo, isLogin bool, userId int) (list []reportService.ReportDTO, err error) {
 	offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
+	var reports []reportService.ReportDTO
 	reports, err = reportService.SearchReportList(key, Ids, offset, pageInfo.PageSize, pageInfo.LatestId)
 	var wg sync.WaitGroup
 	wg.Add(len(reports))
@@ -373,6 +374,9 @@ func SearchReportList(key string, Ids []int, pageInfo page.PageInfo, isLogin boo
 			report.Login = isLogin
 			report.PermissionNames = getReportPermissionNames(report.OrgId, report.Source)
 			permissions := getReportSecondPermissions(report.OrgId, report.Source)
+			if len(permissions) == 0 {
+				return
+			}
 			riskNum := getHighestRiskLevel(permissions)
 			report.RiskLevel = strings.Join([]string{"R", strconv.Itoa(riskNum)}, "")
 			var src string
@@ -395,27 +399,30 @@ func SearchReportList(key string, Ids []int, pageInfo page.PageInfo, isLogin boo
 					report.IsFree = false
 					report.IsSubscribe = false
 				}
-				return
-			}
-			report.Price = product.Price.String()
-			report.IsFree = false
-			subscribe, subscribeErr := userService.GetUserSubscribe(product.Id, userId)
-			if subscribeErr != nil {
-				report.IsSubscribe = false
-				return
-			}
-			report.IsSubscribe = subscribe.Status == userDao.SubscribeValid
-			pdRiskNum, parseErr := parseRiskLevel(product.RiskLevel)
-			if parseErr != nil {
-				return
-			}
-			rpRiskNum, parseErr := parseRiskLevel(report.RiskLevel)
-			if parseErr != nil {
-				return
-			}
-			if rpRiskNum <= pdRiskNum {
-				report.RiskLevel = product.RiskLevel
+			} else {
+				report.Price = product.Price.String()
+				report.IsFree = false
+				if isLogin {
+					subscribe, subscribeErr := userService.GetUserSubscribe(product.Id, userId)
+					if subscribeErr != nil {
+						report.IsSubscribe = false
+					} else {
+						report.IsSubscribe = subscribe.Status == userDao.SubscribeValid
+					}
+				}
+				pdRiskNum, parseErr := parseRiskLevel(product.RiskLevel)
+				if parseErr != nil {
+					return
+				}
+				rpRiskNum, parseErr := parseRiskLevel(report.RiskLevel)
+				if parseErr != nil {
+					return
+				}
+				if rpRiskNum <= pdRiskNum {
+					report.RiskLevel = product.RiskLevel
+				}
 			}
+			list = append(list, *report)
 		}(&reports[i])
 	}
 	wg.Wait()
@@ -527,7 +534,8 @@ func RangeSearch(isLogin bool, userId int) (total int64, latestId int64, orgIds
 }
 
 // GetReportPage 分页获取报告列表
-func GetReportPage(pageInfo page.PageInfo, orgIds map[string][]int, searchAll bool, isLogin bool, userId int) (list []reportService.ReportDTO, err error) {
+func GetReportPage(pageInfo page.PageInfo, orgIds map[string][]int, searchAll bool, isLogin bool, userId int) (reports []reportService.ReportDTO, err error) {
+	var list []reportService.ReportDTO
 	list, err = reportService.GetReportPageByOrgIds(pageInfo, orgIds, searchAll)
 	//并发获取研报的标签
 	var wg sync.WaitGroup
@@ -538,6 +546,9 @@ func GetReportPage(pageInfo page.PageInfo, orgIds map[string][]int, searchAll bo
 			report.Login = isLogin
 			report.PermissionNames = getReportPermissionNames(report.OrgId, report.Source)
 			permissions := getReportSecondPermissions(report.OrgId, report.Source)
+			if len(permissions) == 0 {
+				return
+			}
 			riskNum := getHighestRiskLevel(permissions)
 			report.RiskLevel = strings.Join([]string{"R", strconv.Itoa(riskNum)}, "")
 			var src string
@@ -548,7 +559,6 @@ func GetReportPage(pageInfo page.PageInfo, orgIds map[string][]int, searchAll bo
 			} else {
 				report.CoverUrl = src
 			}
-
 			//下查询产品信息
 			product, pdErr := productService.GetProductBySourceId(report.ReportID, productDao.Report)
 			if pdErr != nil {
@@ -561,27 +571,30 @@ func GetReportPage(pageInfo page.PageInfo, orgIds map[string][]int, searchAll bo
 					report.IsFree = false
 					report.IsSubscribe = false
 				}
-				return
-			}
-			report.Price = product.Price.String()
-			report.IsFree = false
-			subscribe, subscribeErr := userService.GetUserSubscribe(product.Id, userId)
-			if subscribeErr != nil {
-				report.IsSubscribe = false
-				return
-			}
-			report.IsSubscribe = subscribe.Status == userDao.SubscribeValid
-			pdRiskNum, parseErr := parseRiskLevel(product.RiskLevel)
-			if parseErr != nil {
-				return
-			}
-			rpRiskNum, parseErr := parseRiskLevel(report.RiskLevel)
-			if parseErr != nil {
-				return
-			}
-			if rpRiskNum <= pdRiskNum {
-				report.RiskLevel = product.RiskLevel
+			} else {
+				report.Price = product.Price.String()
+				report.IsFree = false
+				if isLogin {
+					subscribe, subscribeErr := userService.GetUserSubscribe(product.Id, userId)
+					if subscribeErr != nil {
+						report.IsSubscribe = false
+					} else {
+						report.IsSubscribe = subscribe.Status == userDao.SubscribeValid
+					}
+				}
+				pdRiskNum, parseErr := parseRiskLevel(product.RiskLevel)
+				if parseErr != nil {
+					return
+				}
+				rpRiskNum, parseErr := parseRiskLevel(report.RiskLevel)
+				if parseErr != nil {
+					return
+				}
+				if rpRiskNum <= pdRiskNum {
+					report.RiskLevel = product.RiskLevel
+				}
 			}
+			reports = append(reports, *report)
 		}(&list[i])
 	}
 	wg.Wait()
@@ -711,7 +724,12 @@ func GetRandedReportByWeeklyHot(limit int, isLogin bool, userId int, pdRiskLevel
 				report.Permissions = getReportPermissionsMap(report.OrgId, report.Source)
 				report.SecondPermission = getReportSecondPermissionsMap(report.OrgId, report.Source)
 				permissions := getReportSecondPermissions(report.OrgId, report.Source)
-				riskNum := getHighestRiskLevel(permissions)
+				var riskNum int
+				if len(permissions) == 0 {
+					riskNum = 0
+				} else {
+					riskNum = getHighestRiskLevel(permissions)
+				}
 				if report.RiskLevel == "" {
 					report.RiskLevel = strings.Join([]string{"R", strconv.Itoa(riskNum)}, "")
 				} else {
@@ -729,13 +747,16 @@ func GetRandedReportByWeeklyHot(limit int, isLogin bool, userId int, pdRiskLevel
 				for _, permission := range report.Permissions {
 					label = append(label, permission)
 				}
-
 				report.PermissionNames = label
 			}(&filterList[i])
 		}
 		wg.Wait()
 		reports = make([]HotRankedReport, len(ids))
 		for i := 0; i < len(filterList); i++ {
+			risk, parseErr := parseRiskLevel(filterList[i].RiskLevel)
+			if parseErr != nil || risk == 0 {
+				continue
+			}
 			report := convertToHotRankedReport(filterList[i])
 			for j := 0; j < len(hotReports); j++ {
 				if hotReports[j].ReportId == report.Id {
@@ -837,8 +858,13 @@ func GetRandedReportByPublishTimeWeekly(limit int, week bool, isLogin bool, user
 			report.Permissions = getReportPermissionsMap(report.OrgId, report.Source)
 			report.SecondPermission = getReportSecondPermissionsMap(report.OrgId, report.Source)
 			report.PermissionNames = getReportPermissionNames(report.OrgId, report.Source)
+			var riskNum int
 			permissions := getReportSecondPermissions(report.OrgId, report.Source)
-			riskNum := getHighestRiskLevel(permissions)
+			if len(permissions) == 0 {
+				riskNum = 0
+			} else {
+				riskNum = getHighestRiskLevel(permissions)
+			}
 			if report.RiskLevel == "" {
 				report.RiskLevel = strings.Join([]string{"R", strconv.Itoa(riskNum)}, "")
 			} else {
@@ -918,6 +944,10 @@ func convertToHotRankedReport(dto reportService.ReportDTO) (report HotRankedRepo
 func convertToPublishRankedReportList(dtoList []reportService.ReportDTO) (reports []PublishRankedReport) {
 	reports = []PublishRankedReport{}
 	for _, dto := range dtoList {
+		risk, err := parseRiskLevel(dto.RiskLevel)
+		if err != nil || risk == 0 {
+			continue
+		}
 		src, err := mediaService.GetImageSrc(dto.CoverSrc)
 		if err != nil {
 			logger.Error("获取封面图片失败:%v", err)