report.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  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. // @Success 200 {object} response.ReportListResp
  23. // @router /list [get]
  24. func (this *ReportController) List() {
  25. br := new(models.BaseResponse).Init()
  26. defer func() {
  27. this.Data["json"] = br
  28. this.ServeJSON()
  29. }()
  30. pageSize, _ := this.GetInt("PageSize")
  31. currentIndex, _ := this.GetInt("CurrentIndex")
  32. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  33. level, _ := this.GetInt("Level")
  34. rangeType, _ := this.GetInt("RangeType")
  35. if chartPermissionId <= 0 {
  36. br.Msg = "品种参数错误"
  37. return
  38. }
  39. var condition string
  40. switch rangeType {
  41. case 1:
  42. condition += ` AND DATE(a.modify_time)=DATE(NOW()) `
  43. case 2:
  44. condition += ` AND DATE(a.modify_time) BETWEEN DATE_SUB(NOW(),INTERVAL 1 WEEK) AND NOW() `
  45. case 3:
  46. condition += ` AND DATE(a.modify_time) BETWEEN DATE_SUB(NOW(),INTERVAL 6 MONTH) AND NOW() `
  47. }
  48. var startSize int
  49. if pageSize <= 0 {
  50. pageSize = utils.PageSize20
  51. }
  52. if currentIndex <= 0 {
  53. currentIndex = 1
  54. }
  55. startSize = utils.StartIndex(currentIndex, pageSize)
  56. var total int
  57. var reportList []*models.ReportList
  58. switch level {
  59. case 2:
  60. classifyIds, err := models.GetClassifyIdsListById(chartPermissionId)
  61. if err != nil {
  62. br.Msg = "获取报告列表失败"
  63. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  64. return
  65. }
  66. if len(classifyIds) == 0 {
  67. br.Msg = "该品种下没有绑定分类"
  68. br.ErrMsg = "获取数据失败,品种id:" + strconv.Itoa(chartPermissionId)
  69. return
  70. }
  71. tmptotal, err := models.GetReportCountByClassifyIds(classifyIds, condition)
  72. if err != nil {
  73. br.Msg = "获取数据失败"
  74. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  75. return
  76. }
  77. total = tmptotal
  78. tmpReportList, err := models.GetReportListByClassifyIds(classifyIds, condition, startSize, pageSize)
  79. if err != nil {
  80. br.Msg = "获取报告列表失败"
  81. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  82. return
  83. }
  84. reportList = tmpReportList
  85. case 1:
  86. chartPermissionIds, err := models.GetChildChartPermissionIdsById(chartPermissionId)
  87. if err != nil {
  88. br.Msg = "获取报告列表失败"
  89. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  90. return
  91. }
  92. if len(chartPermissionIds) == 0 {
  93. br.Msg = "该品种下没有绑定分类"
  94. br.ErrMsg = "获取数据失败,品种id:" + strconv.Itoa(chartPermissionId)
  95. return
  96. }
  97. classifyIds, err := models.GetClassifyIdsListByIds(chartPermissionIds)
  98. if err != nil {
  99. br.Msg = "获取报告列表失败"
  100. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  101. return
  102. }
  103. if len(classifyIds) == 0 {
  104. br.Msg = "该品种下没有绑定分类"
  105. return
  106. }
  107. tmptotal, err := models.GetReportCountByClassifyIds(classifyIds, condition)
  108. if err != nil {
  109. br.Msg = "获取数据失败"
  110. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  111. return
  112. }
  113. total = tmptotal
  114. tmpReportList, err := models.GetReportListByClassifyIds(classifyIds, condition, startSize, pageSize)
  115. if err != nil {
  116. br.Msg = "获取报告列表失败"
  117. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  118. return
  119. }
  120. reportList = tmpReportList
  121. default:
  122. br.Msg = "层级参数错误"
  123. return
  124. }
  125. page := paging.GetPaging(currentIndex, pageSize, total)
  126. resp := new(response.ReportListResp)
  127. resp.Paging = page
  128. resp.List = reportList
  129. br.Ret = 200
  130. br.Success = true
  131. br.Msg = "获取成功"
  132. br.Data = resp
  133. }
  134. // @Title 研报详情
  135. // @Description 研报详情接口
  136. // @Param ReportId query int true "报告id"
  137. // @Param UserId query int true "用户id"
  138. // @Success 200 {object} response.ReportDetailResp
  139. // @router /detail [get]
  140. func (this *ReportController) Detail() {
  141. br := new(models.BaseResponse).Init()
  142. defer func() {
  143. this.Data["json"] = br
  144. this.ServeJSON()
  145. }()
  146. reportId, err := this.GetInt("ReportId")
  147. userId, err := this.GetInt("UserId")
  148. if err != nil {
  149. br.Msg = "参数获取失败"
  150. br.ErrMsg = "参数获取失败,Err:" + err.Error()
  151. return
  152. }
  153. if reportId <= 0 {
  154. br.Msg = "参数错误"
  155. br.ErrMsg = "参数错误,报告id小于等于0"
  156. return
  157. }
  158. if userId <= 0 {
  159. br.Msg = "参数错误"
  160. br.ErrMsg = "参数错误,用户id小于等于0"
  161. return
  162. }
  163. user, err := models.GetUserById(userId)
  164. if err != nil {
  165. br.Msg = "用户不存在"
  166. br.ErrMsg = "用户不存在,系统异常,Err:" + err.Error()
  167. return
  168. }
  169. // 有效期是否到期
  170. var vailStatus int
  171. if user.Status == utils.UserStatusFormal {
  172. if user.ValidEndTime.After(time.Now()) && user.ValidStartTime.Before(time.Now()) {
  173. vailStatus = 2
  174. } else {
  175. // 不在有效期时间则设置为过期, 将用户状态禁用
  176. vailStatus = 1
  177. user.Status = utils.UserStatusNo
  178. }
  179. }
  180. report, err := models.GetReportById(reportId)
  181. if err != nil {
  182. if err.Error() == utils.ErrNoRow() {
  183. br.Ret = 200
  184. br.Data = new(response.ReportDetailResp)
  185. br.Success = true
  186. br.Msg = "该报告已删除或不存在"
  187. return
  188. }
  189. br.Msg = "该报告已删除"
  190. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  191. return
  192. }
  193. report.ContentSub = html.UnescapeString(report.ContentSub)
  194. report.Content = html.UnescapeString(report.Content)
  195. if report == nil {
  196. br.Msg = "报告不存在"
  197. return
  198. }
  199. reportChartPermissionIds, err := models.GetChartPermissionIdsListByClassifyId(report.ClassifyIdSecond)
  200. if err != nil {
  201. br.Msg = "获取研报权限失败"
  202. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  203. return
  204. }
  205. chartPermissionList, err := models.GetChartPermissionIdsByIds(reportChartPermissionIds)
  206. if err != nil {
  207. br.Msg = "获取研报权限失败"
  208. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  209. return
  210. }
  211. var IsHas bool
  212. var IsPublic bool
  213. for _, v := range chartPermissionList {
  214. if v.IsPublic == 1 {
  215. IsPublic = true
  216. break
  217. }
  218. }
  219. resp := new(response.ReportDetailResp)
  220. if !IsPublic {
  221. // 如果是私有报告,用户权限过期直接返回有效期已过
  222. if vailStatus == 1 {
  223. resp.Report = report
  224. resp.Status = utils.ReportPermissionStatusExpired
  225. report.Content = ""
  226. br.Ret = 200
  227. br.Data = resp
  228. br.Msg = "用户权限不足"
  229. return
  230. }
  231. // 如果被禁用或是潜在用户,直接返回无阅读报告权限
  232. if user.Status == utils.UserStatusNo || user.Status == utils.UserStatusPotential {
  233. resp.Report = report
  234. resp.Status = utils.ReportPermissionStatusNo
  235. report.Content = ""
  236. br.Ret = 200
  237. br.Data = resp
  238. br.Msg = "用户权限不足"
  239. return
  240. }
  241. chartPermissionIds, err := models.GetChartPermissionIdByUserId(userId)
  242. if err != nil {
  243. br.Msg = "获取用户权限失败"
  244. br.ErrMsg = "获取用户权限失败,Err:" + err.Error()
  245. return
  246. }
  247. if len(chartPermissionIds) <= 0 {
  248. resp.Report = report
  249. resp.Status = utils.ReportPermissionStatusNo
  250. report.Content = ""
  251. br.Ret = 200
  252. br.Data = resp
  253. br.Msg = "用户权限不足"
  254. return
  255. }
  256. classifyIds, err := models.GetClassifyIdsListByIds(chartPermissionIds)
  257. if err != nil {
  258. br.Msg = "获取用户权限失败"
  259. br.ErrMsg = "获取用户分类权限失败,Err:" + err.Error()
  260. return
  261. }
  262. if len(classifyIds) <= 0 {
  263. resp.Report = report
  264. resp.Status = utils.ReportPermissionStatusNoPermission
  265. report.Content = ""
  266. br.Ret = 200
  267. br.Data = resp
  268. br.Msg = "用户权限不足"
  269. return
  270. }
  271. reportClassifyIdStr := strconv.Itoa(report.ClassifyIdSecond)
  272. for _, v := range classifyIds {
  273. if v == reportClassifyIdStr {
  274. IsHas = true
  275. }
  276. }
  277. if !IsHas {
  278. resp.Report = report
  279. resp.Status = utils.ReportPermissionStatusNoPermission
  280. report.Content = ""
  281. br.Ret = 200
  282. br.Data = resp
  283. br.Msg = "用户权限不足"
  284. return
  285. }
  286. } else {
  287. report.IsPublic = IsPublic
  288. }
  289. resp.Report = report
  290. resp.Status = utils.ReportPermissionStatusHas
  291. br.Data = resp
  292. br.Ret = 200
  293. br.Success = true
  294. br.Msg = "获取成功"
  295. }
  296. // @Title 研报详情
  297. // @Description 研报详情接口
  298. // @Param ReportId query int true "报告id"
  299. // @Success 200 {object} response.ReportDetailResp
  300. // @router /detail/noUser [get]
  301. func (this *ReportController) DetailNoUser() {
  302. br := new(models.BaseResponse).Init()
  303. defer func() {
  304. this.Data["json"] = br
  305. this.ServeJSON()
  306. }()
  307. reportId, err := this.GetInt("ReportId")
  308. if err != nil {
  309. br.Msg = "参数获取失败"
  310. br.ErrMsg = "参数获取失败,Err:" + err.Error()
  311. return
  312. }
  313. if reportId <= 0 {
  314. br.Msg = "参数错误"
  315. br.ErrMsg = "参数错误,报告id小于等于0"
  316. return
  317. }
  318. report, err := models.GetReportById(reportId)
  319. if err != nil {
  320. if err.Error() == utils.ErrNoRow() {
  321. br.Ret = 200
  322. br.Data = new(response.ReportDetailResp)
  323. br.Success = true
  324. br.Msg = "该报告已删除或不存在"
  325. return
  326. }
  327. br.Msg = "该报告已删除"
  328. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  329. return
  330. }
  331. report.ContentSub = html.UnescapeString(report.ContentSub)
  332. report.Content = ""
  333. if report == nil {
  334. br.Msg = "报告不存在"
  335. return
  336. }
  337. resp := new(response.ReportDetailResp)
  338. resp.Report = report
  339. resp.Status = utils.ReportPermissionStatusNoUser
  340. br.Data = resp
  341. br.Ret = 200
  342. br.Success = true
  343. br.Msg = "获取成功"
  344. }
  345. // @Title 今日研报列表
  346. // @Description 今日研报列表
  347. // @Param PageSize query int true "每页数据条数"
  348. // @Param CurrentIndex query int true "当前页页码,从1开始"
  349. // @Success 200 {object} response.ReportListResp
  350. // @router /daily/list [get]
  351. func (this *ReportController) Today() {
  352. br := new(models.BaseResponse).Init()
  353. defer func() {
  354. this.Data["json"] = br
  355. this.ServeJSON()
  356. }()
  357. pageSize, _ := this.GetInt("PageSize")
  358. currentIndex, _ := this.GetInt("CurrentIndex")
  359. var startSize int
  360. if pageSize <= 0 {
  361. pageSize = utils.PageSize30
  362. }
  363. if currentIndex <= 0 {
  364. currentIndex = 1
  365. }
  366. startSize = utils.StartIndex(currentIndex, pageSize)
  367. total, err := models.GetReportDailyListCount()
  368. if err != nil {
  369. br.Msg = "获取数据失败"
  370. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  371. return
  372. }
  373. list, err := models.GetReportDailyList(startSize, pageSize)
  374. if err != nil {
  375. br.Msg = "获取失败"
  376. br.ErrMsg = "获取失败,Err:" + err.Error()
  377. return
  378. }
  379. classifyIds := make([]string, 0)
  380. for _, v := range list {
  381. classifyIds = append(classifyIds, strconv.Itoa(v.ClassifyIdSecond))
  382. }
  383. classifyIds = utils.Unique(classifyIds)
  384. // 获取二级分类和二级品种权限的映射
  385. chartPermissionMapping, err := models.GetChartPermissionIdsListByClassifyIds(classifyIds)
  386. if err != nil {
  387. br.Msg = "获取研报权限失败"
  388. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  389. return
  390. }
  391. classifyToPermissionMap2 := make(map[int][]int)
  392. chartPermissionIds := make([]string, 0)
  393. for _, v := range chartPermissionMapping {
  394. classifyToPermissionMap2[v.ClassifyId] = append(classifyToPermissionMap2[v.ClassifyId], v.ChartPermissionId)
  395. chartPermissionIds = append(chartPermissionIds, strconv.Itoa(v.ChartPermissionId))
  396. }
  397. // 获取二级品种的权限,并建立映射
  398. chartPermissionList2, err := models.GetParentChartPermissionListByIds(chartPermissionIds)
  399. if err != nil {
  400. br.Msg = "获取研报二级品种权限失败"
  401. br.ErrMsg = "获取研报二级品种权限失败,Err:" + err.Error()
  402. return
  403. }
  404. chartPermissionViewMap2 := make(map[int]*models.ChartPermission)
  405. for _, v := range chartPermissionList2 {
  406. chartPermissionViewMap2[v.ChartPermissionId] = v
  407. }
  408. // 获取一级品种的权限,并建立映射
  409. chartPermissionList1, err := models.GetChildChartPermissionListById(0)
  410. if err != nil {
  411. br.Msg = "获取研报一级品种权限失败"
  412. br.ErrMsg = "获取研报一级品种权限失败,Err:" + err.Error()
  413. return
  414. }
  415. chartPermissionMap1 := make(map[int]*models.ChartPermission)
  416. for _, v := range chartPermissionList1 {
  417. chartPermissionMap1[v.ChartPermissionId] = v
  418. }
  419. // 组合数据
  420. for _, v := range list {
  421. var permissionNames []string
  422. for _, vv := range classifyToPermissionMap2[v.ClassifyIdSecond] {
  423. parent2 := chartPermissionViewMap2[vv].ParentId
  424. permissionNames = append(permissionNames, chartPermissionMap1[parent2].PermissionName)
  425. }
  426. v.PermissionNames = utils.Unique(permissionNames)
  427. }
  428. page := paging.GetPaging(currentIndex, pageSize, total)
  429. resp := new(response.ReportListResp)
  430. resp.Paging = page
  431. resp.List = list
  432. br.Ret = 200
  433. br.Success = true
  434. br.Msg = "获取成功"
  435. br.Data = resp
  436. }
  437. // @Title 最新研报列表
  438. // @Description 最新研报列表
  439. // @Param PageSize query int true "每页数据条数"
  440. // @Param CurrentIndex query int true "当前页页码,从1开始"
  441. // @Success 200 {object} response.ReportListResp
  442. // @router /recent/list [get]
  443. func (this *ReportController) RecentList() {
  444. br := new(models.BaseResponse).Init()
  445. defer func() {
  446. this.Data["json"] = br
  447. this.ServeJSON()
  448. }()
  449. pageSize, _ := this.GetInt("PageSize")
  450. currentIndex, _ := this.GetInt("CurrentIndex")
  451. var startSize int
  452. if pageSize <= 0 {
  453. pageSize = utils.PageSize30
  454. }
  455. if currentIndex <= 0 {
  456. currentIndex = 1
  457. }
  458. startSize = utils.StartIndex(currentIndex, pageSize)
  459. total, err := models.GetReportRecentListCount()
  460. if err != nil {
  461. br.Msg = "获取数据失败"
  462. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  463. return
  464. }
  465. list, err := models.GetReportRecentList(startSize, pageSize)
  466. if err != nil {
  467. br.Msg = "获取失败"
  468. br.ErrMsg = "获取失败,Err:" + err.Error()
  469. return
  470. }
  471. classifyIds := make([]string, 0)
  472. for _, v := range list {
  473. classifyIds = append(classifyIds, strconv.Itoa(v.ClassifyIdSecond))
  474. }
  475. classifyIds = utils.Unique(classifyIds)
  476. // 获取二级分类和二级品种权限的映射
  477. chartPermissionMapping, err := models.GetChartPermissionIdsListByClassifyIds(classifyIds)
  478. if err != nil {
  479. br.Msg = "获取研报权限失败"
  480. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  481. return
  482. }
  483. classifyToPermissionMap2 := make(map[int][]int)
  484. chartPermissionIds := make([]string, 0)
  485. for _, v := range chartPermissionMapping {
  486. classifyToPermissionMap2[v.ClassifyId] = append(classifyToPermissionMap2[v.ClassifyId], v.ChartPermissionId)
  487. chartPermissionIds = append(chartPermissionIds, strconv.Itoa(v.ChartPermissionId))
  488. }
  489. // 获取二级品种的权限,并建立映射
  490. chartPermissionList2, err := models.GetParentChartPermissionListByIds(chartPermissionIds)
  491. if err != nil {
  492. br.Msg = "获取研报二级品种权限失败"
  493. br.ErrMsg = "获取研报二级品种权限失败,Err:" + err.Error()
  494. return
  495. }
  496. chartPermissionViewMap2 := make(map[int]*models.ChartPermission)
  497. for _, v := range chartPermissionList2 {
  498. chartPermissionViewMap2[v.ChartPermissionId] = v
  499. }
  500. // 获取一级品种的权限,并建立映射
  501. chartPermissionList1, err := models.GetChildChartPermissionListById(0)
  502. if err != nil {
  503. br.Msg = "获取研报一级品种权限失败"
  504. br.ErrMsg = "获取研报一级品种权限失败,Err:" + err.Error()
  505. return
  506. }
  507. chartPermissionMap1 := make(map[int]*models.ChartPermission)
  508. for _, v := range chartPermissionList1 {
  509. chartPermissionMap1[v.ChartPermissionId] = v
  510. }
  511. // 组合数据
  512. for _, v := range list {
  513. var permissionNames []string
  514. for _, vv := range classifyToPermissionMap2[v.ClassifyIdSecond] {
  515. parent2 := chartPermissionViewMap2[vv].ParentId
  516. permissionNames = append(permissionNames, chartPermissionMap1[parent2].PermissionName)
  517. }
  518. v.PermissionNames = utils.Unique(permissionNames)
  519. }
  520. page := paging.GetPaging(currentIndex, pageSize, total)
  521. resp := new(response.ReportListResp)
  522. resp.Paging = page
  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. // @Param PageSize query int true "每页数据条数"
  532. // @Param CurrentIndex query int true "当前页页码,从1开始"
  533. // @Param KeyWord query string true "关键字"
  534. // @Success 200 {object} response.ReportSearchResp
  535. // @router /search [get]
  536. func (this *ReportController) Search() {
  537. br := new(models.BaseResponse).Init()
  538. defer func() {
  539. this.Data["json"] = br
  540. this.ServeJSON()
  541. }()
  542. keyWord := this.GetString("KeyWord")
  543. pageSize, _ := this.GetInt("PageSize")
  544. currentIndex, _ := this.GetInt("CurrentIndex")
  545. if pageSize <= 0 {
  546. pageSize = utils.PageSize30
  547. }
  548. if currentIndex <= 0 {
  549. currentIndex = 1
  550. }
  551. if keyWord == "" {
  552. br.Msg = "请输入关键字"
  553. return
  554. }
  555. reportList, err, errMsg := services.SearchReport(keyWord, currentIndex, pageSize)
  556. if err != nil {
  557. br.Msg = "研报搜索失败"
  558. br.ErrMsg = errMsg + ",Err:" + err.Error()
  559. return
  560. }
  561. br.Data = reportList
  562. br.Msg = "查询成功"
  563. br.Ret = 200
  564. br.Success = true
  565. }