report_share.go 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_report/models"
  5. "eta/eta_report/services"
  6. "eta/eta_report/utils"
  7. "fmt"
  8. "html"
  9. "strings"
  10. )
  11. // ReportShareController 报告分享
  12. type ReportShareController struct {
  13. BaseCommonController
  14. }
  15. // Detail
  16. // @Title 日评详情
  17. // @Description 日评详情接口
  18. // @Param ReportCode query string true "报告唯一编码"
  19. // @Param IsReplace query int false "是否报告转长图的场景:1-是"
  20. // @Success 200 {object} models.ReportShareDetailResp
  21. // @router /share/detail [get]
  22. func (this *ReportShareController) Detail() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. reportCode := this.GetString("ReportCode")
  29. isReplace, _ := this.GetInt("IsReplace", 0)
  30. if reportCode == "" {
  31. br.Msg = "参数错误"
  32. br.ErrMsg = "参数错误,reportCode 为空"
  33. return
  34. }
  35. report, err := models.GetReportByCode(reportCode)
  36. if err != nil {
  37. br.Msg = "该报告已删除"
  38. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  39. return
  40. }
  41. report.ContentSub = html.UnescapeString(report.ContentSub)
  42. report.Content = html.UnescapeString(report.Content)
  43. report.ContentStruct = html.UnescapeString(report.ContentStruct)
  44. if report.HeadResourceId > 0 {
  45. headResource, err := models.GetResourceItemById(report.HeadResourceId)
  46. if err != nil {
  47. br.Msg = "操作失败"
  48. br.ErrMsg = "获取资源库版头失败, Err: " + err.Error()
  49. return
  50. }
  51. report.HeadImg = headResource.ImgUrl
  52. report.HeadStyle = headResource.Style
  53. }
  54. if report.EndResourceId > 0 {
  55. endResource, err := models.GetResourceItemById(report.EndResourceId)
  56. if err != nil {
  57. br.Msg = "操作失败"
  58. br.ErrMsg = "获取资源库版头失败, Err: " + err.Error()
  59. return
  60. }
  61. report.EndImg = endResource.ImgUrl
  62. report.EndStyle = endResource.Style
  63. }
  64. resp := new(models.ReportShareDetailResp)
  65. // 免责声明
  66. conf, e := models.GetBusinessConf()
  67. if e != nil {
  68. br.Msg = "获取失败"
  69. br.ErrMsg = "获取免责声明失败, Err: " + e.Error()
  70. return
  71. }
  72. // (为了兼容内网客户)需要判断是否替换资源地址
  73. var urlReplace models.Report2ImgReplace
  74. if isReplace == 1 && conf[models.BusinessConfReport2ImgReplace] != "" {
  75. if e := json.Unmarshal([]byte(conf[models.BusinessConfReport2ImgReplace]), &urlReplace); e != nil {
  76. br.Msg = "获取失败"
  77. br.ErrMsg = fmt.Sprintf("获取报告替换配置失败, %v", e)
  78. return
  79. }
  80. }
  81. if conf[models.BusinessConfDisclaimer] != "" {
  82. resp.Disclaimer = conf[models.BusinessConfDisclaimer]
  83. }
  84. // 研报分享抬头
  85. if v, ok := conf[models.BusinessConfH5ShareName]; ok {
  86. resp.H5ShareName = v
  87. }
  88. if v, ok := conf[models.BusinessConfH5ReportShareImg]; ok {
  89. resp.H5ReportShareImg = v
  90. }
  91. if v, ok := conf[models.BusinessConfWatermarkChart]; ok {
  92. resp.WatermarkChart = v
  93. }
  94. if v, ok := conf[models.BusinessConfWatermarkReport]; ok {
  95. resp.WatermarkReport = v
  96. }
  97. // 报告Logo
  98. if v, ok := conf[models.BusinessConfReportCenterLogoShow]; ok {
  99. if v == `true` {
  100. if reportLogo, ok := conf[models.BusinessConfReportLogo]; ok {
  101. resp.ReportLogo = reportLogo
  102. }
  103. }
  104. }
  105. // 章节类型的报告
  106. resp.Report = new(models.ReportItem)
  107. reportChapters := make([]*models.ReportChapter, 0)
  108. if report.HasChapter == 1 {
  109. // 获取章节内容
  110. chapters, e := models.GetPublishedChapterListByReportId(report.Id)
  111. if e != nil {
  112. br.Msg = "获取失败"
  113. br.ErrMsg = "获取章节列表失败, Err: " + e.Error()
  114. return
  115. }
  116. if len(chapters) > 0 {
  117. for _, chapter := range chapters {
  118. chapter.Content = html.UnescapeString(chapter.Content)
  119. chapter.ContentSub = html.UnescapeString(chapter.ContentSub)
  120. if urlReplace.IsReplace {
  121. if urlReplace.OssUrlOrigin != "" {
  122. chapter.Content = strings.ReplaceAll(chapter.Content, urlReplace.OssUrlOrigin, urlReplace.OssUrlNew)
  123. chapter.ContentSub = strings.ReplaceAll(chapter.ContentSub, urlReplace.OssUrlOrigin, urlReplace.OssUrlNew)
  124. }
  125. if urlReplace.ChartUrlOrigin != "" {
  126. chapter.Content = strings.ReplaceAll(chapter.Content, urlReplace.ChartUrlOrigin, urlReplace.ChartUrlNew)
  127. chapter.ContentSub = strings.ReplaceAll(chapter.ContentSub, urlReplace.ChartUrlOrigin, urlReplace.ChartUrlNew)
  128. }
  129. }
  130. reportChapters = append(reportChapters, chapter)
  131. }
  132. }
  133. //report.Abstract = report.Title
  134. }
  135. // 替换地址
  136. if urlReplace.IsReplace {
  137. if urlReplace.OssUrlOrigin != "" {
  138. resp.H5ReportShareImg = strings.ReplaceAll(resp.H5ReportShareImg, urlReplace.OssUrlOrigin, urlReplace.OssUrlNew)
  139. resp.ReportLogo = strings.ReplaceAll(resp.ReportLogo, urlReplace.OssUrlOrigin, urlReplace.OssUrlNew)
  140. report.Content = strings.ReplaceAll(report.Content, urlReplace.OssUrlOrigin, urlReplace.OssUrlNew)
  141. report.ContentSub = strings.ReplaceAll(report.ContentSub, urlReplace.OssUrlOrigin, urlReplace.OssUrlNew)
  142. report.HeadImg = strings.ReplaceAll(report.HeadImg, urlReplace.OssUrlOrigin, urlReplace.OssUrlNew)
  143. report.EndImg = strings.ReplaceAll(report.EndImg, urlReplace.OssUrlOrigin, urlReplace.OssUrlNew)
  144. }
  145. if urlReplace.ChartUrlOrigin != "" {
  146. report.Content = strings.ReplaceAll(report.Content, urlReplace.ChartUrlOrigin, urlReplace.ChartUrlNew)
  147. report.ContentSub = strings.ReplaceAll(report.ContentSub, urlReplace.ChartUrlOrigin, urlReplace.ChartUrlNew)
  148. }
  149. }
  150. // 更新pv
  151. if e = models.UpdateReportPv(report.Id); e != nil {
  152. br.Msg = "获取失败"
  153. br.ErrMsg = "更新报告pv失败, Err: " + e.Error()
  154. return
  155. }
  156. var hasAuth bool
  157. authToken := this.GetString("AuthToken")
  158. if authToken != "" {
  159. key := fmt.Sprint(utils.CACHE_REPORT_AUTH, authToken)
  160. redisReportId, err := utils.Rc.GetUInt64(key)
  161. if err == nil && int(redisReportId) == report.Id {
  162. hasAuth = true
  163. }
  164. }
  165. // 报告内图表授权
  166. if v, ok := conf[models.BusinessConfIsOpenChartExpired]; ok {
  167. if v == `true` {
  168. resp.IsOpenChartExpired = true
  169. // 有权限才会添加token
  170. if hasAuth {
  171. tokenMap := make(map[string]string)
  172. report.Content = services.HandleReportContent(report.Content, "add", tokenMap)
  173. //report.ContentStruct = services.HandleReportContent(report.ContentStruct, "add", tokenMap)
  174. for _, v := range reportChapters {
  175. v.Content = services.HandleReportContent(v.Content, "add", tokenMap)
  176. }
  177. }
  178. }
  179. }
  180. resp.Report.Report = report
  181. resp.Report.ChapterList = reportChapters
  182. br.Ret = 200
  183. br.Success = true
  184. br.Msg = "获取成功"
  185. br.Data = resp
  186. }
  187. // OutSideReportDetail
  188. // @Title 日评详情
  189. // @Description 日评详情接口
  190. // @Param ReportCode query string true "报告唯一编码"
  191. // @Success 200 {object} models.ReportShareDetailResp
  192. // @router /share/outside/report/detail [get]
  193. func (this *ReportShareController) OutSideReportDetail() {
  194. br := new(models.BaseResponse).Init()
  195. defer func() {
  196. this.Data["json"] = br
  197. this.ServeJSON()
  198. }()
  199. reportCode := this.GetString("ReportCode")
  200. if reportCode == "" {
  201. br.Msg = "参数错误"
  202. br.ErrMsg = "参数错误,reportCode 为空"
  203. return
  204. }
  205. report, err := models.GetOutsideReportByReportCode(reportCode)
  206. if err != nil {
  207. br.Msg = "该报告已删除"
  208. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  209. return
  210. }
  211. report.Content = html.UnescapeString(report.Content)
  212. attachmentList, err := models.GetOutsideReportAttachmentListByReportId(report.OutsideReportId)
  213. if err != nil {
  214. br.Msg = "获取失败"
  215. br.ErrMsg = "获取附件列表失败, Err: " + err.Error()
  216. return
  217. }
  218. outsideReportBO := models.OutsideReportBO{
  219. OutsideReportId: report.OutsideReportId,
  220. Source: report.Source,
  221. Title: report.Title,
  222. Abstract: report.Abstract,
  223. ClassifyId: report.ClassifyId,
  224. ClassifyName: report.ClassifyName,
  225. Content: report.Content,
  226. SysUserId: report.SysUserId,
  227. SysUserName: report.SysUserName,
  228. AttachmentList: attachmentList,
  229. }
  230. resp := new(models.OutsideReportResp)
  231. // 免责声明
  232. conf, e := models.GetBusinessConf()
  233. if e != nil {
  234. br.Msg = "获取失败"
  235. br.ErrMsg = "获取免责声明失败, Err: " + e.Error()
  236. return
  237. }
  238. if conf[models.BusinessConfDisclaimer] != "" {
  239. resp.Disclaimer = conf[models.BusinessConfDisclaimer]
  240. }
  241. // 研报分享抬头
  242. if v, ok := conf[models.BusinessConfH5ShareName]; ok {
  243. resp.H5ShareName = v
  244. }
  245. if v, ok := conf[models.BusinessConfH5ReportShareImg]; ok {
  246. resp.H5ReportShareImg = v
  247. }
  248. if v, ok := conf[models.BusinessConfWatermarkChart]; ok {
  249. resp.WatermarkChart = v
  250. }
  251. if v, ok := conf[models.BusinessConfWatermarkReport]; ok {
  252. resp.WatermarkReport = v
  253. }
  254. // 报告Logo
  255. if v, ok := conf[models.BusinessConfReportCenterLogoShow]; ok {
  256. if v == `true` {
  257. if reportLogo, ok := conf[models.BusinessConfReportLogo]; ok {
  258. resp.ReportLogo = reportLogo
  259. }
  260. }
  261. }
  262. resp.OutsideReportBO = &outsideReportBO
  263. br.Ret = 200
  264. br.Success = true
  265. br.Msg = "获取成功"
  266. br.Data = resp
  267. }