product_service.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package product
  2. import (
  3. logger "eta/eta_mini_ht_api/common/component/log"
  4. "eta/eta_mini_ht_api/common/exception"
  5. permissionService "eta/eta_mini_ht_api/domian/config"
  6. merchantService "eta/eta_mini_ht_api/domian/merchant"
  7. reportService "eta/eta_mini_ht_api/domian/report"
  8. "eta/eta_mini_ht_api/models/config"
  9. "eta/eta_mini_ht_api/models/media"
  10. configService "eta/eta_mini_ht_api/service/config"
  11. "eta/eta_mini_ht_api/service/order"
  12. "fmt"
  13. "github.com/shopspring/decimal"
  14. "time"
  15. )
  16. type ProductDTO struct {
  17. Title string
  18. Description string
  19. Price decimal.Decimal
  20. CoverSrc string
  21. RiskLevel string
  22. Type string
  23. BeginDate string
  24. EndDate string
  25. SourceId int
  26. }
  27. func GetProductRiskLevel(product merchantService.MerchantProductDTO) (riskLevel string, err error) {
  28. switch product.Type {
  29. case "package":
  30. permissionRisk, permissionErr := config.PermissionsByPermissionId(product.SourceId)
  31. if permissionErr != nil {
  32. logger.Error("获取权限信息失败[permissionId:%d]", product.SourceId)
  33. } else {
  34. riskLevel = permissionRisk.RiskLevel
  35. }
  36. case "audio", "video":
  37. permissionIds, mediaErr := media.GetMediaPermissionMappingByMedia(product.Type, product.SourceId)
  38. if mediaErr != nil {
  39. logger.Error("获取媒体权限失败[mediaType:%s,mediaId:%d]", product.Type, product.SourceId)
  40. } else {
  41. permissions, permissionErr := permissionService.GetPermissionListByIds(permissionIds)
  42. if permissionErr != nil {
  43. logger.Error("获取权限信息失败[permissionIds:%v]", permissionIds)
  44. }
  45. riskNum := configService.GetHighestRiskLevel(permissions)
  46. riskLevel = fmt.Sprintf("R%d", riskNum)
  47. }
  48. case "report":
  49. report, reportErr := reportService.GetReportById(product.SourceId)
  50. if reportErr != nil {
  51. logger.Error("获取研报信息失败[reportId:%d]", product.SourceId)
  52. } else {
  53. switch report.Source {
  54. case reportService.SourceHT:
  55. permission, permissionErr := configService.GetPermissionByName(report.PlateName)
  56. if permissionErr != nil {
  57. logger.Error("获取板块权限失败[plateName:%s]", report.PlateName)
  58. } else {
  59. riskLevel = permission.RiskLevel
  60. }
  61. case reportService.SourceETA:
  62. permissions, permissionErr := configService.GetSecondPermissionsByClassifyId(report.ClassifyId)
  63. if permissionErr != nil {
  64. logger.Error("获取板块权限失败[plateName:%s]", report.PlateName)
  65. } else {
  66. riskNum := configService.GetHighestRiskLevel(permissions)
  67. riskLevel = fmt.Sprintf("R%d", riskNum)
  68. }
  69. }
  70. }
  71. default:
  72. logger.Warn("不支持的产品类型[%s]", product.Type)
  73. }
  74. return
  75. }
  76. func GetProductInfoById(productId int) (product ProductDTO, err error) {
  77. merchantProduct, err := merchantService.GetMerchantProductById(productId)
  78. if err != nil {
  79. err = exception.NewWithException(exception.ProductInfoError, err.Error())
  80. return
  81. }
  82. product = convertToProductDTO(merchantProduct)
  83. product.RiskLevel, err = GetProductRiskLevel(merchantProduct)
  84. if err != nil {
  85. logger.Error("获取风险等级失败[productId:%d]", productId)
  86. }
  87. return
  88. }
  89. func convertToProductDTO(product merchantService.MerchantProductDTO) (productDTO ProductDTO) {
  90. beginDate := time.Now()
  91. endDate := beginDate.Add(time.Duration(product.ValidDays) * 24 * time.Hour)
  92. productDTO = ProductDTO{
  93. Title: product.Title,
  94. Description: product.Description,
  95. Price: product.Price,
  96. RiskLevel: product.RiskLevel,
  97. CoverSrc: product.CoverSrc,
  98. Type: product.Type,
  99. BeginDate: beginDate.Format(time.DateOnly),
  100. EndDate: endDate.Format(time.DateOnly),
  101. SourceId: product.SourceId,
  102. }
  103. return
  104. }
  105. // OpenProduct 开通产品
  106. func OpenProduct(templateUserId int, productOrderNo string) (err error) {
  107. proudctOrder, err := order.GetProductOrderByUser(templateUserId, productOrderNo)
  108. if err != nil {
  109. logger.Error("获取产品订单信息失败:%v", err)
  110. return
  111. }
  112. product, err := merchantService.GetMerchantProductById(proudctOrder.ProductID)
  113. if err != nil {
  114. logger.Error("获取产品信息失败:%v", err)
  115. return
  116. }
  117. return merchantService.OpenProduct(templateUserId, productOrderNo, product)
  118. }
  119. // OpenProduct 开通产品
  120. func CloseProduct(templateUserId int, productOrderNo string) (err error) {
  121. proudctOrder, err := order.GetProductOrderByUser(templateUserId, productOrderNo)
  122. if err != nil {
  123. logger.Error("获取产品订单信息失败:%v", err)
  124. return
  125. }
  126. product, err := merchantService.GetMerchantProductById(proudctOrder.ProductID)
  127. if err != nil {
  128. logger.Error("获取产品信息失败:%v", err)
  129. return
  130. }
  131. return merchantService.CloseProduct(templateUserId, productOrderNo, product)
  132. }
  133. //过期产品(套餐)
  134. // 退款关闭套餐
  135. func GetRelatePackage(info ProductDTO) (prodList []merchantService.MerchantProductDTO, err error) {
  136. switch info.Type {
  137. case "audio", "video":
  138. permissionIds, permissionErr := media.GetMediaPermissionMappingByMedia(info.Type, info.SourceId)
  139. if permissionErr != nil {
  140. logger.Error("获取媒体品种信息失败:%v", err)
  141. return
  142. }
  143. return merchantService.GetProductListBySourceIds(permissionIds, "package")
  144. case "report":
  145. reportInfo, reportErr := reportService.GetReportById(info.SourceId)
  146. if reportErr != nil {
  147. logger.Error("获取报告信息失败:%v", err)
  148. return
  149. }
  150. permissions := reportService.GetReportSecondPermissionsById(reportInfo.OrgId, reportInfo.Source)
  151. var permissionIds []int
  152. if len(permissions) > 0 {
  153. for _, permission := range permissions {
  154. permissionIds = append(permissionIds, permission.PermissionId)
  155. }
  156. permissionIds = append(permissionIds, permissions[0].PermissionId)
  157. }
  158. return merchantService.GetProductListBySourceIds(permissionIds, "package")
  159. default:
  160. err = exception.New(exception.ProductTypeError)
  161. return
  162. }
  163. }