english_report.go 11 KB

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