report.go 26 KB

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