report_billboard.go 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package controllers
  2. import (
  3. "github.com/rdlucklib/rdluck_tools/paging"
  4. "hongze/hongze_cygx/models"
  5. "hongze/hongze_cygx/utils"
  6. "time"
  7. )
  8. //报告榜单
  9. type ReportBillboardController struct {
  10. BaseAuthController
  11. }
  12. // @Title 报告榜单table栏
  13. // @Description 报告榜单table栏
  14. // @Success 200 {object} models.ReportBillboardTableListResp
  15. // @router /table/list [get]
  16. func (this *ReportBillboardController) CompanyTableList() {
  17. br := new(models.BaseResponse).Init()
  18. defer func() {
  19. this.Data["json"] = br
  20. this.ServeJSON()
  21. }()
  22. user := this.User
  23. if user == nil {
  24. br.Msg = "请重新登录"
  25. br.Ret = 408
  26. return
  27. }
  28. ListPermission := []*models.ChartPermission{{PermissionName: utils.YI_YAO_NAME, ChartPermissionId: utils.YI_YAO_ID}, {PermissionName: utils.XIAO_FEI_NAME, ChartPermissionId: utils.XIAO_FEI_ID}, {PermissionName: utils.KE_JI_NAME, ChartPermissionId: utils.KE_JI_ID}, {PermissionName: utils.ZHI_ZAO_NAME, ChartPermissionId: utils.ZHI_ZAO_ID}}
  29. ListAllPermission := []*models.ChartPermission{{PermissionName: utils.YI_YAO_NAME, ChartPermissionId: utils.YI_YAO_ID}, {PermissionName: utils.XIAO_FEI_NAME, ChartPermissionId: utils.XIAO_FEI_ID}, {PermissionName: utils.KE_JI_NAME, ChartPermissionId: utils.KE_JI_ID}, {PermissionName: utils.ZHI_ZAO_NAME, ChartPermissionId: utils.ZHI_ZAO_ID}, {PermissionName: utils.CE_LUE_NAME, ChartPermissionId: utils.CE_LUE_ID}}
  30. List := []*models.ReportBillboardTableResp{{Name: "产业关注榜", Source: 1, List: ListPermission}, {Name: "阅读飙升榜", Source: 2, List: ListAllPermission}, {Name: "报告收藏榜", Source: 3, List: ListAllPermission}}
  31. resp := new(models.ReportBillboardTableListResp)
  32. resp.List = List
  33. br.Ret = 200
  34. br.Success = true
  35. br.Msg = "获取成功"
  36. br.Data = resp
  37. }
  38. // @Title 产业关注榜
  39. // @Description 获取产业关注榜接口
  40. // @Param ChartPermissionId query int false "行业ID"
  41. // @Success 200 {object} models.IndustrialManagementList
  42. // @router /industry/fllowList [get]
  43. func (this *ReportBillboardController) FllowList() {
  44. br := new(models.BaseResponse).Init()
  45. defer func() {
  46. this.Data["json"] = br
  47. this.ServeJSON()
  48. }()
  49. user := this.User
  50. if user == nil {
  51. br.Msg = "请重新登录"
  52. br.Ret = 408
  53. return
  54. }
  55. uid := user.UserId
  56. // 行业ID暂时不需要了调整为非必填
  57. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  58. // 查询有已归类行业报告的行业IDs
  59. activeIndustryIds, e := models.GetActiveArticleIndustryIds()
  60. if e != nil {
  61. br.Msg = "获取失败"
  62. br.ErrMsg = "获取已归类行业失败, Err:" + e.Error()
  63. return
  64. }
  65. activeIndustryLen := len(activeIndustryIds)
  66. topNum := utils.PageSize15
  67. var condition, subCond string
  68. var pars, subPars []interface{}
  69. if chartPermissionId > 0 {
  70. condition += ` AND man.chart_permission_id = ? `
  71. pars = append(pars, chartPermissionId)
  72. }
  73. if activeIndustryLen > 0 {
  74. condition += ` AND man.industrial_management_id IN (` + utils.GetOrmInReplace(activeIndustryLen) + `)`
  75. pars = append(pars, activeIndustryIds)
  76. }
  77. nowTime := time.Now().Local()
  78. startTime := nowTime.AddDate(0, -1, 0)
  79. endTime := nowTime.AddDate(0, 0, -1)
  80. condition += ` AND idf.create_time BETWEEN ? AND ?`
  81. pars = append(pars, startTime, endTime)
  82. // 查询近一个月至昨日关注度最高的15个产业(不再指定行业, chartPermissionId可筛选行业)
  83. list, e := models.GetTopIndustryFollowData(0, topNum, condition, pars)
  84. if e != nil {
  85. br.Msg = "获取失败"
  86. br.ErrMsg = "获取关注度最高的产业数据失败, Err:" + e.Error()
  87. return
  88. }
  89. industryIdArr := make([]int, 0)
  90. for i := range list {
  91. industryIdArr = append(industryIdArr, list[i].IndustrialManagementId)
  92. }
  93. idsLen := len(industryIdArr)
  94. // 查询当前用户关注的产业
  95. followList, err := models.GetUserFllowIndustrialList(uid)
  96. if err != nil {
  97. br.Msg = "获取失败"
  98. br.ErrMsg = "获取失败,GetUserFllowIndustrialList Err:" + err.Error()
  99. return
  100. }
  101. followMap := make(map[int]int, 0)
  102. for i := range followList {
  103. followMap[followList[i].IndustrialManagementId] = 1
  104. }
  105. // 查询产业标的
  106. if idsLen > 0 {
  107. subCond = `AND s.industrial_management_id IN ( ` + utils.GetOrmInReplace(idsLen) + ` ) `
  108. subPars = append(subPars, industryIdArr)
  109. }
  110. subjectList, err := models.GetSubjectList(subPars, subCond)
  111. if err != nil {
  112. br.Msg = "获取失败"
  113. br.ErrMsg = "获取失败,GetSubjectList Err:" + err.Error()
  114. return
  115. }
  116. subjectMap := make(map[int][]*models.IndustrialSubject)
  117. for i := range subjectList {
  118. item := new(models.IndustrialSubject)
  119. item.SubjectName = subjectList[i].SubjectName
  120. item.IndustrialManagementId = subjectList[i].IndustrialManagementId
  121. subjectMap[subjectList[i].IndustrialManagementId] = append(subjectMap[subjectList[i].IndustrialManagementId], item)
  122. }
  123. // 查询行业
  124. permissionList, e := models.GetChartPermissionAll("")
  125. if e != nil {
  126. br.Msg = "获取失败"
  127. br.ErrMsg = "获取行业信息失败, Err: " + e.Error()
  128. return
  129. }
  130. permissionMap := make(map[int]string, 0)
  131. for i := range permissionList {
  132. permissionMap[permissionList[i].ChartPermissionId] = permissionList[i].PermissionName
  133. }
  134. for k, v := range list {
  135. list[k].IsFollow = followMap[v.IndustrialManagementId]
  136. list[k].IndustrialSubjectList = subjectMap[v.IndustrialManagementId]
  137. list[k].PermissionName = permissionMap[v.ChartPermissionId]
  138. }
  139. page := paging.GetPaging(1, topNum, len(list))
  140. resp := new(models.IndustrialManagementList)
  141. resp.List = list
  142. resp.Paging = page
  143. br.Ret = 200
  144. br.Success = true
  145. br.Msg = "获取成功"
  146. br.Data = resp
  147. }
  148. // @Title 阅读飙升榜/报告收藏榜
  149. // @Description 获取阅读飙升榜/报告收藏榜接口
  150. // @Param ChartPermissionId query int false "分类ID"
  151. // @Param Source query int true "来源 2:阅读飙升 ,3:报告收藏"
  152. // @Success 200 {object} models.ArticleReportBillboardLIstResp
  153. // @router /industry/readList [get]
  154. func (this *ReportBillboardController) ReadList() {
  155. br := new(models.BaseResponse).Init()
  156. defer func() {
  157. this.Data["json"] = br
  158. this.ServeJSON()
  159. }()
  160. user := this.User
  161. if user == nil {
  162. br.Msg = "请重新登录"
  163. br.Ret = 408
  164. return
  165. }
  166. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  167. source, _ := this.GetInt("Source")
  168. sourceArr := []int{2, 3}
  169. if !utils.InArrayByInt(sourceArr, source) {
  170. br.Msg = "来源有误"
  171. return
  172. }
  173. topNum := utils.PageSize15
  174. list := make([]*models.ArticleReportBillboardResp, 0)
  175. // 阅读飙升榜
  176. if source == 2 {
  177. var topCond string
  178. var topPars []interface{}
  179. if chartPermissionId > 0 {
  180. topCond += ` AND chart_permission_id = ?`
  181. topPars = append(topPars, chartPermissionId)
  182. }
  183. topList, e := models.GetTopReadRecordArticleListByCondition(topNum, topCond, topPars)
  184. if e != nil {
  185. br.Msg = "获取失败"
  186. br.ErrMsg = "获取报告阅读增量排行榜失败, Err:" + e.Error()
  187. return
  188. }
  189. for i := range topList {
  190. list = append(list, &models.ArticleReportBillboardResp{
  191. ArticleId: topList[i].ArticleId,
  192. Title: topList[i].Title,
  193. PublishDate: topList[i].PublishDate,
  194. PermissionName: topList[i].PermissionName,
  195. })
  196. }
  197. }
  198. // 报告收藏榜
  199. if source == 3 {
  200. var collectCond string
  201. var collectPars []interface{}
  202. if chartPermissionId > 0 {
  203. collectCond += ` AND m.chart_permission_id = ?`
  204. collectPars = append(collectPars, chartPermissionId)
  205. }
  206. // 根据关注时间一个月前至昨日的增量数据排序
  207. nowTime := time.Now().Local()
  208. startTime := nowTime.AddDate(0, -1, 0)
  209. endTime := nowTime.AddDate(0, 0, -1)
  210. collectCond += ` AND ac.create_time BETWEEN ? AND ?`
  211. collectPars = append(collectPars, startTime, endTime)
  212. collectList, e := models.GetReportCollectionBillboardList(topNum, collectPars, collectCond)
  213. if e != nil {
  214. br.Msg = "获取失败"
  215. br.ErrMsg = "获取报告收藏排行榜失败, Err:" + e.Error()
  216. return
  217. }
  218. list = collectList
  219. }
  220. articleIds := make([]int, 0)
  221. for i := range list {
  222. articleIds = append(articleIds, list[i].ArticleId)
  223. }
  224. // 报告关联产业信息
  225. industryMap := make(map[int][]*models.IndustrialManagementIdInt, 0)
  226. if len(articleIds) > 0 {
  227. var industryCond string
  228. var industryPars []interface{}
  229. industryCond += ` AND mg.article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)`
  230. industryPars = append(industryPars, articleIds)
  231. industryList, e := models.GetIndustrialListByarticleId(industryPars, industryCond)
  232. if e != nil {
  233. br.Msg = "获取失败"
  234. br.ErrMsg = "获取报告关联的产业信息失败, Err: " + e.Error()
  235. return
  236. }
  237. for i := range industryList {
  238. v := industryList[i]
  239. industryMap[v.ArticleId] = append(industryMap[v.ArticleId], &models.IndustrialManagementIdInt{
  240. ArticleId: v.ArticleId,
  241. IndustrialManagementId: v.IndustrialManagementId,
  242. IndustryName: v.IndustryName,
  243. })
  244. }
  245. }
  246. for k, v := range list {
  247. if len(industryMap[v.ArticleId]) > 0 {
  248. list[k].List = industryMap[v.ArticleId]
  249. } else {
  250. list[k].List = make([]*models.IndustrialManagementIdInt, 0)
  251. }
  252. }
  253. resp := new(models.ArticleReportBillboardLIstResp)
  254. resp.List = list
  255. br.Ret = 200
  256. br.Success = true
  257. br.Msg = "获取成功"
  258. br.Data = resp
  259. }