product_service.go 6.5 KB

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