|
@@ -272,85 +272,7 @@ func GetMediaPageByAnalystId(mediaType string, pageInfo page.PageInfo, analystId
|
|
|
return
|
|
|
}
|
|
|
//并发获取媒体的标签
|
|
|
- var wg sync.WaitGroup
|
|
|
- wg.Add(len(list))
|
|
|
- for i := 0; i < len(list); i++ {
|
|
|
- go func(media *mediaService.MediaDTO) {
|
|
|
- defer wg.Done()
|
|
|
- idStr := strings.Split(media.PermissionIDs, ",")
|
|
|
- var ids []int
|
|
|
- ids, err = stringUtils.StringToIntSlice(idStr)
|
|
|
- if err != nil {
|
|
|
- logger.Error("获取品种列表失败:%v", err)
|
|
|
- }
|
|
|
- media.PermissionNames = GetMediaPermissionNames(ids)
|
|
|
- permissions, permissionErr := getMediaSecondPermissions(ids)
|
|
|
- if permissionErr != nil {
|
|
|
- logger.Error("获取媒体品种信息失败:%v,无法设置媒体风险等级", err)
|
|
|
- }
|
|
|
- riskNum := config.GetHighestRiskLevel(permissions)
|
|
|
- media.RiskLevel = strings.Join([]string{"R", strconv.Itoa(riskNum)}, "")
|
|
|
- media.Login = true
|
|
|
- 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
|
|
|
- }
|
|
|
- } else {
|
|
|
- media.Price = product.Price.String()
|
|
|
- media.IsFree = false
|
|
|
- }
|
|
|
- subscribe, subscribeErr := userService.GetUserSubscribe(product.Id, userId)
|
|
|
- if subscribeErr != nil {
|
|
|
- media.IsSubscribe = false
|
|
|
- } else {
|
|
|
- media.IsSubscribe = subscribe.Status == productDao.SubscribeValid
|
|
|
- }
|
|
|
- media.RiskLevelStatus = RiskLevelMatch
|
|
|
- pdRiskNum, parseErr := config.ParseRiskLevel(product.RiskLevel)
|
|
|
- if parseErr != nil {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- return
|
|
|
- }
|
|
|
- rpRiskNum, parseErr := config.ParseRiskLevel(media.RiskLevel)
|
|
|
- if parseErr != nil {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- return
|
|
|
- }
|
|
|
- mappingRiskNum, parseErr := config.ParseRiskLevel(mappingRiskLevel)
|
|
|
- if parseErr != nil {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- return
|
|
|
- }
|
|
|
- if rpRiskNum <= pdRiskNum {
|
|
|
- media.RiskLevel = product.RiskLevel
|
|
|
- if mappingRiskNum < pdRiskNum {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- }
|
|
|
- } else {
|
|
|
- if mappingRiskNum < rpRiskNum {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- }
|
|
|
- }
|
|
|
- }(&list[i])
|
|
|
- }
|
|
|
- wg.Wait()
|
|
|
+ list, err = dealMediaInfo(list, true, userId, mappingRiskLevel)
|
|
|
if err != nil {
|
|
|
err = exception.New(exception.GetAnalystMediaListFailed)
|
|
|
}
|
|
@@ -365,102 +287,7 @@ func GetMediaPageByIds(mediaType string, pageInfo page.PageInfo, mediaIds []int,
|
|
|
err = exception.New(exception.GetMediaListFailed)
|
|
|
return
|
|
|
}
|
|
|
- //并发获取媒体的标签
|
|
|
- var wg sync.WaitGroup
|
|
|
- wg.Add(len(list))
|
|
|
- for i := 0; i < len(list); i++ {
|
|
|
- go func(media *mediaService.MediaDTO) {
|
|
|
- defer wg.Done()
|
|
|
- idStr := strings.Split(media.PermissionIDs, ",")
|
|
|
- var ids []int
|
|
|
- ids, err = stringUtils.StringToIntSlice(idStr)
|
|
|
- if err != nil {
|
|
|
- logger.Error("品种名称列表转换失败:%v", err)
|
|
|
- }
|
|
|
- media.PermissionNames = GetMediaPermissionNames(ids)
|
|
|
- permissions, permissionErr := getMediaSecondPermissions(ids)
|
|
|
- if permissionErr != nil {
|
|
|
- logger.Error("获取媒体品种信息失败:%v,无法设置媒体风险等级", err)
|
|
|
- }
|
|
|
- riskNum := config.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)
|
|
|
- isFree := true
|
|
|
- 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
|
|
|
- }
|
|
|
- } else {
|
|
|
- media.Price = product.Price.String()
|
|
|
- media.IsFree = false
|
|
|
- isFree = false
|
|
|
- }
|
|
|
- if isLogin {
|
|
|
- subscribe, subscribeErr := userService.GetUserSubscribe(product.Id, userId)
|
|
|
- if subscribeErr != nil {
|
|
|
- media.IsSubscribe = false
|
|
|
- } else {
|
|
|
- media.IsSubscribe = subscribe.Status == productDao.SubscribeValid
|
|
|
- }
|
|
|
- }
|
|
|
- media.RiskLevelStatus = RiskLevelMatch
|
|
|
- mappingRiskNum, parseErr := config.ParseRiskLevel(mappingRiskLevel)
|
|
|
- if parseErr != nil {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- return
|
|
|
- }
|
|
|
- var rpRiskNum int
|
|
|
- rpRiskNum, parseErr = config.ParseRiskLevel(media.RiskLevel)
|
|
|
- if parseErr != nil {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- return
|
|
|
- }
|
|
|
- if !isFree {
|
|
|
- var pdRiskNum int
|
|
|
- pdRiskNum, parseErr = config.ParseRiskLevel(product.RiskLevel)
|
|
|
- if parseErr != nil {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- return
|
|
|
- }
|
|
|
- if rpRiskNum <= pdRiskNum {
|
|
|
- media.RiskLevel = product.RiskLevel
|
|
|
- if mappingRiskNum < pdRiskNum {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- }
|
|
|
- } else {
|
|
|
- if mappingRiskNum < rpRiskNum {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- if mappingRiskNum < rpRiskNum {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }(&list[i])
|
|
|
- }
|
|
|
- wg.Wait()
|
|
|
+ list, err = dealMediaInfo(list, isLogin, userId, mappingRiskLevel)
|
|
|
if err != nil {
|
|
|
err = exception.New(exception.QueryReportPageFailed)
|
|
|
}
|
|
@@ -480,20 +307,18 @@ func GetMediaPermissionNames(id []int) (labels []string) {
|
|
|
}
|
|
|
|
|
|
// stringToIntSlice 将一个包含数字字符串的切片转换为整数切片
|
|
|
-
|
|
|
-func SearchMediaList(mediaType string, key string, mediaIds []int, pageInfo page.PageInfo, isLogin bool, userId int, mappingRiskLevel string) (medias []mediaService.MediaDTO, err error) {
|
|
|
- offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
|
|
|
- medias, err = mediaService.SearchMediaList(mediaType, key, mediaIds, offset, pageInfo.PageSize, pageInfo.LatestId)
|
|
|
+func dealMediaInfo(list []mediaService.MediaDTO, isLogin bool, templateUserId int, mappingRiskLevel string) (dealList []mediaService.MediaDTO, err error) {
|
|
|
+ //并发获取媒体的标签
|
|
|
var wg sync.WaitGroup
|
|
|
- wg.Add(len(medias))
|
|
|
- for i := 0; i < len(medias); i++ {
|
|
|
+ wg.Add(len(list))
|
|
|
+ for i := 0; i < len(list); i++ {
|
|
|
go func(media *mediaService.MediaDTO) {
|
|
|
defer wg.Done()
|
|
|
idStr := strings.Split(media.PermissionIDs, ",")
|
|
|
var ids []int
|
|
|
ids, err = stringUtils.StringToIntSlice(idStr)
|
|
|
if err != nil {
|
|
|
- logger.Error("获取品种列表失败:%v", err)
|
|
|
+ logger.Error("品种名称列表转换失败:%v", err)
|
|
|
}
|
|
|
media.PermissionNames = GetMediaPermissionNames(ids)
|
|
|
permissions, permissionErr := getMediaSecondPermissions(ids)
|
|
@@ -516,60 +341,82 @@ func SearchMediaList(mediaType string, key string, mediaIds []int, pageInfo page
|
|
|
logger.Error("未知媒体类型:%s", media.MediaType)
|
|
|
productType = ""
|
|
|
}
|
|
|
+ var packageList []productService.MerchantProductDTO
|
|
|
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
|
|
|
+ var permissionIds []int
|
|
|
+ if len(permissions) > 0 {
|
|
|
+ for _, permission := range permissions {
|
|
|
+ permissionIds = append(permissionIds, permission.PermissionId)
|
|
|
+ }
|
|
|
+ //单品不存在的话查套餐
|
|
|
+ packageList, err = productService.GetProductListBySourceIds(permissionIds, "package")
|
|
|
+ if err != nil || len(packageList) == 0 {
|
|
|
+ logger.Error("获取套餐列表失败:%v", err)
|
|
|
+ media.Price = defaultProductPrice
|
|
|
+ media.IsFree = true
|
|
|
+ media.IsSubscribe = false
|
|
|
+ media.IsPackage = false
|
|
|
+ } else {
|
|
|
+ media.Price = defaultProductPrice
|
|
|
+ media.IsFree = false
|
|
|
+ media.IsSubscribe = false
|
|
|
+ media.IsPackage = true
|
|
|
+ media.ProductId = packageList[0].Id
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
media.Price = product.Price.String()
|
|
|
media.IsFree = false
|
|
|
+ media.IsPackage = false
|
|
|
+ media.IsSubscribe = false
|
|
|
+ media.ProductId = product.Id
|
|
|
}
|
|
|
if isLogin {
|
|
|
- subscribe, subscribeErr := userService.GetUserSubscribe(product.Id, userId)
|
|
|
+ var productIds []int
|
|
|
+ if len(packageList) > 0 {
|
|
|
+ for _, packageItem := range packageList {
|
|
|
+ productIds = append(productIds, packageItem.Id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if product.Id > 0 {
|
|
|
+ productIds = append(productIds, product.Id)
|
|
|
+ }
|
|
|
+ subscribeList, subscribeErr := userService.GetUserSubscribe(productIds, templateUserId)
|
|
|
if subscribeErr != nil {
|
|
|
media.IsSubscribe = false
|
|
|
} else {
|
|
|
- media.IsSubscribe = subscribe.Status == productDao.SubscribeValid
|
|
|
+ for _, subscribe := range subscribeList {
|
|
|
+ if subscribe.Status == productDao.SubscribeValid {
|
|
|
+ media.IsSubscribe = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- media.RiskLevelStatus = RiskLevelMatch
|
|
|
- pdRiskNum, parseErr := config.ParseRiskLevel(product.RiskLevel)
|
|
|
- if parseErr != nil {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- return
|
|
|
- }
|
|
|
- rpRiskNum, parseErr := config.ParseRiskLevel(media.RiskLevel)
|
|
|
+ media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
+ mappingRiskNum, parseErr := config.ParseRiskLevel(mappingRiskLevel)
|
|
|
if parseErr != nil {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
return
|
|
|
}
|
|
|
- mappingRiskNum, parseErr := config.ParseRiskLevel(mappingRiskLevel)
|
|
|
+ var rpRiskNum int
|
|
|
+ rpRiskNum, parseErr = config.ParseRiskLevel(media.RiskLevel)
|
|
|
if parseErr != nil {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
return
|
|
|
}
|
|
|
- if rpRiskNum <= pdRiskNum {
|
|
|
- media.RiskLevel = product.RiskLevel
|
|
|
- if mappingRiskNum < pdRiskNum {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- }
|
|
|
- } else {
|
|
|
- if mappingRiskNum < rpRiskNum {
|
|
|
- media.RiskLevelStatus = RiskLevelUnMatch
|
|
|
- }
|
|
|
+ if rpRiskNum <= mappingRiskNum {
|
|
|
+ media.RiskLevelStatus = RiskLevelMatch
|
|
|
}
|
|
|
-
|
|
|
- }(&medias[i])
|
|
|
+ }(&list[i])
|
|
|
}
|
|
|
wg.Wait()
|
|
|
+ dealList = list
|
|
|
+ return
|
|
|
+}
|
|
|
+func SearchMediaList(mediaType string, key string, mediaIds []int, pageInfo page.PageInfo, isLogin bool, userId int, mappingRiskLevel string) (medias []mediaService.MediaDTO, err error) {
|
|
|
+ offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
|
|
|
+ medias, err = mediaService.SearchMediaList(mediaType, key, mediaIds, offset, pageInfo.PageSize, pageInfo.LatestId)
|
|
|
+ medias, err = dealMediaInfo(medias, isLogin, userId, mappingRiskLevel)
|
|
|
if err != nil {
|
|
|
err = exception.New(exception.SearchReportPageFailed)
|
|
|
}
|