product_service.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package product
  2. import (
  3. logger "eta/eta_mini_ht_api/common/component/log"
  4. "eta/eta_mini_ht_api/common/exception"
  5. "eta/eta_mini_ht_api/common/utils/page"
  6. permissionService "eta/eta_mini_ht_api/domian/config"
  7. merchantService "eta/eta_mini_ht_api/domian/merchant"
  8. reportDomain "eta/eta_mini_ht_api/domian/report"
  9. "eta/eta_mini_ht_api/models/config"
  10. "eta/eta_mini_ht_api/models/image"
  11. "eta/eta_mini_ht_api/models/media"
  12. configService "eta/eta_mini_ht_api/service/config"
  13. mediaService "eta/eta_mini_ht_api/service/media"
  14. "eta/eta_mini_ht_api/service/order"
  15. reportService "eta/eta_mini_ht_api/service/report"
  16. "fmt"
  17. "time"
  18. )
  19. type ProductDTO struct {
  20. Title string `json:"title"`
  21. SourceTile string `json:"sourceTile"`
  22. Abstract string `json:"abstract"`
  23. Src string `json:"src"`
  24. PermissionNames []string `json:"permissionNames"`
  25. Description string `json:"description"`
  26. Price string `json:"price"`
  27. CoverSrc int `json:"coverSrc"`
  28. CoverUrl string `json:"coverUrl"`
  29. RiskLevel string `json:"riskLevel"`
  30. Type string `json:"type"`
  31. BeginDate string `json:"beginDate"`
  32. EndDate string `json:"endDate"`
  33. SourceId int `json:"sourceId"`
  34. ReportId int `json:"reportId"`
  35. MediaId int `json:"mediaId"`
  36. }
  37. func GetProductRiskLevel(product merchantService.MerchantProductDTO) (riskLevel, sourceTitle, sourceAbsract, coverSrc, sourceSrc string, permissionNames []string, err error) {
  38. switch product.Type {
  39. case "package":
  40. permissionRisk, permissionErr := config.PermissionsByPermissionId(product.SourceId)
  41. permissionNames = []string{permissionRisk.Name}
  42. if permissionErr != nil {
  43. logger.Error("获取权限信息失败[permissionId:%d]", product.SourceId)
  44. } else {
  45. riskLevel = permissionRisk.RiskLevel
  46. }
  47. coverSrc = product.CoverUrl
  48. case "audio", "video":
  49. mediaInfo, mediaErr := media.GetMediaById(product.Type, product.SourceId)
  50. sourceTitle, coverSrc, sourceSrc = mediaInfo.MediaName, mediaInfo.CoverSrc, mediaInfo.Src
  51. if mediaErr != nil {
  52. logger.Error("获取媒体信息失败[mediaType:%s,mediaId:%d]", product.Type, product.SourceId)
  53. }
  54. permissionIds, mediaErr := media.GetMediaPermissionMappingByMedia(product.Type, product.SourceId)
  55. if mediaErr != nil {
  56. logger.Error("获取媒体权限失败[mediaType:%s,mediaId:%d]", product.Type, product.SourceId)
  57. } else {
  58. permissions, permissionErr := permissionService.GetPermissionListByIds(permissionIds)
  59. if permissionErr != nil {
  60. logger.Error("获取权限信息失败[permissionIds:%v]", permissionIds)
  61. }
  62. permissionNames = mediaService.GetMediaPermissionNames(permissionIds)
  63. //permissionNames = strings.Join(permissionNamesList, ",")
  64. riskNum := configService.GetHighestRiskLevel(permissions)
  65. riskLevel = fmt.Sprintf("R%d", riskNum)
  66. }
  67. case "report":
  68. report, reportErr := reportDomain.GetReportById(product.SourceId)
  69. var coverSrcId int
  70. sourceAbsract, sourceTitle, coverSrcId = report.Abstract, report.Title, report.CoverSrc
  71. if coverSrcId > 0 {
  72. var imageSrc string
  73. imageSrc, coverSrcErr := image.GetImageSrc(coverSrcId)
  74. if coverSrcErr != nil {
  75. logger.Error("获取图片资源失败:%v,资源ID:%d", err, coverSrcId)
  76. } else {
  77. coverSrc = imageSrc
  78. }
  79. }
  80. if reportErr != nil {
  81. logger.Error("获取研报信息失败[reportId:%d]", product.SourceId)
  82. } else {
  83. switch report.Source {
  84. case reportDomain.SourceHT:
  85. permission, permissionErr := configService.GetPermissionByName(report.PlateName)
  86. if permissionErr != nil {
  87. logger.Error("获取板块权限失败[plateName:%s]", report.PlateName)
  88. } else {
  89. riskLevel = permission.RiskLevel
  90. }
  91. case reportDomain.SourceETA:
  92. permissions, permissionErr := configService.GetSecondPermissionsByClassifyId(report.ClassifyId)
  93. if permissionErr != nil {
  94. logger.Error("获取板块权限失败[plateName:%s]", report.PlateName)
  95. } else {
  96. riskNum := configService.GetHighestRiskLevel(permissions)
  97. riskLevel = fmt.Sprintf("R%d", riskNum)
  98. }
  99. }
  100. _, permissionNames = reportService.GetReportPermissionNames(report.OrgId, report.Source)
  101. //permissionNames = strings.Join(permissionNamesList, ",")
  102. }
  103. default:
  104. logger.Warn("不支持的产品类型[%s]", product.Type)
  105. }
  106. return
  107. }
  108. func GetProductInfoById(productId int) (product ProductDTO, err error) {
  109. merchantProduct, err := merchantService.GetMerchantProductById(productId)
  110. if err != nil {
  111. err = exception.NewWithException(exception.ProductInfoError, err.Error())
  112. return
  113. }
  114. product = convertToProductDTO(merchantProduct)
  115. product.RiskLevel, product.SourceTile, product.Abstract, product.CoverUrl, product.Src, product.PermissionNames, err = GetProductRiskLevel(merchantProduct)
  116. if err != nil {
  117. logger.Error("获取风险等级失败[productId:%d]", productId)
  118. }
  119. return
  120. }
  121. func convertToProductDTO(product merchantService.MerchantProductDTO) (productDTO ProductDTO) {
  122. beginDate := time.Now()
  123. endDate := beginDate.Add(time.Duration(product.ValidDays) * 24 * time.Hour)
  124. productDTO = ProductDTO{
  125. Title: product.Title,
  126. Description: product.Description,
  127. Price: product.Price.String(),
  128. RiskLevel: product.RiskLevel,
  129. CoverSrc: product.CoverSrc,
  130. CoverUrl: product.CoverUrl,
  131. Type: product.Type,
  132. BeginDate: beginDate.Format(time.DateOnly),
  133. EndDate: endDate.Format(time.DateOnly),
  134. SourceId: product.SourceId,
  135. }
  136. if product.CoverUrl == "" && product.CoverSrc > 0 {
  137. imageSrc, err := image.GetImageSrc(product.CoverSrc)
  138. if err != nil {
  139. logger.Error("获取图片地址失败:%v,资源Id:%d", err, product.CoverSrc)
  140. } else {
  141. productDTO.CoverUrl = imageSrc
  142. }
  143. }
  144. return
  145. }
  146. // OpenProduct 开通产品
  147. func OpenProduct(templateUserId int, productOrderNo string) (err error) {
  148. proudctOrder, err := order.GetProductOrderByUser(templateUserId, productOrderNo)
  149. if err != nil {
  150. logger.Error("获取产品订单信息失败:%v", err)
  151. return
  152. }
  153. product, err := merchantService.GetMerchantProductById(proudctOrder.ProductID)
  154. if err != nil {
  155. logger.Error("获取产品信息失败:%v", err)
  156. return
  157. }
  158. return merchantService.OpenProduct(templateUserId, productOrderNo, product)
  159. }
  160. // OpenProduct 开通产品
  161. func CloseProduct(templateUserId int, productOrderNo string) (err error) {
  162. productOrder, err := order.GetProductOrderByUser(templateUserId, productOrderNo)
  163. if err != nil {
  164. logger.Error("获取产品订单信息失败:%v", err)
  165. return
  166. }
  167. product, err := merchantService.GetMerchantProductById(productOrder.ProductID)
  168. if err != nil {
  169. logger.Error("获取产品信息失败:%v", err)
  170. return
  171. }
  172. return merchantService.CloseProduct(templateUserId, productOrderNo, product)
  173. }
  174. //过期产品(套餐)
  175. // 退款关闭套餐
  176. func GetRelatePackage(info ProductDTO) (prodList []ProductDTO, err error) {
  177. switch info.Type {
  178. case "audio", "video":
  179. permissionIds, permissionErr := media.GetMediaPermissionMappingByMedia(info.Type, info.SourceId)
  180. if permissionErr != nil {
  181. logger.Error("获取媒体品种信息失败:%v", err)
  182. return
  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. case "report":
  193. reportInfo, reportErr := reportDomain.GetReportById(info.SourceId)
  194. if reportErr != nil {
  195. logger.Error("获取报告信息失败:%v", err)
  196. return
  197. }
  198. permissions := reportDomain.GetReportSecondPermissionsById(reportInfo.OrgId, reportInfo.Source)
  199. var permissionIds []int
  200. if len(permissions) > 0 {
  201. for _, permission := range permissions {
  202. permissionIds = append(permissionIds, permission.PermissionId)
  203. }
  204. permissionIds = append(permissionIds, permissions[0].PermissionId)
  205. }
  206. merchantProduct, pdErr := merchantService.GetProductListBySourceIds(permissionIds, "package")
  207. if pdErr != nil {
  208. return
  209. }
  210. for _, product := range merchantProduct {
  211. prodList = append(prodList, convertToProductDTO(product))
  212. }
  213. return
  214. default:
  215. err = exception.New(exception.ProductTypeError)
  216. return
  217. }
  218. }
  219. func GetTotalPageCountByProductType(productType string) (total int64, latestId int64) {
  220. return merchantService.GetTotalPageCountByProductType(productType)
  221. }
  222. func ProductList(productType string, info page.PageInfo) (dtoList []ProductDTO, err error) {
  223. var merchantProductList []merchantService.MerchantProductDTO
  224. merchantProductList, err = merchantService.GetProductListByProductType(productType, info)
  225. for _, product := range merchantProductList {
  226. productDTO := convertToProductDTO(product)
  227. dtoList = append(dtoList, productDTO)
  228. }
  229. return
  230. }