Browse Source

首页搜索

kobe6258 4 months ago
parent
commit
347778ad49

+ 72 - 1
common/component/es/es.go

@@ -43,6 +43,7 @@ const (
 
 	RangeWithDocIds = "range_with_doc_ids"
 	LimitByScore    = "limit_by_score"
+	HomeSearch      = "home_search"
 )
 
 func GetInstance() *ESClient {
@@ -199,6 +200,11 @@ func (req *ESQueryRequest) Range(from int64, to int64, column string) *ESQueryRe
 	req.Min = from
 	return req
 }
+func (req *ESQueryRequest) Before(max interface{}, column string) *ESQueryRequest {
+	req.RangeColumn = column
+	req.Max = max
+	return req
+}
 func (req *ESQueryRequest) ByCondition(column string, value string) *ESQueryRequest {
 	req.Condition = column
 	req.ConditionValue = value
@@ -437,6 +443,70 @@ func (req *ESQueryRequest) parseJsonQuery() (queryMap map[string]interface{}) {
 			"min_score": req.MinScore,
 		}
 		return
+	case HomeSearch:
+		queryMap = map[string]interface{}{
+			"query": map[string]interface{}{
+				"bool": map[string]interface{}{
+					"should": []map[string]interface{}{
+						{
+							"bool": map[string]interface{}{
+								"must": []map[string]interface{}{
+									{
+										"match": map[string]interface{}{
+											"title": req.Key,
+										},
+									},
+									{
+										"term": map[string]interface{}{
+											"status": "PUBLISH",
+										},
+									},
+									{
+										"range": map[string]interface{}{
+											"publishedTime": map[string]interface{}{
+												"lte": req.Max,
+											},
+										},
+									},
+								},
+							},
+						},
+						{
+							"bool": map[string]interface{}{
+								"must": []map[string]interface{}{
+									{
+										"match": map[string]interface{}{
+											"mediaName": req.Key,
+										},
+									},
+									{
+										"term": map[string]interface{}{
+											"deleted": 0,
+										},
+									},
+									{
+										"range": map[string]interface{}{
+											req.RangeColumn: map[string]interface{}{
+												"lte": req.Max,
+											},
+										},
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+			"highlight": map[string]interface{}{
+				"fields": map[string]interface{}{
+					"title":     map[string]interface{}{},
+					"mediaName": map[string]interface{}{},
+				},
+				"pre_tags":  []string{"<span style='color:#0078E8'>"},
+				"post_tags": []string{"</span>"},
+			},
+		}
+		return
 	default:
 		queryMap = map[string]interface{}{}
 		return
@@ -486,8 +556,9 @@ func (es *ESClient) Search(params *ESQueryRequest) (response ESResponse, err err
 	queryMap := params.parseJsonQuery()
 	jsonQuery, _ := json.Marshal(queryMap)
 	logger.Info("查询语句: %s", string(jsonQuery))
+	indexes := strings.Split(params.IndexName, ",")
 	request := esapi.SearchRequest{
-		Index: []string{params.IndexName},
+		Index: indexes,
 		Body:  strings.NewReader(string(jsonQuery)),
 		From:  &params.From,
 		Size:  &params.Size,

+ 6 - 4
common/utils/page/page_utils.go

@@ -3,10 +3,11 @@ package page
 import "math"
 
 type PageInfo struct {
-	LatestId int64
-	Current  int
-	PageSize int
-	Total    int64
+	LatestId  int64
+	Current   int
+	PageSize  int
+	Total     int64
+	TimeStamp int64
 }
 type PageResult struct {
 	Page Page
@@ -19,6 +20,7 @@ type Page struct {
 	Total     int64  `json:"total"`
 	Range     string `json:"range"`
 	TotalPage int    `json:"totalPage"`
+	TimeStamp int64  `json:"timeStamp"`
 }
 
 func StartIndex(page, pagesize int) int {

+ 58 - 52
controllers/home/home_controller.go

@@ -1,71 +1,77 @@
 package home
 
 import (
+	logger "eta/eta_mini_ht_api/common/component/log"
+	"eta/eta_mini_ht_api/common/exception"
+	"eta/eta_mini_ht_api/common/utils/page"
 	"eta/eta_mini_ht_api/controllers"
+	homeService "eta/eta_mini_ht_api/service/home"
+	"eta/eta_mini_ht_api/service/user"
+	"time"
 )
 
 type HomeController struct {
 	controllers.ListController
 }
 
+func isLogin(listType string) bool {
+	if listType == "logout" {
+		logger.Info("当前用户未登录,展示部分详情")
+		return false
+	}
+	if listType == "login" {
+		return true
+	}
+	return false
+}
+
 // Search 搜索报告列表
 // @Description 搜索报告列表
 // @Success 200 {object}
 // @router /search [get]
 func (r *HomeController) Search(key string) {
 	controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
-		result = r.InitWrapData("分页搜索报告列表失败")
-		//if key == "" {
-		//	err = exception.New(exception.SearchKeyEmptyError)
-		//	r.FailedResult("分页搜索报告列表失败", result)
-		//	return
-		//}
-		//detailType := r.Data["detailType"].(string)
-		//userInfo := r.Data["user"].(user.User)
-		//pageRes := page.Page{
-		//	Current:  r.PageInfo.Current,
-		//	PageSize: r.PageInfo.PageSize,
-		//}
-		////获取当前可以被搜索的报告原始ID
-		////先要限制查询的id范围
-		//var reportIds []int
-		//pageRes.Total, pageRes.LatestId, reportIds, err = report.RangeSearch(key, isLogin(detailType), userInfo.Id)
-		//if err != nil {
-		//	logger.Error("获取报告原始ID列表失败:%v", err)
-		//	r.FailedResult("分页搜索报告列表失败", result)
-		//	return
-		//}
-		//if len(reportIds) == 0 {
-		//	reports := new(page.PageResult)
-		//	reports.Data = []reportService.ReportDTO{}
-		//	reports.Page = pageRes
-		//	logger.Info("没有可以查询的报告列表")
-		//	r.SuccessResult("分页搜索报告列表成功", reports, result)
-		//	return
-		//}
-		//
-		//if r.PageInfo.LatestId == 0 {
-		//	//pageRes.Total, pageRes.LatestId = report.SearchMaxReportId(key)
-		//	r.PageInfo.LatestId = pageRes.LatestId
-		//	r.PageInfo.Total = pageRes.Total
-		//} else {
-		//	pageRes.LatestId = r.PageInfo.LatestId
-		//	pageRes.Total = r.PageInfo.Total
-		//}
-		//pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
-		//list := make([]reportService.ReportDTO, 0)
-		//if pageRes.LatestId > 0 {
-		//	//订阅 TODO
-		//	list, err = report.SearchReportList(key, reportIds, r.PageInfo, isLogin(detailType), userInfo.Id)
-		//	if err != nil {
-		//		r.FailedResult("分页搜索报告列表失败", result)
-		//		return
-		//	}
-		//}
-		//reports := new(page.PageResult)
-		//reports.Data = list
-		//reports.Page = pageRes
-		//r.SuccessResult("分页搜索报告列表成功", reports, result)
+		result = r.InitWrapData("分页搜索列表失败")
+		if key == "" {
+			err = exception.New(exception.SearchKeyEmptyError)
+			r.FailedResult("分页搜索报告列表失败", result)
+			return
+		}
+		detailType := r.Data["detailType"].(string)
+		userInfo := r.Data["user"].(user.User)
+		pageRes := page.Page{
+			Current:  r.PageInfo.Current,
+			PageSize: r.PageInfo.PageSize,
+		}
+
+		if r.PageInfo.TimeStamp == 0 {
+			r.PageInfo.TimeStamp = time.Now().Unix()
+		} else {
+			pageRes.LatestId = r.PageInfo.LatestId
+			pageRes.Total = r.PageInfo.Total
+		}
+		var total int64
+		var list []homeService.HomeSearch
+		list, total, err = homeService.Search(key, r.PageInfo, isLogin(detailType), userInfo.Id)
+		if err != nil {
+			r.FailedResult("分页搜索报告列表失败", result)
+			return
+		}
+		var dataList []interface{}
+		for _, item := range list {
+			switch item.ResultType {
+			case homeService.ReportResultType:
+				dataList = append(dataList, item.Report)
+			case homeService.MediaResultType:
+				dataList = append(dataList, item.Media)
+			}
+		}
+		r.PageInfo.Total = total
+		pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
+		reports := new(page.PageResult)
+		reports.Data = dataList
+		reports.Page = pageRes
+		r.SuccessResult("分页搜索报告列表成功", reports, result)
 		return
 	})
 }

+ 0 - 1
controllers/report/report_controller.go

@@ -62,7 +62,6 @@ func (r *ReportController) Search(key string) {
 		pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
 		list := make([]reportService.ReportDTO, 0)
 		if pageRes.LatestId > 0 {
-			//订阅 TODO
 			list, err = report.SearchReportList(key, reportIds, r.PageInfo, isLogin(detailType), userInfo.Id)
 			if err != nil {
 				r.FailedResult("分页搜索报告列表失败", result)

+ 11 - 0
routers/commentsRouter.go

@@ -7,6 +7,17 @@ import (
 
 func init() {
 
+    beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/home:HomeController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/home:HomeController"],
+        beego.ControllerComments{
+            Method: "Search",
+            Router: `/search`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(
+				param.New("key"),
+			),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/media:MediaController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/media:MediaController"],
         beego.ControllerComments{
             Method: "Count",

+ 129 - 0
service/home/home_service.go

@@ -0,0 +1,129 @@
+package home
+
+import (
+	"encoding/json"
+	"eta/eta_mini_ht_api/common/component/config"
+	"eta/eta_mini_ht_api/common/component/es"
+	logger "eta/eta_mini_ht_api/common/component/log"
+	"eta/eta_mini_ht_api/common/contants"
+	"eta/eta_mini_ht_api/common/utils/page"
+	mediaDomian "eta/eta_mini_ht_api/domian/media"
+	reportDomain "eta/eta_mini_ht_api/domian/report"
+	mediaService "eta/eta_mini_ht_api/service/media"
+	reportService "eta/eta_mini_ht_api/service/report"
+	"strings"
+	"sync"
+	"time"
+)
+
+var (
+	sortField = []string{"_score:desc"}
+	htConfig  = config.GetConfig(contants.HT).(*config.HTBizConfig)
+)
+
+const (
+	ReportColumn = "title"
+	MediaColumn  = "mediaName"
+)
+
+type ResultType string
+
+const (
+	MediaResultType  ResultType = "media"
+	ReportResultType ResultType = "report"
+)
+
+type HomeSearch struct {
+	ResultType ResultType
+	Media      *mediaDomian.MediaDTO
+	Report     *reportDomain.ReportDTO
+}
+
+func elastic() *es.ESClient {
+	return es.GetInstance()
+}
+func Search(key string, pageInfo page.PageInfo, login bool, templateUserId int) (result []HomeSearch, total int64, err error) {
+	//同步es
+	offset := page.StartIndex(pageInfo.Current, pageInfo.PageSize)
+	sorts := append(sortField, "publishedTime:desc")
+	deadLine := time.Unix(pageInfo.TimeStamp, 0).Format(time.DateTime)
+	request := homeSearch(key, offset, pageInfo.PageSize, sorts, deadLine)
+	re, err := elastic().Search(request)
+	if err != nil {
+		logger.Error("es搜索异常:%v", err)
+	}
+	hits := elastic().GetSource(re.Hits)
+	if len(hits) == 0 {
+		return
+	}
+	for _, hit := range hits {
+		var content map[string][]string
+		err = json.Unmarshal(hit.Highlight, &content)
+		searchResult := HomeSearch{}
+		err = json.Unmarshal(hit.Source, &searchResult)
+		if err != nil {
+			logger.Error("解析研报数据失败:%v", err)
+			continue
+		}
+		switch hit.Index {
+		case htConfig.GetMediaIndex():
+			searchResult = HomeSearch{
+				ResultType: MediaResultType,
+				Media:      transMedia(hit, content),
+			}
+		case htConfig.GetReportIndex():
+			searchResult = HomeSearch{
+				ResultType: ReportResultType,
+				Report:     transReport(hit, content),
+			}
+		}
+		result = append(result, searchResult)
+	}
+	_, mappingRiskLevel, err := reportService.CheckUserRisk(nil, login, templateUserId)
+	if err != nil {
+		logger.Error("获取用户信息失败:%v", err)
+	}
+	var wg sync.WaitGroup
+	wg.Add(len(result))
+	for i := 0; i < len(result); i++ {
+		go func(searchResult *HomeSearch) {
+			defer wg.Done()
+			switch searchResult.ResultType {
+			case ReportResultType:
+				searchResult.Report, _ = reportService.DealReportInfo(searchResult.Report, login, templateUserId)
+			case MediaResultType:
+				searchResult.Media, _ = mediaService.DealMediaInfo(searchResult.Media, login, templateUserId, mappingRiskLevel)
+			}
+		}(&result[i])
+	}
+	wg.Wait()
+	return
+}
+
+func transMedia(hit es.Hit, content map[string][]string) (media *mediaDomian.MediaDTO) {
+	err := json.Unmarshal(hit.Source, &media)
+	if err != nil {
+		logger.Error("解析媒体数据失败:%v", err)
+		return
+	}
+	media.Highlight = content[MediaColumn]
+	media.PublishedTime = media.PublishedTime[:10]
+	media.MediaTitle = media.Highlight[0]
+	return
+}
+
+func transReport(hit es.Hit, content map[string][]string) (report *reportDomain.ReportDTO) {
+	err := json.Unmarshal(hit.Source, &report)
+	if err != nil {
+		logger.Error("解析研报数据失败:%v", err)
+		return
+	}
+	report.Highlight = content[ReportColumn]
+	report.Title = report.Highlight[0]
+	report.PublishedTime = report.PublishedTime[:10]
+	return
+}
+func homeSearch(key string, from int, to int, sorts []string, publishedTime string) (request *es.ESQueryRequest) {
+	req := new(es.ESQueryRequest)
+	return req.CreateESQueryRequest(strings.Join([]string{htConfig.GetReportIndex(), htConfig.GetMediaIndex()}, ","), "", key, from, to, sorts, es.HomeSearch).ByCondition("status", "PUBLISH").Before(publishedTime, "publishedTime")
+}

+ 139 - 128
service/media/media_service.go

@@ -63,45 +63,48 @@ func CountMedia(count RecordCount) (traceId string, err error) {
 }
 
 func RangeSearchByAnalyst(mediaType string, analystId int, userId int) (total int64, latestId int64, ids []int, mappingRiskLevel string) {
-	var err error
-	//登录了需要校验风险等级,如果风险等级没做或者过期直接返回空,做了就筛选风险等级
-	userProfile, userErr := user.GetUserProfile(userId)
-	if userErr != nil {
-		if errors.Is(userErr, gorm.ErrRecordNotFound) {
-			err = exception.New(exception.TemplateUserNotFound)
-		} else {
-			err = exception.New(exception.TemplateUserFoundFailed)
-		}
-		logger.Error("分页查询报告列表失败:%v", err)
-		return
-	}
-	//获取产品风险等级
-	if userProfile.RiskLevel == user.RiskUnTest {
-		logger.Error("客户未做风险等级测评,mobile:%v", userProfile.Mobile)
-		return
-	}
-	if userProfile.RiskLevelStatus == user.RiskExpired {
-		logger.Error("客户风险等级已过期,mobile:%v", userProfile.Mobile)
-		return
-	}
-	mapping, mappingErr := permissionService.GetRiskMappingByCustomerRiskLevel(userProfile.RiskLevel)
-	if mappingErr != nil {
-		logger.Error("查询产品风险等级映射失败:%v", mappingErr)
-		return
-	}
-	mappingRiskLevel = mapping.ProductRiskLevel
-	var permissionList []permissionService.PermissionDTO
-	//获取所有设置风险等级的品种
-	permissionList, err = permissionService.GetPermissionListWithRisk()
-	permissionList = filterPermissionsByRisk(permissionList, mapping.ProductRiskLevel)
-	if len(permissionList) == 0 {
+	//var err error
+	////登录了需要校验风险等级,如果风险等级没做或者过期直接返回空,做了就筛选风险等级
+	//userProfile, userErr := user.GetUserProfile(userId)
+	//if userErr != nil {
+	//	if errors.Is(userErr, gorm.ErrRecordNotFound) {
+	//		err = exception.New(exception.TemplateUserNotFound)
+	//	} else {
+	//		err = exception.New(exception.TemplateUserFoundFailed)
+	//	}
+	//	logger.Error("分页查询报告列表失败:%v", err)
+	//	return
+	//}
+	////获取产品风险等级
+	//if userProfile.RiskLevel == user.RiskUnTest {
+	//	logger.Error("客户未做风险等级测评,mobile:%v", userProfile.Mobile)
+	//}
+	//if userProfile.RiskLevelStatus == user.RiskExpired {
+	//	logger.Error("客户风险等级已过期,mobile:%v", userProfile.Mobile)
+	//}
+	//mapping, mappingErr := permissionService.GetRiskMappingByCustomerRiskLevel(userProfile.RiskLevel)
+	//if mappingErr != nil {
+	//	logger.Error("查询产品风险等级映射失败:%v", mappingErr)
+	//	return
+	//}
+	//mappingRiskLevel = mapping.ProductRiskLevel
+	//var permissionList []permissionService.PermissionDTO
+	////获取所有设置风险等级的品种
+	//permissionList, err = permissionService.GetPermissionListWithRisk()
+	//permissionList = filterPermissionsByRisk(permissionList, mapping.ProductRiskLevel)
+	//if len(permissionList) == 0 {
+	//	return
+	//}
+	//var filterPermissionIds []int
+	//for _, permission := range permissionList {
+	//	filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
+	//}
+	filterPermissionIds, riskLevel, err := report.CheckUserRisk(nil, true, userId)
+	if err != nil {
+		logger.Error("校验用户风险等级失败:%v", err)
 		return
 	}
-	var filterPermissionIds []int
-	for _, permission := range permissionList {
-		filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
-	}
-	return mediaService.GetAnalystMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds, analystId, mappingRiskLevel)
+	return mediaService.GetAnalystMediaPermissionMappingByPermissionIds(mediaType, filterPermissionIds, analystId, riskLevel)
 }
 
 func getCount(mediaType string, permissionIds []int, isLogin bool, userId int) (total int64, latestId int64, orgIds []int, mappingPdRisk string) {
@@ -305,6 +308,103 @@ func GetMediaPermissionNames(id []int) (labels []string) {
 	}
 	return
 }
+func DealMediaInfo(media *mediaService.MediaDTO, isLogin bool, templateUserId int, mappingRiskLevel string) (resultMedia *mediaService.MediaDTO, err error) {
+	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 = ""
+	}
+	var packageList []productService.MerchantProductDTO
+	product, pdErr := productService.GetProductBySourceId(media.MediaId, productType)
+	if pdErr != nil {
+		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 {
+		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 {
+			for _, subscribe := range subscribeList {
+				if subscribe.Status == productDao.SubscribeValid {
+					media.IsSubscribe = true
+					break
+				}
+			}
+		}
+	}
+	media.RiskLevelStatus = RiskLevelUnMatch
+	mappingRiskNum, parseErr := config.ParseRiskLevel(mappingRiskLevel)
+	if parseErr != nil {
+		return
+	}
+	var rpRiskNum int
+	rpRiskNum, parseErr = config.ParseRiskLevel(media.RiskLevel)
+	if parseErr != nil {
+		return
+	}
+	if rpRiskNum <= mappingRiskNum {
+		media.RiskLevelStatus = RiskLevelMatch
+	}
+	resultMedia = media
+	return
+}
 
 // stringToIntSlice 将一个包含数字字符串的切片转换为整数切片
 func dealMediaInfo(list []mediaService.MediaDTO, isLogin bool, templateUserId int, mappingRiskLevel string) (dealList []mediaService.MediaDTO, err error) {
@@ -314,98 +414,9 @@ func dealMediaInfo(list []mediaService.MediaDTO, isLogin bool, templateUserId in
 	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)
+			media, err = DealMediaInfo(media, isLogin, templateUserId, mappingRiskLevel)
 			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 = ""
-			}
-			var packageList []productService.MerchantProductDTO
-			product, pdErr := productService.GetProductBySourceId(media.MediaId, productType)
-			if pdErr != nil {
-				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 {
-				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 {
-					for _, subscribe := range subscribeList {
-						if subscribe.Status == productDao.SubscribeValid {
-							media.IsSubscribe = true
-							break
-						}
-					}
-				}
-			}
-			media.RiskLevelStatus = RiskLevelUnMatch
-			mappingRiskNum, parseErr := config.ParseRiskLevel(mappingRiskLevel)
-			if parseErr != nil {
-				return
-			}
-			var rpRiskNum int
-			rpRiskNum, parseErr = config.ParseRiskLevel(media.RiskLevel)
-			if parseErr != nil {
-				return
-			}
-			if rpRiskNum <= mappingRiskNum {
-				media.RiskLevelStatus = RiskLevelMatch
+				logger.Error("处理媒体信息失败:%v", err)
 			}
 		}(&list[i])
 	}

+ 82 - 73
service/report/report_service.go

@@ -292,87 +292,96 @@ func dealReportInfo(list []reportService.ReportDTO, isLogin bool, userId int) (r
 	for i := 0; i < len(list); i++ {
 		go func(report *reportService.ReportDTO) {
 			defer wg.Done()
-			report.Login = isLogin
-			report.Permissions, report.PermissionNames = GetReportPermissionNames(report.OrgId, report.Source)
-			var permissions []permissionService.PermissionDTO
-			permissions, report.SecondPermission = getReportSecondPermissions(report.OrgId, report.Source)
-			if len(permissions) == 0 {
-				return
-			}
-			riskNum := config.GetHighestRiskLevel(permissions)
-			report.RiskLevel = strings.Join([]string{"R", strconv.Itoa(riskNum)}, "")
-			var src string
-			src, err = mediaService.GetImageSrc(report.CoverSrc)
+			report, err = DealReportInfo(report, isLogin, userId)
 			if err != nil {
-				logger.Error("获取图片地址失败:%v", err)
-				src = ""
-			} else {
-				report.CoverUrl = src
+				logger.Error("处理报告信息失败:%v", err)
 			}
-			//套餐信息
-			var packageList []productService.MerchantProductDTO
-			//查询产品信息
-			product, pdErr := productService.GetProductBySourceId(report.ReportID, productDao.Report)
-			if pdErr != nil {
-				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 = true
-					report.IsSubscribe = false
-					report.IsPackage = false
-				}
+		}(&list[i])
+	}
+	wg.Wait()
+	resultList = list
+	return
+}
+
+func DealReportInfo(report *reportService.ReportDTO, isLogin bool, userId int) (resultReport *reportService.ReportDTO, err error) {
+	report.Login = isLogin
+	report.Permissions, report.PermissionNames = GetReportPermissionNames(report.OrgId, report.Source)
+	var permissions []permissionService.PermissionDTO
+	permissions, report.SecondPermission = getReportSecondPermissions(report.OrgId, report.Source)
+	if len(permissions) == 0 {
+		return
+	}
+	riskNum := config.GetHighestRiskLevel(permissions)
+	report.RiskLevel = strings.Join([]string{"R", strconv.Itoa(riskNum)}, "")
+	var src string
+	src, err = mediaService.GetImageSrc(report.CoverSrc)
+	if err != nil {
+		logger.Error("获取图片地址失败:%v", err)
+		src = ""
+	} else {
+		report.CoverUrl = src
+	}
+	//套餐信息
+	var packageList []productService.MerchantProductDTO
+	//查询产品信息
+	product, pdErr := productService.GetProductBySourceId(report.ReportID, productDao.Report)
+	if pdErr != nil {
+		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 = product.Price.String()
+				report.Price = defaultProductPrice
 				report.IsFree = false
-				report.ProductId = product.Id
-				report.IsPackage = false
+				report.IsSubscribe = false
+				report.IsPackage = true
+				report.ProductId = packageList[0].Id
 			}
-			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
-						}
-					}
-
+		} else {
+			report.Price = defaultProductPrice
+			report.IsFree = true
+			report.IsSubscribe = false
+			report.IsPackage = false
+		}
+	} else {
+		report.Price = product.Price.String()
+		report.IsFree = false
+		report.ProductId = product.Id
+		report.IsPackage = false
+	}
+	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])
+
+		}
 	}
-	wg.Wait()
-	resultList = list
+	resultReport = report
 	return
 }