english_report.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. package english_report
  2. import (
  3. "encoding/json"
  4. "github.com/gin-gonic/gin"
  5. "github.com/go-playground/validator/v10"
  6. "hongze/hongze_yb_en_api/controller/resp"
  7. "hongze/hongze_yb_en_api/global"
  8. "hongze/hongze_yb_en_api/models/base"
  9. "hongze/hongze_yb_en_api/models/english_classify"
  10. "hongze/hongze_yb_en_api/models/english_report"
  11. elasticService "hongze/hongze_yb_en_api/services/elastic"
  12. english_report_service "hongze/hongze_yb_en_api/services/english_report"
  13. "hongze/hongze_yb_en_api/utils"
  14. "html"
  15. )
  16. type EnglishReportController struct {}
  17. func (er *EnglishReportController) List(c *gin.Context) {
  18. req := new(english_report.ReportListReq)
  19. err := c.BindQuery(&req)
  20. if err != nil {
  21. errs, ok := err.(validator.ValidationErrors)
  22. if !ok {
  23. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  24. return
  25. }
  26. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  27. return
  28. }
  29. page := new(base.Page)
  30. page.SetPageSize(req.PageSize)
  31. page.SetCurrent(req.Current)
  32. item := new(english_report.Report)
  33. condition := " state=2"
  34. var pars []interface{}
  35. var total int64
  36. var tmpList []*english_report.Report
  37. var list []*english_report.ReportListItem
  38. if req.ClassifyIdFirst >0 {
  39. condition += " and classify_id_first = ?"
  40. pars = append(pars, req.ClassifyIdFirst)
  41. }
  42. if req.ClassifyIdSecond >0 {
  43. condition += " and classify_id_second = ?"
  44. pars = append(pars, req.ClassifyIdSecond)
  45. }
  46. page.AddOrderItem(base.OrderItem{Column: "publish_time", Asc: false})
  47. page.AddOrderItem(base.OrderItem{Column: "id", Asc: false})
  48. total, tmpList, err = item.SelectPage(page, condition, pars)
  49. if err != nil {
  50. resp.FailMsg("获取失败", "获取失败,Err:"+err.Error(), c)
  51. return
  52. }
  53. if len(tmpList) > 0 {
  54. for _, v := range tmpList {
  55. tmp := &english_report.ReportListItem{
  56. Id: v.Id,
  57. AddType: v.AddType,
  58. ClassifyIdFirst: v.ClassifyIdFirst,
  59. ClassifyNameFirst: v.ClassifyNameFirst,
  60. ClassifyIdSecond: v.ClassifyIdSecond,
  61. ClassifyNameSecond: v.ClassifyNameSecond,
  62. Title: v.Title,
  63. Abstract: v.Abstract,
  64. Author: v.Author,
  65. Frequency: v.Frequency,
  66. PublishTime: utils.TimeTransferString(utils.FormatDateTime, v.PublishTime),
  67. Stage: v.Stage,
  68. VideoUrl: v.VideoUrl,
  69. VideoName: v.VideoName,
  70. VideoPlaySeconds: v.VideoPlaySeconds,
  71. ReportCode: v.ReportCode,
  72. ShareUrl: "https://share.hzinsights.com/reportEn?code=" + v.ReportCode,
  73. CreateTime: utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
  74. ModifyTime: utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime),
  75. }
  76. list = append(list, tmp)
  77. }
  78. }
  79. page.SetTotal(total)
  80. baseData := new(base.BaseData)
  81. baseData.SetPage(page)
  82. baseData.SetList(list)
  83. resp.OkData("获取成功", baseData, c)
  84. }
  85. func (er *EnglishReportController) Classify(c *gin.Context) {
  86. item := new(english_classify.Classify)
  87. parentList, err := item.GetParent()
  88. if err != nil {
  89. resp.FailMsg("获取失败", "获取失败,Err:"+err.Error(), c)
  90. return
  91. }
  92. childList, err := item.GetChild()
  93. if err != nil {
  94. resp.FailMsg("获取失败", "获取失败,Err:"+err.Error(), c)
  95. return
  96. }
  97. parentMap := make(map[int][]*english_classify.ClassifyItem, 0)
  98. for _, v := range childList {
  99. tmp := &english_classify.ClassifyItem{
  100. Id: v.Id,
  101. ClassifyName: v.ClassifyName,
  102. Sort: v.Sort,
  103. ParentId: v.ParentId,
  104. ClassifyLabel: v.ClassifyLabel,
  105. ShowType: v.ShowType,
  106. IsShow: v.IsShow,
  107. CreateTime: utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
  108. ModifyTime: utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime),
  109. }
  110. parentMap[v.ParentId] = append(parentMap[v.ParentId], tmp)
  111. }
  112. list := make([]*english_classify.ClassifyListItem, 0)
  113. for _, v := range parentList {
  114. tmp := &english_classify.ClassifyListItem{
  115. Id: v.Id,
  116. ClassifyName: v.ClassifyName,
  117. Sort: v.Sort,
  118. ParentId: v.ParentId,
  119. ClassifyLabel: v.ClassifyLabel,
  120. ShowType: v.ShowType,
  121. IsShow: v.IsShow,
  122. CreateTime: utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
  123. ModifyTime: utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime),
  124. }
  125. if child, ok := parentMap[v.Id]; ok {
  126. tmp.Child = child
  127. }else{
  128. continue
  129. }
  130. list = append(list, tmp)
  131. }
  132. baseData := new(base.BaseOnlyData)
  133. baseData.SetList(list)
  134. resp.OkData("获取成功", baseData, c)
  135. }
  136. func (er *EnglishReportController) FilterByEs(c *gin.Context) {
  137. req := new(english_report.ReportSearchReq)
  138. err := c.BindQuery(&req)
  139. if err != nil {
  140. errs, ok := err.(validator.ValidationErrors)
  141. if !ok {
  142. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  143. return
  144. }
  145. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  146. return
  147. }
  148. page := new(base.Page)
  149. page.SetPageSize(req.PageSize)
  150. page.SetCurrent(req.Current)
  151. if req.KeyWord == "" {
  152. resp.FailMsg("请输入搜索词", "", c)
  153. return
  154. }
  155. from := (req.Current - 1) * req.PageSize
  156. reportList := make([]*english_report.SearchEnglishReportItem, 0)
  157. searchResp, total, err := elasticService.SearchESEnglishReport(req.KeyWord, from, req.PageSize)
  158. if err != nil {
  159. resp.FailMsg("报告搜索失败", "报告搜索失败,Err:" + err.Error(), c)
  160. return
  161. }
  162. if searchResp.Hits != nil {
  163. for _, v := range searchResp.Hits.Hits {
  164. temp := new(english_report.SearchEnglishReportItem)
  165. itemJson, tmpErr := v.Source.MarshalJSON()
  166. if tmpErr != nil {
  167. resp.FailMsg("报告搜索失败 解析出错", "报告搜索失败,Err:" + tmpErr.Error(), c)
  168. return
  169. }
  170. reportItem := new(english_report.ElasticEnglishReportDetail)
  171. tmpErr = json.Unmarshal(itemJson, &reportItem)
  172. if tmpErr != nil {
  173. resp.FailMsg("报告搜索失败 解析出错", "报告搜索失败,Err:" + tmpErr.Error(), c)
  174. return
  175. }
  176. temp.Id = reportItem.ReportId
  177. temp.ClassifyIdFirst = reportItem.ClassifyIdFirst
  178. temp.ClassifyNameFirst = reportItem.ClassifyNameFirst
  179. temp.ClassifyIdSecond = reportItem.ClassifyIdSecond
  180. temp.ClassifyNameSecond = reportItem.ClassifyNameSecond
  181. temp.Title = reportItem.Title
  182. temp.Author = reportItem.Author
  183. temp.CreateTime = reportItem.CreateTime
  184. // 默认应该从数据库中查询
  185. temp.ContentSub = reportItem.ContentSub
  186. temp.PublishTime = reportItem.PublishTime
  187. temp.ReportCode = reportItem.ReportCode
  188. if len(v.Highlight["Title"]) > 0 {
  189. temp.Title = v.Highlight["Title"][0]
  190. }
  191. if len(v.Highlight["BodyContent"]) > 0 {
  192. temp.ContentSub = v.Highlight["BodyContent"][0]
  193. }
  194. temp.ContentSub = "<div style=\"-webkit-line-clamp: 3;-webkit-box-orient: vertical;display: -webkit-box;overflow: hidden;text-overflow: ellipsis;\">" + temp.ContentSub + "</div>"
  195. reportList = append(reportList, temp)
  196. }
  197. }
  198. page.SetTotal(total)
  199. baseData := new(base.BaseData)
  200. baseData.SetPage(page)
  201. baseData.SetList(reportList)
  202. resp.OkData("搜索成功", baseData, c)
  203. }
  204. func (er *EnglishReportController) Detail(c *gin.Context) {
  205. req := new(english_report.ReportDetailReq)
  206. err := c.BindQuery(&req)
  207. if err != nil {
  208. errs, ok := err.(validator.ValidationErrors)
  209. if !ok {
  210. resp.FailData("参数解析失败", "Err:"+err.Error(), c)
  211. return
  212. }
  213. resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
  214. return
  215. }
  216. reportItem := new(english_report.Report)
  217. reportItem, err = reportItem.GetEnglishReportByCode(req.ReportCode)
  218. if err != nil {
  219. resp.FailMsg("该报告已删除", "报告查询失败,Err:" + err.Error(), c)
  220. return
  221. }
  222. err = reportItem.UpdatePvByReportCode(req.ReportCode)
  223. if err != nil {
  224. resp.FailMsg("更新失败", "更新失败,Err:" + err.Error(), c)
  225. return
  226. }
  227. reportItem.ContentSub = html.UnescapeString(reportItem.ContentSub)
  228. reportItem.Content = html.UnescapeString(reportItem.Content)
  229. // 记录邮箱
  230. if req.ShareEmail > 0 {
  231. go english_report_service.DealEmail(reportItem, req.ReportCode, req.ShareEmail)
  232. }
  233. reportDetail := &english_report.ReportDetail{
  234. Id: reportItem.Id,
  235. AddType: reportItem.AddType,
  236. ClassifyIdFirst: reportItem.ClassifyIdFirst,
  237. ClassifyNameFirst: reportItem.ClassifyNameFirst,
  238. ClassifyIdSecond: reportItem.ClassifyIdSecond,
  239. ClassifyNameSecond: reportItem.ClassifyNameSecond,
  240. Title: reportItem.Title,
  241. Abstract: reportItem.Abstract,
  242. Author: reportItem.Author,
  243. Overview: reportItem.Overview,
  244. Content: reportItem.Content,
  245. ContentSub: reportItem.ContentSub,
  246. Frequency: reportItem.Frequency,
  247. PublishTime: utils.TimeTransferString(utils.FormatDateTime, reportItem.PublishTime),
  248. Stage: reportItem.Stage,
  249. VideoUrl: reportItem.VideoUrl,
  250. VideoName: reportItem.VideoName,
  251. VideoPlaySeconds: reportItem.VideoPlaySeconds,
  252. VideoSize: reportItem.VideoSize,
  253. ReportCode: reportItem.ReportCode,
  254. CreateTime: utils.TimeTransferString(utils.FormatDateTime, reportItem.CreateTime),
  255. ModifyTime: utils.TimeTransferString(utils.FormatDateTime, reportItem.ModifyTime),
  256. }
  257. baseData := new(english_report.ReportDetailResp)
  258. baseData.Report = reportDetail
  259. resp.OkData("查询成功", baseData, c)
  260. }