report_controller.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. package report
  2. import (
  3. "encoding/json"
  4. logger "eta_mini_ht_api/common/component/log"
  5. "eta_mini_ht_api/common/exception"
  6. "eta_mini_ht_api/common/utils/page"
  7. stringUtils "eta_mini_ht_api/common/utils/string"
  8. "eta_mini_ht_api/controllers"
  9. reportService "eta_mini_ht_api/domian/report"
  10. "eta_mini_ht_api/service/report"
  11. "eta_mini_ht_api/service/user"
  12. "fmt"
  13. "strings"
  14. )
  15. type ReportController struct {
  16. controllers.ListController
  17. }
  18. // Search 搜索报告列表
  19. // @Description 搜索报告列表
  20. // @Success 200 {object}
  21. // @router /search [get]
  22. func (r *ReportController) Search(key string) {
  23. controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
  24. result = r.InitWrapData("分页搜索报告列表失败")
  25. if key == "" {
  26. err = exception.New(exception.SearchKeyEmptyError)
  27. r.FailedResult("分页搜索报告列表失败", result)
  28. return
  29. }
  30. pageRes := page.Page{
  31. Current: r.PageInfo.Current,
  32. PageSize: r.PageInfo.PageSize,
  33. }
  34. if r.PageInfo.LatestId == 0 {
  35. pageRes.LatestId = report.SearchMaxReportId()
  36. pageRes.Total = pageRes.LatestId
  37. r.PageInfo.LatestId = pageRes.LatestId
  38. r.PageInfo.Total = pageRes.Total
  39. } else {
  40. pageRes.LatestId = r.PageInfo.LatestId
  41. pageRes.Total = r.PageInfo.Total
  42. }
  43. pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
  44. list := make([]reportService.ReportDTO, 0)
  45. if pageRes.LatestId > 0 {
  46. list, err = report.SearchReportList(key, r.PageInfo)
  47. if err != nil {
  48. r.FailedResult("分页搜索报告列表失败", result)
  49. return
  50. }
  51. }
  52. reports := new(page.PageResult)
  53. reports.Data = list
  54. reports.Page = pageRes
  55. r.SuccessResult("分页搜索报告列表成功", reports, result)
  56. return
  57. })
  58. }
  59. // List 获取报告列表
  60. // @Description 获取报告列表
  61. // @Success 200 {object}
  62. // @router /list [get]
  63. func (r *ReportController) List(permissionIds string) {
  64. controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
  65. result = r.InitWrapData("分页查询报告列表失败")
  66. pageRes := page.Page{
  67. Current: r.PageInfo.Current,
  68. PageSize: r.PageInfo.PageSize,
  69. }
  70. permissionIdList, err := transPermissionIds(permissionIds)
  71. if err != nil {
  72. logger.Error("品种列表解析错误:%v", err)
  73. r.FailedResult("分页查询报告列表失败", result)
  74. err = exception.New(exception.QueryReportPageFailed)
  75. return
  76. }
  77. var reportOrgIds []int
  78. if r.PageInfo.LatestId == 0 {
  79. pageRes.Total, pageRes.LatestId, reportOrgIds = report.GetTotalPageCountByPermissionIds(permissionIdList)
  80. r.PageInfo.LatestId = pageRes.LatestId
  81. } else {
  82. pageRes.LatestId = r.PageInfo.LatestId
  83. pageRes.Total = r.PageInfo.Total
  84. }
  85. pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
  86. list, err := report.GetReportPage(r.PageInfo, reportOrgIds)
  87. if err != nil {
  88. r.FailedResult("分页查询报告列表失败", result)
  89. return
  90. }
  91. reports := new(page.PageResult)
  92. reports.Data = list
  93. reports.Page = pageRes
  94. r.SuccessResult("查询报告列表成功", reports, result)
  95. return
  96. })
  97. }
  98. func transPermissionIds(permissionIds string) (permissionIdList []int, err error) {
  99. if strings.HasPrefix(permissionIds, ",") {
  100. permissionIds = permissionIds[1:len(permissionIds)]
  101. }
  102. if strings.HasSuffix(permissionIds, ",") {
  103. permissionIds = permissionIds[0 : len(permissionIds)-1]
  104. }
  105. if permissionIds == "" {
  106. permissionIdList = []int{}
  107. } else {
  108. permissionIdList, err = stringUtils.StringToIntSlice(strings.Split(permissionIds, ","))
  109. }
  110. return
  111. }
  112. // HotRanked @Title 获取本周最热的报告列表
  113. // @Description 获取本周最热的报告列表
  114. // @Success 200 {object}
  115. // @router /hotRankedList [get]
  116. func (r *ReportController) HotRanked(permissionIds string, limit int) {
  117. controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
  118. if limit <= 0 {
  119. limit = 3
  120. }
  121. result = r.InitWrapData("获取本周最热报告列表失败")
  122. list, err := report.GetRandedReportByWeeklyHot(limit)
  123. permissionIdList, err := transPermissionIds(permissionIds)
  124. if err != nil {
  125. logger.Error("品种列表解析错误:%v", err)
  126. r.FailedResult("分页查询报告列表失败", result)
  127. err = exception.New(exception.QueryReportPageFailed)
  128. return
  129. }
  130. filterList := make([]report.HotRankedReport, 0)
  131. if len(permissionIdList) > 0 {
  132. for _, item := range list {
  133. for _, permissionId := range permissionIdList {
  134. if _, ok := item.Permissions[permissionId]; ok {
  135. filterList = append(filterList, item)
  136. break
  137. }
  138. }
  139. }
  140. } else {
  141. filterList = list
  142. }
  143. if err != nil {
  144. r.FailedResult("获取本周最热报告列表成功", result)
  145. return
  146. }
  147. r.SuccessResult("获取本周最热报告列表成功", filterList, result)
  148. return
  149. })
  150. }
  151. // PublishRanked @Title 获取最新发布的报告列表
  152. // @Description 获取最新发布的报告列表
  153. // @Success 200 {object}
  154. // @router /publishRankedList [get]
  155. func (r *ReportController) PublishRanked(limit int, week bool) {
  156. controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
  157. result = r.InitWrapData("获取最新发布报告列表失败")
  158. if limit <= 0 {
  159. limit = 3
  160. }
  161. //获取最新的报告列表
  162. list, err := report.GetRandedReportByPublishTimeWeekly(limit, week)
  163. if err != nil {
  164. r.FailedResult("获取最新发布报告列表失败", result)
  165. return
  166. }
  167. r.SuccessResult("获取最新发布报告列表成功", list, result)
  168. return
  169. })
  170. }
  171. // AnalystReportList @Title 获取研究员报告列表
  172. // @Description 获取研究员报告列表
  173. // @Success 200 {object}
  174. // @router /AnalystReportList [get]
  175. //func (r *ReportController) AnalystReportList(authorId int) {
  176. // controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
  177. // result = r.InitWrapData("分页获取研究员报告列表失败")
  178. // pageRes := page.Page{
  179. // Current: r.PageInfo.Current,
  180. // PageSize: r.PageInfo.PageSize,
  181. // }
  182. // if r.PageInfo.LatestId == 0 {
  183. // pageRes.LatestId, _ = report.GetTotalPageCount([]int{})
  184. // r.PageInfo.LatestId = pageRes.LatestId
  185. // } else {
  186. // pageRes.LatestId = r.PageInfo.LatestId
  187. // }
  188. // pageRes.Total = pageRes.LatestId
  189. // pageRes.TotalPage = page.TotalPages(pageRes.Total, pageRes.PageSize)
  190. // list, err := report.GetReportPageByAlayyst(r.PageInfo)
  191. // if err != nil {
  192. // r.FailedResult("分页查询报告列表失败", result)
  193. // return
  194. // }
  195. // reports := new(page.PageResult)
  196. // reports.Data = list
  197. // reports.Page = pageRes
  198. // r.SuccessResult("查询报告列表成功", reports, result)
  199. // return
  200. // })
  201. //}
  202. // GetPermissions @Title 获取品种列表
  203. // @Description 获取最新发布的报告列表
  204. // @Success 200 {object}
  205. // @router /permissionList [get]
  206. func (r *ReportController) GetPermissions() {
  207. controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
  208. result = r.InitWrapData("获取品种列表失败")
  209. //获取最新的报告列表
  210. json, err := report.GetPermissionList()
  211. if err != nil {
  212. r.FailedResult("获取品种列表失败", result)
  213. return
  214. }
  215. r.SuccessResult("获取最新发布报告列表成功", json.Children, result)
  216. return
  217. })
  218. }
  219. type RecordCountReq struct {
  220. ReportId int `json:"reportId"`
  221. IpAddress string `json:"ipAddress"`
  222. Location string `json:"location"`
  223. Referer string `json:"referer"`
  224. Additional interface{} `json:"additional"`
  225. }
  226. // Count 获取品种列表
  227. // @Description 获取最新发布的报告列表
  228. // @Success 200 {object}
  229. // @router /count [post]
  230. func (r *ReportController) Count() {
  231. controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
  232. result = r.InitWrapData("研报点击记录失败")
  233. var userInfo user.User
  234. userInfo = r.Data["user"].(user.User)
  235. recordReq := new(RecordCountReq)
  236. r.GetPostParams(recordReq)
  237. record := convertToRecordCount(recordReq)
  238. record.UserId = userInfo.Id
  239. record.Mobile = userInfo.Mobile
  240. err = report.CountReport(record)
  241. if err != nil {
  242. err = exception.New(exception.ReportRecordClickCountFailed)
  243. return
  244. }
  245. r.SuccessResult("研报点击记录成功", nil, result)
  246. return
  247. })
  248. }
  249. // GetReport 获取研报详情
  250. // @Description 获取研报详情
  251. // @Success 200 {object}
  252. // @router /report [get]
  253. func (r *ReportController) GetReport(reportId int) {
  254. controllers.Wrap(&r.BaseController, func() (result *controllers.WrapData, err error) {
  255. result = r.InitWrapData("获取研报详情失败")
  256. fmt.Println(reportId)
  257. reportDetail, err := report.GetReportById(reportId)
  258. if err != nil {
  259. err = exception.New(exception.GetReportFailed)
  260. return
  261. }
  262. r.SuccessResult("获取研报详情成功", reportDetail, result)
  263. return
  264. })
  265. }
  266. func convertToRecordCount(req *RecordCountReq) report.RecordCount {
  267. additionStr, _ := json.Marshal(req.Additional)
  268. return report.RecordCount{
  269. ReportId: req.ReportId,
  270. IpAddress: req.IpAddress,
  271. Location: req.Location,
  272. Referer: req.Referer,
  273. Additional: string(additionStr),
  274. }
  275. }