123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- package report
- import (
- "errors"
- "fmt"
- "hongze/hongze_yb/global"
- "hongze/hongze_yb/models/response"
- "hongze/hongze_yb/models/response/purchase"
- "hongze/hongze_yb/models/tables/chart_permission_chapter_mapping"
- "hongze/hongze_yb/models/tables/rddp/report"
- "hongze/hongze_yb/models/tables/rddp/report_chapter"
- "hongze/hongze_yb/models/tables/report_chapter_type"
- "hongze/hongze_yb/services/company"
- "hongze/hongze_yb/services/user"
- "hongze/hongze_yb/utils"
- "log"
- )
- func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*purchase.PurchaseListItem, err error) {
- //获取所有和权限绑定的报告
- reportIds, err := GetReportIdsByPermissionIds(permissionIds)
- if err != nil {
- return
- }
- typeIds, tErr := report_chapter_type.GetEffectTypeID()
- if tErr != nil {
- err = tErr
- return
- }
- //获取最新的晨报
- dayReport, err := report.GetLatestDay()
- if err != nil {
- if err == utils.ErrNoRow {
- dayReport = nil
- }else{
- return
- }
- }
- //获取最新的有权限的周报
- weekReport, err := GetLatestWeek(permissionIds, typeIds)
- if err != nil {
- return
- }
- var reports []*report.Report
- if len(reportIds) > 0 {
- reports, err = report.GetLatestClassReportsByIDs(reportIds)
- if err != nil {
- return
- }
- }
- if dayReport != nil {
- reports = append(reports, dayReport)
- }
- if weekReport != nil {
- reports = append(reports, weekReport)
- }
- //获取未读数
- unReadItem, tErr := GetUnRead(reportIds, userId)
- if tErr != nil {
- err = tErr
- return
- }
- if len(reports) > 0 {
- for _, v := range reports {
- temp := new(purchase.PurchaseListItem)
- temp.ReportId = v.Id
- temp.ClassifyIdFirst = v.ClassifyIdFirst
- temp.ClassifyNameFirst = v.ClassifyNameFirst
- temp.Stage = v.Stage
- temp.Title = v.Title
- temp.ClassifyIdSecond = v.ClassifyIdSecond
- temp.ClassifyNameSecond = v.ClassifyNameSecond
- if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" { //晨报或者周报,查询最新的章节信息
- temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
- }else{
- if temp.ClassifyIdSecond > 0 { //包含二级分类
- temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", temp.Stage, temp.ClassifyNameSecond, temp.ClassifyNameFirst)
- } else { //无二级分类
- temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.ClassifyNameFirst)
- }
- }
- temp.Time = v.PublishTime
- temp.Unread = unReadItem[temp.ClassifyNameFirst]
- purchaseList = append(purchaseList, temp)
- }
- }
- return
- }
- // GetReportIdsByPermissionIds 获取所有和权限绑定的报告
- func GetReportIdsByPermissionIds(permissionIds []int) (reportIds []int, err error) {
- reportIds, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(permissionIds, "rddp")
- return
- }
- // GetListByClassName 根据分类类型,分页获取报告
- func GetListByClassName(reportIds []int, className string, offset, limit int ) (list []*report.Report, err error) {
- list, err = report.GetListByIDsAndClassID(reportIds, className, offset, limit)
- return
- }
- // GetPurchaseDetail 已购详情页面
- func GetPurchaseDetail(permissionIds []int, userId uint64, classifyNameFirst string, offset, pageLimit int) (list []*purchase.Detail, err error) {
- var reports []*report.Report
- var reportIds []int
- if classifyNameFirst == "晨报" {
- //分类获取
- reports, err = report.GetListByClass(classifyNameFirst, offset, pageLimit)
- if err != nil {
- return
- }
- for _, v := range reports {
- reportIds = append(reportIds, v.Id)
- }
- }else {
- if classifyNameFirst == "周报" {
- newTypeIds, tErr := GetWeekTypeIdsByPermissionIds(permissionIds,[]int{})
- if tErr != nil {
- return
- }
- reportIds, err = report_chapter.GetReportIdsByTypeIdsAndClass(newTypeIds, classifyNameFirst)
- } else {
- reportIds, err = GetReportIdsByPermissionIds(permissionIds)
- if err != nil {
- return
- }
- }
- if len(reportIds) > 0 {
- //分类获取
- reports, err = GetListByClassName(reportIds, classifyNameFirst, offset, pageLimit)
- if err != nil {
- return
- }
- }
- }
- if len(reports) > 0 {
- var viewReportIds []int
- for _, v := range reports {
- viewReportIds = append(viewReportIds, v.Id)
- temp := new(purchase.Detail)
- temp.ReportId = v.Id
- temp.ClassifyIdFirst = v.ClassifyIdFirst
- temp.ClassifyNameFirst = v.ClassifyNameFirst
- temp.Title = v.Title
- temp.ClassifyIdSecond = v.ClassifyIdSecond
- temp.ClassifyNameSecond = v.ClassifyNameSecond
- if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" { //晨报或者周报,查询最新的章节信息
- temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title)
- temp.TopName = temp.Title
- }else{
- if temp.ClassifyIdSecond > 0 { //包含二级分类
- temp.Content = fmt.Sprintf("【第%d期|FICC| %s】%s", temp.Stage, temp.ClassifyNameSecond, temp.ClassifyNameFirst)
- temp.TopName = temp.ClassifyNameSecond
- } else { //无二级分类
- temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.ClassifyNameFirst)
- temp.TopName = temp.ClassifyNameFirst
- }
- }
- temp.Time = v.PublishTime
- list = append(list, temp)
- }
- }
- num, tErr := BatchInsertReportView(reportIds, userId, classifyNameFirst)
- log.Printf("新增报告浏览记录:%d", num)
- if tErr != nil {
- err = tErr
- return
- }
- return
- }
- // 获取报告详情
- func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail response.ReportDetail, err error) {
- var errMsg string
- defer func() {
- if err != nil {
- global.LOG.Critical(fmt.Sprintf("GetReportDetail: userId=%d, err:%s, errMsg:%s", userinfo.UserID, err.Error(), errMsg))
- }
- }()
- reportInfo, err := report.GetByReportId(reportId)
- if err != nil {
- errMsg = err.Error()
- err = errors.New("报告查询出错")
- return
- }
- if reportInfo.Id == 0 {
- err = errors.New("报告不存在")
- return
- }
- //判断权限
- var authOk bool
- var permissionCheckInfo company.PermissionCheckInfo
- if reportInfo.ClassifyNameFirst == "晨报"{
- authOk, permissionCheckInfo, err = CheckDayReportPermission(userinfo)
- }else if reportInfo.ClassifyNameFirst == "周报"{
- authOk, permissionCheckInfo, err = CheckWeekReportPermission(userinfo, reportId)
- }else{
- authOk, permissionCheckInfo, err = CheckReportPermission(userinfo, reportId)
- }
- if err != nil {
- return
- }
- reportItem := new(response.ReportItem)
- reportItem.ReportId = reportInfo.Id
- reportItem.Title = reportInfo.Title
- reportItem.PublishTime = reportInfo.PublishTime
- reportItem.ClassifyNameFirst = reportInfo.ClassifyNameFirst
- reportItem.ClassifyNameSecond = reportInfo.ClassifyNameSecond
- reportItem.Stage = reportInfo.Stage
- reportItem.Abstract = reportInfo.Abstract
- reportItem.ContentSub = reportInfo.ContentSub
- reportItem.Frequency = reportInfo.Frequency
- reportItem.VideoName = reportInfo.VideoName
- reportItem.VideoPlaySeconds = reportInfo.VideoPlaySeconds
- reportItem.Author = reportInfo.Author
- var reportTypeList []*response.ReportChapterListItem
- if (reportInfo.ClassifyNameFirst == "晨报" || reportInfo.ClassifyNameFirst == "周报") && authOk {
- reportTypeList, err = GetChapterListByReport(reportInfo.ClassifyNameFirst, reportInfo.Id, userinfo.CompanyID)
- if err != nil {
- return
- }
- }
- //如果有权限则展示content
- if authOk {
- _ = AddViewRecord(userinfo, reportInfo.Id, reportInfo.ClassifyNameFirst, 0)
- reportItem.Content = reportInfo.Content
- reportItem.VideoUrl = reportInfo.VideoUrl
- }
- reportDetail.ReportInfo = reportItem
- reportDetail.ReportChapterList = reportTypeList
- reportDetail.PermissionCheck = &permissionCheckInfo
- reportDetail.AuthOk = authOk
- return
- }
- // CheckReportPermission 验证用户查看报告的权限
- func CheckReportPermission(userInfo user.UserInfo, reportId int) (authOk bool, permissionCheckInfo company.PermissionCheckInfo, err error) {
- permissionIds, err := chart_permission_chapter_mapping.GetPermissionIdsByReportId(reportId, "rddp")
- if err != nil && err != utils.ErrNoRow {
- return
- }
- authOk, permissionCheckInfo, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), permissionIds)
- return
- }
|