report.go 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058
  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. type ReportNoAuthController struct {
  16. BaseCommonController
  17. }
  18. // @Title List
  19. // @Description create users
  20. // @Param ChartPermissionId query int true "品种ID"
  21. // @Param Level query int true "品种层级"
  22. // @Param PageSize query int true "每页数据条数"
  23. // @Param CurrentIndex query int true "当前页页码,从1开始"
  24. // @Param RangeType query string true "范围类型,1-一天内,2-一周内,3-半年内"
  25. // @Param ClassifyId query int true "分类id"
  26. // @Success 200 {object} response.ReportListResp
  27. // @router /list [get]
  28. func (this *ReportController) List() {
  29. br := new(models.BaseResponse).Init()
  30. defer func() {
  31. this.Data["json"] = br
  32. this.ServeJSON()
  33. }()
  34. pageSize, _ := this.GetInt("PageSize")
  35. currentIndex, _ := this.GetInt("CurrentIndex")
  36. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  37. level, _ := this.GetInt("Level")
  38. rangeType, _ := this.GetInt("RangeType")
  39. classifyId, _ := this.GetInt("ClassifyId")
  40. if chartPermissionId <= 0 {
  41. br.Msg = "品种参数错误"
  42. return
  43. }
  44. var condition string
  45. switch rangeType {
  46. case 1:
  47. condition += ` AND DATE(a.modify_time)=DATE(NOW()) `
  48. case 2:
  49. condition += ` AND DATE(a.modify_time) BETWEEN DATE_SUB(NOW(),INTERVAL 1 WEEK) AND NOW() `
  50. case 3:
  51. condition += ` AND DATE(a.modify_time) BETWEEN DATE_SUB(NOW(),INTERVAL 6 MONTH) AND NOW() `
  52. }
  53. var startSize int
  54. if pageSize <= 0 {
  55. pageSize = utils.PageSize20
  56. }
  57. if currentIndex <= 0 {
  58. currentIndex = 1
  59. }
  60. startSize = utils.StartIndex(currentIndex, pageSize)
  61. classifyList, err := models.GetClassifyList()
  62. if err != nil {
  63. br.Msg = "获取数据失败"
  64. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  65. return
  66. }
  67. classifyMap := make(map[int]*models.ClassifyView)
  68. isHas := false
  69. for _, v := range classifyList {
  70. if v.Id == classifyId && classifyId != 0 {
  71. isHas = true
  72. }
  73. classifyMap[v.Id] = v
  74. }
  75. if !isHas && classifyId != 0 {
  76. br.Msg = "分类不存在"
  77. return
  78. }
  79. classifyIdMap := make(map[int]struct{})
  80. if classifyId > 0 {
  81. leafClassifyIds := getLeafClassifyIds(classifyMap, classifyId)
  82. for _, v := range leafClassifyIds {
  83. classifyIdMap[v] = struct{}{}
  84. }
  85. }
  86. var total int
  87. var reportList []*models.ReportList
  88. classifyFirstIds := make([]int, 0)
  89. classifySecondIds := make([]int, 0)
  90. classifyThirdIds := make([]int, 0)
  91. switch level {
  92. case 2:
  93. classifyIds, err := models.GetClassifyIdsListById(chartPermissionId)
  94. if err != nil {
  95. br.Msg = "获取报告列表失败"
  96. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  97. return
  98. }
  99. if len(classifyIds) == 0 {
  100. br.Msg = "该品种下没有绑定分类"
  101. br.ErrMsg = "获取数据失败,品种id:" + strconv.Itoa(chartPermissionId)
  102. return
  103. }
  104. classifyIds = utils.Unique(classifyIds)
  105. // 根据分类筛选报告
  106. var selectedClassifyId []int
  107. if classifyId > 0 {
  108. for _, v := range classifyIds {
  109. if _, ok := classifyIdMap[v]; ok {
  110. selectedClassifyId = append(selectedClassifyId, v)
  111. }
  112. }
  113. } else {
  114. selectedClassifyId = classifyIds
  115. }
  116. classifyList, err := models.GetClassifyListByIds(selectedClassifyId)
  117. if err != nil {
  118. br.Msg = "获取报告列表失败"
  119. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  120. return
  121. }
  122. for _, v := range classifyList {
  123. if v.HasChild == 1 {
  124. continue
  125. }
  126. switch v.Level {
  127. case 1:
  128. classifyFirstIds = append(classifyFirstIds, v.Id)
  129. case 2:
  130. classifySecondIds = append(classifySecondIds, v.Id)
  131. case 3:
  132. classifyThirdIds = append(classifyThirdIds, v.Id)
  133. }
  134. }
  135. tmptotal, err := models.GetReportCountByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition)
  136. if err != nil {
  137. br.Msg = "获取数据失败"
  138. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  139. return
  140. }
  141. total = tmptotal
  142. tmpReportList, err := models.GetReportListByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition, startSize, pageSize)
  143. if err != nil {
  144. br.Msg = "获取报告列表失败"
  145. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  146. return
  147. }
  148. reportList = tmpReportList
  149. case 1:
  150. chartPermissionIds, err := models.GetChildChartPermissionIdsById(chartPermissionId)
  151. if err != nil {
  152. br.Msg = "获取报告列表失败"
  153. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  154. return
  155. }
  156. if len(chartPermissionIds) == 0 {
  157. br.Msg = "该品种下没有绑定分类"
  158. br.ErrMsg = "获取数据失败,品种id:" + strconv.Itoa(chartPermissionId)
  159. return
  160. }
  161. classifyIds, err := models.GetClassifyIdsListByIds(chartPermissionIds)
  162. if err != nil {
  163. br.Msg = "获取报告列表失败"
  164. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  165. return
  166. }
  167. if len(classifyIds) == 0 {
  168. br.Msg = "该品种下没有绑定分类"
  169. return
  170. }
  171. classifyIds = utils.Unique(classifyIds)
  172. // 根据分类筛选报告
  173. var selectedClassifyId []int
  174. if classifyId > 0 {
  175. for _, v := range classifyIds {
  176. if _, ok := classifyIdMap[v]; ok {
  177. selectedClassifyId = append(selectedClassifyId, v)
  178. }
  179. }
  180. } else {
  181. selectedClassifyId = classifyIds
  182. }
  183. classifyList, err := models.GetClassifyListByIds(selectedClassifyId)
  184. if err != nil {
  185. br.Msg = "获取报告列表失败"
  186. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  187. return
  188. }
  189. for _, v := range classifyList {
  190. if v.HasChild == 1 {
  191. continue
  192. }
  193. switch v.Level {
  194. case 1:
  195. classifyFirstIds = append(classifyFirstIds, v.Id)
  196. case 2:
  197. classifySecondIds = append(classifySecondIds, v.Id)
  198. case 3:
  199. classifyThirdIds = append(classifyThirdIds, v.Id)
  200. }
  201. }
  202. tmptotal, err := models.GetReportCountByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition)
  203. if err != nil {
  204. br.Msg = "获取数据失败"
  205. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  206. return
  207. }
  208. total = tmptotal
  209. tmpReportList, err := models.GetReportListByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition, startSize, pageSize)
  210. if err != nil {
  211. br.Msg = "获取报告列表失败"
  212. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  213. return
  214. }
  215. reportList = tmpReportList
  216. default:
  217. br.Msg = "层级参数错误"
  218. return
  219. }
  220. page := paging.GetPaging(currentIndex, pageSize, total)
  221. resp := new(response.ReportListResp)
  222. resp.Paging = page
  223. resp.List = reportList
  224. br.Ret = 200
  225. br.Success = true
  226. br.Msg = "获取成功"
  227. br.Data = resp
  228. }
  229. func getLeafClassifyIds(classifyMap map[int]*models.ClassifyView, keyId int) []int {
  230. var leafClassifyIds []int
  231. curClassify := classifyMap[keyId]
  232. if curClassify.HasChild == 0 {
  233. leafClassifyIds = append(leafClassifyIds, curClassify.Id)
  234. return leafClassifyIds
  235. }
  236. for _, v := range classifyMap {
  237. if v.ParentId == curClassify.Id {
  238. if v.HasChild == 0 {
  239. leafClassifyIds = append(leafClassifyIds, v.Id)
  240. } else {
  241. leafClassifyIds = append(leafClassifyIds, getLeafClassifyIds(classifyMap, v.Id)...)
  242. }
  243. }
  244. }
  245. return leafClassifyIds
  246. }
  247. // @Title 研报详情
  248. // @Description 研报详情接口
  249. // @Param ReportId query int true "报告id"
  250. // @Param UserId query int true "用户id"
  251. // @Success 200 {object} response.ReportDetailResp
  252. // @router /detail [get]
  253. func (this *ReportController) Detail() {
  254. br := new(models.BaseResponse).Init()
  255. defer func() {
  256. this.Data["json"] = br
  257. this.ServeJSON()
  258. }()
  259. reportId, err := this.GetInt("ReportId")
  260. userId, err := this.GetInt("UserId")
  261. if err != nil {
  262. br.Msg = "参数获取失败"
  263. br.ErrMsg = "参数获取失败,Err:" + err.Error()
  264. return
  265. }
  266. if reportId <= 0 {
  267. br.Msg = "参数错误"
  268. br.ErrMsg = "参数错误,报告id小于等于0"
  269. return
  270. }
  271. if userId <= 0 {
  272. br.Msg = "参数错误"
  273. br.ErrMsg = "参数错误,用户id小于等于0"
  274. return
  275. }
  276. user, err := models.GetUserById(userId)
  277. if err != nil {
  278. br.Msg = "用户不存在"
  279. br.ErrMsg = "用户不存在,系统异常,Err:" + err.Error()
  280. return
  281. }
  282. // 有效期是否到期
  283. var vailStatus int
  284. if user.Status == utils.UserStatusFormal {
  285. if user.ValidEndTime.After(time.Now()) && user.ValidStartTime.Before(time.Now()) {
  286. vailStatus = 2
  287. } else {
  288. // 不在有效期时间则设置为过期, 将用户状态禁用
  289. vailStatus = 1
  290. user.Status = utils.UserStatusNo
  291. }
  292. }
  293. report, err := models.GetReportById(reportId)
  294. if err != nil {
  295. if err.Error() == utils.ErrNoRow() {
  296. br.Ret = 200
  297. br.Data = new(response.ReportDetailResp)
  298. br.Success = true
  299. br.Msg = "该报告已删除或不存在"
  300. return
  301. }
  302. br.Msg = "该报告已删除"
  303. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  304. return
  305. }
  306. if report.HeadResourceId > 0 || report.EndResourceId > 0 {
  307. headImg, err := models.GetSmartReportResourceById(report.HeadResourceId)
  308. if err != nil && err.Error() != utils.ErrNoRow() {
  309. utils.FileLog.Warn("版头数据获取失败,Err:" + err.Error())
  310. }
  311. endImg, err := models.GetSmartReportResourceById(report.EndResourceId)
  312. if err != nil && err.Error() != utils.ErrNoRow() {
  313. utils.FileLog.Warn("版尾数据获取失败,Err:" + err.Error())
  314. }
  315. if headImg != nil {
  316. report.HeadResource = headImg
  317. }
  318. if endImg != nil {
  319. report.EndResource = endImg
  320. }
  321. }
  322. if report.HasChapter == 1 {
  323. chapterList, err := models.GetReportChapterList(report.Id)
  324. if err != nil {
  325. br.Msg = "该报告已删除"
  326. br.ErrMsg = "获取章节列表失败,Err:" + err.Error()
  327. return
  328. }
  329. for _, v := range chapterList {
  330. v.Content = html.UnescapeString(v.Content)
  331. }
  332. report.ChapterContent = chapterList
  333. }
  334. report.ContentSub = html.UnescapeString(report.ContentSub)
  335. report.Content = html.UnescapeString(report.Content)
  336. if report == nil {
  337. br.Msg = "报告不存在"
  338. return
  339. }
  340. reportChartPermissionIds, err := models.GetChartPermissionIdsListByClassifyId(report.ClassifyIdSecond)
  341. if err != nil {
  342. br.Msg = "获取研报权限失败"
  343. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  344. return
  345. }
  346. chartPermissionList, err := models.GetChartPermissionListByStrIds(reportChartPermissionIds)
  347. if err != nil {
  348. br.Msg = "获取研报权限失败"
  349. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  350. return
  351. }
  352. var IsHas bool
  353. var IsPublic bool
  354. for _, v := range chartPermissionList {
  355. if v.IsPublic == 1 {
  356. IsPublic = true
  357. break
  358. }
  359. }
  360. resp := new(response.ReportDetailResp)
  361. if !IsPublic {
  362. // 如果是私有报告,用户权限过期直接返回有效期已过
  363. if vailStatus == 1 {
  364. resp.Report = report
  365. resp.Status = utils.ReportPermissionStatusExpired
  366. report.Content = ""
  367. br.Ret = 200
  368. br.Data = resp
  369. br.Msg = "用户权限不足"
  370. return
  371. }
  372. // 如果被禁用或是潜在用户,直接返回无阅读报告权限
  373. if user.Status == utils.UserStatusNo || user.Status == utils.UserStatusPotential {
  374. resp.Report = report
  375. resp.Status = utils.ReportPermissionStatusNo
  376. report.Content = ""
  377. br.Ret = 200
  378. br.Data = resp
  379. br.Msg = "用户权限不足"
  380. return
  381. }
  382. chartPermissionIds, err := models.GetChartPermissionIdByUserId(userId)
  383. if err != nil {
  384. br.Msg = "获取用户权限失败"
  385. br.ErrMsg = "获取用户权限失败,Err:" + err.Error()
  386. return
  387. }
  388. if len(chartPermissionIds) <= 0 {
  389. resp.Report = report
  390. resp.Status = utils.ReportPermissionStatusNo
  391. report.Content = ""
  392. br.Ret = 200
  393. br.Data = resp
  394. br.Msg = "用户权限不足"
  395. return
  396. }
  397. classifyIds, err := models.GetClassifyIdsListByIds(chartPermissionIds)
  398. if err != nil {
  399. br.Msg = "获取用户权限失败"
  400. br.ErrMsg = "获取用户分类权限失败,Err:" + err.Error()
  401. return
  402. }
  403. if len(classifyIds) <= 0 {
  404. resp.Report = report
  405. resp.Status = utils.ReportPermissionStatusNoPermission
  406. report.Content = ""
  407. br.Ret = 200
  408. br.Data = resp
  409. br.Msg = "用户权限不足"
  410. return
  411. }
  412. for _, v := range classifyIds {
  413. if v == report.ClassifyIdSecond {
  414. IsHas = true
  415. }
  416. }
  417. if !IsHas {
  418. resp.Report = report
  419. resp.Status = utils.ReportPermissionStatusNoPermission
  420. report.Content = ""
  421. br.Ret = 200
  422. br.Data = resp
  423. br.Msg = "用户权限不足"
  424. return
  425. }
  426. } else {
  427. report.IsPublic = IsPublic
  428. }
  429. resp.Report = report
  430. resp.Status = utils.ReportPermissionStatusHas
  431. br.Data = resp
  432. br.Ret = 200
  433. br.Success = true
  434. br.Msg = "获取成功"
  435. }
  436. // @Title 研报详情
  437. // @Description 研报详情接口
  438. // @Param ReportId query int true "报告id"
  439. // @Success 200 {object} response.ReportDetailResp
  440. // @router /detail/noUser [get]
  441. func (this *ReportController) DetailNoUser() {
  442. br := new(models.BaseResponse).Init()
  443. defer func() {
  444. this.Data["json"] = br
  445. this.ServeJSON()
  446. }()
  447. reportId, err := this.GetInt("ReportId")
  448. if err != nil {
  449. br.Msg = "参数获取失败"
  450. br.ErrMsg = "参数获取失败,Err:" + err.Error()
  451. return
  452. }
  453. if reportId <= 0 {
  454. br.Msg = "参数错误"
  455. br.ErrMsg = "参数错误,报告id小于等于0"
  456. return
  457. }
  458. report, err := models.GetReportById(reportId)
  459. if err != nil {
  460. if err.Error() == utils.ErrNoRow() {
  461. br.Ret = 200
  462. br.Data = new(response.ReportDetailResp)
  463. br.Success = true
  464. br.Msg = "该报告已删除或不存在"
  465. return
  466. }
  467. br.Msg = "该报告已删除"
  468. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  469. return
  470. }
  471. report.ContentSub = html.UnescapeString(report.ContentSub)
  472. report.Content = ""
  473. if report == nil {
  474. br.Msg = "报告不存在"
  475. return
  476. }
  477. resp := new(response.ReportDetailResp)
  478. resp.Report = report
  479. resp.Status = utils.ReportPermissionStatusNoUser
  480. br.Data = resp
  481. br.Ret = 200
  482. br.Success = true
  483. br.Msg = "获取成功"
  484. }
  485. // @Title 今日研报列表
  486. // @Description 今日研报列表
  487. // @Success 200 {object} response.ReportListResp
  488. // @router /daily/list [get]
  489. func (this *ReportController) Today() {
  490. br := new(models.BaseResponse).Init()
  491. defer func() {
  492. this.Data["json"] = br
  493. this.ServeJSON()
  494. }()
  495. total, err := models.GetReportDailyListCount()
  496. if err != nil {
  497. br.Msg = "获取数据失败"
  498. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  499. return
  500. }
  501. list, err := models.GetReportDailyList(0, total)
  502. if err != nil {
  503. br.Msg = "获取失败"
  504. br.ErrMsg = "获取失败,Err:" + err.Error()
  505. return
  506. }
  507. classifyIds := make([]string, 0)
  508. for _, v := range list {
  509. classifyIds = append(classifyIds, strconv.Itoa(v.ClassifyIdSecond))
  510. }
  511. classifyIds = utils.Unique(classifyIds)
  512. // 获取二级分类和二级品种权限的映射
  513. chartPermissionMapping, err := models.GetChartPermissionListByClassifyStrIds(classifyIds)
  514. if err != nil {
  515. br.Msg = "获取研报权限失败"
  516. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  517. return
  518. }
  519. classifyToPermissionMap2 := make(map[int][]int)
  520. chartPermissionIds := make([]string, 0)
  521. for _, v := range chartPermissionMapping {
  522. classifyToPermissionMap2[v.ClassifyId] = append(classifyToPermissionMap2[v.ClassifyId], v.ChartPermissionId)
  523. chartPermissionIds = append(chartPermissionIds, strconv.Itoa(v.ChartPermissionId))
  524. }
  525. // 获取二级品种的权限,并建立映射
  526. chartPermissionList2, err := models.GetChartPermissionListByStrIds(chartPermissionIds)
  527. if err != nil {
  528. br.Msg = "获取研报二级品种权限失败"
  529. br.ErrMsg = "获取研报二级品种权限失败,Err:" + err.Error()
  530. return
  531. }
  532. chartPermissionViewMap2 := make(map[int]*models.ChartPermission)
  533. for _, v := range chartPermissionList2 {
  534. chartPermissionViewMap2[v.ChartPermissionId] = v
  535. }
  536. // 获取一级品种的权限,并建立映射
  537. chartPermissionList1, err := models.GetChildChartPermissionListById(0)
  538. if err != nil {
  539. br.Msg = "获取研报一级品种权限失败"
  540. br.ErrMsg = "获取研报一级品种权限失败,Err:" + err.Error()
  541. return
  542. }
  543. chartPermissionMap1 := make(map[int]*models.ChartPermission)
  544. for _, v := range chartPermissionList1 {
  545. chartPermissionMap1[v.ChartPermissionId] = v
  546. }
  547. // 组合数据
  548. finalList := make([]*models.ReportList, 0)
  549. for _, v := range list {
  550. var permissionNames []string
  551. for _, vv := range classifyToPermissionMap2[v.ClassifyIdSecond] {
  552. if item, ok := chartPermissionViewMap2[vv]; ok {
  553. parent2 := item.ParentId
  554. permissionNames = append(permissionNames, chartPermissionMap1[parent2].PermissionName)
  555. }
  556. }
  557. v.PermissionNames = utils.Unique(permissionNames)
  558. if len(v.PermissionNames) != 0 {
  559. finalList = append(finalList, v)
  560. }
  561. }
  562. resp := new(response.ReportListResp)
  563. resp.List = finalList
  564. br.Ret = 200
  565. br.Success = true
  566. br.Msg = "获取成功"
  567. br.Data = resp
  568. }
  569. // @Title 最新研报列表
  570. // @Description 最新研报列表
  571. // @Param PageSize query int true "每页数据条数"
  572. // @Param CurrentIndex query int true "当前页页码,从1开始"
  573. // @Success 200 {object} response.ReportListResp
  574. // @router /recent/list [get]
  575. func (this *ReportController) RecentList() {
  576. br := new(models.BaseResponse).Init()
  577. defer func() {
  578. this.Data["json"] = br
  579. this.ServeJSON()
  580. }()
  581. pageSize, _ := this.GetInt("PageSize")
  582. currentIndex, _ := this.GetInt("CurrentIndex")
  583. var startSize int
  584. if pageSize <= 0 {
  585. pageSize = utils.PageSize30
  586. }
  587. if currentIndex <= 0 {
  588. currentIndex = 1
  589. }
  590. startSize = utils.StartIndex(currentIndex, pageSize)
  591. total, err := models.GetReportRecentListCount()
  592. if err != nil {
  593. br.Msg = "获取数据失败"
  594. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  595. return
  596. }
  597. list, err := models.GetReportRecentList(startSize, pageSize)
  598. if err != nil {
  599. br.Msg = "获取失败"
  600. br.ErrMsg = "获取失败,Err:" + err.Error()
  601. return
  602. }
  603. classifyIds := make([]string, 0)
  604. for _, v := range list {
  605. classifyIds = append(classifyIds, strconv.Itoa(v.ClassifyIdSecond))
  606. }
  607. classifyIds = utils.Unique(classifyIds)
  608. // 获取二级分类和二级品种权限的映射
  609. chartPermissionMapping, err := models.GetChartPermissionListByClassifyStrIds(classifyIds)
  610. if err != nil {
  611. br.Msg = "获取研报权限失败"
  612. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  613. return
  614. }
  615. classifyToPermissionMap2 := make(map[int][]int)
  616. chartPermissionIds := make([]string, 0)
  617. for _, v := range chartPermissionMapping {
  618. classifyToPermissionMap2[v.ClassifyId] = append(classifyToPermissionMap2[v.ClassifyId], v.ChartPermissionId)
  619. chartPermissionIds = append(chartPermissionIds, strconv.Itoa(v.ChartPermissionId))
  620. }
  621. // 获取二级品种的权限,并建立映射
  622. chartPermissionList2, err := models.GetChartPermissionListByStrIds(chartPermissionIds)
  623. if err != nil {
  624. br.Msg = "获取研报二级品种权限失败"
  625. br.ErrMsg = "获取研报二级品种权限失败,Err:" + err.Error()
  626. return
  627. }
  628. chartPermissionViewMap2 := make(map[int]*models.ChartPermission)
  629. for _, v := range chartPermissionList2 {
  630. chartPermissionViewMap2[v.ChartPermissionId] = v
  631. }
  632. // 获取一级品种的权限,并建立映射
  633. chartPermissionList1, err := models.GetChildChartPermissionListById(0)
  634. if err != nil {
  635. br.Msg = "获取研报一级品种权限失败"
  636. br.ErrMsg = "获取研报一级品种权限失败,Err:" + err.Error()
  637. return
  638. }
  639. chartPermissionMap1 := make(map[int]*models.ChartPermission)
  640. for _, v := range chartPermissionList1 {
  641. chartPermissionMap1[v.ChartPermissionId] = v
  642. }
  643. // 组合数据
  644. finalList := make([]*models.ReportList, 0)
  645. for _, v := range list {
  646. var permissionNames []string
  647. for _, vv := range classifyToPermissionMap2[v.ClassifyIdSecond] {
  648. if item, ok := chartPermissionViewMap2[vv]; ok {
  649. parent2 := item.ParentId
  650. permissionNames = append(permissionNames, chartPermissionMap1[parent2].PermissionName)
  651. }
  652. }
  653. v.PermissionNames = utils.Unique(permissionNames)
  654. if len(v.PermissionNames) != 0 {
  655. finalList = append(finalList, v)
  656. }
  657. }
  658. page := paging.GetPaging(currentIndex, pageSize, total)
  659. resp := new(response.ReportListResp)
  660. resp.Paging = page
  661. resp.List = finalList
  662. br.Ret = 200
  663. br.Success = true
  664. br.Msg = "获取成功"
  665. br.Data = resp
  666. }
  667. // @Title 研报搜索
  668. // @Description 研报搜索
  669. // @Param PageSize query int true "每页数据条数"
  670. // @Param CurrentIndex query int true "当前页页码,从1开始"
  671. // @Param KeyWord query string true "关键字"
  672. // @Success 200 {object} response.ReportSearchResp
  673. // @router /search [get]
  674. func (this *ReportController) Search() {
  675. br := new(models.BaseResponse).Init()
  676. defer func() {
  677. this.Data["json"] = br
  678. this.ServeJSON()
  679. }()
  680. keyWord := this.GetString("KeyWord")
  681. pageSize, _ := this.GetInt("PageSize")
  682. currentIndex, _ := this.GetInt("CurrentIndex")
  683. if pageSize <= 0 {
  684. pageSize = utils.PageSize30
  685. }
  686. if currentIndex <= 0 {
  687. currentIndex = 1
  688. }
  689. if keyWord == "" {
  690. br.Msg = "请输入关键字"
  691. return
  692. }
  693. reportList, err, errMsg := services.SearchReport(keyWord, currentIndex, pageSize)
  694. if err != nil {
  695. br.Msg = "研报搜索失败"
  696. br.ErrMsg = errMsg + ",Err:" + err.Error()
  697. return
  698. }
  699. br.Data = reportList
  700. br.Msg = "查询成功"
  701. br.Ret = 200
  702. br.Success = true
  703. }
  704. // @Title List
  705. // @Description create users
  706. // @Param ChartPermissionId query int true "品种ID"
  707. // @Param Level query int true "品种层级"
  708. // @Param PageSize query int true "每页数据条数"
  709. // @Param CurrentIndex query int true "当前页页码,从1开始"
  710. // @Param RangeType query string true "范围类型,1-一天内,2-一周内,3-半年内"
  711. // @Param ClassifyId query int true "分类id"
  712. // @Success 200 {object} response.ReportListResp
  713. // @router /list [get]
  714. func (this *ReportNoAuthController) List() {
  715. br := new(models.BaseResponse).Init()
  716. defer func() {
  717. this.Data["json"] = br
  718. this.ServeJSON()
  719. }()
  720. pageSize, _ := this.GetInt("PageSize")
  721. currentIndex, _ := this.GetInt("CurrentIndex")
  722. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  723. level, _ := this.GetInt("Level")
  724. rangeType, _ := this.GetInt("RangeType")
  725. classifyId, _ := this.GetInt("ClassifyId")
  726. if chartPermissionId < 0 {
  727. br.Msg = "品种参数错误"
  728. return
  729. }
  730. var condition string
  731. switch rangeType {
  732. case 1:
  733. condition += ` AND DATE(modify_time)=DATE(NOW()) `
  734. case 2:
  735. condition += ` AND DATE(modify_time) BETWEEN DATE_SUB(NOW(),INTERVAL 1 WEEK) AND NOW() `
  736. case 3:
  737. condition += ` AND DATE(modify_time) BETWEEN DATE_SUB(NOW(),INTERVAL 6 MONTH) AND NOW() `
  738. }
  739. var startSize int
  740. if pageSize <= 0 {
  741. pageSize = utils.PageSize20
  742. }
  743. if currentIndex <= 0 {
  744. currentIndex = 1
  745. }
  746. startSize = utils.StartIndex(currentIndex, pageSize)
  747. classifyList, err := models.GetClassifyList()
  748. if err != nil {
  749. br.Msg = "获取数据失败"
  750. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  751. return
  752. }
  753. classifyMap := make(map[int]*models.ClassifyView)
  754. isHas := false
  755. for _, v := range classifyList {
  756. if v.Id == classifyId && classifyId != 0 {
  757. isHas = true
  758. }
  759. classifyMap[v.Id] = v
  760. }
  761. if !isHas && classifyId != 0 {
  762. br.Msg = "分类不存在"
  763. return
  764. }
  765. classifyIdMap := make(map[int]struct{})
  766. if classifyId > 0 {
  767. leafClassifyIds := getLeafClassifyIds(classifyMap, classifyId)
  768. for _, v := range leafClassifyIds {
  769. classifyIdMap[v] = struct{}{}
  770. }
  771. }
  772. var total int
  773. var reportList []*models.ReportPushView
  774. classifyFirstIds := make([]int, 0)
  775. classifySecondIds := make([]int, 0)
  776. classifyThirdIds := make([]int, 0)
  777. switch level {
  778. case 2:
  779. classifyIds, err := models.GetClassifyIdsListById(chartPermissionId)
  780. if err != nil {
  781. br.Msg = "获取报告列表失败"
  782. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  783. return
  784. }
  785. if len(classifyIds) == 0 {
  786. br.Msg = "该品种下没有绑定分类"
  787. br.ErrMsg = "获取数据失败,品种id:" + strconv.Itoa(chartPermissionId)
  788. return
  789. }
  790. classifyIds = utils.Unique(classifyIds)
  791. // 根据分类筛选报告
  792. var selectedClassifyId []int
  793. if classifyId > 0 {
  794. for _, v := range classifyIds {
  795. if _, ok := classifyIdMap[v]; ok {
  796. selectedClassifyId = append(selectedClassifyId, v)
  797. }
  798. }
  799. } else {
  800. selectedClassifyId = classifyIds
  801. }
  802. classifyList, err := models.GetClassifyListByIds(selectedClassifyId)
  803. if err != nil {
  804. br.Msg = "获取报告列表失败"
  805. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  806. return
  807. }
  808. for _, v := range classifyList {
  809. switch v.Level {
  810. case 1:
  811. classifyFirstIds = append(classifyFirstIds, v.Id)
  812. case 2:
  813. classifySecondIds = append(classifySecondIds, v.Id)
  814. case 3:
  815. classifyThirdIds = append(classifyThirdIds, v.Id)
  816. }
  817. }
  818. tmptotal, err := models.GetPushReportCountByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition)
  819. if err != nil {
  820. br.Msg = "获取数据失败"
  821. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  822. return
  823. }
  824. total = tmptotal
  825. tmpReportList, err := models.GetPushReportListByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition, startSize, pageSize)
  826. if err != nil {
  827. br.Msg = "获取报告列表失败"
  828. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  829. return
  830. }
  831. reportList = tmpReportList
  832. case 1:
  833. chartPermissionIds, err := models.GetChildChartPermissionIdsById(chartPermissionId)
  834. if err != nil {
  835. br.Msg = "获取报告列表失败"
  836. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  837. return
  838. }
  839. if len(chartPermissionIds) == 0 {
  840. br.Msg = "该品种下没有绑定分类"
  841. br.ErrMsg = "获取数据失败,品种id:" + strconv.Itoa(chartPermissionId)
  842. return
  843. }
  844. classifyIds, err := models.GetClassifyIdsListByIds(chartPermissionIds)
  845. if err != nil {
  846. br.Msg = "获取报告列表失败"
  847. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  848. return
  849. }
  850. if len(classifyIds) == 0 {
  851. br.Msg = "该品种下没有绑定分类"
  852. return
  853. }
  854. classifyIds = utils.Unique(classifyIds)
  855. // 根据分类筛选报告
  856. var selectedClassifyId []int
  857. if classifyId > 0 {
  858. for _, v := range classifyIds {
  859. if _, ok := classifyIdMap[v]; ok {
  860. selectedClassifyId = append(selectedClassifyId, v)
  861. }
  862. }
  863. } else {
  864. selectedClassifyId = classifyIds
  865. }
  866. classifyList, err := models.GetClassifyListByIds(selectedClassifyId)
  867. if err != nil {
  868. br.Msg = "获取报告列表失败"
  869. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  870. return
  871. }
  872. for _, v := range classifyList {
  873. switch v.Level {
  874. case 1:
  875. classifyFirstIds = append(classifyFirstIds, v.Id)
  876. case 2:
  877. classifySecondIds = append(classifySecondIds, v.Id)
  878. case 3:
  879. classifyThirdIds = append(classifyThirdIds, v.Id)
  880. }
  881. }
  882. tmptotal, err := models.GetPushReportCountByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition)
  883. if err != nil {
  884. br.Msg = "获取数据失败"
  885. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  886. return
  887. }
  888. total = tmptotal
  889. tmpReportList, err := models.GetPushReportListByClassifyIds(classifyFirstIds, classifySecondIds, classifyThirdIds, condition, startSize, pageSize)
  890. if err != nil {
  891. br.Msg = "获取报告列表失败"
  892. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  893. return
  894. }
  895. reportList = tmpReportList
  896. case 0:
  897. var selectedClassifyIds []int
  898. for k := range classifyIdMap {
  899. selectedClassifyIds = append(selectedClassifyIds, k)
  900. }
  901. tmptotal, err := models.GetPushReportCount(selectedClassifyIds, condition)
  902. if err != nil {
  903. br.Msg = "获取数据失败"
  904. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  905. return
  906. }
  907. total = tmptotal
  908. tmpReportList, err := models.GetPushReportListByPage(selectedClassifyIds, condition, startSize, pageSize)
  909. if err != nil {
  910. br.Msg = "获取报告列表失败"
  911. br.ErrMsg = "获取报告列表失败,Err:" + err.Error()
  912. return
  913. }
  914. reportList = tmpReportList
  915. default:
  916. br.Msg = "层级参数错误"
  917. return
  918. }
  919. page := paging.GetPaging(currentIndex, pageSize, total)
  920. resp := new(response.ReportPushListResp)
  921. resp.Paging = page
  922. resp.List = reportList
  923. br.Ret = 200
  924. br.Success = true
  925. br.Msg = "获取成功"
  926. br.Data = resp
  927. }
  928. // @Title 研报详情
  929. // @Description 研报详情接口
  930. // @Param ReportId query int true "报告id"
  931. // @Param UserId query int true "用户id"
  932. // @Success 200 {object} response.ReportDetailResp
  933. // @router /detail [get]
  934. func (this *ReportNoAuthController) Detail() {
  935. br := new(models.BaseResponse).Init()
  936. defer func() {
  937. this.Data["json"] = br
  938. this.ServeJSON()
  939. }()
  940. reportId, err := this.GetInt("ReportId")
  941. if err != nil {
  942. br.Msg = "参数获取失败"
  943. br.ErrMsg = "参数获取失败,Err:" + err.Error()
  944. return
  945. }
  946. if reportId <= 0 {
  947. br.Msg = "参数错误"
  948. br.ErrMsg = "参数错误,报告id小于等于0"
  949. return
  950. }
  951. report, err := models.GetReportById(reportId)
  952. if err != nil {
  953. if err.Error() == utils.ErrNoRow() {
  954. br.Ret = 200
  955. br.Data = new(response.ReportDetailResp)
  956. br.Success = true
  957. br.Msg = "该报告已删除或不存在"
  958. return
  959. }
  960. br.Msg = "该报告已删除"
  961. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  962. return
  963. }
  964. if report.HeadResourceId > 0 || report.EndResourceId > 0 {
  965. headImg, err := models.GetSmartReportResourceById(report.HeadResourceId)
  966. if err != nil && err.Error() != utils.ErrNoRow() {
  967. utils.FileLog.Warn("版头数据获取失败,Err:" + err.Error())
  968. }
  969. endImg, err := models.GetSmartReportResourceById(report.EndResourceId)
  970. if err != nil && err.Error() != utils.ErrNoRow() {
  971. utils.FileLog.Warn("版尾数据获取失败,Err:" + err.Error())
  972. }
  973. if headImg != nil {
  974. report.HeadResource = headImg
  975. }
  976. if endImg != nil {
  977. report.EndResource = endImg
  978. }
  979. }
  980. if report.HasChapter == 1 {
  981. chapterList, err := models.GetReportChapterList(report.Id)
  982. if err != nil {
  983. br.Msg = "该报告已删除"
  984. br.ErrMsg = "获取章节列表失败,Err:" + err.Error()
  985. return
  986. }
  987. for _, v := range chapterList {
  988. v.Content = html.UnescapeString(v.Content)
  989. }
  990. report.ChapterContent = chapterList
  991. }
  992. report.ContentSub = html.UnescapeString(report.ContentSub)
  993. report.Content = html.UnescapeString(report.Content)
  994. if report == nil {
  995. br.Msg = "报告不存在"
  996. return
  997. }
  998. resp := new(response.ReportDetailResp)
  999. resp.Report = report
  1000. br.Data = resp
  1001. br.Ret = 200
  1002. br.Success = true
  1003. br.Msg = "获取成功"
  1004. }