Browse Source

媒体产品信息

kobe6258 5 months ago
parent
commit
8171fee4d1

+ 5 - 5
controllers/media/media_controller.go

@@ -51,8 +51,8 @@ func (m *MediaController) Search(mediaType string, key string) {
 			reports := new(page.PageResult)
 			reports.Data = []reportService.ReportDTO{}
 			reports.Page = pageRes
-			logger.Info("没有可以查询的报告列表")
-			m.SuccessResult("分页搜索报告列表成功", reports, result)
+			logger.Info("没有可以查询的媒体列表")
+			m.SuccessResult("分页搜索媒体列表成功", reports, result)
 			return
 		}
 		if m.PageInfo.LatestId == 0 {
@@ -63,15 +63,15 @@ func (m *MediaController) Search(mediaType string, key string) {
 			pageRes.Total = m.PageInfo.Total
 		}
 		pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
-		list, err := media.SearchMediaList(mediaType, key, mediaIds, m.PageInfo, isLogin(detailType))
+		list, err := media.SearchMediaList(mediaType, key, mediaIds, m.PageInfo, isLogin(detailType), userInfo.Id)
 		if err != nil {
-			m.FailedResult("分页搜索报告列表失败", result)
+			m.FailedResult("分页搜索媒体列表失败", result)
 			return
 		}
 		reports := new(page.PageResult)
 		reports.Data = list
 		reports.Page = pageRes
-		m.SuccessResult("分页搜索报告列表成功", reports, result)
+		m.SuccessResult("分页搜索媒体列表成功", reports, result)
 		return
 	})
 }

+ 1 - 1
domian/media/media_service.go

@@ -149,7 +149,7 @@ func GetMediaPermissionMappingByPermissionIds(mediaType string, permissionIds []
 			logger.Error("解析风险等级失败:%v", err)
 			return
 		}
-		//再把符合风险等级的产品报告加入
+		//再把符合风险等级的产品加入
 		for _, mediaId := range ids {
 			for _, product := range productList {
 				if product.SourceID == mediaId {

+ 76 - 2
service/media/media_service.go

@@ -367,6 +367,24 @@ func matchRiskLevel(userId int, media mediaService.MediaDTO) (riskLevelMatch str
 		return
 	}
 }
+
+func getHighestRiskLevel(permissions []permissionService.PermissionDTO) (riskLevelNum int) {
+	for _, permission := range permissions {
+		pRiskNum, err := parseRiskLevel(permission.RiskLevel)
+		if err != nil {
+			logger.Error("解析风险等级失败:%v", err)
+			continue
+		}
+		if riskLevelNum == 0 {
+			riskLevelNum = pRiskNum
+		} else {
+			if riskLevelNum < pRiskNum {
+				riskLevelNum = pRiskNum
+			}
+		}
+	}
+	return
+}
 func getLowestRiskLevel(permissions []permissionService.PermissionDTO) (riskLevelNum int) {
 	for _, permission := range permissions {
 		pRiskNum, err := parseRiskLevel(permission.RiskLevel)
@@ -437,7 +455,12 @@ func GetMediaPageByIds(mediaType string, pageInfo page.PageInfo, mediaIds []int,
 				logger.Error("品种名称列表转换失败:%v", err)
 			}
 			media.PermissionNames = getMediaPermissionNames(ids)
-			//permissions, err := getMediaSecondPermissions(ids)
+			permissions, permissionErr := getMediaSecondPermissions(ids)
+			if permissionErr != nil {
+				logger.Error("获取媒体品种信息失败:%v,无法设置媒体风险等级", err)
+			}
+			riskNum := getHighestRiskLevel(permissions)
+			media.RiskLevel = strings.Join([]string{"R", strconv.Itoa(riskNum)}, "")
 			if !isLogin {
 				media.Src = ""
 			}
@@ -509,7 +532,7 @@ func getMediaPermissionNames(id []int) (labels []string) {
 
 // stringToIntSlice 将一个包含数字字符串的切片转换为整数切片
 
-func SearchMediaList(mediaType string, key string, mediaIds []int, pageInfo page.PageInfo, isLogin bool) (medias []mediaService.MediaDTO, err error) {
+func SearchMediaList(mediaType string, key string, mediaIds []int, pageInfo page.PageInfo, isLogin bool, userId int) (medias []mediaService.MediaDTO, err error) {
 	offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
 	medias, err = mediaService.SearchMediaList(mediaType, key, mediaIds, offset, pageInfo.PageSize, pageInfo.LatestId)
 	var wg sync.WaitGroup
@@ -524,9 +547,60 @@ func SearchMediaList(mediaType string, key string, mediaIds []int, pageInfo page
 				logger.Error("获取品种列表失败:%v", err)
 			}
 			media.PermissionNames = getMediaPermissionNames(ids)
+			permissions, permissionErr := getMediaSecondPermissions(ids)
+			if permissionErr != nil {
+				logger.Error("获取媒体品种信息失败:%v,无法设置媒体风险等级", err)
+			}
+			riskNum := getHighestRiskLevel(permissions)
+			media.RiskLevel = strings.Join([]string{"R", strconv.Itoa(riskNum)}, "")
 			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
+			}
 		}(&medias[i])
 	}
 	wg.Wait()