research.go 16 KB

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