report.go 25 KB

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