report_share.go 8.2 KB

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