report.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  1. package controllers
  2. import (
  3. "eta/eta_mini_api/models"
  4. "eta/eta_mini_api/models/response"
  5. "eta/eta_mini_api/services"
  6. "eta/eta_mini_api/utils"
  7. "sort"
  8. "time"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. )
  11. type ReportController struct {
  12. BaseAuthController
  13. }
  14. // @Title 研报详情
  15. // @Description 研报详情接口
  16. // @Param ReportId query int true "报告id"
  17. // @Success 200 {object} models.ReportDetailResp
  18. // @router /detail [get]
  19. func (this *ReportController) Detail() {
  20. br := new(models.BaseResponse).Init()
  21. defer func() {
  22. this.Data["json"] = br
  23. this.ServeJSON()
  24. }()
  25. reportId, _ := this.GetInt("ReportId")
  26. if reportId <= 0 {
  27. br.Msg = "报告不存在"
  28. return
  29. }
  30. user := this.User
  31. if user == nil {
  32. // 如果没有用户没有绑定信息,单独处理
  33. resp, er := services.GetReportDetailNoUser(reportId)
  34. if er != nil {
  35. br.Msg = "查询报告详情失败"
  36. br.ErrMsg = "查询报告失败,系统异常,Err:" + er.Error()
  37. return
  38. }
  39. if resp.Ret != 200 {
  40. br.Msg = resp.Msg
  41. br.ErrMsg = resp.ErrMsg
  42. return
  43. }
  44. br.Msg = "查询成功"
  45. br.Data = resp.Data
  46. br.Success = true
  47. br.Ret = 200
  48. return
  49. }
  50. result, err := services.GetReportDetail(reportId, user.UserId)
  51. if err != nil {
  52. br.Msg = "查询报告详情失败"
  53. br.ErrMsg = "查询报告失败,系统异常,Err:" + err.Error()
  54. return
  55. }
  56. if result.Ret == 403 {
  57. br.Msg = result.Msg
  58. br.ErrMsg = result.ErrMsg
  59. return
  60. }
  61. if result.Ret == 200 && result.Data.Report == nil {
  62. // 后台没有这个报告,那么尝试删除我的收藏
  63. models.DeleteMyReportByUserIdAndReportId(user.UserId, reportId, utils.ReportTypeEta)
  64. br.Msg = "该报告已删除或不存在,请刷新页面"
  65. return
  66. }
  67. count, err := models.GetMyReportCountByUserIdAndReportId(user.UserId, reportId, utils.ReportTypeEta)
  68. if err != nil {
  69. br.Msg = "查询收藏数量失败"
  70. br.ErrMsg = "查询收藏数量失败,Err:" + err.Error()
  71. return
  72. }
  73. if count > 0 {
  74. result.Data.IsCollect = true
  75. } else {
  76. result.Data.IsCollect = false
  77. }
  78. if user.UserId != 0 {
  79. result.Data.IsSignIn = true
  80. }
  81. br.Msg = "查询成功"
  82. br.Success = true
  83. br.Ret = 200
  84. br.Data = result.Data
  85. }
  86. // @Title 研报列表
  87. // @Description 研报列表
  88. // @Param ChartPermissionId query int true "品种ID"
  89. // @Param Level query int true "品种层级"
  90. // @Param PageSize query int true "每页数据条数"
  91. // @Param CurrentIndex query int true "当前页页码,从1开始"
  92. // @Param RangeType query string true "范围类型,1-一天内,2-一周内,3-半年内"
  93. // @Param ClassifyId query int true "分类id"
  94. // @Success 200 {object} response.ReportList
  95. // @router /list [get]
  96. func (this *ReportController) List() {
  97. br := new(models.BaseResponse).Init()
  98. defer func() {
  99. this.Data["json"] = br
  100. this.ServeJSON()
  101. }()
  102. pageSize, _ := this.GetInt("PageSize")
  103. currentIndex, _ := this.GetInt("CurrentIndex")
  104. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  105. level, _ := this.GetInt("Level")
  106. rangeType, _ := this.GetInt("RangeType")
  107. classifyId, _ := this.GetInt("ClassifyId")
  108. reports, err := services.GetReportList(chartPermissionId, level, rangeType, classifyId, currentIndex, pageSize)
  109. if err != nil {
  110. br.Msg = "研报列表查询失败"
  111. br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
  112. return
  113. }
  114. if reports.Ret != 200 {
  115. br.Msg = reports.Msg
  116. br.ErrMsg = reports.ErrMsg
  117. return
  118. }
  119. br.Data = reports.Data
  120. br.Msg = "查询成功"
  121. br.Ret = 200
  122. br.Success = true
  123. }
  124. // @Title pdf研报列表
  125. // @Description pdf研报列表
  126. // @Param ChartPermissionId query int true "品种ID"
  127. // @Param PageSize query int true "每页数据条数"
  128. // @Param CurrentIndex query int true "当前页页码,从1开始"
  129. // @Param RangeType query int true "范围类型,1-一天内,2-一周内,3-半年内"
  130. // @Param ClassifyId query int true "二级分类id"
  131. // @Success 200 {object} response.ReportList
  132. // @router /pdf/list [get]
  133. func (this *ReportController) PdfList() {
  134. br := new(models.BaseResponse).Init()
  135. defer func() {
  136. this.Data["json"] = br
  137. this.ServeJSON()
  138. }()
  139. pageSize, _ := this.GetInt("PageSize")
  140. currentIndex, _ := this.GetInt("CurrentIndex")
  141. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  142. classifyId, _ := this.GetInt("ClassifyId")
  143. rangeType, _ := this.GetInt("RangeType")
  144. if pageSize <= 0 {
  145. pageSize = utils.PageSize20
  146. }
  147. if currentIndex <= 0 {
  148. currentIndex = 1
  149. }
  150. if chartPermissionId <= 0 {
  151. br.Msg = "请输入品种ID"
  152. return
  153. }
  154. var condition string
  155. switch rangeType {
  156. case 1:
  157. condition += ` AND DATE(publish_time)=DATE(NOW()) `
  158. case 2:
  159. condition += ` AND DATE(publish_time) BETWEEN DATE_SUB(NOW(),INTERVAL 1 WEEK) AND NOW() `
  160. case 3:
  161. condition += ` AND DATE(publish_time) BETWEEN DATE_SUB(NOW(),INTERVAL 6 MONTH) AND NOW() `
  162. }
  163. startSize := utils.StartIndex(currentIndex, pageSize)
  164. var leafClassifyIds []int
  165. var leafClassifyIdMap map[int]struct{}
  166. var classifyMap map[int]*models.ClassifyView
  167. classifyResp, err := services.GetAllClassify()
  168. if err != nil {
  169. br.Msg = "获取数据失败"
  170. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  171. return
  172. }
  173. if classifyResp.Ret != 200 {
  174. br.Msg = classifyResp.Msg
  175. br.ErrMsg = classifyResp.ErrMsg
  176. return
  177. }
  178. classifyList := classifyResp.Data
  179. classifyMap = make(map[int]*models.ClassifyView)
  180. isHas := false
  181. for _, v := range classifyList {
  182. if v.Id == classifyId && classifyId != 0 {
  183. isHas = true
  184. }
  185. classifyMap[v.Id] = v
  186. }
  187. if !isHas && classifyId != 0 {
  188. br.Msg = "分类不存在"
  189. return
  190. }
  191. if classifyId != 0 {
  192. leafClassifyIds = getLeafClassifyIds(classifyMap, classifyId)
  193. leafClassifyIdMap = make(map[int]struct{})
  194. for _, v := range leafClassifyIds {
  195. leafClassifyIdMap[v] = struct{}{}
  196. }
  197. }
  198. var permissionClassifyList []int
  199. if chartPermissionId != 0 {
  200. resp, err := services.GetClassifyListByChartPermission(chartPermissionId)
  201. if err != nil {
  202. br.Msg = "获取分类失败"
  203. br.ErrMsg = "获取分类失败,系统异常,Err:" + err.Error()
  204. return
  205. }
  206. if resp.Ret != 200 {
  207. br.Msg = resp.Msg
  208. br.ErrMsg = resp.ErrMsg
  209. return
  210. }
  211. classifyList := resp.Data
  212. if len(classifyList) == 0 {
  213. resp := new(response.ReportPdfResp)
  214. br.Msg = "查询成功"
  215. br.Ret = 200
  216. br.Success = true
  217. br.Data = resp
  218. return
  219. }
  220. for _, item := range classifyList {
  221. permissionClassifyList = append(permissionClassifyList, item.Id)
  222. }
  223. }
  224. queryClassifyIds := make([]int, 0)
  225. if classifyId > 0 {
  226. for _, v := range permissionClassifyList {
  227. if _, ok := leafClassifyIdMap[v]; ok {
  228. queryClassifyIds = append(queryClassifyIds, v)
  229. }
  230. }
  231. } else {
  232. queryClassifyIds = permissionClassifyList
  233. }
  234. firstClassifyIds := make([]int, 0)
  235. secondClassifyIds := make([]int, 0)
  236. thirdClassifyIds := make([]int, 0)
  237. for _, v := range queryClassifyIds {
  238. switch classifyMap[v].Level {
  239. case 1:
  240. firstClassifyIds = append(firstClassifyIds, v)
  241. case 2:
  242. secondClassifyIds = append(secondClassifyIds, v)
  243. case 3:
  244. thirdClassifyIds = append(thirdClassifyIds, v)
  245. }
  246. }
  247. total, err := models.GetReportPdfCountByCondition(firstClassifyIds, secondClassifyIds, thirdClassifyIds, condition)
  248. if err != nil {
  249. br.Msg = "研报列表查询失败"
  250. br.ErrMsg = "研报列表统计查询失败,系统异常,Err:" + err.Error()
  251. return
  252. }
  253. reportPdfList, err := models.GetReportPdfListByCondition(firstClassifyIds, secondClassifyIds, thirdClassifyIds, condition, startSize, pageSize)
  254. if err != nil {
  255. br.Msg = "研报列表查询失败"
  256. br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
  257. return
  258. }
  259. page := paging.GetPaging(currentIndex, pageSize, total)
  260. resp := new(response.ReportPdfResp)
  261. resp.List = reportPdfList
  262. resp.Paging = page
  263. br.Msg = "查询成功"
  264. br.Ret = 200
  265. br.Success = true
  266. br.Data = resp
  267. }
  268. func getLeafClassifyIds(classifyMap map[int]*models.ClassifyView, keyId int) []int {
  269. var leafClassifyIds []int
  270. curClassify := classifyMap[keyId]
  271. if curClassify.HasChild == 0 {
  272. leafClassifyIds = append(leafClassifyIds, curClassify.Id)
  273. return leafClassifyIds
  274. }
  275. for _, v := range classifyMap {
  276. if v.ParentId == curClassify.Id {
  277. if v.HasChild == 0 {
  278. leafClassifyIds = append(leafClassifyIds, v.Id)
  279. } else {
  280. leafClassifyIds = append(leafClassifyIds, getLeafClassifyIds(classifyMap, v.Id)...)
  281. }
  282. }
  283. }
  284. return leafClassifyIds
  285. }
  286. // @Title pdf研报详情
  287. // @Description pdf研报详情
  288. // @Param ReportPdfId query int true "品种ID"
  289. // @Success 200 {object} response.ReportList
  290. // @router /pdf/detail [get]
  291. func (this *ReportController) PdfDetail() {
  292. br := new(models.BaseResponse).Init()
  293. defer func() {
  294. this.Data["json"] = br
  295. this.ServeJSON()
  296. }()
  297. user := this.User
  298. // 有效期是否到期
  299. var vailStatus int
  300. if user.Status == utils.UserStatusFormal {
  301. if user.ValidEndTime.After(time.Now()) && user.ValidStartTime.Before(time.Now()) {
  302. vailStatus = 2
  303. } else {
  304. // 不在有效期时间则设置为过期, 将用户状态禁用
  305. vailStatus = 1
  306. user.Status = utils.UserStatusNo
  307. }
  308. }
  309. reportPdfId, _ := this.GetInt("ReportPdfId")
  310. if reportPdfId <= 0 {
  311. br.Msg = "研报不存在或已删除"
  312. return
  313. }
  314. reportPdf, err := models.GetReportPdfById(reportPdfId)
  315. if err != nil && err.Error() != utils.ErrNoRow() {
  316. br.Msg = "研报不存在或已删除"
  317. br.ErrMsg = "研报不存在或已删除,系统异常,Err:" + err.Error()
  318. return
  319. }
  320. if reportPdf == nil {
  321. // 尝试删除收藏列表的记录
  322. models.DeleteMyReportByUserIdAndReportId(user.UserId, reportPdfId, utils.ReportTypePdf)
  323. br.Msg = "研报不存在或已删除"
  324. return
  325. }
  326. reportClassifyId := services.GetReportPdfClassify(reportPdf)
  327. permissionResp, err := services.GetChartPermissionListByClassifyId(reportClassifyId, 0)
  328. if err != nil {
  329. br.Msg = "研报不存在或已删除"
  330. br.ErrMsg = "获取权限失败,系统异常,Err:" + err.Error()
  331. return
  332. }
  333. if permissionResp.Ret != 200 {
  334. br.Msg = permissionResp.Msg
  335. br.ErrMsg = permissionResp.ErrMsg
  336. return
  337. }
  338. var IsHas bool
  339. var IsPublic bool
  340. permissionMap := make(map[int]struct{})
  341. for _, v := range permissionResp.Data {
  342. if v.IsPublic == 1 {
  343. IsPublic = true
  344. }
  345. permissionMap[v.ChartPermissionId] = struct{}{}
  346. }
  347. resp := new(response.ReportPdfDetailResp)
  348. if !IsPublic {
  349. // 如果是私有报告,用户权限过期直接返回有效期已过
  350. if vailStatus == 1 {
  351. resp.Report = reportPdf
  352. resp.Status = utils.ReportPermissionStatusExpired
  353. br.Ret = 200
  354. br.Data = resp
  355. br.Msg = "用户权限不足"
  356. return
  357. }
  358. // 如果被禁用或是潜在用户,直接返回无阅读报告权限
  359. if user.Status == utils.UserStatusNo || user.Status == utils.UserStatusPotential {
  360. resp.Report = reportPdf
  361. resp.Status = utils.ReportPermissionStatusNo
  362. br.Ret = 200
  363. br.Data = resp
  364. br.Msg = "用户权限不足"
  365. return
  366. }
  367. userChartPermissionIds, err := models.GetUserChartPermissionIdByUserId(user.UserId)
  368. if err != nil {
  369. br.Msg = "获取用户权限失败"
  370. br.ErrMsg = "获取用户权限失败,Err:" + err.Error()
  371. return
  372. }
  373. if len(userChartPermissionIds) == 0 {
  374. resp.Report = reportPdf
  375. resp.Status = utils.ReportPermissionStatusNo
  376. br.Ret = 200
  377. br.Data = resp
  378. br.Msg = "用户权限不足"
  379. return
  380. }
  381. for _, v := range userChartPermissionIds {
  382. if _, ok := permissionMap[v]; ok {
  383. IsHas = true
  384. break
  385. }
  386. }
  387. if !IsHas {
  388. resp.Report = reportPdf
  389. resp.Status = utils.ReportPermissionStatusNoPermission
  390. br.Ret = 200
  391. br.Data = resp
  392. br.Msg = "用户权限不足"
  393. return
  394. }
  395. } else {
  396. reportPdf.IsPublic = IsPublic
  397. }
  398. count, err := models.GetMyReportCountByUserIdAndReportId(user.UserId, reportPdf.ReportPdfId, utils.ReportTypePdf)
  399. if err != nil {
  400. br.Msg = "获取研报详情失败"
  401. br.ErrMsg = "获取用户收藏记录失败,Err:" + err.Error()
  402. return
  403. }
  404. if count > 0 {
  405. reportPdf.IsCollect = true
  406. } else {
  407. reportPdf.IsCollect = false
  408. }
  409. resp.Report = reportPdf
  410. resp.Status = utils.ReportPermissionStatusHas
  411. br.Msg = "查询成功"
  412. br.Ret = 200
  413. br.Success = true
  414. br.Data = resp
  415. }
  416. // @Title 今日研报列表
  417. // @Description 今日研报列表
  418. // @Param PageSize query int true "每页数据条数"
  419. // @Param CurrentIndex query int true "当前页页码,从1开始"
  420. // @Success 200 {object} models.ReportDetailResp
  421. // @router /daily/list [get]
  422. func (this *ReportController) DailyList() {
  423. br := new(models.BaseResponse).Init()
  424. defer func() {
  425. this.Data["json"] = br
  426. this.ServeJSON()
  427. }()
  428. // 暂不使用分页
  429. pageSize, _ := this.GetInt("PageSize")
  430. currentIndex, _ := this.GetInt("CurrentIndex")
  431. if pageSize <= 0 {
  432. pageSize = utils.PageSize20
  433. }
  434. if currentIndex <= 0 {
  435. currentIndex = 1
  436. }
  437. resp, err := services.GetReportDailyList()
  438. if err != nil {
  439. br.Msg = "研报列表查询失败"
  440. br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
  441. return
  442. }
  443. if resp.Ret != 200 {
  444. br.Msg = resp.Msg
  445. br.ErrMsg = resp.ErrMsg
  446. return
  447. }
  448. reportList := resp.Data
  449. for _, v := range reportList.List {
  450. v.ReportType = utils.ReportTypeEta
  451. }
  452. reportPdfList, err := models.GetReportPdfDailyList()
  453. if err != nil {
  454. br.Msg = "研报列表查询失败"
  455. br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
  456. return
  457. }
  458. var classifyIds []int
  459. for _, v := range reportPdfList {
  460. var reportClassifyId int
  461. if v.ClassifyIdFirst != 0 {
  462. reportClassifyId = v.ClassifyIdFirst
  463. }
  464. if v.ClassifyIdSecond != 0 {
  465. reportClassifyId = v.ClassifyIdSecond
  466. }
  467. if v.ClassifyIdThird != 0 {
  468. reportClassifyId = v.ClassifyIdThird
  469. }
  470. classifyIds = append(classifyIds, reportClassifyId)
  471. }
  472. if len(classifyIds) > 0 {
  473. classifyResp, err := services.GetFirstChartPermission(classifyIds)
  474. if err != nil {
  475. br.Msg = "研报列表查询失败"
  476. br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
  477. return
  478. }
  479. if classifyResp.Ret != 200 {
  480. br.Msg = classifyResp.Msg
  481. br.ErrMsg = classifyResp.ErrMsg
  482. return
  483. }
  484. classifyPermissionMap := make(map[int][]string)
  485. for _, v := range classifyResp.Data {
  486. classifyPermissionMap[v.ClassifyId] = v.PermissionNames
  487. }
  488. for _, v := range reportPdfList {
  489. var reportClassifyId int
  490. if v.ClassifyIdFirst != 0 {
  491. reportClassifyId = v.ClassifyIdFirst
  492. }
  493. if v.ClassifyIdSecond != 0 {
  494. reportClassifyId = v.ClassifyIdSecond
  495. }
  496. if v.ClassifyIdThird != 0 {
  497. reportClassifyId = v.ClassifyIdThird
  498. }
  499. // 过滤没有绑定品种的研报
  500. if classifyPermissionMap[reportClassifyId] == nil {
  501. continue
  502. }
  503. reportList.List = append(reportList.List, &models.ReportView{
  504. Id: v.ReportPdfId,
  505. ClassifyIdFirst: v.ClassifyIdFirst,
  506. ClassifyNameFirst: v.ClassifyNameFirst,
  507. ClassifyIdSecond: v.ClassifyIdSecond,
  508. ClassifyNameSecond: v.ClassifyNameSecond,
  509. ClassifyIdThird: v.ClassifyIdThird,
  510. ClassifyNameThird: v.ClassifyNameThird,
  511. PermissionNames: classifyPermissionMap[reportClassifyId],
  512. PdfUrl: v.PdfUrl,
  513. Title: v.Title,
  514. Abstract: v.Abstract,
  515. Stage: v.Stage,
  516. Author: v.Author,
  517. ReportType: utils.ReportTypePdf,
  518. PublishTime: v.PublishTime.Format(utils.FormatDateTime),
  519. ModifyTime: v.ModifyTime,
  520. })
  521. }
  522. }
  523. sort.Sort(models.ByPublishTimeReportView(reportList.List))
  524. br.Data = reportList
  525. br.Msg = "查询成功"
  526. br.Ret = 200
  527. br.Success = true
  528. }
  529. // @Title 最新研报列表
  530. // @Description 最新研报列表
  531. // @Param PageSize query int true "每页数据条数"
  532. // @Param CurrentIndex query int true "当前页页码,从1开始"
  533. // @Success 200 {object} models.ReportDetailResp
  534. // @router /recent/list [get]
  535. func (this *ReportController) RecentList() {
  536. br := new(models.BaseResponse).Init()
  537. defer func() {
  538. this.Data["json"] = br
  539. this.ServeJSON()
  540. }()
  541. // 暂不使用分页
  542. pageSize, _ := this.GetInt("PageSize")
  543. currentIndex, _ := this.GetInt("CurrentIndex")
  544. if pageSize <= 0 {
  545. pageSize = 3
  546. }
  547. resp, err := services.GetReportRecentList(currentIndex, pageSize)
  548. if err != nil {
  549. br.Msg = "研报列表查询失败"
  550. br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
  551. return
  552. }
  553. // 查询已发布的pdf
  554. reportPdfList, err := models.GetRecentReportPdfList(0, 3)
  555. if err != nil {
  556. br.Msg = "研报列表查询失败"
  557. br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
  558. return
  559. }
  560. reportList := resp.Data
  561. for _, v := range reportList.List {
  562. v.ReportType = utils.ReportTypeEta
  563. }
  564. var classifyIds []int
  565. for _, v := range reportPdfList {
  566. var reportClassifyId int
  567. if v.ClassifyIdFirst != 0 {
  568. reportClassifyId = v.ClassifyIdFirst
  569. }
  570. if v.ClassifyIdSecond != 0 {
  571. reportClassifyId = v.ClassifyIdSecond
  572. }
  573. if v.ClassifyIdThird != 0 {
  574. reportClassifyId = v.ClassifyIdThird
  575. }
  576. classifyIds = append(classifyIds, reportClassifyId)
  577. }
  578. classifyResp, err := services.GetFirstChartPermission(classifyIds)
  579. if err != nil {
  580. br.Msg = "研报列表查询失败"
  581. br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
  582. return
  583. }
  584. if classifyResp.Ret != 200 {
  585. br.Msg = classifyResp.Msg
  586. br.ErrMsg = classifyResp.ErrMsg
  587. return
  588. }
  589. classifyPermissionMap := make(map[int][]string)
  590. for _, v := range classifyResp.Data {
  591. classifyPermissionMap[v.ClassifyId] = v.PermissionNames
  592. }
  593. for _, v := range reportPdfList {
  594. var reportClassifyId int
  595. if v.ClassifyIdFirst != 0 {
  596. reportClassifyId = v.ClassifyIdFirst
  597. }
  598. if v.ClassifyIdSecond != 0 {
  599. reportClassifyId = v.ClassifyIdSecond
  600. }
  601. if v.ClassifyIdThird != 0 {
  602. reportClassifyId = v.ClassifyIdThird
  603. }
  604. // 过滤没有绑定品种的研报
  605. if classifyPermissionMap[reportClassifyId] == nil {
  606. continue
  607. }
  608. reportList.List = append(reportList.List, &models.ReportView{
  609. Id: v.ReportPdfId,
  610. ClassifyIdFirst: v.ClassifyIdFirst,
  611. ClassifyNameFirst: v.ClassifyNameFirst,
  612. ClassifyIdSecond: v.ClassifyIdSecond,
  613. ClassifyNameSecond: v.ClassifyNameSecond,
  614. ClassifyIdThird: v.ClassifyIdThird,
  615. ClassifyNameThird: v.ClassifyNameThird,
  616. PermissionNames: classifyPermissionMap[reportClassifyId],
  617. PdfUrl: v.PdfUrl,
  618. Title: v.Title,
  619. Abstract: v.Abstract,
  620. Stage: v.Stage,
  621. Author: v.Author,
  622. ReportType: utils.ReportTypePdf,
  623. PublishTime: v.PublishTime.Format(utils.FormatDateTime),
  624. ModifyTime: v.ModifyTime,
  625. })
  626. }
  627. sort.Sort(models.ByPublishTimeReportView(reportList.List))
  628. endIdx := len(reportList.List)
  629. if endIdx > 3 {
  630. endIdx = 3
  631. }
  632. reportList.List = reportList.List[:endIdx]
  633. br.Data = reportList
  634. br.Msg = "查询成功"
  635. br.Ret = 200
  636. br.Success = true
  637. }
  638. // @Title 研报列表
  639. // @Description 研报列表
  640. // @Param ReportId query int true "报告id"
  641. // @Param chartPermissionId query int true "品种ID"
  642. // @Param PageSize query int true "每页数据条数"
  643. // @Param CurrentIndex query int true "当前页页码,从1开始"
  644. // @Success 200 {object} models.ReportDetailResp
  645. // @router /search [get]
  646. func (this *ReportController) Search() {
  647. br := new(models.BaseResponse).Init()
  648. defer func() {
  649. this.Data["json"] = br
  650. this.ServeJSON()
  651. }()
  652. keyWord := this.GetString("KeyWord")
  653. pageSize, _ := this.GetInt("PageSize")
  654. currentIndex, _ := this.GetInt("CurrentIndex")
  655. if pageSize <= 0 {
  656. pageSize = utils.PageSize30
  657. }
  658. if keyWord == "" {
  659. br.Msg = "请输入关键字"
  660. return
  661. }
  662. reports, err := services.SearchReport(keyWord, currentIndex, pageSize)
  663. if err != nil {
  664. br.Msg = "研报列表查询失败"
  665. br.ErrMsg = "研报列表查询失败,系统异常,Err:" + err.Error()
  666. return
  667. }
  668. if reports.Ret != 200 {
  669. br.Msg = reports.Msg
  670. br.ErrMsg = reports.ErrMsg
  671. return
  672. }
  673. resp := new(response.ReportSearchViewResp)
  674. list := make([]*response.ReportSearchListView, 0)
  675. for _, v := range reports.Data.List {
  676. tmpReport := &response.ReportSearchListView{
  677. ReportId: v.ReportId,
  678. ReportChapterId: v.ReportChapterId,
  679. ClassifyIdFirst: v.ClassifyIdFirst,
  680. ClassifyNameFirst: v.ClassifyNameFirst,
  681. ClassifyIdSecond: v.ClassifyIdSecond,
  682. ClassifyNameSecond: v.ClassifyNameSecond,
  683. ClassifyIdThird: v.ClassifyIdThird,
  684. ClassifyNameThird: v.ClassifyNameThird,
  685. ReportChapterTypeId: v.ReportChapterTypeId,
  686. PublishTime: v.PublishTime.Format(utils.FormatDate),
  687. Title: v.Title,
  688. ContentSub: v.ContentSub,
  689. Abstract: v.Abstract,
  690. Stage: v.Stage,
  691. Author: v.Author,
  692. PdfUrl: v.PdfUrl,
  693. ReportType: v.ReportType,
  694. }
  695. if v.PublishTime.IsZero() {
  696. tmpReport.PublishTime = ""
  697. }
  698. list = append(list, tmpReport)
  699. }
  700. resp.List = list
  701. resp.Paging = reports.Data.Paging
  702. br.Data = resp
  703. br.Msg = "查询成功"
  704. br.Ret = 200
  705. br.Success = true
  706. }