report.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  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 {int} models.User.Id
  23. // @Failure 403 body is empty
  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. if chartPermissionId <= 0 {
  37. br.Msg = "品种参数错误"
  38. return
  39. }
  40. var condition string
  41. switch rangeType {
  42. case 1:
  43. condition += ` AND DATE(a.modify_time)=DATE(NOW()) `
  44. case 2:
  45. condition += ` AND DATE(a.modify_time) BETWEEN DATE_SUB(NOW(),INTERVAL 1 WEEK) AND NOW() `
  46. case 3:
  47. condition += ` AND DATE(a.modify_time) BETWEEN DATE_SUB(NOW(),INTERVAL 6 MONTH) AND NOW() `
  48. }
  49. var startSize int
  50. if pageSize <= 0 {
  51. pageSize = utils.PageSize20
  52. }
  53. if currentIndex <= 0 {
  54. currentIndex = 1
  55. }
  56. startSize = utils.StartIndex(currentIndex, pageSize)
  57. var total int
  58. var reportList []*models.ReportList
  59. switch level {
  60. case 2:
  61. classifyIds, err := models.GetClassifyIdsListById(chartPermissionId)
  62. if err != nil {
  63. br.Msg = "获取报告列表失败"
  64. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  65. return
  66. }
  67. if len(classifyIds) == 0 {
  68. br.Msg = "该品种下没有绑定分类"
  69. br.ErrMsg = "获取数据失败,品种id:" + strconv.Itoa(chartPermissionId)
  70. return
  71. }
  72. tmptotal, err := models.GetReportCountByClassifyIds(classifyIds, condition)
  73. if err != nil {
  74. br.Msg = "获取数据失败"
  75. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  76. return
  77. }
  78. total = tmptotal
  79. tmpReportList, err := models.GetReportListByClassifyIds(classifyIds, condition, startSize, pageSize)
  80. if err != nil {
  81. br.Msg = "获取报告列表失败"
  82. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  83. return
  84. }
  85. reportList = tmpReportList
  86. case 1:
  87. chartPermissionIds, err := models.GetChildChartPermissionIdsById(chartPermissionId)
  88. if err != nil {
  89. br.Msg = "获取报告列表失败"
  90. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  91. return
  92. }
  93. if len(chartPermissionIds) == 0 {
  94. br.Msg = "该品种下没有绑定分类"
  95. br.ErrMsg = "获取数据失败,品种id:" + strconv.Itoa(chartPermissionId)
  96. return
  97. }
  98. classifyIds, err := models.GetClassifyIdsListByIds(chartPermissionIds)
  99. if err != nil {
  100. br.Msg = "获取报告列表失败"
  101. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  102. return
  103. }
  104. if len(classifyIds) == 0 {
  105. br.Msg = "该品种下没有绑定分类"
  106. return
  107. }
  108. tmptotal, err := models.GetReportCountByClassifyIds(classifyIds, condition)
  109. if err != nil {
  110. br.Msg = "获取数据失败"
  111. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  112. return
  113. }
  114. total = tmptotal
  115. tmpReportList, err := models.GetReportListByClassifyIds(classifyIds, condition, startSize, pageSize)
  116. if err != nil {
  117. br.Msg = "获取报告列表失败"
  118. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  119. return
  120. }
  121. reportList = tmpReportList
  122. default:
  123. br.Msg = "层级参数错误"
  124. return
  125. }
  126. page := paging.GetPaging(currentIndex, pageSize, total)
  127. resp := new(response.ReportListResp)
  128. resp.Paging = page
  129. resp.List = reportList
  130. br.Ret = 200
  131. br.Success = true
  132. br.Msg = "获取成功"
  133. br.Data = resp
  134. }
  135. // @Title 研报详情
  136. // @Description 研报详情接口
  137. // @Param ReportId query int true "报告id"
  138. // @Param UserId query int true "用户id"
  139. // @Success 200 {object} models.ReportDetailResp
  140. // @router /detail [get]
  141. func (this *ReportController) Detail() {
  142. br := new(models.BaseResponse).Init()
  143. defer func() {
  144. this.Data["json"] = br
  145. this.ServeJSON()
  146. }()
  147. reportId, err := this.GetInt("ReportId")
  148. userId, err := this.GetInt("UserId")
  149. if err != nil {
  150. br.Msg = "参数获取失败"
  151. br.ErrMsg = "参数获取失败,Err:" + err.Error()
  152. return
  153. }
  154. if reportId <= 0 {
  155. br.Msg = "参数错误"
  156. br.ErrMsg = "参数错误,报告id小于等于0"
  157. return
  158. }
  159. if userId <= 0 {
  160. br.Msg = "参数错误"
  161. br.ErrMsg = "参数错误,用户id小于等于0"
  162. return
  163. }
  164. user, err := models.GetUserById(userId)
  165. if err != nil {
  166. br.Msg = "用户不存在"
  167. br.ErrMsg = "用户不存在,系统异常,Err:" + err.Error()
  168. return
  169. }
  170. // 有效期是否到期
  171. IsVail := user.ValidEndTime.After(time.Now())
  172. report, err := models.GetReportById(reportId)
  173. if err != nil {
  174. if err.Error() == utils.ErrNoRow() {
  175. br.Ret = 200
  176. br.Data = new(response.ReportDetailResp)
  177. br.Success = true
  178. br.Msg = "该报告已删除或不存在"
  179. return
  180. }
  181. br.Msg = "该报告已删除"
  182. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  183. return
  184. }
  185. report.ContentSub = html.UnescapeString(report.ContentSub)
  186. report.Content = html.UnescapeString(report.Content)
  187. if report == nil {
  188. br.Msg = "报告不存在"
  189. return
  190. }
  191. reportChartPermissionIds, err := models.GetChartPermissionIdsListByClassifyId(report.ClassifyIdSecond)
  192. if err != nil {
  193. br.Msg = "获取研报权限失败"
  194. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  195. return
  196. }
  197. chartPermissionList, err := models.GetChartPermissionIdsByIds(reportChartPermissionIds)
  198. if err != nil {
  199. br.Msg = "获取研报权限失败"
  200. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  201. return
  202. }
  203. var IsHas bool
  204. var IsPublic bool
  205. for _, v := range chartPermissionList {
  206. if v.IsPublic == 1 {
  207. IsPublic = true
  208. break
  209. }
  210. }
  211. resp := new(response.ReportDetailResp)
  212. if !IsPublic {
  213. // 如果被禁用或是潜在用户,直接返回无阅读报告权限
  214. if user.Status == 0 || user.Status == 1 {
  215. resp.Report = report
  216. resp.Status = utils.ReportPermissionStatusNo
  217. report.Content = ""
  218. br.Ret = 408
  219. br.Data = resp
  220. br.Msg = "用户权限不足"
  221. return
  222. }
  223. // 如果是私有报告,用户权限过期直接返回有效期已过
  224. if !IsVail {
  225. resp.Report = report
  226. resp.Status = utils.ReportPermissionStatusExpired
  227. report.Content = ""
  228. br.Ret = 408
  229. br.Data = resp
  230. br.Msg = "用户权限不足"
  231. return
  232. }
  233. chartPermissionIds, err := models.GetChartPermissionIdByUserId(userId)
  234. if err != nil {
  235. br.Msg = "获取用户权限失败"
  236. br.ErrMsg = "获取用户权限失败,Err:" + err.Error()
  237. return
  238. }
  239. if len(chartPermissionIds) <= 0 {
  240. resp.Report = report
  241. resp.Status = utils.ReportPermissionStatusNo
  242. report.Content = ""
  243. br.Ret = 408
  244. br.Data = resp
  245. br.Msg = "用户权限不足"
  246. return
  247. }
  248. classifyIds, err := models.GetClassifyIdsListByIds(chartPermissionIds)
  249. if err != nil {
  250. br.Msg = "获取用户权限失败"
  251. br.ErrMsg = "获取用户分类权限失败,Err:" + err.Error()
  252. return
  253. }
  254. if len(classifyIds) <= 0 {
  255. resp.Report = report
  256. resp.Status = utils.ReportPermissionStatusNoPermission
  257. report.Content = ""
  258. br.Ret = 408
  259. br.Data = resp
  260. br.Msg = "用户权限不足"
  261. return
  262. }
  263. reportClassifyIdStr := strconv.Itoa(report.ClassifyIdSecond)
  264. for _, v := range classifyIds {
  265. if v == reportClassifyIdStr {
  266. IsHas = true
  267. }
  268. }
  269. if !IsHas {
  270. resp.Report = report
  271. resp.Status = utils.ReportPermissionStatusNoPermission
  272. report.Content = ""
  273. br.Ret = 408
  274. br.Data = resp
  275. br.Msg = "用户权限不足"
  276. return
  277. }
  278. } else {
  279. report.IsPublic = IsPublic
  280. }
  281. resp.Report = report
  282. resp.Status = utils.ReportPermissionStatusHas
  283. br.Data = resp
  284. br.Ret = 200
  285. br.Success = true
  286. br.Msg = "获取成功"
  287. }
  288. // @Title List
  289. // @Description create users
  290. // @Param body body models.User true "body for user content"
  291. // @Success 200 {int} models.User.Id
  292. // @Failure 403 body is empty
  293. // @router /daily/list [get]
  294. func (this *ReportController) Today() {
  295. br := new(models.BaseResponse).Init()
  296. defer func() {
  297. this.Data["json"] = br
  298. this.ServeJSON()
  299. }()
  300. pageSize, _ := this.GetInt("PageSize")
  301. currentIndex, _ := this.GetInt("CurrentIndex")
  302. var startSize int
  303. if pageSize <= 0 {
  304. pageSize = utils.PageSize30
  305. }
  306. if currentIndex <= 0 {
  307. currentIndex = 1
  308. }
  309. startSize = utils.StartIndex(currentIndex, pageSize)
  310. total, err := models.GetReportDailyListCount()
  311. if err != nil {
  312. br.Msg = "获取数据失败"
  313. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  314. return
  315. }
  316. list, err := models.GetReportDailyList(startSize, pageSize)
  317. if err != nil {
  318. br.Msg = "获取失败"
  319. br.ErrMsg = "获取失败,Err:" + err.Error()
  320. return
  321. }
  322. classifyIds := make([]string, 0)
  323. for _, v := range list {
  324. classifyIds = append(classifyIds, strconv.Itoa(v.ClassifyIdSecond))
  325. }
  326. classifyIds = utils.Unique(classifyIds)
  327. // 获取二级分类和二级品种权限的映射
  328. chartPermissionMapping, err := models.GetChartPermissionIdsListByClassifyIds(classifyIds)
  329. if err != nil {
  330. br.Msg = "获取研报权限失败"
  331. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  332. return
  333. }
  334. classifyToPermissionMap2 := make(map[int][]int)
  335. chartPermissionIds := make([]string, 0)
  336. for _, v := range chartPermissionMapping {
  337. classifyToPermissionMap2[v.ClassifyId] = append(classifyToPermissionMap2[v.ClassifyId], v.ChartPermissionId)
  338. chartPermissionIds = append(chartPermissionIds, strconv.Itoa(v.ChartPermissionId))
  339. }
  340. // 获取二级品种的权限,并建立映射
  341. chartPermissionList2, err := models.GetParentChartPermissionListByIds(chartPermissionIds)
  342. if err != nil {
  343. br.Msg = "获取研报二级品种权限失败"
  344. br.ErrMsg = "获取研报二级品种权限失败,Err:" + err.Error()
  345. return
  346. }
  347. chartPermissionViewMap2 := make(map[int]*models.ChartPermission)
  348. for _, v := range chartPermissionList2 {
  349. chartPermissionViewMap2[v.ChartPermissionId] = v
  350. }
  351. // 获取一级品种的权限,并建立映射
  352. chartPermissionList1, err := models.GetChildChartPermissionListById(0)
  353. if err != nil {
  354. br.Msg = "获取研报一级品种权限失败"
  355. br.ErrMsg = "获取研报一级品种权限失败,Err:" + err.Error()
  356. return
  357. }
  358. chartPermissionMap1 := make(map[int]*models.ChartPermission)
  359. for _, v := range chartPermissionList1 {
  360. chartPermissionMap1[v.ChartPermissionId] = v
  361. }
  362. // 组合数据
  363. for _, v := range list {
  364. var permissionNames []string
  365. for _, vv := range classifyToPermissionMap2[v.ClassifyIdSecond] {
  366. parent2 := chartPermissionViewMap2[vv].ParentId
  367. permissionNames = append(permissionNames, chartPermissionMap1[parent2].PermissionName)
  368. }
  369. v.PermissionNames = utils.Unique(permissionNames)
  370. }
  371. page := paging.GetPaging(currentIndex, pageSize, total)
  372. resp := new(response.ReportListResp)
  373. resp.Paging = page
  374. resp.List = list
  375. br.Ret = 200
  376. br.Success = true
  377. br.Msg = "获取成功"
  378. br.Data = resp
  379. }
  380. // @Title 研报搜索
  381. // @Description 研报搜索
  382. // @Param PageSize query int true "每页数据条数"
  383. // @Param CurrentIndex query int true "当前页页码,从1开始"
  384. // @Param KeyWord query string true "关键字"
  385. // @Success 200 {object} models.ReportDetailResp
  386. // @router /search [get]
  387. func (this *ReportController) Search() {
  388. br := new(models.BaseResponse).Init()
  389. defer func() {
  390. this.Data["json"] = br
  391. this.ServeJSON()
  392. }()
  393. keyWord := this.GetString("KeyWord")
  394. pageSize, _ := this.GetInt("PageSize")
  395. currentIndex, _ := this.GetInt("CurrentIndex")
  396. if pageSize <= 0 {
  397. pageSize = utils.PageSize30
  398. }
  399. if currentIndex <= 0 {
  400. currentIndex = 1
  401. }
  402. if keyWord == "" {
  403. br.Msg = "请输入关键字"
  404. return
  405. }
  406. reportList, err, errMsg := services.SearchReport(keyWord, currentIndex, pageSize)
  407. if err != nil {
  408. br.Msg = "研报搜索失败"
  409. br.ErrMsg = errMsg + ",Err:" + err.Error()
  410. return
  411. }
  412. br.Data = reportList
  413. br.Msg = "查询成功"
  414. br.Ret = 200
  415. br.Success = true
  416. }