report.go 21 KB

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