report.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738
  1. package report
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_yb/global"
  7. "hongze/hongze_yb/models/response"
  8. "hongze/hongze_yb/models/response/purchase"
  9. "hongze/hongze_yb/models/tables/chart_permission"
  10. "hongze/hongze_yb/models/tables/chart_permission_chapter_mapping"
  11. "hongze/hongze_yb/models/tables/chart_permission_search_key_word_mapping"
  12. "hongze/hongze_yb/models/tables/daily_base_column"
  13. "hongze/hongze_yb/models/tables/rddp/classify"
  14. "hongze/hongze_yb/models/tables/rddp/report"
  15. "hongze/hongze_yb/models/tables/rddp/report_chapter"
  16. "hongze/hongze_yb/models/tables/rddp/report_chapter_ticker"
  17. "hongze/hongze_yb/models/tables/report_chapter_type"
  18. "hongze/hongze_yb/models/tables/report_chapter_type_permission"
  19. "hongze/hongze_yb/services/company"
  20. elasticService "hongze/hongze_yb/services/elastic"
  21. "hongze/hongze_yb/services/user"
  22. "hongze/hongze_yb/utils"
  23. "html"
  24. "sort"
  25. "strconv"
  26. "time"
  27. )
  28. func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*purchase.PurchaseListItem, err error) {
  29. var errMsg string
  30. defer func() {
  31. if err != nil {
  32. global.LOG.Critical(fmt.Sprintf("GetLatestClassReport: userId=%d, err:%s, errMsg:%s", userId, err.Error(), errMsg))
  33. }
  34. }()
  35. //获取所有分类信息
  36. classifys, err := classify.GetSimpleAll()
  37. if err != nil {
  38. errMsg = err.Error()
  39. err = errors.New("分类查询出错")
  40. return
  41. }
  42. classifyFirstIconMap := make(map[int]string)
  43. classifySecondNameMap := make(map[string]int)
  44. for _, v := range classifys{
  45. if v.ParentId == 0 {
  46. classifyFirstIconMap[v.Id] = v.YbIconUrl
  47. }else{
  48. classifySecondNameMap[v.ClassifyName] = v.Id
  49. }
  50. }
  51. //获取最新的晨报
  52. dayReport, err := report.GetLatestDay()
  53. if err != nil {
  54. errMsg = err.Error()
  55. err = errors.New("晨报查询出错")
  56. return
  57. }
  58. //获取最新的有权限的周报
  59. typeIds, err := report_chapter_type.GetEffectTypeID()
  60. if err != nil {
  61. errMsg = err.Error()
  62. err = errors.New("晨报查询出错")
  63. return
  64. }
  65. weekReport, err := GetLatestWeek(permissionIds, typeIds)
  66. if err != nil {
  67. errMsg = err.Error()
  68. err = errors.New("周报查询出错")
  69. return
  70. }
  71. // 有权限的二级分类
  72. var reports []*report.Report
  73. var classifyIdSeconds []int
  74. // 获取晨报和周报以外的其他报告
  75. // 获取有权限的二级分类
  76. chartPermissions, err := chart_permission_search_key_word_mapping.GetChartPermissionByFrom("rddp")
  77. if err != nil {
  78. errMsg = err.Error()
  79. err = errors.New("分类权限查询出错")
  80. return
  81. }
  82. if len(chartPermissions) > 0 {
  83. for _, v := range chartPermissions {
  84. for _, myPerId := range permissionIds {
  85. if v.ChartPermissionId == myPerId {
  86. if classifyNameSecond, ok := classifySecondNameMap[v.KeyWord]; ok{
  87. classifyIdSeconds = append(classifyIdSeconds, classifyNameSecond)
  88. }
  89. break
  90. }
  91. }
  92. }
  93. }
  94. reports, err = report.GetLatestClassReportsByClassifyIdSeconds(classifyIdSeconds)
  95. if err != nil {
  96. errMsg = err.Error()
  97. err = errors.New("二级分类最新报告查询出错")
  98. return
  99. }
  100. if dayReport.Id > 0 {
  101. reports = append(reports, dayReport)
  102. }
  103. if weekReport != nil {
  104. reports = append(reports, weekReport)
  105. }
  106. //获取未读数
  107. unReadItem, tErr := GetUnRead(classifyIdSeconds, userId)
  108. if tErr != nil {
  109. err = tErr
  110. return
  111. }
  112. if len(reports) > 0 {
  113. for _, v := range reports {
  114. temp := new(purchase.PurchaseListItem)
  115. temp.ReportId = v.Id
  116. temp.ClassifyIdFirst = v.ClassifyIdFirst
  117. temp.ClassifyNameFirst = v.ClassifyNameFirst
  118. temp.Stage = v.Stage
  119. temp.Title = v.Title
  120. temp.ClassifyIdSecond = v.ClassifyIdSecond
  121. temp.ClassifyNameSecond = v.ClassifyNameSecond
  122. if imgUrl, ok := classifyFirstIconMap[temp.ClassifyIdFirst]; ok {
  123. temp.ImgUrl = imgUrl
  124. }
  125. if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" { //晨报或者周报,查询最新的章节信息
  126. temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
  127. }else{
  128. if temp.ClassifyIdSecond > 0 { //包含二级分类
  129. temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", temp.Stage, temp.ClassifyNameSecond, temp.ClassifyNameFirst)
  130. } else { //无二级分类
  131. temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.ClassifyNameFirst)
  132. }
  133. }
  134. temp.Time = v.PublishTime
  135. temp.Unread = unReadItem[temp.ClassifyNameFirst]
  136. purchaseList = append(purchaseList, temp)
  137. }
  138. }
  139. return
  140. }
  141. // GetPurchaseDetail 已购详情页面
  142. func GetPurchaseDetail(permissionIds []int, userId uint64, classifyIdFirst int, pageIndex, pageSize int) (ret *purchase.DetailResp, err error) {
  143. var errMsg string
  144. defer func() {
  145. if err != nil {
  146. global.LOG.Critical(fmt.Sprintf("GetPurchaseDetail: userId=%d, err:%s, errMsg:%s", userId, err.Error(), errMsg))
  147. }
  148. }()
  149. var reports []*report.Report
  150. var weekReportIds []int
  151. classifyInfo, err := classify.GetByClassifyId(classifyIdFirst)
  152. if err != nil {
  153. errMsg = err.Error()
  154. err = errors.New("分类查询出错")
  155. return
  156. }
  157. if classifyInfo.Id == 0 {
  158. err = errors.New("分类不存在")
  159. return
  160. }
  161. classifyNameFirst := classifyInfo.ClassifyName
  162. offset := (pageIndex - 1) * pageSize
  163. var total int64
  164. var classifyIdSeconds []int
  165. if classifyNameFirst == "晨报" {
  166. //分类获取
  167. reports, err = report.GetListByClassifyIdFirst(classifyIdFirst, offset, pageSize)
  168. if err != nil {
  169. errMsg = err.Error()
  170. err = errors.New("晨报查询出错")
  171. return
  172. }
  173. total, err = report.GetListCountByClassifyIdFirst(classifyIdFirst)
  174. if err != nil {
  175. errMsg = err.Error()
  176. err = errors.New("查询报告总数出错")
  177. return
  178. }
  179. }else {
  180. if classifyNameFirst == "周报" {
  181. newTypeIds, tErr := GetWeekTypeIdsByPermissionIds(permissionIds,[]int{})
  182. if tErr != nil {
  183. return
  184. }
  185. weekReportIds, err = report_chapter.GetReportIdsByTypeIdsAndClass(newTypeIds, classifyNameFirst)
  186. //分类获取
  187. reports, err = report.GetListByIDsAndClassifyIdFirst(weekReportIds, classifyIdFirst, offset, pageSize)
  188. if err != nil {
  189. return
  190. }
  191. total, err = report.GetListCountByIDsAndClassifyIdFirst(weekReportIds, classifyIdFirst)
  192. if err != nil {
  193. errMsg = err.Error()
  194. err = errors.New("查询报告总数出错")
  195. return
  196. }
  197. }else{
  198. //获取有权限的二级分类
  199. var classifyNameSeconds []string
  200. chartPermissions, tErr := chart_permission_search_key_word_mapping.GetChartPermissionByFrom("rddp")
  201. if tErr != nil {
  202. errMsg = tErr.Error()
  203. err = errors.New("分类权限查询出错")
  204. return
  205. }
  206. if len(chartPermissions) > 0 {
  207. for _, v := range chartPermissions {
  208. for _, myPerId := range permissionIds {
  209. if v.ChartPermissionId == myPerId {
  210. classifyNameSeconds = append(classifyNameSeconds, v.KeyWord)
  211. break
  212. }
  213. }
  214. }
  215. }
  216. //获取所有二级分类的id
  217. classifyIdSeconds, tErr = classify.GetIdsByClassifyNameAndParentId(classifyNameSeconds, classifyIdFirst)
  218. if tErr != nil {
  219. errMsg = tErr.Error()
  220. err = errors.New("二级分类查询出错")
  221. return
  222. }
  223. if len(classifyIdSeconds) > 0 {
  224. //分类获取
  225. reports, err = report.GetListByClassifyIdSecondsAndClassifyIdFirst(classifyIdSeconds, classifyIdFirst, offset, pageSize)
  226. if err != nil {
  227. return
  228. }
  229. total, err = report.GetListCountByClassifyIdSecondsAndClassifyIdFirst(classifyIdSeconds, classifyIdFirst)
  230. if err != nil {
  231. errMsg = err.Error()
  232. err = errors.New("查询报告总数出错")
  233. return
  234. }
  235. }
  236. }
  237. }
  238. var list []*purchase.Detail
  239. ret = new(purchase.DetailResp)
  240. if len(reports) > 0 {
  241. var viewReportIds []int
  242. for _, v := range reports {
  243. viewReportIds = append(viewReportIds, v.Id)
  244. temp := new(purchase.Detail)
  245. temp.ReportId = v.Id
  246. temp.ClassifyIdFirst = v.ClassifyIdFirst
  247. temp.ClassifyNameFirst = v.ClassifyNameFirst
  248. temp.Title = v.Title
  249. temp.ClassifyIdSecond = v.ClassifyIdSecond
  250. temp.ClassifyNameSecond = v.ClassifyNameSecond
  251. temp.Stage = v.Stage
  252. // TODO 背景图
  253. temp.ImgUrl = classifyInfo.YbBgUrl
  254. if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" { //晨报或者周报,查询最新的章节信息
  255. temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
  256. temp.TopName = temp.Title
  257. }else{
  258. if temp.ClassifyIdSecond > 0 { //包含二级分类
  259. temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", temp.Stage, temp.ClassifyNameSecond, temp.ClassifyNameFirst)
  260. temp.TopName = temp.ClassifyNameSecond
  261. } else { //无二级分类
  262. temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.ClassifyNameFirst)
  263. temp.TopName = temp.ClassifyNameFirst
  264. }
  265. }
  266. temp.Time = v.PublishTime
  267. list = append(list, temp)
  268. }
  269. }
  270. ret.List = list
  271. ret.Paging = response.GetPaging(pageIndex, pageSize, int(total))
  272. _, tErr := BatchInsertReportView(weekReportIds, userId, classifyNameFirst, classifyIdSeconds)
  273. if tErr != nil {
  274. err = tErr
  275. return
  276. }
  277. return
  278. }
  279. // 获取报告详情
  280. func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail response.ReportDetail, err error) {
  281. var errMsg string
  282. defer func() {
  283. if err != nil {
  284. global.LOG.Critical(fmt.Sprintf("GetReportDetail: userId=%d, err:%s, errMsg:%s", userinfo.UserID, err.Error(), errMsg))
  285. }
  286. }()
  287. reportInfo, err := report.GetByReportId(reportId)
  288. if err != nil {
  289. errMsg = err.Error()
  290. err = errors.New("报告查询出错")
  291. return
  292. }
  293. if reportInfo.Id == 0 {
  294. err = errors.New("报告不存在")
  295. return
  296. }
  297. //判断权限
  298. var authOk bool
  299. var permissionCheckInfo response.PermissionCheckInfo
  300. if reportInfo.ClassifyNameFirst == "晨报"{
  301. authOk, permissionCheckInfo, err = CheckDayReportPermission(userinfo)
  302. }else if reportInfo.ClassifyNameFirst == "周报"{
  303. authOk, permissionCheckInfo, err = CheckWeekReportPermission(userinfo, reportId)
  304. }else{
  305. authOk, permissionCheckInfo, err = CheckReportPermission(userinfo, reportId)
  306. }
  307. if err != nil {
  308. return
  309. }
  310. reportItem := new(response.ReportItem)
  311. reportItem.ReportId = reportInfo.Id
  312. reportItem.Title = reportInfo.Title
  313. reportItem.PublishTime = reportInfo.PublishTime
  314. reportItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
  315. reportItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
  316. reportItem.Stage = reportInfo.Stage
  317. reportItem.Abstract = reportInfo.Abstract
  318. reportItem.ContentSub = html.UnescapeString(reportInfo.ContentSub)
  319. reportItem.Frequency = reportInfo.Frequency
  320. reportItem.VideoName = reportInfo.VideoName
  321. reportItem.VideoPlaySeconds = reportInfo.VideoPlaySeconds
  322. reportItem.Author = reportInfo.Author
  323. var reportTypeList []*response.ReportChapterListItem
  324. if (reportInfo.ClassifyNameFirst == "晨报" || reportInfo.ClassifyNameFirst == "周报") {
  325. //(晨报和周报的banner图)
  326. if reportInfo.ClassifyNameFirst == "晨报" {
  327. reportItem.BannerUrl = utils.ALIYUN_YBIMG_HOST + "report_banner_day.jpg"
  328. } else {
  329. reportItem.BannerUrl = utils.ALIYUN_YBIMG_HOST + "report_banner_week.jpg"
  330. }
  331. if authOk {
  332. reportTypeList, err = GetChapterListByReport(reportInfo.ClassifyNameFirst, reportInfo.Id, userinfo.CompanyID)
  333. if err != nil {
  334. return
  335. }
  336. }
  337. }
  338. //如果有权限则展示content
  339. if authOk {
  340. _ = AddViewRecord(userinfo, reportInfo.Id, reportInfo.ClassifyNameFirst, 0)
  341. reportItem.Content = html.UnescapeString(reportInfo.Content)
  342. reportItem.VideoUrl = reportInfo.VideoUrl
  343. }
  344. reportDetail.ReportInfo = reportItem
  345. reportDetail.ReportChapterList = reportTypeList
  346. reportDetail.PermissionCheck = &permissionCheckInfo
  347. reportDetail.AuthOk = authOk
  348. return
  349. }
  350. // CheckReportPermission 验证用户查看报告的权限
  351. func CheckReportPermission(userInfo user.UserInfo, reportId int) (authOk bool, permissionCheckInfo response.PermissionCheckInfo, err error) {
  352. permissionIds, err := chart_permission_chapter_mapping.GetPermissionIdsByReportId(reportId, "rddp")
  353. if err != nil && err != utils.ErrNoRow {
  354. return
  355. }
  356. authOk, permissionCheckInfo, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), permissionIds)
  357. return
  358. }
  359. // GetReportList 获取报告列表
  360. func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classifyIdSecond, pageIndex, pageSize int) (ret *response.ReportList, err error) {
  361. var errMsg string
  362. defer func() {
  363. if err != nil {
  364. global.LOG.Critical(fmt.Sprintf("GetReportList: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  365. }
  366. }()
  367. var condition string
  368. pars := make([]interface{}, 0)
  369. classifyParent, err := classify.GetByClassifyId(classifyIdFirst)
  370. if err != nil {
  371. errMsg = err.Error()
  372. err = errors.New("分类查询出错")
  373. return
  374. }
  375. if classifyParent.Id == 0 {
  376. err = errors.New("该分类不存在")
  377. return
  378. }
  379. condition = `classify_id_first = ?`
  380. pars = append(pars, classifyIdFirst)
  381. permissionMap := make(map[string][]int)
  382. checkPermissionMap := make(map[string]bool)
  383. var reportImgUrl string
  384. reportImgMap := make(map[string]string)
  385. if classifyIdSecond > 0 {
  386. classifyInfo, tErr := classify.GetByClassifyId(classifyIdSecond)
  387. if tErr != nil {
  388. errMsg = tErr.Error()
  389. err = errors.New("分类查询出错")
  390. return
  391. }
  392. if classifyInfo.Id == 0 {
  393. err = errors.New("该二级分类不存在")
  394. return
  395. }
  396. condition += " AND classify_id_second = ?"
  397. pars = append(pars, classifyIdSecond)
  398. //查询二级分类对应的权限
  399. permissionIds, tErr := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyInfo.ClassifyName)
  400. if tErr != nil {
  401. errMsg = tErr.Error()
  402. err = errors.New("分类权限查询出错")
  403. return
  404. }
  405. permissionMap[classifyInfo.ClassifyName] = permissionIds
  406. reportImgUrl = classifyInfo.ReportImgUrl
  407. }else{
  408. chartPermissions, tErr := chart_permission_search_key_word_mapping.GetChartPermissionByFrom("rddp")
  409. if tErr != nil {
  410. errMsg = tErr.Error()
  411. err = errors.New("分类权限查询出错")
  412. return
  413. }
  414. if len(chartPermissions) > 0 {
  415. for _, v := range chartPermissions {
  416. permissionMap[v.KeyWord] = append(permissionMap[v.KeyWord], v.ChartPermissionId)
  417. }
  418. }
  419. //获取二级分类的所有头像
  420. classifyList, tErr := classify.GetListByPid(classifyIdFirst)
  421. if tErr != nil {
  422. errMsg = tErr.Error()
  423. err = errors.New("二级分类查询出错")
  424. return
  425. }
  426. for _, v := range classifyList {
  427. reportImgMap[v.ClassifyName] = v.ReportImgUrl
  428. }
  429. }
  430. // 获取有效的权限id列表
  431. validPermissionIdList, err := company.GetValidPermissionIdListByCompany2ProductId(user.CompanyID, 1)
  432. if err != nil && err != utils.ErrNoRow {
  433. errMsg = err.Error()
  434. err = errors.New("查询分类出错")
  435. return
  436. }
  437. if len(validPermissionIdList) > 0 {
  438. for classifyName, perIds := range permissionMap {
  439. checkLoop:
  440. for _, checkId := range perIds{
  441. for _, validPerid := range validPermissionIdList {
  442. if checkId == validPerid {
  443. checkPermissionMap[classifyName] = true
  444. break checkLoop
  445. }
  446. }
  447. }
  448. }
  449. }
  450. if keyWord != "" {
  451. condition += ` AND (title LIKE ? OR abstract LIKE ?) `
  452. pars = append(pars, "%" + keyWord + "%")
  453. pars = append(pars, "%" + keyWord + "%")
  454. }
  455. offset := (pageIndex - 1) * pageSize
  456. list, err := report.GetReportList(condition, pars, offset, pageSize)
  457. if err != nil {
  458. errMsg = err.Error()
  459. err = errors.New("报告查询出错")
  460. return
  461. }
  462. total, err := report.GetReportListCount(condition, pars)
  463. if err != nil {
  464. errMsg = err.Error()
  465. err = errors.New("查询报告总数出错")
  466. return
  467. }
  468. var reportList []*response.ReportListItem
  469. if len(list) > 0 {
  470. for _, reportInfo := range list {
  471. reportItem := new(response.ReportListItem)
  472. reportItem.ReportId = reportInfo.Id
  473. reportItem.Title = reportInfo.Title
  474. reportItem.PublishTime = reportInfo.PublishTime
  475. reportItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
  476. reportItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
  477. reportItem.ClassifyIdFirst = reportInfo.ClassifyIdFirst
  478. reportItem.ClassifyIdSecond = reportInfo.ClassifyIdSecond
  479. reportItem.Stage = reportInfo.Stage
  480. reportItem.Abstract = reportInfo.Abstract
  481. reportItem.Author = reportInfo.Author
  482. if reportImgUrl != ""{
  483. reportItem.ReportImgUrl = reportImgUrl
  484. }else if url,ok := reportImgMap[reportInfo.ClassifyNameSecond]; ok {
  485. reportItem.ReportImgUrl = url
  486. }
  487. if authOk,ok := checkPermissionMap[reportInfo.ClassifyNameSecond]; ok && authOk {
  488. reportItem.VideoUrl = reportInfo.VideoUrl
  489. reportItem.AuthOk = authOk
  490. }
  491. reportList = append(reportList, reportItem)
  492. }
  493. }
  494. ret = new(response.ReportList)
  495. ret.List = reportList
  496. ret.Paging = response.GetPaging(pageIndex, pageSize, int(total))
  497. return
  498. }
  499. // GetCollectReportList 首页展示报告汇总列表
  500. func GetCollectReportList(user user.UserInfo, chartPermissionId, pageIndex, pageSize int) (ret *response.ReportCollectResp, err error) {
  501. var errMsg string
  502. defer func() {
  503. if err != nil {
  504. global.LOG.Critical(fmt.Sprintf("GetCollectReportList: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  505. }
  506. }()
  507. // 查询权限的基本信息
  508. permissionInfo, err := chart_permission.GetByChartPermissionId(chartPermissionId)
  509. if err != nil {
  510. errMsg = err.Error()
  511. err = errors.New("查询权限出错")
  512. return
  513. }
  514. if permissionInfo.ChartPermissionID == 0 {
  515. err = errors.New("权限不存在")
  516. return
  517. }
  518. // 除了晨报和周报以外的其他报告
  519. classifyNames, err := chart_permission_search_key_word_mapping.GetKeyWordsByChartPermissionId(chartPermissionId, "rddp")
  520. if err != nil {
  521. errMsg = err.Error()
  522. err = errors.New("查询权限对应的分类出错")
  523. return
  524. }
  525. var classifySecondIds []int
  526. if len(classifyNames) > 0 {
  527. classifySecondIds, err = classify.GetSecondIdsByClassifyNames(classifyNames)
  528. if err != nil {
  529. errMsg = err.Error()
  530. err = errors.New("查询分类出错")
  531. return
  532. }
  533. }
  534. // 查询晨报和周报相对应的章节ID
  535. reportChapterTypeIds, err := report_chapter_type_permission.GetTypeIdsByChartPermissionId(chartPermissionId)
  536. if err != nil {
  537. errMsg = err.Error()
  538. err = errors.New("查询权限对应的章节出错")
  539. return
  540. }
  541. var reportList []*response.ReportCollectListItem
  542. list := response.ReportCollectListResp{}
  543. var total int64
  544. if len(reportChapterTypeIds) > 0 || len(classifySecondIds) > 0 {
  545. offset := (pageIndex - 1) * pageSize
  546. reportList, err = report.GetReportCollectListByPermission(classifySecondIds, reportChapterTypeIds, offset, pageSize)
  547. if err != nil {
  548. errMsg = err.Error()
  549. err = errors.New("查询报告信息出错")
  550. return
  551. }
  552. listMap := make(map[string]*response.ReportCollectList)
  553. for _, v := range reportList {
  554. v.ContentSub = html.UnescapeString(v.ContentSub)
  555. if _, ok := listMap[v.PublishTime.Format("2006-01-02")]; !ok {
  556. temp := new(response.ReportCollectList)
  557. temp.Date = v.PublishTime.Format("2006-01-02")
  558. listMap[v.PublishTime.Format("2006-01-02")] = temp
  559. }
  560. listMap[v.PublishTime.Format("2006-01-02")].SubList = append(listMap[v.PublishTime.Format("2006-01-02")].SubList, v)
  561. }
  562. for _, v := range listMap {
  563. list = append(list, v)
  564. }
  565. total, err = report.GetReportCollectCountByPermission(classifySecondIds, reportChapterTypeIds)
  566. if err != nil {
  567. errMsg = err.Error()
  568. err = errors.New("查询报告总数出错")
  569. return
  570. }
  571. if len(list) > 0 {
  572. sort.Sort(list)
  573. }
  574. }
  575. ret = new(response.ReportCollectResp)
  576. ret.List = list
  577. ret.Paging = response.GetPaging(pageIndex, pageSize, int(total))
  578. return
  579. }
  580. func SearchReport(user user.UserInfo, keyWord string, pageIndex, pageSize int)(ret *response.ReportSearchResp, err error) {
  581. var errMsg string
  582. defer func() {
  583. if err != nil {
  584. global.LOG.Critical(fmt.Sprintf("SearchReport: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  585. }
  586. }()
  587. searchResp, total, err := elasticService.SearchReport(keyWord, pageIndex, pageSize)
  588. if err != nil {
  589. errMsg = err.Error()
  590. err = errors.New("查询失败")
  591. return
  592. }
  593. var reportList []*response.ReportCollectListItem
  594. if searchResp.Hits != nil {
  595. for _, v := range searchResp.Hits.Hits {
  596. temp := new(response.ReportCollectListItem)
  597. itemJson, tmpErr := v.Source.MarshalJSON()
  598. if tmpErr != nil {
  599. errMsg = tmpErr.Error()
  600. err = errors.New("解析出错")
  601. return
  602. }
  603. reportItem := new(response.EsReportItem)
  604. tmpErr = json.Unmarshal(itemJson, &reportItem)
  605. if tmpErr != nil {
  606. errMsg = tmpErr.Error()
  607. err = errors.New("解析json出错")
  608. return
  609. }
  610. temp.ReportId = reportItem.ReportId
  611. temp.ClassifyIdFirst = reportItem.ClassifyIdFirst
  612. temp.ClassifyNameFirst = reportItem.ClassifyNameFirst
  613. temp.ClassifyIdSecond = reportItem.ClassifyIdSecond
  614. temp.ClassifyNameSecond = reportItem.ClassifyNameSecond
  615. temp.Title = reportItem.Title
  616. temp.ContentSub = html.UnescapeString(html.UnescapeString(reportItem.BodyContent))
  617. temp.PublishTime, err = time.Parse("2006-01-02 15:04:05", reportItem.PublishTime)
  618. fmt.Println(*reportItem)
  619. if len(v.Highlight["Title"]) > 0 {
  620. temp.Title = v.Highlight["Title"][0]
  621. }
  622. if len(v.Highlight["BodyContent"]) > 0 {
  623. temp.ContentSub = html.UnescapeString(html.UnescapeString(v.Highlight["BodyContent"][0]))
  624. }
  625. if len(v.Highlight["Categories"]) > 0 {
  626. if temp.ClassifyNameSecond != "" {
  627. temp.ClassifyNameSecond = "<span style=\"color:#efefef\">"+temp.ClassifyNameSecond+"</span>"
  628. }
  629. if temp.ClassifyNameFirst != "" {
  630. temp.ClassifyNameFirst = "<span style=\"color:#efefef\">"+temp.ClassifyNameFirst+"</span>"
  631. }
  632. }
  633. reportList = append(reportList, temp)
  634. }
  635. }
  636. ret = new(response.ReportSearchResp)
  637. ret.List = reportList
  638. ret.Paging = response.GetPaging(pageIndex, pageSize, int(total))
  639. return
  640. }
  641. // GetTickerData 获取指标数据
  642. func GetTickerData(user user.UserInfo, reportChapterId int) (list []*response.TickerDataItem, err error) {
  643. var errMsg string
  644. defer func() {
  645. if err != nil {
  646. global.LOG.Critical(fmt.Sprintf("GetTickerData: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  647. }
  648. }()
  649. //查询章节类型
  650. chapter, err := report_chapter.GetTypeIdById(reportChapterId)
  651. if err != nil {
  652. errMsg = err.Error()
  653. err = errors.New("查询章节失败")
  654. return
  655. }
  656. if chapter.ReportChapterId == 0 {
  657. err = errors.New("章节不存在或者未发布")
  658. return
  659. }
  660. tickers, err := report_chapter_ticker.GetTickerByChapterId(reportChapterId)
  661. if err != nil {
  662. errMsg = err.Error()
  663. err = errors.New("查询章节指标失败")
  664. return
  665. }
  666. if len(tickers) > 0 {
  667. var tickerNames []string
  668. for _, v := range tickers {
  669. tickerNames = append(tickerNames, v.Ticker)
  670. }
  671. var dataList []*response.TickerDataItem
  672. if chapter.TypeId == 17 {
  673. dataList, err = daily_base_column.GetDataByBaseColumnTickers17(tickerNames)
  674. }else{
  675. dataList, err = daily_base_column.GetDataByBaseColumnTickers(tickerNames)
  676. }
  677. if err != nil {
  678. errMsg = err.Error()
  679. err = errors.New("查询指标数据失败")
  680. return
  681. }
  682. if len(dataList) >= 0 {
  683. for _, v := range dataList {
  684. temp := new(response.TickerDataItem)
  685. temp.BaseColumnName = v.BaseColumnName
  686. temp.Ticker = v.Ticker
  687. temp.Date = v.Date
  688. temp.TickerValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f",v.TickerValue), 2)
  689. temp.LastValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f",v.LastValue), 2)
  690. temp.MmValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", v.MmValue), 2)
  691. temp.DdValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", v.DdValue), 2)
  692. temp.WwValue, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", v.WwValue), 2)
  693. list = append(list, temp)
  694. }
  695. }
  696. }
  697. return
  698. }