Browse Source

风险等级测试报告详情

kobe6258 7 months ago
parent
commit
eb068bc5f2

+ 4 - 13
controllers/report/report_controller.go

@@ -273,26 +273,17 @@ func (r *ReportController) Count() {
 func (r *ReportController) GetReport(reportId int) {
 	controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
 		result = r.InitWrapData("获取研报详情失败")
-		detailType := r.Data["detailType"]
-		var login bool
-		if detailType == "logout" {
+		userInfo := r.Data["user"].(user.User)
+		detailType := r.Data["detailType"].(string)
+		if !isLogin(detailType) {
 			logger.Info("当前用户未登录,展示部分详情")
-			login = false
-		}
-		if detailType == "login" {
-			login = true
 		}
-		reportDetail, err := report.GetReportById(reportId, login)
+		reportDetail, err := report.GetReportById(reportId, isLogin(detailType), userInfo.Id)
 		if err != nil {
 			r.FailedResult("获取研报详情失败", result)
 			err = exception.New(exception.GetReportFailed)
 			return
 		}
-		if detailType == "logout" {
-			logger.Info("当前用户未登录,展示部分详情")
-		}
-		if detailType == "login" {
-		}
 		r.SuccessResult("获取研报详情成功", reportDetail, result)
 		return
 	})

+ 0 - 4
domian/report/eta_report_service.go

@@ -3,7 +3,6 @@ package report
 import (
 	logger "eta/eta_mini_ht_api/common/component/log"
 	"eta/eta_mini_ht_api/models/eta"
-	"eta/eta_mini_ht_api/models/ht"
 	"fmt"
 	"html"
 	"sync"
@@ -55,9 +54,6 @@ func GetETAReportIdsByPermissionIds(permissionIds []int) (ids []int, err error)
 	return eta.GetETAReportIdsByClassifyIds(classifyIds)
 }
 
-func GetHtReport(id int) (pdf string, err error) {
-	return ht.GetPDFUrl(id)
-}
 func GetETAReport(id int) (detail ETAReportDTO, err error) {
 	report, err := eta.GetETAReportById(id)
 	if err != nil {

+ 4 - 0
domian/report/ht_report_service.go

@@ -2,6 +2,7 @@ package report
 
 import (
 	logger "eta/eta_mini_ht_api/common/component/log"
+	"eta/eta_mini_ht_api/models/ht"
 	reportDao "eta/eta_mini_ht_api/models/report"
 )
 
@@ -16,3 +17,6 @@ func GetHTReportIdsByPermissionIds(permissionIds []int) (ids []int, err error) {
 	ids, err = reportDao.GetIdsByPlateNames(permissionNames)
 	return
 }
+func GetHtReport(id int) (pdf string, err error) {
+	return ht.GetPDFUrl(id)
+}

+ 1 - 0
domian/report/permission_service.go

@@ -48,6 +48,7 @@ func GetReportPermissionsById(id int, source string) (permissionIds []Permission
 		//展示一级品种
 		return getETAReportFirstPermissions(id)
 	case SourceHT:
+
 		return getHTReportFirstPermissions(id)
 	}
 	return

+ 17 - 9
domian/report/report_service.go

@@ -11,6 +11,7 @@ import (
 	analystService "eta/eta_mini_ht_api/domian/financial_analyst"
 	userService "eta/eta_mini_ht_api/domian/user"
 	"eta/eta_mini_ht_api/models"
+	permissionDao "eta/eta_mini_ht_api/models/config"
 	"eta/eta_mini_ht_api/models/eta"
 	etaDao "eta/eta_mini_ht_api/models/eta"
 	"eta/eta_mini_ht_api/models/ht"
@@ -24,11 +25,10 @@ import (
 )
 
 const (
-	SourceETA = "ETA"
-	SourceHT  = "HT"
-
-	DESC models.Order = "desc"
-	ASC  models.Order = "asc"
+	SourceETA              = "ETA"
+	SourceHT               = "HT"
+	DESC      models.Order = "desc"
+	ASC       models.Order = "asc"
 
 	ESColumn      = "title"
 	ESRangeColumn = "reportId"
@@ -65,6 +65,7 @@ type ReportDTO struct {
 	Source           string          `json:"source"`
 	Abstract         string          `json:"abstract"`
 	PublishedTime    string          `json:"publishedTime"`
+	RiskLevel        string          `json:"riskLevel"`
 	SecondPermission map[int]string  `json:"-"`
 	Permissions      map[int]string  `json:"-"`
 	PermissionNames  interface{}     `json:"permissionNames"`
@@ -74,6 +75,7 @@ type ReportDTO struct {
 	CoverSrc         int             `json:"coverSrc"`
 	CoverUrl         string          `json:"coverUrl"`
 	Login            bool            `json:"login"`
+	RiskLevelStatus  string          `json:"riskLevelStatus"`
 }
 
 type Detail struct {
@@ -96,9 +98,7 @@ func GetGetReportById(reportId int) (ReportDTO ReportDTO, err error) {
 	if err != nil {
 		return
 	}
-
 	ReportDTO = convertReportDTO(report, true)
-
 	authorStr := ReportDTO.Author
 	authorNames := strings.Split(authorStr, ",")
 	authorNames = stringUtils.RemoveEmptyStrings(authorNames)
@@ -308,11 +308,19 @@ func getHTReportSecondPermissions(id int) (permissionDTOs []PermissionDTO) {
 	if err != nil {
 		logger.Error("获取报告失败:%v", err)
 	}
+	var permission permissionDao.Permission
+	if report.PlateName != "" {
+		permission, err = permissionDao.GetPermissionByName(report.PlateName)
+		if err != nil {
+			logger.Error("获取品种信息失败:%v", err)
+
+		}
+	}
 	return []PermissionDTO{
 		{
-			ID:       0,
+			ID:       permission.PermissionId,
 			Name:     report.PlateName,
-			ParentID: 0,
+			ParentID: permission.ParentId,
 		},
 	}
 }

+ 6 - 2
models/config/permission.go

@@ -39,7 +39,11 @@ func BatchInsertOrUpdate(list []Permission) (err error) {
 	err = db.Clauses(OnConflictFunc).Create(&list).Error
 	return
 }
-
+func GetPermissionByName(name string) (permission Permission, err error) {
+	db := models.Main()
+	err = db.Model(&Permission{}).Select(Columns).Where("name = ?", name).First(&permission).Error
+	return
+}
 func GetPermissionList() (list []Permission, err error) {
 	db := models.Main()
 	err = db.Model(&Permission{}).Select(Columns).Order("parent_id asc").Order("sort asc").Find(&list).Error
@@ -47,7 +51,7 @@ func GetPermissionList() (list []Permission, err error) {
 }
 func GetPermissionListByIds(permissionIds []int) (list []Permission, err error) {
 	db := models.Main()
-	err = db.Model(&Permission{}).Select(Columns).Where("permission_id in ? and (risk_level !='' ", permissionIds).Find(&list).Error
+	err = db.Model(&Permission{}).Select(Columns).Where("permission_id in ? and (risk_level !='' and risk_level is NOT NULL )", permissionIds).Find(&list).Error
 	return
 }
 func GetPermissionListWithRisk() (list []Permission, err error) {

+ 100 - 4
service/report/report_service.go

@@ -21,8 +21,10 @@ import (
 )
 
 const (
-	SourceETA = "ETA"
-	SourceHT  = "HT"
+	SourceETA        = "ETA"
+	SourceHT         = "HT"
+	RiskLevelUnMatch = "unMatch"
+	RiskLevelMatch   = "match"
 )
 
 type PublishRankedReport struct {
@@ -67,13 +69,98 @@ type RecordCount struct {
 	Additional string
 }
 
-func GetReportById(reportId int, login bool) (report reportService.ReportDTO, err error) {
+func matchRiskLevel(userId int, report reportService.ReportDTO) (riskLevelMatch string, err error) {
+	userProfile, userErr := user.GetUserProfile(userId)
+	if userErr != nil {
+		if errors.Is(userErr, gorm.ErrRecordNotFound) {
+			logger.Error("用户信息不存在,mobile:%d", userProfile.Mobile)
+			err = exception.New(exception.TemplateUserNotFound)
+			return
+		} else {
+			logger.Error("获取用户信息失败:%v", userErr)
+			err = exception.New(exception.TemplateUserFoundFailed)
+			return
+		}
+	}
+	//比较风险等级
+	if userProfile.RiskLevelStatus == user.RiskUnTest {
+		logger.Info("客户风险等级未测试,mobile:%d", userProfile.Mobile)
+		riskLevelMatch = RiskLevelUnMatch
+		return
+	}
+	if userProfile.RiskLevelStatus == user.RiskExpired {
+		logger.Info("客户风险等级已过期,mobile:%d", userProfile.Mobile)
+		riskLevelMatch = RiskLevelUnMatch
+		return
+	}
+	level, err := permissionService.GetRiskMappingByCustomerRiskLevel(userProfile.RiskLevel)
+	if err != nil {
+		logger.Error("获取eta报告风险等级失败:%v", err)
+		return
+	}
+	permissions := reportService.GetReportSecondPermissionsById(report.OrgId, report.Source)
+	if len(permissions) == 0 {
+		logger.Error("获取eta报告分类失败:%v", err)
+		riskLevelMatch = RiskLevelUnMatch
+		return
+	}
+	var permissionIds []int
+	for _, permission := range permissions {
+		permissionIds = append(permissionIds, permission.ID)
+	}
+	permissionDTOs, err := permissionService.GetPermissionListByIds(permissionIds)
+	if err != nil {
+		logger.Error("获取品种风险等级失败:%v", err)
+		return
+	}
+	//能够查看最高等级
+	matchNum, err := parseRiskLevel(level.ProductRiskLevel)
+	if err != nil {
+		logger.Error("解析风险等级失败:%v", err)
+		return
+	}
+	//能够查看需要的最小等级
+	num := getLowestRiskLevel(permissionDTOs)
+	if num > matchNum {
+		riskLevelMatch = RiskLevelUnMatch
+		return
+	} else {
+		riskLevelMatch = RiskLevelMatch
+		return
+	}
+}
+
+func getLowestRiskLevel(permissions []permissionService.PermissionDTO) (riskLevelNum int) {
+	for _, permission := range permissions {
+		pRiskNum, err := parseRiskLevel(permission.RiskLevel)
+		if err != nil {
+			logger.Error("解析风险等级失败:%v", err)
+			continue
+		}
+		if riskLevelNum == 0 {
+			riskLevelNum = pRiskNum
+		} else {
+			if riskLevelNum > pRiskNum {
+				riskLevelNum = pRiskNum
+			}
+		}
+	}
+	return
+}
+func GetReportById(reportId int, login bool, userId int) (report reportService.ReportDTO, err error) {
 	report, err = reportService.GetGetReportById(reportId)
 	if err != nil {
 		logger.Error("获取研报失败:%v", err)
 		err = exception.New(exception.GetReportFailed)
 		return
 	}
+	var status string
+	status, err = matchRiskLevel(userId, report)
+	if err != nil {
+		logger.Error("匹配风险等级失败:%v", err)
+		err = exception.New(exception.GetReportFailed)
+		return
+	}
 	var pdfUrl string
 	switch report.Source {
 	case SourceETA:
@@ -86,8 +173,13 @@ func GetReportById(reportId int, login bool) (report reportService.ReportDTO, er
 		}
 		if !login {
 			detail.Content = ""
+			report.RiskLevelStatus = RiskLevelUnMatch
 			report.Login = false
 		} else {
+			if status == RiskLevelUnMatch {
+				detail.Content = ""
+			}
+			report.RiskLevelStatus = status
 			report.Login = true
 		}
 		var jsonStr []byte
@@ -107,9 +199,13 @@ func GetReportById(reportId int, login bool) (report reportService.ReportDTO, er
 		}
 		if !login {
 			report.PdfUrl = ""
+			report.RiskLevelStatus = RiskLevelUnMatch
 			report.Login = false
 		} else {
-			report.PdfUrl = pdfUrl
+			if status == RiskLevelMatch {
+				report.PdfUrl = pdfUrl
+			}
+			report.RiskLevelStatus = status
 			report.Login = true
 		}
 		return