kobe6258 5 месяцев назад
Родитель
Сommit
3df7779213

+ 5 - 0
common/component/config/ht_biz_config.go

@@ -11,6 +11,7 @@ type HTOpts struct {
 	Task              string
 	AccountApiUrl     string
 	WebhookPrivateKey string
+	AccountInfoUrl    string
 }
 type HTBizConfig struct {
 	BaseConfig
@@ -25,6 +26,9 @@ func (e *HTBizConfig) GetMediaIndex() string {
 	return e.opts.MediaIndex
 }
 
+func (e *HTBizConfig) GetAccountInfoUrl() string {
+	return e.opts.AccountInfoUrl
+}
 func (e *HTBizConfig) NeedEncode() bool {
 	if e.opts.Encode == "true" {
 		return true
@@ -56,6 +60,7 @@ func (e *HTBizConfig) InitConfig() {
 		Task:              e.GetString("task"),
 		AccountApiUrl:     e.GetString("api.account_url"),
 		WebhookPrivateKey: e.GetString("webhook.private_key"),
+		AccountInfoUrl:    e.GetString("api.account_url"),
 	}
 	e.opts = opts
 }

+ 1 - 1
controllers/report/report_controller.go

@@ -118,7 +118,7 @@ func (r *ReportController) List(permissionIds string) {
 			r.SuccessResult("查询报告列表成功", reports, result)
 			return
 		}
-		list, err := report.GetReportPage(r.PageInfo, reportOrgIds, false, isLogin(detailType))
+		list, err := report.GetReportPage(r.PageInfo, reportOrgIds, false, isLogin(detailType), userInfo.Id)
 		if err != nil {
 			r.FailedResult("分页查询报告列表失败", result)
 			return

+ 2 - 0
controllers/user/auth_controller.go

@@ -111,6 +111,8 @@ func (a *AuthController) Login() {
 			a.FailedResult("登录异常,生成accessToken失败", result)
 			return
 		}
+		//财人汇判断是否是存量客户
+
 		a.SuccessResult("登录成功", &LoginResp{
 			Token: token,
 		}, result)

+ 19 - 0
domian/config/permission_service.go

@@ -13,6 +13,11 @@ type PermissionDTO struct {
 	RiskLevel      string `json:"riskLevel"`
 	Sort           int    `json:"sort"`
 }
+
+type PermissionClassifyMappingDTO struct {
+	PermissionId int
+	ClassifyId   int
+}
 type PermissionNode struct {
 	ID       int               `json:"id"`
 	Name     string            `json:"name"`
@@ -108,3 +113,17 @@ func convert(dto PermissionDTO) permissionDao.Permission {
 		Sort:         dto.Sort,
 	}
 }
+func convertMapping(dto PermissionClassifyMappingDTO) permissionDao.PermissionClassifyMapping {
+	return permissionDao.PermissionClassifyMapping{
+		PermissionID: dto.PermissionId,
+		ClassifyID:   dto.ClassifyId,
+	}
+}
+func SyncPermissionClassifyMapping(list []PermissionClassifyMappingDTO) error {
+	var permissionMappingList []permissionDao.PermissionClassifyMapping
+	for _, dto := range list {
+		permissionMapping := convertMapping(dto)
+		permissionMappingList = append(permissionMappingList, permissionMapping)
+	}
+	return permissionDao.BatchInsertOrUpdateMapping(permissionMappingList)
+}

+ 2 - 1
domian/media/media_service.go

@@ -7,6 +7,7 @@ import (
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/common/contants"
 	"eta/eta_mini_ht_api/common/utils/page"
+	configService "eta/eta_mini_ht_api/domian/config"
 	reportService "eta/eta_mini_ht_api/domian/report"
 	"eta/eta_mini_ht_api/models"
 	mediaDao "eta/eta_mini_ht_api/models/media"
@@ -214,7 +215,7 @@ func GetMediaById(mediaType string, mediaId int) (mediaDTO MediaDTO, err error)
 	mediaDTO = convertMediaDTO(media, true)
 	return
 }
-func GetPermissionsByIds(ids []int) (permissionDTOs []reportService.PermissionDTO, err error) {
+func GetPermissionsByIds(ids []int) (permissionDTOs []configService.PermissionDTO, err error) {
 	return reportService.GetFirstPermissionsByIds(ids)
 }
 

+ 16 - 0
domian/merchant/merchant_product.go

@@ -18,6 +18,7 @@ var (
 )
 
 type MerchantProductDTO struct {
+	Id          int
 	Title       string
 	CoverSrc    string
 	Description string
@@ -42,6 +43,7 @@ func GetMerchantProductById(id int) (product MerchantProductDTO, err error) {
 }
 func convertToDTO(product merchantDao.MerchantProduct) MerchantProductDTO {
 	return MerchantProductDTO{
+		Id:          product.ID,
 		Title:       product.Title,
 		CoverSrc:    product.CoverSrc,
 		Description: product.Description,
@@ -52,3 +54,17 @@ func convertToDTO(product merchantDao.MerchantProduct) MerchantProductDTO {
 		ValidDays:   product.ValidDays,
 	}
 }
+
+func GetProductBySourceId(id int, productType merchantDao.MerchantProductType) (product MerchantProductDTO, err error) {
+	productDao, err := merchantDao.GetMerchantProductBySourceId(id, productType)
+	if err != nil {
+		if errors.Is(err, gorm.ErrRecordNotFound) {
+			logger.Error("商品信息不存在[productId:%d]", id)
+		} else {
+			logger.Error("获取商品信息失败[productId:%d],err:", id, err)
+		}
+		return
+	}
+	product = convertToDTO(productDao)
+	return
+}

+ 61 - 1
domian/report/eta_report_service.go

@@ -3,6 +3,8 @@ package report
 import (
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/models/eta"
+	productDao "eta/eta_mini_ht_api/models/merchant"
+	reportDao "eta/eta_mini_ht_api/models/report"
 	"fmt"
 	"html"
 	"sync"
@@ -51,9 +53,67 @@ func GetETAReportIdsByPermissionIds(permissionIds []int) (ids []int, err error)
 		logger.Error("品种获取研报分类列表失败:%v", err)
 		return
 	}
-	return eta.GetETAReportIdsByClassifyIds(classifyIds)
+	return reportDao.GetETAReportIdsByClassifyIds(classifyIds)
 }
+func GetETAReportIdsByPermissionIdsWithRiskLevel(permissionIds []int, riskLevel string) (orgIds []int, err error) {
+	classifyIds, err := GetClassifyIdsByPermissionIds(permissionIds)
+	if err != nil {
+		logger.Error("品种获取研报分类列表失败:%v", err)
+		return
+	}
 
+	//更具query查询ids
+	var reports []reportDao.Report
+	reports, err = reportDao.GetETAReportByClassifyIds(classifyIds)
+	if err != nil {
+		logger.Error("获取ETA研报列表失败:%v", err)
+		return
+	}
+	if riskLevel == "" {
+		for _, report := range reports {
+			orgIds = append(orgIds, report.OrgID)
+		}
+		return
+	}
+	//根据riskLevel过滤ids
+	var ids []int
+	for _, report := range reports {
+		ids = append(ids, report.ID)
+	}
+	var productList []productDao.MerchantProduct
+	//现加入没有产品的报告
+	productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
+	for _, report := range reports {
+		for _, product := range productList {
+			if product.SourceID == report.ID {
+				continue
+			}
+			orgIds = append(orgIds, report.OrgID)
+		}
+	}
+	riskNum, err := parseRiskLevel(riskLevel)
+	if err != nil {
+		logger.Error("解析风险等级失败:%v", err)
+		return
+	}
+	//再把符合风险等级的产品报告加入
+	productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
+	for _, report := range reports {
+		for _, product := range productList {
+			if product.SourceID == report.ID {
+				pdRiskNum, pdErr := parseRiskLevel(product.RiskLevel)
+				if pdErr != nil {
+					logger.Error("解析产品风险等级失败:%v,产品id:%v", pdErr, product.ID)
+					continue
+				}
+				if pdRiskNum <= riskNum {
+					orgIds = append(orgIds, report.OrgID)
+				}
+			}
+		}
+	}
+	return
+}
 func GetETAReport(id int) (detail ETAReportDTO, err error) {
 	report, err := eta.GetETAReportById(id)
 	if err != nil {

+ 77 - 0
domian/report/ht_report_service.go

@@ -3,7 +3,11 @@ package report
 import (
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/models/ht"
+	productDao "eta/eta_mini_ht_api/models/merchant"
 	reportDao "eta/eta_mini_ht_api/models/report"
+	"fmt"
+	"strconv"
+	"strings"
 )
 
 func GetHTReportIdsByPermissionIds(permissionIds []int) (ids []int, err error) {
@@ -17,6 +21,79 @@ func GetHTReportIdsByPermissionIds(permissionIds []int) (ids []int, err error) {
 	ids, err = reportDao.GetIdsByPlateNames(permissionNames)
 	return
 }
+func GetHTReportIdsByPermissionIdsWithRiskLevel(permissionIds []int, riskLevel string) (orgIds []int, err error) {
+	//品种名字筛选
+	var permissionNames []string
+	permissionNames, err = GetPermissionNamesByPermissionIds(permissionIds)
+	if err != nil {
+		logger.Error("获取品种名称列表失败:%v", err)
+		return
+	}
+	//更具query查询ids
+	var reports []reportDao.Report
+	reports, err = reportDao.GetReportByPlateNames(permissionNames)
+	if err != nil {
+		logger.Error("获取HT研报列表失败:%v", err)
+		return
+	}
+	if riskLevel == "" {
+		for _, report := range reports {
+			orgIds = append(orgIds, report.OrgID)
+		}
+		return
+	}
+	//根据riskLevel过滤ids
+	var ids []int
+	for _, report := range reports {
+		ids = append(ids, report.ID)
+	}
+	var productList []productDao.MerchantProduct
+	//现加入没有产品的报告
+	productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
+	for _, report := range reports {
+		for _, product := range productList {
+			if product.SourceID == report.ID {
+				continue
+			}
+			orgIds = append(orgIds, report.OrgID)
+		}
+	}
+	riskNum, err := parseRiskLevel(riskLevel)
+	if err != nil {
+		logger.Error("解析风险等级失败:%v", err)
+		return
+	}
+	//再把符合风险等级的产品报告加入
+	productList, err = productDao.GetProductListBySourceIds(ids, productDao.Report)
+	for _, report := range reports {
+		for _, product := range productList {
+			if product.SourceID == report.ID {
+				pdRiskNum, pdErr := parseRiskLevel(product.RiskLevel)
+				if pdErr != nil {
+					logger.Error("解析产品风险等级失败:%v,产品id:%v", pdErr, product.ID)
+					continue
+				}
+				if pdRiskNum <= riskNum {
+					orgIds = append(orgIds, report.OrgID)
+				}
+			}
+		}
+	}
+	return
+}
 func GetHtReport(id int) (pdf string, err error) {
 	return ht.GetPDFUrl(id)
 }
+
+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
+}

+ 16 - 30
domian/report/permission_service.go

@@ -2,32 +2,22 @@ package report
 
 import (
 	logger "eta/eta_mini_ht_api/common/component/log"
-	etaDao "eta/eta_mini_ht_api/models/eta"
+	configService "eta/eta_mini_ht_api/domian/config"
+	permissionDao "eta/eta_mini_ht_api/models/config"
 )
 
 func GetClassifyIdsByPermissionIds(permissionIds []int) (classifyIds []int, err error) {
-	return etaDao.GetClassifyIdsByPermissionIds(permissionIds)
+	return permissionDao.GetClassifyIdsByPermissionIds(permissionIds)
 }
 
 func GetPermissionNamesByPermissionIds(permissionIds []int) (permissionNames []string, err error) {
-	return etaDao.GetPermissionNamesByPermissionIds(permissionIds)
+	return permissionDao.GetPermissionNamesByPermissionIds(permissionIds)
+	//return etaDao.GetPermissionNamesByPermissionIds(permissionIds)
 }
 
-//	func GetPermissionList() (dtoList []PermissionDTO, err error) {
-//		list, err := etaDao.GetChartPermissionList()
-//		if err != nil {
-//			logger.Error("获取研报列表失败")
-//			return
-//		}
-//		dtoList = make([]PermissionDTO, 0)
-//		for _, node := range list {
-//			dto := convertPermissionDTO(node)
-//			dtoList = append(dtoList, dto)
-//		}
-//		return
-//	}
-func GetFirstPermissionsByIds(ids []int) (permissionDTOS []PermissionDTO, err error) {
-	list, err := etaDao.GetFirstPermissionsByIds(ids)
+func GetFirstPermissionsByIds(ids []int) (permissionDTOS []configService.PermissionDTO, err error) {
+	//list, err := etaDao.GetFirstPermissionsByIds(ids)
+	list, err := permissionDao.GetFirstPermissionsByIds(ids)
 	if err != nil {
 		logger.Error("查询品种信息失败:%v", err)
 	}
@@ -37,13 +27,8 @@ func GetFirstPermissionsByIds(ids []int) (permissionDTOS []PermissionDTO, err er
 	return
 }
 
-// 获取二级品种id
-//func GetPermissionIdByName(name string) (permissionId int, err error) {
-//	return etaDao.GetPermissionIdByName(name)
-//}
-
 // 获取一级品种(海通的板块)
-func GetReportPermissionsById(id int, source string) (permissionIds []PermissionDTO) {
+func GetReportPermissionsById(id int, source string) (permissionIds []configService.PermissionDTO) {
 	switch source {
 	case SourceETA:
 		//展示一级品种
@@ -55,7 +40,7 @@ func GetReportPermissionsById(id int, source string) (permissionIds []Permission
 	return
 }
 
-func GetReportSecondPermissionsById(id int, source string) (permissionIds []PermissionDTO) {
+func GetReportSecondPermissionsById(id int, source string) (permissionIds []configService.PermissionDTO) {
 	switch source {
 	case SourceETA:
 		return getETAReportSecondPermissions(id)
@@ -64,10 +49,11 @@ func GetReportSecondPermissionsById(id int, source string) (permissionIds []Perm
 	}
 	return
 }
-func convertPermissionDTO(node etaDao.ChartPermission) PermissionDTO {
-	return PermissionDTO{
-		ID:       node.ChartPermissionID,
-		Name:     node.PermissionName,
-		ParentID: node.ParentID,
+func convertPermissionDTO(node permissionDao.Permission) configService.PermissionDTO {
+	return configService.PermissionDTO{
+		PermissionId:   node.PermissionId,
+		PermissionName: node.Name,
+		ParentId:       node.ParentId,
+		RiskLevel:      node.RiskLevel,
 	}
 }

+ 43 - 33
domian/report/report_service.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_mini_ht_api/common/contants"
 	"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"
 	analystService "eta/eta_mini_ht_api/domian/financial_analyst"
 	userService "eta/eta_mini_ht_api/domian/user"
 	"eta/eta_mini_ht_api/models"
@@ -76,17 +77,14 @@ type ReportDTO struct {
 	CoverUrl         string          `json:"coverUrl"`
 	Login            bool            `json:"login"`
 	RiskLevelStatus  string          `json:"riskLevelStatus"`
+	IsFree           bool            `json:"isFree"`
+	IsSubscribe      bool            `json:"isSubscribe"`
+	Price            string          `json:"price"`
 }
 
 type Detail struct {
 }
 
-type PermissionDTO struct {
-	ID       int
-	Name     string
-	ParentID int
-}
-
 type Anthor struct {
 	Id         int    `json:"id"`
 	Name       string `json:"name"`
@@ -294,6 +292,7 @@ func GetReportPageByOrgIds(pageInfo page.PageInfo, orgIds map[string][]int, sear
 			list = append(list, dto)
 		}
 	}
+
 	return
 }
 
@@ -323,13 +322,14 @@ func GetReportPage(pageInfo page.PageInfo) (list []ReportDTO, err error) {
 	}
 	return
 }
-func getETAReportFirstPermissions(id int) (permissionDTOs []PermissionDTO) {
+func getETAReportFirstPermissions(id int) (permissionDTOs []configService.PermissionDTO) {
 	classifyId, err := etaDao.GetReportClassifyById(id)
 	if err != nil || classifyId == 0 {
 		logger.Error("获取研报分类信息失败:%v", err)
 		return
 	}
-	permissions, err := etaDao.GetFirstPermissionsByClassifyID(classifyId)
+	permissions, err := permissionDao.GetFirstPermissionsByClassifyID(classifyId)
+	//permissions, err := etaDao.GetFirstPermissionsByClassifyID(classifyId)
 	if err != nil {
 		logger.Error("获取研报一级品种信息失败:%v", err)
 		return
@@ -340,7 +340,7 @@ func getETAReportFirstPermissions(id int) (permissionDTOs []PermissionDTO) {
 	return
 }
 
-func getHTReportFirstPermissions(id int) (permissionDTOs []PermissionDTO) {
+func getHTReportFirstPermissions(id int) (permissionDTOs []configService.PermissionDTO) {
 	report, err := reportDao.GetReportByOrgId(id, SourceHT)
 	if err != nil {
 		logger.Error("获取报告失败:%v", err)
@@ -348,23 +348,24 @@ func getHTReportFirstPermissions(id int) (permissionDTOs []PermissionDTO) {
 	permissionName := report.PlateName
 	plateName, err := reportDao.GetPlateNameByPermissionName(permissionName)
 	if err != nil {
-		return []PermissionDTO{}
+		return []configService.PermissionDTO{}
 	}
-	return []PermissionDTO{
+	return []configService.PermissionDTO{
 		{
-			ID:       0,
-			Name:     plateName,
-			ParentID: 0,
+			PermissionId:   0,
+			PermissionName: plateName,
+			ParentId:       0,
 		},
 	}
 }
-func getETAReportSecondPermissions(id int) (permissionDTOs []PermissionDTO) {
+func getETAReportSecondPermissions(id int) (permissionDTOs []configService.PermissionDTO) {
 	classifyId, err := etaDao.GetReportClassifyById(id)
 	if err != nil || classifyId == 0 {
 		logger.Error("获取研报分类信息失败:%v", err)
 		return
 	}
-	permissions, err := etaDao.GetSecondPermissionsByClassifyID(classifyId)
+	permissions, err := permissionDao.GetSecondPermissionsByClassifyID(classifyId)
+	//permissions, err := eta.GetSecondPermissionsByClassifyID(classifyId)
 	if err != nil {
 		logger.Error("获取研报二级品种信息失败:%v", err)
 		return
@@ -375,7 +376,7 @@ func getETAReportSecondPermissions(id int) (permissionDTOs []PermissionDTO) {
 	return
 }
 
-func getHTReportSecondPermissions(id int) (permissionDTOs []PermissionDTO) {
+func getHTReportSecondPermissions(id int) (permissionDTOs []configService.PermissionDTO) {
 	report, err := reportDao.GetReportByOrgId(id, SourceHT)
 	if err != nil {
 		logger.Error("获取报告失败:%v", err)
@@ -388,11 +389,12 @@ func getHTReportSecondPermissions(id int) (permissionDTOs []PermissionDTO) {
 
 		}
 	}
-	return []PermissionDTO{
+	return []configService.PermissionDTO{
 		{
-			ID:       permission.PermissionId,
-			Name:     report.PlateName,
-			ParentID: permission.ParentId,
+			PermissionId:   permission.PermissionId,
+			PermissionName: report.PlateName,
+			ParentId:       permission.ParentId,
+			RiskLevel:      permission.RiskLevel,
 		},
 	}
 }
@@ -411,15 +413,17 @@ func InitETAReportList(list []eta.ETAReport) (err error) {
 	var reports []reportDao.Report
 	for _, etaRp := range list {
 		var coverSrc int
-		var permissions []etaDao.ChartPermission
-		permissions, err = etaDao.GetSecondPermissionsByClassifyID(etaRp.ClassifyID)
+		//var permissions []etaDao.ChartPermission
+		//permissions, err = etaDao.GetSecondPermissionsByClassifyID(etaRp.ClassifyID)
+		var permissions []permissionDao.Permission
+		permissions, err = permissionDao.GetSecondPermissionsByClassifyID(etaRp.ClassifyID)
 		if err != nil || len(permissions) == 0 {
 			logger.Error("获取研报二级品种信息失败:%v", err)
 			coverSrc = 0
 		} else {
 			coverSrc = 0
 			for _, permission := range permissions {
-				permissionsId := permission.ChartPermissionID
+				permissionsId := permission.PermissionId
 				var ids []int
 				ids, err = mediaDao.GetIdsByPermissionId(permissionsId)
 				if err != nil {
@@ -464,15 +468,17 @@ func SyncETAReportList(list []eta.ETAReport) (err error) {
 	var reports []reportDao.Report
 	for _, etaRp := range list {
 		var coverSrc int
-		var permissions []etaDao.ChartPermission
-		permissions, err = etaDao.GetSecondPermissionsByClassifyID(etaRp.ClassifyID)
+		//var permissions []etaDao.ChartPermission
+		//permissions, err = etaDao.GetSecondPermissionsByClassifyID(etaRp.ClassifyID)
+		var permissions []permissionDao.Permission
+		permissions, err = permissionDao.GetSecondPermissionsByClassifyID(etaRp.ClassifyID)
 		if err != nil || len(permissions) == 0 {
 			logger.Error("获取研报二级品种信息失败:%v", err)
 			coverSrc = 0
 		} else {
 			coverSrc = 0
 			for _, permission := range permissions {
-				permissionsId := permission.ChartPermissionID
+				permissionsId := permission.PermissionId
 				var ids []int
 				ids, err = mediaDao.GetIdsByPermissionId(permissionsId)
 				if err != nil {
@@ -659,7 +665,8 @@ func InitHTReportList(list []ht.HTReport) (noRecord bool, err error) {
 				destRp := convertHTReport(htRp, reportDao.StatusPublish)
 				var coverSrc int
 				var permissionId int
-				permissionId, err = etaDao.GetPermissionIdByName(htRp.PermissionName)
+				permissionId, err = permissionDao.GetPermissionIdByName(htRp.PermissionName)
+				//permissionId, err = etaDao.GetPermissionIdByName(htRp.PermissionName)
 				if err != nil {
 					logger.Error("HT获取eta品种id失败:%v", err)
 					coverSrc = 0
@@ -722,7 +729,8 @@ func SyncHTReportList(list []ht.HTReport) (noRecord bool, err error) {
 				destRp := convertHTReport(htRp, status)
 				var coverSrc int
 				var permissionId int
-				permissionId, err = etaDao.GetPermissionIdByName(htRp.PermissionName)
+				permissionId, err = permissionDao.GetPermissionIdByName(htRp.PermissionName)
+				//permissionId, err = etaDao.GetPermissionIdByName(htRp.PermissionName)
 				if err != nil {
 					logger.Error("HT获取eta品种id失败:%v", err)
 					coverSrc = 0
@@ -793,13 +801,14 @@ func GetReportByIdListByOrgIds(orgIds map[string][]int) (ids []int, err error) {
 	return reportDao.GetReportIdListByOrgIds(orgIds)
 }
 
-func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestId int64, ids map[string][]int) {
-	htOrgIds, err := GetHTReportIdsByPermissionIds(permissionIds)
+func GetTotalPageCountByPermissionIds(permissionIds []int, riskLevel string) (total int64, latestId int64, ids map[string][]int) {
+
+	htOrgIds, err := GetHTReportIdsByPermissionIdsWithRiskLevel(permissionIds, riskLevel)
 	if err != nil {
 		logger.Error("品种筛选ht报告id失败:%v", err)
 		htOrgIds = []int{}
 	}
-	etaOrgIds, err := GetETAReportIdsByPermissionIds(permissionIds)
+	etaOrgIds, err := GetETAReportIdsByPermissionIdsWithRiskLevel(permissionIds, riskLevel)
 	if err != nil {
 		logger.Error("品种筛选eta报告id失败:%v", err)
 		etaOrgIds = []int{}
@@ -820,7 +829,7 @@ func GetTotalPageCountByPermissionIds(permissionIds []int) (total int64, latestI
 	} else {
 		ids["HT"] = htOrgIds
 	}
-	//ids = append(etaIds, htIds...)
+
 	total, latestId, err = reportDao.GetMaxIdByPermissionIds(ids)
 	if err != nil {
 		logger.Error("获取筛选报告的最大记录和记录数失败:%v", err)
@@ -834,6 +843,7 @@ func convertEtaReport(etaRp eta.ETAReport, status reportDao.ReportStatus) report
 		Title:         etaRp.Title,
 		Abstract:      etaRp.Abstract,
 		Author:        etaRp.Author,
+		ClassifyId:    etaRp.ClassifyID,
 		CoverSrc:      0,
 		PublishedTime: etaRp.PublishTime.Format(time.DateTime),
 		Source:        reportDao.SourceETA,

+ 7 - 0
domian/user/user_subscription_service.go

@@ -0,0 +1,7 @@
+package user
+
+import subscribeDao "eta/eta_mini_ht_api/models/user"
+
+func GetUserSubscribe(productId int, userId int) (subscribeDao.UserSubscriptionAccessList, error) {
+	return subscribeDao.GetUserSubscribe(productId, userId)
+}

+ 41 - 0
middleware/signature_interceptor.go

@@ -0,0 +1,41 @@
+package middleware
+
+//
+//type encryptedRequest struct {
+//	Message   interface{} `json:"ciphertext"`
+//	Nonce     string      `json:"nonce"`     // 添加随机字符串
+//	Timestamp int64       `json:"timestamp"` // 添加时间戳
+//}
+//
+//// 签名验证拦截器
+//func SignatureInterceptor(ctx context.Context, req interface{}) (interface{}, error) {
+//	return handler(ctx, req)
+//}
+//
+//// 验证签名
+//func verifySignature(message []byte, signature string, publicKey *rsa.PublicKey) bool {
+//	hash := sha256.Sum256(message)
+//	signatureBytes, err := base64.StdEncoding.DecodeString(signature)
+//	if err != nil {
+//		return false
+//	}
+//	err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hash[:], signatureBytes)
+//	return err == nil
+//}
+//
+//func parsePublicKeyFromPEM() (pubKey *rsa.PublicKey, err error) {
+//	pemBlock, err := os.ReadFile("./config/rsa_public_key.pem")
+//	block, _ := pem.Decode(pemBlock)
+//	if block == nil {
+//		logger.Error("公钥解析失败")
+//	}
+//	pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
+//	pubKey, ok := pubInterface.(*rsa.PublicKey)
+//	if !ok {
+//		logger.Error("公钥解析失败")
+//	}
+//	if err != nil {
+//		return nil, err
+//	}
+//	return
+//}

+ 1 - 0
middleware/webhook_middleware.go

@@ -17,6 +17,7 @@ var (
 
 func WebHookAuthMiddleware() web.FilterFunc {
 	return func(ctx *context.Context) {
+
 		body := ctx.Input.RequestBody
 		webhookRequest := new(WebhookRequest)
 		err := json.Unmarshal(body, &webhookRequest)

+ 37 - 0
models/config/permission.go

@@ -61,3 +61,40 @@ func GetPermissionListWithRisk() (list []Permission, err error) {
 	err = db.Model(&Permission{}).Select(Columns).Where("risk_level is NOT NULL and risk_level != '' and parent_id !=0").Find(&list).Error
 	return
 }
+
+func GetPermissionNamesByPermissionIds(ids []int) (permissionNames []string, err error) {
+	db := models.Main()
+	err = db.Model(&Permission{}).Select("name").Where("permission_id in ?", ids).Scan(&permissionNames).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
+	//sql := "select permission_id, name from permission where chart_permission_id in (select parent_id from chart_permission WHERE chart_permission_id in ?)"
+	//err = doSql(sql, &chartPermissionList, ids)
+	return
+
+}
+
+func GetPermissionIdByName(name string) (id int, err error) {
+	db := models.Main()
+	//sql := "select chart_permission_id from chart_permission where permission_name =? "
+	err = db.Model(&Permission{}).Select("permission_id").Where("name = ?", name).Scan(&id).Error
+	return
+}
+
+func GetSecondPermissionsByClassifyID(classifyId int) (permissionList []Permission, err error) {
+	//sql := "select chart_permission_id, permission_name from chart_permission WHERE chart_permission_id in( select DISTINCT cpskwp.chart_permission_id from chart_permission_search_key_word_mapping cpskwp  where cpskwp.classify_id=? order by cpskwp.chart_permission_id)"
+	//err = doSql(sql, &chartPermissionList, classifyID)
+	db := models.Main()
+	err = db.Model(&Permission{}).Select("permission_id, name").Where("permission_id in ( select DISTINCT pcm.permission_id from permission_classify_mapping pcm  where pcm.classify_id=? order by pcm.permission_id)", classifyId).Find(&permissionList).Error
+	return
+}
+
+func GetFirstPermissionsByClassifyID(classifyId int) (permissionList []Permission, err error) {
+	db := models.Main()
+	//sql := "select chart_permission_id, permission_name,parent_id from chart_permission WHERE chart_permission_id in( select DISTINCT cp.parent_id from chart_permission_search_key_word_mapping cpskwp left JOIN chart_permission cp on cp.chart_permission_id =cpskwp.chart_permission_id where cpskwp.classify_id=? order by cp.parent_id)"
+	err = db.Model(&Permission{}).Select("permission_id, name,parent_id").Where("permission_id  in ( select DISTINCT ps.parent_id from permission_classify_mapping pcm left JOIN permissions ps on ps.permission_id =pcm.permission_id where pcm.classify_id=? order by ps.parent_id)", classifyId).Find(&permissionList).Error
+	return
+}

+ 37 - 0
models/config/permission_classify_mapping.go

@@ -0,0 +1,37 @@
+package config
+
+import (
+	"eta/eta_mini_ht_api/models"
+	"gorm.io/gorm/clause"
+	"time"
+)
+
+// PermissionClassifyMapping 权限分类映射表
+type PermissionClassifyMapping struct {
+	ID           int       `gorm:"column:id;primaryKey"`
+	ClassifyID   int       `gorm:"column:classify_id"`
+	PermissionID int       `gorm:"column:permission_id"`
+	CreatedTime  time.Time `gorm:"column:created_time"`
+	UpdatedTime  time.Time `gorm:"column:updated_time"`
+}
+
+func (p *PermissionClassifyMapping) TableName() string {
+	return "permission_classify_mapping"
+}
+
+func BatchInsertOrUpdateMapping(list []PermissionClassifyMapping) (err error) {
+	db := models.Main()
+	OnConflictFunc := clause.OnConflict{
+		Columns:   []clause.Column{{Name: "permission_id"}, {Name: "classify_id"}},
+		DoUpdates: clause.AssignmentColumns([]string{"classify_id"}),
+	}
+	// 执行批量插入或更新操作
+	err = db.Clauses(OnConflictFunc).Create(&list).Error
+	return
+}
+
+func GetClassifyIdsByPermissionIds(permissionIds []int) (classifyIds []int, err error) {
+	db := models.Main()
+	err = db.Model(&PermissionClassifyMapping{}).Select("DISTINCT classify_id").Where("permission_id in ?", permissionIds).Scan(&classifyIds).Error
+	return
+}

+ 2 - 2
models/eta/chart_permission_search_key_word_mapping.go

@@ -8,9 +8,9 @@ type ChartPermissionSearchKeyWordMapping struct {
 	ClassifyID        int `gorm:"column:classify_id"`         // classify_id 字段
 }
 
-func GetClassifyIdsByPermissionIds(permissionIds []int) (classifyIds []int, err error) {
+func GetSyncClassifyList() (classifyIds []ChartPermissionSearchKeyWordMapping, err error) {
 	db := models.ETA()
-	err = db.Model(&ChartPermissionSearchKeyWordMapping{}).Select("DISTINCT classify_id").Where("chart_permission_id in ?", permissionIds).Scan(&classifyIds).Error
+	err = db.Model(&ChartPermissionSearchKeyWordMapping{}).Select("chart_permission_id,classify_id").Where("classify_id >0").Find(&classifyIds).Error
 	return
 }
 

+ 2 - 52
models/eta/eta_permission.go

@@ -1,13 +1,12 @@
 package eta
 
 import (
-	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/models"
 )
 
 const (
 	Columns     = "chart_permission_id,permission_name,parent_id"
-	SyncColumns = "chart_permission_id,permission_name,parent_id,sort"
+	SyncColumns = "chart_permission_id ,permission_name ,parent_id ,sort"
 )
 
 // ChartPermission represents the structure of the chart_permission table.
@@ -15,6 +14,7 @@ type ChartPermission struct {
 	ChartPermissionID int    `gorm:"primaryKey;autoIncrement;column:chart_permission_id;comment:主键"`
 	PermissionName    string `gorm:"size:50;default:'';column:permission_name;comment:权限名"`
 	ParentID          int    `gorm:"size:11;default:0;column:parent_id;comment:父级权限id"`
+	ClassifyId        int    `gorm:"classify_id"`
 	Sort              int    `gorm:"default:null"`
 }
 
@@ -23,15 +23,6 @@ func (c *ChartPermission) TableName() string {
 	return "chart_permission"
 }
 
-func GetChartPermissionList() (chartPermissionList []ChartPermission, err error) {
-	db := models.ETA()
-	err = db.Select(Columns).Where("product_id =? and enabled =?", 1, true).Order("parent_id asc").Order("sort asc").Find(&chartPermissionList).Error
-	if err == nil && chartPermissionList == nil {
-		chartPermissionList = []ChartPermission{}
-	}
-	return
-}
-
 func GetSyncPermissionList() (chartPermissionList []ChartPermission, err error) {
 	db := models.ETA()
 	err = db.Select(SyncColumns).Find(&chartPermissionList).Error
@@ -40,44 +31,3 @@ func GetSyncPermissionList() (chartPermissionList []ChartPermission, err error)
 	}
 	return
 }
-
-//	func GetPermissionNamesByClassifyID(ids []int) (chartPermissionNames []string, err error) {
-//		sql := "select chart_permission_id, permission_name from chart_permission WHERE chart_permission_id in ?"
-//		err = doSql(sql, &chartPermissionNames, ids)
-//		return
-//	}
-func GetPermissionNamesByPermissionIds(ids []int) (chartPermissionNames []string, err error) {
-	sql := "select permission_name from chart_permission WHERE chart_permission_id in ?"
-	err = doSql(sql, &chartPermissionNames, ids)
-	return
-}
-func GetFirstPermissionsByClassifyID(classifyID int) (chartPermissionList []ChartPermission, err error) {
-	sql := "select chart_permission_id, permission_name,parent_id from chart_permission WHERE chart_permission_id in( select DISTINCT cp.parent_id from chart_permission_search_key_word_mapping cpskwp left JOIN chart_permission cp on cp.chart_permission_id =cpskwp.chart_permission_id where cpskwp.classify_id=? order by cp.parent_id)"
-	err = doSql(sql, &chartPermissionList, classifyID)
-	return
-}
-
-func GetSecondPermissionsByClassifyID(classifyID int) (chartPermissionList []ChartPermission, err error) {
-	sql := "select chart_permission_id, permission_name from chart_permission WHERE chart_permission_id in( select DISTINCT cpskwp.chart_permission_id from chart_permission_search_key_word_mapping cpskwp  where cpskwp.classify_id=? order by cpskwp.chart_permission_id)"
-	err = doSql(sql, &chartPermissionList, classifyID)
-	return
-}
-func GetFirstPermissionsByIds(ids []int) (chartPermissionList []ChartPermission, err error) {
-	sql := "select chart_permission_id, permission_name from chart_permission where chart_permission_id in (select parent_id from chart_permission WHERE chart_permission_id in ?)"
-	err = doSql(sql, &chartPermissionList, ids)
-	return
-}
-
-func GetPermissionIdByName(name string) (id int, err error) {
-	sql := "select chart_permission_id from chart_permission where permission_name =? "
-	err = doSql(sql, &id, name)
-	return
-}
-func doSql(sql string, result interface{}, values ...interface{}) (err error) {
-	db := models.ETA()
-	err = db.Raw(sql, values...).Find(result).Error
-	if err != nil {
-		logger.Error("执行sql[%v]失败:%v", sql, err)
-	}
-	return
-}

+ 0 - 22
models/eta/eta_report.go

@@ -60,11 +60,6 @@ type ETAReport struct {
 	State            int       `gorm:"column:state"`
 }
 
-//type ReportClassify struct {
-//	ClassifyID int `gorm:"column:classify_id" json:"classify_id"`
-//	ReportPermission
-//}
-
 type ReportPermission struct {
 	ChartPermissionID int `gorm:"primaryKey;autoIncrement;column:chart_permission_id;comment:主键"`
 	ParentID          int `gorm:"size:11;default:0;column:parent_id;comment:父级权限id"`
@@ -108,20 +103,8 @@ func GetETAReportById(id int) (report ETAReport, err error) {
 	if err != nil {
 		return
 	}
-	//var date time.Time
-	//date, err = time.Parse(time.DateTime, report.PublishTime)
-	//if err != nil {
-	//	logger.Error("时间转换错误:%v", err)
-	//	err = nil
-	//} else {
-	//	report.PublishedTime = date
-	//}
 	return
 }
-func DoSql(sql string, result interface{}, values ...interface{}) (err error) {
-	db := models.ETA()
-	return db.Raw(sql, values...).Scan(&result).Error
-}
 func GetReportClassifyById(id int) (classifyId int, err error) {
 	db := models.ETA()
 	err = db.Table("report").
@@ -130,11 +113,6 @@ func GetReportClassifyById(id int) (classifyId int, err error) {
 	return
 }
 
-func GetETAReportIdsByClassifyIds(classifyIds []int) (reportIds []int, err error) {
-	db := models.ETA()
-	err = db.Model(&ETAReport{}).Select("DISTINCT id").Where("COALESCE(NULLIF(classify_id_third,0),NULLIF(classify_id_second,0),classify_id_first) in (?)", classifyIds).Scan(&reportIds).Error
-	return
-}
 func setClassifyIdValue(report *ETAReport) {
 	if report.ClassifyIDThird > 0 {
 		report.ClassifyID = report.ClassifyIDThird

+ 14 - 1
models/merchant/merchant_product.go

@@ -11,7 +11,8 @@ type SaleStatus string
 type MerchantProductType string
 
 const (
-	detailColumns = "title,price,is_permanent,valid_days,type"
+	detailColumns  = "id,title,price,is_permanent,valid_days,type"
+	sourceIdColumn = "source_id"
 )
 const (
 	OnSale  SaleStatus          = "on_sale"  //上架
@@ -58,3 +59,15 @@ func GetMerchantProductById(id int) (product MerchantProduct, err error) {
 
 	return
 }
+
+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
+	return
+}
+
+func GetProductListBySourceIds(ids []int, productType MerchantProductType) (productList []MerchantProduct, err error) {
+	db := models.Main()
+	err = db.Select(detailColumns).Where("source_id in ? and type = ? and deleted =? ", ids, productType, false).Find(&productList).Error
+	return
+}

+ 19 - 4
models/report/report.go

@@ -35,6 +35,7 @@ type Report struct {
 	Source        ReportSource `gorm:"column:source;comment:'研报来源1:eta 2:海通'" json:"source"`
 	Title         string       `gorm:"column:title;comment:'标题'" json:"title"`
 	Abstract      string       `gorm:"column:abstract;comment:'摘要'" json:"abstract"`
+	ClassifyId    int          `gorm:"column:classify_id"`
 	PlateName     string       `gorm:"column:plate_name;comment:'板块'" json:"plate_name"`
 	Author        string       `gorm:"column:author;comment:'作者'" json:"author"`
 	CoverSrc      int          `gorm:"column:cover_src;comment:'封面图片'" json:"cover_src"`
@@ -50,6 +51,11 @@ func GetIdsByPlateNames(plateName []string) (ids []int, err error) {
 	err = db.Model(&Report{}).Select("distinct org_id").Where(" source ='HT' and plate_name in ?  ", plateName).Scan(&ids).Error
 	return
 }
+func GetReportByPlateNames(plateName []string) (reportList []Report, err error) {
+	db := models.Main()
+	err = db.Model(&Report{}).Select("org_id,id").Where(" source ='HT' and plate_name in ?  ", plateName).Find(&reportList).Error
+	return
+}
 func BatchInsertReport(list *[]Report) (err error) {
 	db := models.Main()
 	//手动事务
@@ -90,7 +96,7 @@ func InsertOrUpdateReport(list []Report, source string) (result []Report, err er
 	tx := db.Begin()
 	OnConflictFunc := clause.OnConflict{
 		Columns:   []clause.Column{{Name: "org_id"}, {Name: "source"}},
-		DoUpdates: clause.AssignmentColumns([]string{"abstract", "title", "author", "published_time", "status"}),
+		DoUpdates: clause.AssignmentColumns([]string{"abstract", "title", "author", "published_time", "status", "classify_id"}),
 	}
 	// 执行批量插入或更新操作
 	err = tx.Clauses(OnConflictFunc).Create(&list).Error
@@ -321,9 +327,6 @@ func GetReportPageByOrgIds(latestId int64, limit int, offset int, orgIds map[str
 	if searchAll {
 		return GetReportPage(latestId, limit, offset)
 	}
-	//if len(orgIds["ETA"]) == 0 && len(orgIds["HT"]) == 0 {
-	//
-	//}
 	if latestId < 0 {
 		err = errors.New("非法的id参数")
 		logger.Error("非法的id参数:%d", latestId)
@@ -372,3 +375,15 @@ func GetReportPageByAnalyst(latestId int64, limit int, offset int, analyst strin
 	err = db.Select(CommonColumns).Where("status = ?", StatusPublish).Where("id<= ? and id in ? and author like  ?", latestId, reportIds, "%"+analyst+"%").Order("published_time desc").Limit(limit).Offset(offset).Find(&list).Error
 	return
 }
+
+func GetETAReportIdsByClassifyIds(classifyIds []int) (orgIds []int, err error) {
+	db := models.Main()
+	err = db.Model(&Report{}).Select("DISTINCT org_id").Where("source=? and classify_id in (?)", SourceETA, classifyIds).Scan(&orgIds).Error
+	return
+}
+
+func GetETAReportByClassifyIds(classifyIds []int) (reportList []Report, err error) {
+	db := models.Main()
+	err = db.Model(&Report{}).Select(CommonColumns).Where("source=? and classify_id in (?)", SourceETA, classifyIds).Find(&reportList).Error
+	return
+}

+ 34 - 0
models/user/userSubscriptionAccessList.go

@@ -0,0 +1,34 @@
+package user
+
+import (
+	"eta/eta_mini_ht_api/models"
+	"time"
+)
+
+type SubscribeStatus string
+
+const (
+	SubscribeValid   SubscribeStatus = "valid"
+	SubscribeExpired SubscribeStatus = "expired"
+)
+
+// UserSubscriptionAccessList 用户订阅访问列表
+type UserSubscriptionAccessList struct {
+	ID          int             `gorm:"column:id;primaryKey"`
+	UserId      int             `gorm:"column:user_id"`
+	ProductID   int             `gorm:"column:product_id"`
+	ProductName string          `gorm:"column:product_name"`
+	BeginDate   time.Time       `gorm:"column:begin_date"`
+	EndDate     time.Time       `gorm:"column:end_date"`
+	Status      SubscribeStatus `gorm:"column:status;type:enum('valid','expired')"`
+}
+
+func (UserSubscriptionAccessList) TableName() string {
+	return "user_subscription_access_list"
+}
+
+func GetUserSubscribe(productId int, userId int) (userSubscriptionAccessList UserSubscriptionAccessList, err error) {
+	db := models.Main()
+	err = db.Select("id,user_id,product_id,product_name,begin_date,end_date,status").Where("user_id=? and product_id=?", userId, productId).First(&userSubscriptionAccessList).Error
+	return
+}

+ 27 - 0
service/facade/ht_account_service.go

@@ -0,0 +1,27 @@
+package facade
+
+import (
+	"eta/eta_mini_ht_api/common/component/config"
+	"eta/eta_mini_ht_api/common/contants"
+	"eta/eta_mini_ht_api/common/utils/client"
+)
+
+var (
+	httpClient client.HttpClient
+	htConfig   = config.GetConfig(contants.HT).(*config.HTBizConfig)
+	urlPrefix  = htConfig.GetAccountInfoUrl()
+)
+
+const (
+	clientSuitInfoUrl = "open/api/getClientSuitInfo"
+	authorizationUrl  = "authless/token"
+)
+
+func SyncRiskInfo(mobile string) (info string, err error) {
+
+	return "", nil
+}
+
+func accessToken() {
+	httpClient.Post(urlPrefix+authorizationUrl, nil)
+}

+ 1 - 1
service/media/media_service.go

@@ -454,7 +454,7 @@ func getMediaPermissionNames(id []int) (labels []string) {
 		return
 	}
 	for _, permission := range permissions {
-		labels = append(labels, permission.Name)
+		labels = append(labels, permission.PermissionName)
 	}
 	return
 }

+ 41 - 15
service/report/report_service.go

@@ -9,8 +9,11 @@ import (
 	"eta/eta_mini_ht_api/common/utils/page"
 	permissionService "eta/eta_mini_ht_api/domian/config"
 	mediaService "eta/eta_mini_ht_api/domian/media"
+	productService "eta/eta_mini_ht_api/domian/merchant"
 	reportService "eta/eta_mini_ht_api/domian/report"
 	userService "eta/eta_mini_ht_api/domian/user"
+	productDao "eta/eta_mini_ht_api/models/merchant"
+	userDao "eta/eta_mini_ht_api/models/user"
 	user "eta/eta_mini_ht_api/service/user"
 	"fmt"
 	"gorm.io/gorm"
@@ -21,12 +24,13 @@ import (
 )
 
 const (
-	SourceETA        = "ETA"
-	SourceHT         = "HT"
-	RiskLevelUnMatch = "unMatch"
-	RiskLevelUnTest  = "unTest"
-	RiskLevelExpired = "expired"
-	RiskLevelMatch   = "match"
+	SourceETA           = "ETA"
+	SourceHT            = "HT"
+	RiskLevelUnMatch    = "unMatch"
+	RiskLevelUnTest     = "unTest"
+	RiskLevelExpired    = "expired"
+	RiskLevelMatch      = "match"
+	defaultProductPrice = "0"
 )
 
 type PublishRankedReport struct {
@@ -109,7 +113,7 @@ func matchRiskLevel(userId int, report reportService.ReportDTO) (riskLevelMatch
 	}
 	var permissionIds []int
 	for _, permission := range permissions {
-		permissionIds = append(permissionIds, permission.ID)
+		permissionIds = append(permissionIds, permission.PermissionId)
 	}
 	permissionDTOs, err := permissionService.GetPermissionListByIds(permissionIds)
 	if err != nil {
@@ -278,7 +282,7 @@ func GetTotalPageCountByPermissionIds(permissionIds []int, isLogin bool, userId
 		for _, permission := range permissionList {
 			filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
 		}
-		return reportService.GetTotalPageCountByPermissionIds(filterPermissionIds)
+		return reportService.GetTotalPageCountByPermissionIds(filterPermissionIds, mapping.ProductRiskLevel)
 	} else { //没有登录的时候展示所有设置了风险等级的品种报告,筛选的时候过滤传入ID中没有设置风险等级的品种
 		var permissionList []permissionService.PermissionDTO
 		if len(permissionIds) == 0 {
@@ -296,7 +300,7 @@ func GetTotalPageCountByPermissionIds(permissionIds []int, isLogin bool, userId
 			filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
 		}
 		//查询品种
-		return reportService.GetTotalPageCountByPermissionIds(filterPermissionIds)
+		return reportService.GetTotalPageCountByPermissionIds(filterPermissionIds, "")
 	}
 }
 func filterPermissionsByRisk(permissionList []permissionService.PermissionDTO, riskLevel string) (resultList []permissionService.PermissionDTO) {
@@ -442,7 +446,7 @@ func RangeSearch(isLogin bool, userId int) (total int64, latestId int64, orgIds
 		for _, permission := range permissionList {
 			filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
 		}
-		return reportService.GetTotalPageCountByPermissionIds(filterPermissionIds)
+		return reportService.GetTotalPageCountByPermissionIds(filterPermissionIds, mapping.ProductRiskLevel)
 	} else { //没有登录的时候展示所有设置了风险等级的品种报告,筛选的时候过滤传入ID中没有设置风险等级的品种
 		var permissionList []permissionService.PermissionDTO
 		//获取所有设置风险等级的品种
@@ -455,12 +459,12 @@ func RangeSearch(isLogin bool, userId int) (total int64, latestId int64, orgIds
 			filterPermissionIds = append(filterPermissionIds, permission.PermissionId)
 		}
 		//查询品种
-		return reportService.GetTotalPageCountByPermissionIds(filterPermissionIds)
+		return reportService.GetTotalPageCountByPermissionIds(filterPermissionIds, "")
 	}
 }
 
 // GetReportPage 分页获取报告列表
-func GetReportPage(pageInfo page.PageInfo, orgIds map[string][]int, searchAll bool, isLogin bool) (list []reportService.ReportDTO, err error) {
+func GetReportPage(pageInfo page.PageInfo, orgIds map[string][]int, searchAll bool, isLogin bool, userId int) (list []reportService.ReportDTO, err error) {
 	list, err = reportService.GetReportPageByOrgIds(pageInfo, orgIds, searchAll)
 	//并发获取研报的标签
 	var wg sync.WaitGroup
@@ -478,6 +482,28 @@ 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 {
+				if errors.Is(err, gorm.ErrRecordNotFound) {
+					report.Price = defaultProductPrice
+					report.IsFree = true
+					report.IsSubscribe = false
+				} else {
+					report.Price = defaultProductPrice
+					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
 		}(&list[i])
 	}
 	wg.Wait()
@@ -586,7 +612,7 @@ func GetRandedReportByPublishTimeWeekly(limit int, week bool) (reports []Publish
 func getReportPermissionNames(id int, source string) (labels []string) {
 	permissions := reportService.GetReportPermissionsById(id, source)
 	for _, permission := range permissions {
-		labels = append(labels, permission.Name)
+		labels = append(labels, permission.PermissionName)
 	}
 	return
 }
@@ -594,7 +620,7 @@ func getReportSecondPermissionsMap(id int, source string) (permissionMap map[int
 	permissionMap = make(map[int]string)
 	permissions := reportService.GetReportSecondPermissionsById(id, source)
 	for _, permission := range permissions {
-		permissionMap[permission.ID] = permission.Name
+		permissionMap[permission.PermissionId] = permission.PermissionName
 	}
 	return
 }
@@ -602,7 +628,7 @@ func getReportPermissionsMap(id int, source string) (permissionMap map[int]strin
 	permissionMap = make(map[int]string)
 	permissions := reportService.GetReportPermissionsById(id, source)
 	for _, permission := range permissions {
-		permissionMap[permission.ID] = permission.Name
+		permissionMap[permission.PermissionId] = permission.PermissionName
 	}
 	return
 }

+ 28 - 0
task/eta/permission/eta_permission_task.go

@@ -17,6 +17,27 @@ var (
 // Execute Task ETA取研报的数据
 func (pr *PermissionTask) Execute(taskDetail *base.TaskDetail) error {
 	logger.Info(contants.TaskFormat, "同步ETA品种开始")
+	classifyList, err := eta.GetSyncClassifyList()
+	if err != nil {
+		logger.Error("获取ETA分类列表失败:%v", err)
+		return err
+	}
+	if len(classifyList) > 0 {
+		var list []byte
+		list, err = json.Marshal(classifyList)
+		if err == nil {
+			taskDetail.Content = string(list)
+		}
+		var permissionClassifyMappingDTOList []configService.PermissionClassifyMappingDTO
+		for _, classify := range classifyList {
+			permissionClassifyMappingDTOList = append(permissionClassifyMappingDTOList, convertMapping(classify))
+		}
+		err = configService.SyncPermissionClassifyMapping(permissionClassifyMappingDTOList)
+		if err != nil {
+			logger.Error("同步ETA分类列表失败:%v", err)
+			return err
+		}
+	}
 	permissionList, err := eta.GetSyncPermissionList()
 	if err != nil {
 		logger.Error("获取ETA品种列表失败:%v", err)
@@ -53,6 +74,13 @@ func convert(permission eta.ChartPermission) configService.PermissionDTO {
 		Sort:           permission.Sort,
 	}
 }
+
+func convertMapping(permission eta.ChartPermissionSearchKeyWordMapping) configService.PermissionClassifyMappingDTO {
+	return configService.PermissionClassifyMappingDTO{
+		PermissionId: permission.ChartPermissionID,
+		ClassifyId:   permission.ClassifyID,
+	}
+}
 func init() {
 	permissionTask := base.NewTask(taskName, cron, new(PermissionTask), base.PROD)
 	base.RegisterTask(&permissionTask)