123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- package product
- import (
- logger "eta/eta_mini_ht_api/common/component/log"
- "eta/eta_mini_ht_api/common/exception"
- permissionService "eta/eta_mini_ht_api/domian/config"
- merchantService "eta/eta_mini_ht_api/domian/merchant"
- reportDomain "eta/eta_mini_ht_api/domian/report"
- "eta/eta_mini_ht_api/models/config"
- "eta/eta_mini_ht_api/models/media"
- configService "eta/eta_mini_ht_api/service/config"
- mediaService "eta/eta_mini_ht_api/service/media"
- "eta/eta_mini_ht_api/service/order"
- reportService "eta/eta_mini_ht_api/service/report"
- "fmt"
- "github.com/shopspring/decimal"
- "strings"
- "time"
- )
- type ProductDTO struct {
- Title string
- Description string
- Price decimal.Decimal
- CoverSrc string
- RiskLevel string
- Type string
- BeginDate string
- EndDate string
- SourceId int
- }
- func GetProductRiskLevel(product merchantService.MerchantProductDTO) (riskLevel, sourceTitle, sourceAbsract, sourceSrc, permissionNames string, err error) {
- switch product.Type {
- case "package":
- permissionRisk, permissionErr := config.PermissionsByPermissionId(product.SourceId)
- permissionNames = permissionRisk.Name
- if permissionErr != nil {
- logger.Error("获取权限信息失败[permissionId:%d]", product.SourceId)
- } else {
- riskLevel = permissionRisk.RiskLevel
- }
- case "audio", "video":
- mediaInfo, mediaErr := media.GetMediaById(product.Type, product.SourceId)
- sourceTitle, sourceSrc = mediaInfo.MediaName, mediaInfo.Src
- if mediaErr != nil {
- logger.Error("获取媒体信息失败[mediaType:%s,mediaId:%d]", product.Type, product.SourceId)
- }
- permissionIds, mediaErr := media.GetMediaPermissionMappingByMedia(product.Type, product.SourceId)
- if mediaErr != nil {
- logger.Error("获取媒体权限失败[mediaType:%s,mediaId:%d]", product.Type, product.SourceId)
- } else {
- permissions, permissionErr := permissionService.GetPermissionListByIds(permissionIds)
- if permissionErr != nil {
- logger.Error("获取权限信息失败[permissionIds:%v]", permissionIds)
- }
- permissionNamesList := mediaService.GetMediaPermissionNames(permissionIds)
- permissionNames = strings.Join(permissionNamesList, ",")
- riskNum := configService.GetHighestRiskLevel(permissions)
- riskLevel = fmt.Sprintf("R%d", riskNum)
- }
- case "report":
- report, reportErr := reportDomain.GetReportById(product.SourceId)
- sourceAbsract, sourceTitle = report.Abstract, report.Title
- if reportErr != nil {
- logger.Error("获取研报信息失败[reportId:%d]", product.SourceId)
- } else {
- switch report.Source {
- case reportDomain.SourceHT:
- permission, permissionErr := configService.GetPermissionByName(report.PlateName)
- if permissionErr != nil {
- logger.Error("获取板块权限失败[plateName:%s]", report.PlateName)
- } else {
- riskLevel = permission.RiskLevel
- }
- case reportDomain.SourceETA:
- permissions, permissionErr := configService.GetSecondPermissionsByClassifyId(report.ClassifyId)
- if permissionErr != nil {
- logger.Error("获取板块权限失败[plateName:%s]", report.PlateName)
- } else {
- riskNum := configService.GetHighestRiskLevel(permissions)
- riskLevel = fmt.Sprintf("R%d", riskNum)
- }
- }
- var permissionNamesList []string
- _, permissionNamesList = reportService.GetReportPermissionNames(report.OrgId, report.Source)
- permissionNames = strings.Join(permissionNamesList, ",")
- }
- default:
- logger.Warn("不支持的产品类型[%s]", product.Type)
- }
- return
- }
- func GetProductInfoById(productId int) (product ProductDTO, err error) {
- merchantProduct, err := merchantService.GetMerchantProductById(productId)
- if err != nil {
- err = exception.NewWithException(exception.ProductInfoError, err.Error())
- return
- }
- product = convertToProductDTO(merchantProduct)
- product.RiskLevel, _, _, _, _, err = GetProductRiskLevel(merchantProduct)
- if err != nil {
- logger.Error("获取风险等级失败[productId:%d]", productId)
- }
- return
- }
- func convertToProductDTO(product merchantService.MerchantProductDTO) (productDTO ProductDTO) {
- beginDate := time.Now()
- endDate := beginDate.Add(time.Duration(product.ValidDays) * 24 * time.Hour)
- productDTO = ProductDTO{
- Title: product.Title,
- Description: product.Description,
- Price: product.Price,
- RiskLevel: product.RiskLevel,
- CoverSrc: product.CoverSrc,
- Type: product.Type,
- BeginDate: beginDate.Format(time.DateOnly),
- EndDate: endDate.Format(time.DateOnly),
- SourceId: product.SourceId,
- }
- return
- }
- // OpenProduct 开通产品
- func OpenProduct(templateUserId int, productOrderNo string) (err error) {
- proudctOrder, err := order.GetProductOrderByUser(templateUserId, productOrderNo)
- if err != nil {
- logger.Error("获取产品订单信息失败:%v", err)
- return
- }
- product, err := merchantService.GetMerchantProductById(proudctOrder.ProductID)
- if err != nil {
- logger.Error("获取产品信息失败:%v", err)
- return
- }
- return merchantService.OpenProduct(templateUserId, productOrderNo, product)
- }
- // OpenProduct 开通产品
- func CloseProduct(templateUserId int, productOrderNo string) (err error) {
- proudctOrder, err := order.GetProductOrderByUser(templateUserId, productOrderNo)
- if err != nil {
- logger.Error("获取产品订单信息失败:%v", err)
- return
- }
- product, err := merchantService.GetMerchantProductById(proudctOrder.ProductID)
- if err != nil {
- logger.Error("获取产品信息失败:%v", err)
- return
- }
- return merchantService.CloseProduct(templateUserId, productOrderNo, product)
- }
- //过期产品(套餐)
- // 退款关闭套餐
- func GetRelatePackage(info ProductDTO) (prodList []merchantService.MerchantProductDTO, err error) {
- switch info.Type {
- case "audio", "video":
- permissionIds, permissionErr := media.GetMediaPermissionMappingByMedia(info.Type, info.SourceId)
- if permissionErr != nil {
- logger.Error("获取媒体品种信息失败:%v", err)
- return
- }
- return merchantService.GetProductListBySourceIds(permissionIds, "package")
- case "report":
- reportInfo, reportErr := reportDomain.GetReportById(info.SourceId)
- if reportErr != nil {
- logger.Error("获取报告信息失败:%v", err)
- return
- }
- permissions := reportDomain.GetReportSecondPermissionsById(reportInfo.OrgId, reportInfo.Source)
- var permissionIds []int
- if len(permissions) > 0 {
- for _, permission := range permissions {
- permissionIds = append(permissionIds, permission.PermissionId)
- }
- permissionIds = append(permissionIds, permissions[0].PermissionId)
- }
- return merchantService.GetProductListBySourceIds(permissionIds, "package")
- default:
- err = exception.New(exception.ProductTypeError)
- return
- }
- }
|