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" reportService "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" "eta/eta_mini_ht_api/service/order" "fmt" "github.com/shopspring/decimal" "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 string, err error) { switch product.Type { case "package": permissionRisk, permissionErr := config.PermissionsByPermissionId(product.SourceId) if permissionErr != nil { logger.Error("获取权限信息失败[permissionId:%d]", product.SourceId) } else { riskLevel = permissionRisk.RiskLevel } case "audio", "video": 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) } riskNum := configService.GetHighestRiskLevel(permissions) riskLevel = fmt.Sprintf("R%d", riskNum) } case "report": report, reportErr := reportService.GetReportById(product.SourceId) if reportErr != nil { logger.Error("获取研报信息失败[reportId:%d]", product.SourceId) } else { switch report.Source { case reportService.SourceHT: permission, permissionErr := configService.GetPermissionByName(report.PlateName) if permissionErr != nil { logger.Error("获取板块权限失败[plateName:%s]", report.PlateName) } else { riskLevel = permission.RiskLevel } case reportService.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) } } } 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 := reportService.GetReportById(info.SourceId) if reportErr != nil { logger.Error("获取报告信息失败:%v", err) return } permissions := reportService.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 } }