research.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. package controllers
  2. import (
  3. "github.com/rdlucklib/rdluck_tools/paging"
  4. "hongze/hongze_cygx/models"
  5. "hongze/hongze_cygx/utils"
  6. "strconv"
  7. )
  8. //研选
  9. type ResearchController struct {
  10. BaseAuthController
  11. }
  12. // @Title 近期更新主题列表
  13. // @Description 近期更新主题列表接口
  14. // @Param ChartPermissionId query int true "分类ID"
  15. // @Success 200 {object} models.IndustrialManagementNewList
  16. // @router /theme/newList [get]
  17. func (this *ResearchController) NewList() {
  18. br := new(models.BaseResponse).Init()
  19. defer func() {
  20. this.Data["json"] = br
  21. this.ServeJSON()
  22. }()
  23. user := this.User
  24. if user == nil {
  25. br.Msg = "请重新登录"
  26. br.Ret = 408
  27. return
  28. }
  29. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  30. if chartPermissionId < 1 {
  31. br.Msg = "请输入分类ID"
  32. return
  33. }
  34. categoryinfo, err := models.GetChartPermissionById(chartPermissionId)
  35. if err != nil {
  36. br.Msg = "获取信息失败"
  37. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  38. return
  39. }
  40. list, err := models.GetIndustrialManagementNewList(categoryinfo.PermissionName)
  41. if err != nil {
  42. br.Msg = "获取信息失败"
  43. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  44. return
  45. }
  46. mapHot := make(map[string]int)
  47. condition := ` ORDER BY sum_num DESC `
  48. listHot, err := models.GetThemeHeatList(categoryinfo.PermissionName, user.UserId, condition, 0, 3)
  49. if err != nil {
  50. br.Msg = "获取信息失败"
  51. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  52. return
  53. }
  54. for _, v := range listHot {
  55. mapHot[v.IndustryName] = v.IndustrialManagementId
  56. }
  57. for k, v := range list {
  58. if mapHot[v.IndustryName] > 0 {
  59. list[k].IsHot = true
  60. }
  61. }
  62. resp := new(models.IndustrialManagementNewList)
  63. resp.List = list
  64. br.Ret = 200
  65. br.Success = true
  66. br.Msg = "获取成功"
  67. br.Data = resp
  68. }
  69. // @Title 用户收藏列表
  70. // @Description 用户收藏列表接口
  71. // @Param ChartPermissionId query int true "分类ID"
  72. // @Success 200 {object} models.ArticleCollectionLIstResp
  73. // @router /collectionList [get]
  74. func (this *ResearchController) CollectionList() {
  75. br := new(models.BaseResponse).Init()
  76. defer func() {
  77. this.Data["json"] = br
  78. this.ServeJSON()
  79. }()
  80. user := this.User
  81. if user == nil {
  82. br.Msg = "请重新登录"
  83. br.Ret = 408
  84. return
  85. }
  86. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  87. if chartPermissionId < 1 {
  88. br.Msg = "请输入分类ID"
  89. return
  90. }
  91. categoryinfo, err := models.GetChartPermissionById(chartPermissionId)
  92. if err != nil {
  93. br.Msg = "获取信息失败"
  94. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  95. return
  96. }
  97. var condition string
  98. condition = ` AND a.category_name LIKE '%` + categoryinfo.PermissionName + `%' AND publish_status = 1 GROUP BY a.article_id ORDER BY collect_num DESC, publish_date DESC LIMIT 15 `
  99. list, err := models.GetArticleCollectionList(condition, user.UserId)
  100. if err != nil {
  101. br.Msg = "获取信息失败"
  102. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  103. return
  104. }
  105. for k, v := range list {
  106. if v.MyCollectNum > 0 {
  107. list[k].IsCollect = true
  108. }
  109. }
  110. resp := new(models.ArticleCollectionLIstResp)
  111. resp.List = list
  112. br.Ret = 200
  113. br.Success = true
  114. br.Msg = "获取成功"
  115. br.Data = resp
  116. }
  117. // @Title 主题热度/近期更新更多,列表
  118. // @Description 主题热度/近期更新更多,列表接口
  119. // @Param ChartPermissionId query int true "分类ID"
  120. // @Param ThemeType query int true "主题类型,1主题热度、2近期更新 默认1"
  121. // @Param PageSize query int true "每页数据条数"
  122. // @Param CurrentIndex query int true "当前页页码,从1开始"
  123. // @Success 200 {object} models.IndustrialManagementHotListResp
  124. // @router /hotList [get]
  125. func (this *ResearchController) HotList() {
  126. br := new(models.BaseResponse).Init()
  127. defer func() {
  128. this.Data["json"] = br
  129. this.ServeJSON()
  130. }()
  131. user := this.User
  132. if user == nil {
  133. br.Msg = "请重新登录"
  134. br.Ret = 408
  135. return
  136. }
  137. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  138. themeType, _ := this.GetInt("ThemeType")
  139. if chartPermissionId < 1 {
  140. br.Msg = "请输入分类ID"
  141. return
  142. }
  143. pageSize, _ := this.GetInt("PageSize")
  144. currentIndex, _ := this.GetInt("CurrentIndex")
  145. var startSize int
  146. if pageSize <= 0 {
  147. pageSize = utils.PageSize15
  148. }
  149. if currentIndex <= 0 {
  150. currentIndex = 1
  151. }
  152. startSize = utils.StartIndex(currentIndex, pageSize)
  153. var condition string
  154. if themeType != 2 {
  155. themeType = 1
  156. startSize = 0
  157. pageSize = 15
  158. condition = `ORDER BY sum_num DESC `
  159. } else {
  160. condition = `ORDER BY publish_date DESC `
  161. }
  162. categoryinfo, err := models.GetChartPermissionById(chartPermissionId)
  163. if err != nil {
  164. br.Msg = "获取信息失败"
  165. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  166. return
  167. }
  168. total, err := models.GetThemeHeatListCount(categoryinfo.PermissionName, "")
  169. if err != nil {
  170. br.Msg = "获取失败"
  171. br.ErrMsg = "获取失败,Err:" + err.Error()
  172. return
  173. }
  174. list, err := models.GetThemeHeatList(categoryinfo.PermissionName, user.UserId, condition, startSize, pageSize)
  175. if err != nil {
  176. br.Msg = "获取信息失败"
  177. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  178. return
  179. }
  180. newMap := make(map[int]string)
  181. listNew, err := models.GetIndustrialManagementNewList(categoryinfo.PermissionName)
  182. if err != nil {
  183. br.Msg = "获取信息失败"
  184. br.ErrMsg = "获取产业最新信息失败,Err:" + err.Error()
  185. return
  186. }
  187. for _, v := range listNew {
  188. newMap[v.IndustrialManagementId] = v.IndustryName
  189. }
  190. condition = ` AND a.category_name LIKE '%` + categoryinfo.PermissionName + `%' `
  191. listSubjcet, err := models.GetThemeHeatSubjectList(condition)
  192. if err != nil {
  193. br.Msg = "获取信息失败"
  194. br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
  195. return
  196. }
  197. mapHot := make(map[string]int)
  198. condition = ` ORDER BY sum_num DESC `
  199. listHot, err := models.GetThemeHeatList(categoryinfo.PermissionName, user.UserId, condition, 0, 3)
  200. if err != nil {
  201. br.Msg = "获取信息失败"
  202. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  203. return
  204. }
  205. for _, v := range listHot {
  206. mapHot[v.IndustryName] = v.IndustrialManagementId
  207. }
  208. for k, v := range list {
  209. if newMap[v.IndustrialManagementId] != "" {
  210. list[k].IsNew = true
  211. }
  212. if v.FllowNum > 0 {
  213. list[k].IsFollw = true
  214. }
  215. for _, v2 := range listSubjcet {
  216. if v2.IndustrialManagementId == v.IndustrialManagementId {
  217. list[k].IndustrialSubjectList = append(list[k].IndustrialSubjectList, v2)
  218. }
  219. }
  220. if mapHot[v.IndustryName] > 0 {
  221. list[k].IsHot = true
  222. }
  223. }
  224. page := paging.GetPaging(currentIndex, pageSize, total)
  225. resp := new(models.IndustrialManagementHotListResp)
  226. resp.Paging = page
  227. resp.List = list
  228. br.Ret = 200
  229. br.Success = true
  230. br.Msg = "获取成功"
  231. br.Data = resp
  232. }
  233. // @Title KOL榜列表
  234. // @Description KOL榜列表接口
  235. // @Param ChartPermissionId query int true "分类ID"
  236. // @Success 200 {object} models.DepartmentListResp
  237. // @router /kolList [get]
  238. func (this *ResearchController) KolList() {
  239. br := new(models.BaseResponse).Init()
  240. defer func() {
  241. this.Data["json"] = br
  242. this.ServeJSON()
  243. }()
  244. user := this.User
  245. if user == nil {
  246. br.Msg = "请重新登录"
  247. br.Ret = 408
  248. return
  249. }
  250. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  251. if chartPermissionId < 1 {
  252. br.Msg = "请输入分类ID"
  253. return
  254. }
  255. categoryinfo, err := models.GetChartPermissionById(chartPermissionId)
  256. if err != nil {
  257. br.Msg = "获取信息失败"
  258. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  259. return
  260. }
  261. list, err := models.GetDepartmentList(categoryinfo.PermissionName, user.UserId)
  262. if err != nil {
  263. br.Msg = "获取信息失败"
  264. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  265. return
  266. }
  267. listIndustrial, err := models.GetIndustrialDepartmentList(categoryinfo.PermissionName)
  268. if err != nil {
  269. br.Msg = "获取信息失败"
  270. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  271. return
  272. }
  273. departmentMap := make(map[string]string)
  274. for k, v := range list {
  275. if v.FllowNum > 0 {
  276. list[k].IsFollw = true
  277. }
  278. for _, v2 := range listIndustrial {
  279. if v2.DepartmentId == v.DepartmentId {
  280. if departmentMap["D"+strconv.Itoa(v2.DepartmentId)+"In"+strconv.Itoa(v2.IndustrialManagementId)] == "" && len(list[k].List) < 4 {
  281. list[k].List = append(list[k].List, v2)
  282. departmentMap["D"+strconv.Itoa(v2.DepartmentId)+"In"+strconv.Itoa(v2.IndustrialManagementId)] = v.NickName
  283. }
  284. }
  285. }
  286. }
  287. resp := new(models.DepartmentListResp)
  288. resp.List = list
  289. br.Ret = 200
  290. br.Success = true
  291. br.Msg = "获取成功"
  292. br.Data = resp
  293. }
  294. // @Title 主题详情
  295. // @Description 主题详情接口
  296. // @Param IndustrialManagementId query int true "分类ID"
  297. // @Success 200 {object} models.GetThemeDetailResp
  298. // @router /theme/detail [get]
  299. func (this *ResearchController) ThemeDetail() {
  300. br := new(models.BaseResponse).Init()
  301. defer func() {
  302. this.Data["json"] = br
  303. this.ServeJSON()
  304. }()
  305. user := this.User
  306. if user == nil {
  307. br.Msg = "请重新登录"
  308. br.Ret = 408
  309. return
  310. }
  311. industrialManagementId, _ := this.GetInt("IndustrialManagementId")
  312. if industrialManagementId < 1 {
  313. br.Msg = "请输入产业ID"
  314. return
  315. }
  316. resp := new(models.GetThemeDetailResp)
  317. list, err := models.GetThemeDetail(user.UserId, industrialManagementId)
  318. if err != nil {
  319. br.Msg = "获取信息失败"
  320. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  321. return
  322. }
  323. var itemsNull []*models.GetThemeAericleListResp
  324. subjectMap := make(map[string]string)
  325. articleMap := make(map[int]int)
  326. for _, v := range list {
  327. resp.IndustryName = v.IndustryName
  328. resp.IndustrialManagementId = v.IndustrialManagementId
  329. itemSubJect := new(models.IndustrialSubject)
  330. itemSubJect.SubjectName = v.SubjectName
  331. itemSubJect.IndustrialSubjectId = v.IndustrialSubjectId
  332. if subjectMap[v.SubjectName] == "" && v.SubjectName != "" {
  333. resp.ListSubject = append(resp.ListSubject, itemSubJect)
  334. }
  335. subjectMap[v.SubjectName] = v.IndustryName
  336. if v.FllowNum > 0 {
  337. resp.IsFollw = true
  338. }
  339. if v.SubjectName == "" {
  340. item := new(models.GetThemeAericleListResp)
  341. item.ArticleId = v.ArticleId
  342. item.Title = v.Title
  343. item.PublishDate = v.PublishDate
  344. item.SubjectName = v.SubjectName
  345. item.DepartmentId = v.DepartmentId
  346. item.NickName = v.NickName
  347. item.Pv = v.Pv
  348. item.CollectNum = v.CollectNum
  349. itemsNull = append(itemsNull, item)
  350. }
  351. }
  352. for _, v := range resp.ListSubject {
  353. subjetcGroup := new(models.GetThemeAericleListBuSubjectResp)
  354. for _, v2 := range list {
  355. if v2.IndustrialSubjectId == v.IndustrialSubjectId && articleMap[v2.ArticleId] == 0 {
  356. item := new(models.GetThemeAericleListResp)
  357. item.ArticleId = v2.ArticleId
  358. item.Title = v2.Title
  359. item.PublishDate = v2.PublishDate
  360. item.SubjectName = v2.SubjectName
  361. item.IndustrialSubjectId = v2.IndustrialSubjectId
  362. for _, v3 := range list {
  363. if v3.ArticleId == v2.ArticleId && v3.SubjectName != v2.SubjectName && v3.SubjectName != "" {
  364. item.SubjectName += "/" + v3.SubjectName
  365. }
  366. }
  367. item.DepartmentId = v2.DepartmentId
  368. item.NickName = v2.NickName
  369. item.Pv = v2.Pv
  370. item.CollectNum = v2.CollectNum
  371. item.MyCollectNum = v2.MyCollectNum
  372. if v2.MyCollectNum > 0 {
  373. item.IsCollect = true
  374. }
  375. resp.List = append(resp.List, item)
  376. articleMap[v2.ArticleId] = v2.ArticleId
  377. //subjetcGroup.List = append(subjetcGroup.List, item)
  378. }
  379. subjetcGroup.SubjectName = v.SubjectName
  380. }
  381. }
  382. //当标的为空时进行合并
  383. if len(itemsNull) > 0 {
  384. for _, v := range itemsNull {
  385. resp.List = append(resp.List, v)
  386. }
  387. }
  388. br.Ret = 200
  389. br.Success = true
  390. br.Msg = "获取成功"
  391. br.Data = resp
  392. }
  393. // @Title 研选作者详情
  394. // @Description 研选作者详情接口
  395. // @Param DepartmentId query int true "作者ID"
  396. // @Success 200 {object} models.DepartmentDetailResp
  397. // @router /departmentId/detail [get]
  398. func (this *ResearchController) DepartmentIdDetail() {
  399. br := new(models.BaseResponse).Init()
  400. defer func() {
  401. this.Data["json"] = br
  402. this.ServeJSON()
  403. }()
  404. user := this.User
  405. if user == nil {
  406. br.Msg = "请重新登录"
  407. br.Ret = 408
  408. return
  409. }
  410. departmentId, _ := this.GetInt("DepartmentId")
  411. if departmentId < 1 {
  412. br.Msg = "请输入作者ID"
  413. return
  414. }
  415. resp := new(models.DepartmentDetailResp)
  416. detail, err := models.GetDepartmentDetail(user.UserId, departmentId)
  417. if err != nil {
  418. br.Msg = "获取信息失败"
  419. br.ErrMsg = "获取作者信息失败,Err:" + err.Error()
  420. return
  421. }
  422. resp.DepartmentId = detail.DepartmentId
  423. resp.NickName = detail.NickName
  424. resp.ImgUrl = detail.ImgUrl
  425. resp.FllowNum = detail.FllowNum
  426. resp.ArticleNum = detail.ArticleNum
  427. resp.CollectNum = detail.CollectNum
  428. if detail.MyFllowNum > 0 {
  429. resp.IsFllow = true
  430. }
  431. var condition string
  432. condition = ` AND a.department_id = ` + strconv.Itoa(departmentId) + ` ORDER BY a.publish_date DESC `
  433. list, err := models.GetArticleCollectionList(condition, user.UserId)
  434. if err != nil {
  435. br.Msg = "获取信息失败"
  436. br.ErrMsg = "获取文章列表失败,Err:" + err.Error()
  437. return
  438. }
  439. for k, v := range list {
  440. if v.MyCollectNum > 0 {
  441. list[k].IsCollect = true
  442. }
  443. }
  444. resp.List = list
  445. br.Ret = 200
  446. br.Success = true
  447. br.Msg = "获取成功"
  448. br.Data = resp
  449. }
  450. // @Title 文章相关热门收藏
  451. // @Description 文章相关热门收藏接口
  452. // @Param ArticleId query int true "文章ID"
  453. // @Success 200 {object} models.ArticleCollectionLIstResp
  454. // @router /article/hotList [get]
  455. func (this *ResearchController) ArticleHotList() {
  456. br := new(models.BaseResponse).Init()
  457. defer func() {
  458. this.Data["json"] = br
  459. this.ServeJSON()
  460. }()
  461. user := this.User
  462. if user == nil {
  463. br.Msg = "请重新登录"
  464. br.Ret = 408
  465. return
  466. }
  467. articleId, _ := this.GetInt("ArticleId")
  468. if articleId < 1 {
  469. br.Msg = "请输入分类ID"
  470. return
  471. }
  472. var condition string
  473. condition = ` AND a.article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id IN (SELECT industrial_management_id FROM cygx_industrial_article_group_management WHERE article_id = ` + strconv.Itoa(articleId) + ` ) ) AND a.article_id != ` + strconv.Itoa(articleId) + ` AND a.category_name LIKE '%研选%' AND publish_status = 1 GROUP BY a.article_id ORDER BY collect_num DESC, publish_date DESC LIMIT 3 `
  474. list, err := models.GetArticleCollectionList(condition, user.UserId)
  475. if err != nil {
  476. br.Msg = "获取信息失败"
  477. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  478. return
  479. }
  480. for k, v := range list {
  481. if v.MyCollectNum > 0 {
  482. list[k].IsCollect = true
  483. }
  484. }
  485. resp := new(models.ArticleCollectionLIstResp)
  486. resp.List = list
  487. br.Ret = 200
  488. br.Success = true
  489. br.Msg = "获取成功"
  490. br.Data = resp
  491. }
  492. // @Title 热搜关键词
  493. // @Description 热搜关键词接口
  494. // @Success 200 {object} models.UserSearchKeyWordListResp
  495. // @router /hotKeyWord [get]
  496. func (this *ResearchController) HotKeyWord() {
  497. br := new(models.BaseResponse).Init()
  498. defer func() {
  499. this.Data["json"] = br
  500. this.ServeJSON()
  501. }()
  502. user := this.User
  503. if user == nil {
  504. br.Msg = "请重新登录"
  505. br.Ret = 408
  506. return
  507. }
  508. //本来应该放在config控制器下,与未上线的代码冲突,所以放在这里
  509. list, err := models.GetUserSearchKeyWord()
  510. if err != nil {
  511. br.Msg = "获取信息失败"
  512. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  513. return
  514. }
  515. resp := new(models.UserSearchKeyWordListResp)
  516. resp.List = list
  517. br.Ret = 200
  518. br.Success = true
  519. br.Msg = "获取成功"
  520. br.Data = resp
  521. }