Browse Source

产品列表

kobe6258 3 months ago
parent
commit
05a928a94a

+ 2 - 0
domian/media/media_service.go

@@ -59,7 +59,9 @@ type MediaDTO struct {
 	IsFree                bool     `json:"isFree"`
 	Price                 string   `json:"price"`
 	IsSubscribe           bool     `json:"isSubscribe"`
+	IsPackage             bool     `json:"isPackage"`
 	RiskLevel             string   `json:"riskLevel"`
+	ProductId             int      `json:"productId"`
 }
 
 func SearchMediaList(_ string, key string, mediaIds []int, from int, size int, max int64) (reports []MediaDTO, err error) {

+ 2 - 2
domian/user/user_subscription_service.go

@@ -4,6 +4,6 @@ import (
 	subscribeDao "eta/eta_mini_ht_api/models/merchant"
 )
 
-func GetUserSubscribe(productId int, userId int) (subscribeDao.UserSubscriptionAccessList, error) {
-	return subscribeDao.GetUserSubscribe(productId, userId)
+func GetUserSubscribe(productIds []int, userId int) (list []subscribeDao.UserSubscriptionAccessList, err error) {
+	return subscribeDao.GetUserSubscribe(productIds, userId)
 }

+ 2 - 2
models/merchant/user_subscription_access_list.go

@@ -43,9 +43,9 @@ func (UserSubscriptionAccessList) TableName() string {
 	return "user_subscription_access_list"
 }
 
-func GetUserSubscribe(productId int, userId int) (userSubscriptionAccessList UserSubscriptionAccessList, err error) {
+func GetUserSubscribe(productIds []int, userId int) (list []UserSubscriptionAccessList, err error) {
 	db := models.Main()
-	err = db.Select("id,template_user_id,product_id,product_name,begin_date,end_date,status").Where("template_user_id=? and product_id=?", userId, productId).First(&userSubscriptionAccessList).Error
+	err = db.Select("id,template_user_id,product_id,product_name,begin_date,end_date,status").Where("template_user_id=? and product_id in ?", userId, productIds).Find(&list).Error
 	return
 }
 

+ 61 - 214
service/media/media_service.go

@@ -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)
 	}

+ 7 - 6
service/product/product_service.go

@@ -1,7 +1,6 @@
 package product
 
 import (
-	"errors"
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/common/exception"
 	"eta/eta_mini_ht_api/common/utils/page"
@@ -17,7 +16,6 @@ import (
 	"eta/eta_mini_ht_api/service/order"
 	reportService "eta/eta_mini_ht_api/service/report"
 	"fmt"
-	"gorm.io/gorm"
 	"sync"
 	"time"
 )
@@ -308,14 +306,17 @@ func ProductList(productIds []int, templateUserId int, info page.PageInfo) (dtoL
 	for i := 0; i < len(dtoList); i++ {
 		go func(productDTO *ProductDTO) {
 			defer wg.Done()
-			_, subErr := user.GetUserSubscribe(productDTO.Id, templateUserId)
+			list, subErr := user.GetUserSubscribe([]int{productDTO.Id}, templateUserId)
 			if subErr != nil {
-				if errors.Is(subErr, gorm.ErrRecordNotFound) {
+				logger.Error("获取用户订阅状态失败:%v", err)
+				productDTO.IsSubscribe = false
+			} else {
+				if len(list) == 0 {
 					logger.Error("用户未订阅单品,productId:%v", productDTO.Id)
 					productDTO.IsSubscribe = false
+				} else {
+					productDTO.IsSubscribe = true
 				}
-				logger.Error("获取用户订阅状态失败:%v", err)
-				productDTO.IsSubscribe = false
 			}
 		}(&dtoList[i])
 	}

+ 38 - 30
service/report/report_service.go

@@ -302,40 +302,33 @@ func dealReportInfo(list []reportService.ReportDTO, isLogin bool, userId int) (r
 				report.CoverUrl = src
 			}
 			//套餐信息
-			
+			var packageList []productService.MerchantProductDTO
 			//查询产品信息
 			product, pdErr := productService.GetProductBySourceId(report.ReportID, productDao.Report)
 			if pdErr != nil {
-				if errors.Is(pdErr, gorm.ErrRecordNotFound) {
-					var permissionIds []int
-					if len(permissions) > 0 {
-						for _, permission := range permissions {
-							permissionIds = append(permissionIds, permission.PermissionId)
-						}
-						//单品不存在的话查套餐
-						productList, prodErr := productService.GetProductListBySourceIds(permissionIds, "package")
-						if prodErr != nil || len(productList) == 0 {
-							logger.Error("获取套餐列表失败:%v", pdErr)
-							report.Price = defaultProductPrice
-							report.IsFree = true
-							report.IsSubscribe = false
-							report.IsPackage = false
-						} else {
-							report.Price = defaultProductPrice
-							report.IsFree = true
-							report.IsSubscribe = false
-							report.IsPackage = true
-							report.ProductId = productList[0].Id
-						}
-					} else {
+				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)
 						report.Price = defaultProductPrice
 						report.IsFree = true
 						report.IsSubscribe = false
 						report.IsPackage = false
+					} else {
+						report.Price = defaultProductPrice
+						report.IsFree = false
+						report.IsSubscribe = false
+						report.IsPackage = true
+						report.ProductId = packageList[0].Id
 					}
 				} else {
 					report.Price = defaultProductPrice
-					report.IsFree = false
+					report.IsFree = true
 					report.IsSubscribe = false
 					report.IsPackage = false
 				}
@@ -344,13 +337,28 @@ func dealReportInfo(list []reportService.ReportDTO, isLogin bool, userId int) (r
 				report.IsFree = false
 				report.ProductId = product.Id
 				report.IsPackage = false
-				if isLogin {
-					subscribe, subscribeErr := userService.GetUserSubscribe(product.Id, userId)
-					if subscribeErr != nil {
-						report.IsSubscribe = false
-					} else {
-						report.IsSubscribe = subscribe.Status == productDao.SubscribeValid
+			}
+			if isLogin {
+				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, userId)
+				if subscribeErr != nil {
+					report.IsSubscribe = false
+				} else {
+					for _, subscribe := range subscribeList {
+						if subscribe.Status == productDao.SubscribeValid {
+							report.IsSubscribe = true
+							break
+						}
 					}
+
 				}
 			}
 		}(&list[i])