product_service.go 7.0 KB

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