report.go 24 KB

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