package report import ( "encoding/json" "errors" "fmt" report_chapter_type_cache "hongze/hongze_yb/cache/report_chapter_type" "hongze/hongze_yb/global" "hongze/hongze_yb/models/response" "hongze/hongze_yb/models/response/purchase" "hongze/hongze_yb/models/tables/chart_permission" "hongze/hongze_yb/models/tables/chart_permission_chapter_mapping" "hongze/hongze_yb/models/tables/chart_permission_search_key_word_mapping" "hongze/hongze_yb/models/tables/company_product" "hongze/hongze_yb/models/tables/daily_base_column" "hongze/hongze_yb/models/tables/rddp/classify" "hongze/hongze_yb/models/tables/rddp/report" "hongze/hongze_yb/models/tables/rddp/report_chapter" "hongze/hongze_yb/models/tables/rddp/report_chapter_ticker" "hongze/hongze_yb/models/tables/rddp/report_ppt_img" "hongze/hongze_yb/models/tables/report_chapter_type" "hongze/hongze_yb/models/tables/report_chapter_type_permission" "hongze/hongze_yb/services" "hongze/hongze_yb/services/company" elasticService "hongze/hongze_yb/services/elastic" "hongze/hongze_yb/services/user" "hongze/hongze_yb/utils" "html" "sort" "strconv" "strings" "time" ) // GetLatestClassReport 已购列表最新报告 func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*purchase.PurchaseListItem, err error) { var errMsg string defer func() { if sysErr := recover(); sysErr != nil { err = errors.New("系统错误") global.LOG.Critical(fmt.Sprintf("GetLatestClassReport: userId=%d, err:%s,sysErr:%s", userId, err.Error(), sysErr)) } if err != nil { global.LOG.Critical(fmt.Sprintf("GetLatestClassReport: userId=%d, err:%s, errMsg:%s", userId, err.Error(), errMsg)) } }() //获取所有分类信息 classifys, err := classify.GetSimpleAll() if err != nil { errMsg = err.Error() err = errors.New("分类查询出错") return } classifyFirstIconMap := make(map[int]string) classifySecondNameMap := make(map[string]int) classifyFirstIdMap := make(map[int]bool) classifySecondIdMap := make(map[int]bool) for _, v := range classifys { if v.ParentId == 0 { classifyFirstIdMap[v.Id] = true classifyFirstIconMap[v.Id] = v.YbIconUrl } else { classifySecondIdMap[v.Id] = true classifySecondNameMap[v.ClassifyName] = v.Id } } //获取最新的晨报 dayReport, err := report.GetLatestDay() if err != nil { errMsg = err.Error() err = errors.New("晨报查询出错") return } //获取最新的有权限的周报 //typeIds, err := report_chapter_type.GetEffectTypeID() typeIds, err := report_chapter_type_cache.GetEffectTypeID() if err != nil { errMsg = err.Error() err = errors.New("晨报查询出错") return } weekReport, err := GetLatestWeek(permissionIds, typeIds) if err != nil { errMsg = err.Error() err = errors.New("周报查询出错") return } // 有权限的二级分类 var reports []*report.Report var classifyIdSeconds []int classifyIdSecondMap := make(map[int]bool) // 获取晨报和周报以外的其他报告 // 获取有权限的二级分类 chartPermissions, err := chart_permission_search_key_word_mapping.GetChartPermissionByFrom("rddp") if err != nil { errMsg = err.Error() err = errors.New("分类权限查询出错") return } if len(chartPermissions) > 0 { for _, v := range chartPermissions { for _, myPerId := range permissionIds { if v.ChartPermissionId == myPerId { if classifyIdSecond, ok := classifySecondNameMap[v.KeyWord]; ok { if _, ok2 := classifyIdSecondMap[classifyIdSecond]; !ok2 { classifyIdSeconds = append(classifyIdSeconds, classifyIdSecond) classifyIdSecondMap[classifyIdSecond] = true } } break } } } } reports, err = report.GetLatestClassReportsByClassifyIdSeconds(classifyIdSeconds) if err != nil { errMsg = err.Error() err = errors.New("二级分类最新报告查询出错") return } if dayReport.Id > 0 { reports = append(reports, dayReport) } if weekReport != nil && weekReport.Id > 0 { reports = append(reports, weekReport) } //获取未读数 unReadItem, tErr := GetUnRead(classifyIdSeconds, userId) if tErr != nil { err = tErr return } if len(reports) > 0 { otherLatestItem := new(purchase.PurchaseListItem) // 处理其他报告() 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 temp.Time = v.PublishTime if temp.ClassifyNameFirst == "大事点评" || temp.ClassifyNameFirst == "会议纪要" || temp.ClassifyNameFirst == "年报合集" { if otherLatestItem.Time.Format(utils.FormatDateTime) > v.PublishTime.Format(utils.FormatDateTime) { continue } temp.Unread = unReadItem["大事点评"] + unReadItem["会议纪要"] + unReadItem["年报合集"] temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.ClassifyNameFirst) temp.ImgUrl = "https://hzstatic.hzinsights.com/static/yb_wx/purchase_icon_other.png" otherLatestItem = temp } } for _, v := range reports { if v.ClassifyNameFirst != "晨报" && v.ClassifyNameFirst != "周报" { // 报告的分类不存在 if !classifyFirstIdMap[v.ClassifyIdFirst] || !classifyIdSecondMap[v.ClassifyIdSecond] { continue } } 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 temp.Time = v.PublishTime temp.Unread = unReadItem[temp.ClassifyNameFirst] if imgUrl, ok := classifyFirstIconMap[temp.ClassifyIdFirst]; ok { temp.ImgUrl = imgUrl } if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" { //晨报或者周报,查询最新的章节信息 temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title) } else if temp.ClassifyNameFirst == "大事点评" || temp.ClassifyNameFirst == "会议纪要" || temp.ClassifyNameFirst == "年报合集" { continue } else { if temp.ClassifyNameFirst != temp.ClassifyNameSecond { //包含二级分类 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) } } purchaseList = append(purchaseList, temp) } if otherLatestItem.ReportId > 0 { purchaseList = append(purchaseList, otherLatestItem) } } return } // GetPurchaseDetail 已购详情页面 func GetPurchaseDetail(permissionIds []int, userId uint64, classifyIdFirst int, pageIndex, pageSize int) (ret *purchase.DetailResp, err error) { var errMsg string defer func() { if err != nil { global.LOG.Critical(fmt.Sprintf("GetPurchaseDetail: userId=%d, err:%s, errMsg:%s", userId, err.Error(), errMsg)) } }() var reports []*report.Report var weekReportIds []int classifyInfo, err := classify.GetByClassifyId(classifyIdFirst) if err != nil { errMsg = err.Error() err = errors.New("分类查询出错") return } if classifyInfo.Id == 0 { err = errors.New("分类不存在") return } classifyNameFirst := classifyInfo.ClassifyName offset := (pageIndex - 1) * pageSize var total int64 var classifyIdSeconds []int if classifyNameFirst == "晨报" { //分类获取 reports, err = report.GetListByClassifyIdFirst(classifyIdFirst, offset, pageSize) if err != nil { errMsg = err.Error() err = errors.New("晨报查询出错") return } total, err = report.GetListCountByClassifyIdFirst(classifyIdFirst) if err != nil { errMsg = err.Error() err = errors.New("查询报告总数出错") return } } else { if classifyNameFirst == "周报" { newTypeIds, tErr := GetWeekTypeIdsByPermissionIds(permissionIds, []int{}) if tErr != nil { return } weekReportIds, err = report_chapter.GetReportIdsByTypeIdsAndClass(newTypeIds, classifyNameFirst) //分类获取 reports, err = report.GetListByIDsAndClassifyIdFirst(weekReportIds, classifyIdFirst, offset, pageSize) if err != nil { return } total, err = report.GetListCountByIDsAndClassifyIdFirst(weekReportIds, classifyIdFirst) if err != nil { errMsg = err.Error() err = errors.New("查询报告总数出错") return } } else { //获取有权限的二级分类 var classifyNameSeconds []string chartPermissions, tErr := chart_permission_search_key_word_mapping.GetChartPermissionByFrom("rddp") if tErr != nil { errMsg = tErr.Error() err = errors.New("分类权限查询出错") return } if len(chartPermissions) > 0 { for _, v := range chartPermissions { for _, myPerId := range permissionIds { if v.ChartPermissionId == myPerId { if classifyNameFirst == "大事点评" || classifyNameFirst == "会议纪要" || classifyNameFirst == "年报合集" { if v.KeyWord == "大事点评" || v.KeyWord == "会议纪要" || v.KeyWord == "年报合集" { //筛选出用户有权限的二级分类ID classifyNameSeconds = append(classifyNameSeconds, v.KeyWord) } } else { classifyNameSeconds = append(classifyNameSeconds, v.KeyWord) } break } } } } //获取所有二级分类的id if classifyNameFirst == "大事点评" || classifyNameFirst == "会议纪要" || classifyNameFirst == "年报合集" { classifyIdSeconds, tErr = classify.GetOtherSecondIds([]string{"大事点评", "会议纪要", "年报合集"}) } else { classifyIdSeconds, tErr = classify.GetIdsByClassifyNameAndParentId(classifyNameSeconds, classifyIdFirst) } if tErr != nil { errMsg = tErr.Error() err = errors.New("二级分类查询出错") return } if len(classifyIdSeconds) > 0 { //分类获取 reports, err = report.GetListByClassifyIdSeconds(classifyIdSeconds, offset, pageSize) if err != nil { return } total, err = report.GetListCountByClassifyIdSeconds(classifyIdSeconds) if err != nil { errMsg = err.Error() err = errors.New("查询报告总数出错") return } } } } var list []*purchase.Detail ret = new(purchase.DetailResp) 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 temp.Stage = v.Stage temp.ImgUrl = classifyInfo.YbBgUrl if temp.ClassifyNameFirst == "晨报" || temp.ClassifyNameFirst == "周报" { //晨报或者周报,查询最新的章节信息 temp.Content = fmt.Sprintf("【第%d期|FICC】%s", temp.Stage, temp.Title) temp.TopName = temp.Title } else { if temp.ClassifyNameFirst != temp.ClassifyNameSecond { //包含二级分类 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) } } ret.List = list ret.Paging = response.GetPaging(pageIndex, pageSize, int(total)) // 执行一个协程任务,新增用户浏览记录 //_, tErr := BatchInsertReportView(weekReportIds, userId, classifyNameFirst, classifyIdSeconds) go BatchInsertReportView(userId, weekReportIds, classifyNameFirst, classifyIdSeconds) /*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)) } }() // 判断用户状态是否是正常和永续 var productAuthOk bool companyProduct, err := company_product.GetByCompany2ProductId(userinfo.CompanyID, 1) if err == utils.ErrNoRow { err = nil } if err != nil { errMsg = err.Error() err = errors.New("查询用户购买产品出错") return } if companyProduct != nil { // 无FICC权限的客户不可见 if companyProduct.CompanyProductID > 0 { // 已购或者试用用户可见 if strings.Contains("永续,正式", companyProduct.Status) || (companyProduct.Status == "试用" && companyProduct.IsSuspend != 1) { productAuthOk = true } } } reportInfo, err := report.GetByReportId(reportId) if err != nil { errMsg = err.Error() err = errors.New("报告查询出错") return } if reportInfo.Id == 0 { err = errors.New("报告不存在") return } if reportInfo.State != 2 { err = errors.New("报告未发布") return } // 判断报告是否属于专栏报告 firstClassify, e := classify.GetByClassifyId(reportInfo.ClassifyIdFirst) if e != nil { err = errors.New("报告一级分类有误") return } //判断权限 var authOk bool var permissionCheckInfo response.PermissionCheckInfo var vaildWeekTypeIds []int if reportInfo.ClassifyNameFirst == "晨报" { authOk, permissionCheckInfo, err = CheckDayReportPermission(userinfo, productAuthOk) } else if reportInfo.ClassifyNameFirst == "周报" { authOk, permissionCheckInfo, vaildWeekTypeIds, err = CheckWeekReportPermission(userinfo, productAuthOk) } else { authOk, permissionCheckInfo, err = CheckReportPermission(userinfo, reportId, productAuthOk) } 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 = html.UnescapeString(reportInfo.ContentSub) reportItem.Frequency = reportInfo.Frequency reportItem.VideoName = reportInfo.VideoName if reportInfo.VideoName == "" && reportInfo.VideoUrl != "" { reportItem.VideoName = reportInfo.Title } reportItem.VideoSize = reportInfo.VideoSize reportItem.VideoPlaySeconds = reportInfo.VideoPlaySeconds reportItem.Author = reportInfo.Author // 分享背景图取二级分类配图, 二级没有配图时使用一级配图, 一级也没有使用默认图 reportItem.ShareBgImg = utils.DEFAULT_REPORT_SHARE_BG_IMG secondClassify, e := classify.GetByClassifyId(reportInfo.ClassifyIdSecond) if e != nil { err = errors.New("报告二级分类有误") return } if secondClassify.YbShareBgImg != "" { reportItem.ShareBgImg = secondClassify.YbShareBgImg } else { if firstClassify.YbShareBgImg != "" { reportItem.ShareBgImg = firstClassify.YbShareBgImg } } var reportTypeList []*response.ReportChapterListItem if reportInfo.ClassifyNameFirst == "晨报" || reportInfo.ClassifyNameFirst == "周报" { //(晨报和周报的banner图) if reportInfo.ClassifyNameFirst == "晨报" { reportItem.BannerUrl = utils.ALIYUN_YBIMG_HOST + "report_banner_day.jpg" } else { reportItem.BannerUrl = utils.ALIYUN_YBIMG_HOST + "report_banner_week.jpg" } if authOk { reportTypeList, err = GetChapterListByReport(reportInfo.ClassifyNameFirst, reportInfo.Id, vaildWeekTypeIds, reportInfo.CreateTime) if err != nil { return } } } else { // 音频播放条图片用分类图片 reportItem.VideoImg = utils.HZ_DEFAULT_AVATAR permissionIds, tmpErr := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(reportItem.ClassifyNameSecond) if tmpErr != nil { errMsg = tmpErr.Error() err = errors.New("查询报告权限失败") return } if len(permissionIds) > 0 { chartPermission, tmpErr := chart_permission.GetListByIds(permissionIds) if tmpErr != nil { errMsg = tmpErr.Error() err = errors.New("查询品种信息失败") return } lenChart := len(chartPermission) for i := 0; i < lenChart; i++ { if chartPermission[i].YbImgUrl != "" { reportItem.VideoImg = utils.ALIYUN_YBIMG_HOST + chartPermission[i].YbImgUrl break } } } } //如果有权限则展示content var likeNum int64 var likeEnabled int8 if authOk { go AddViewRecord(userinfo, reportInfo.Id, reportInfo.ClassifyNameFirst, 0) reportItem.Content = html.UnescapeString(reportInfo.Content) reportItem.VideoUrl = reportInfo.VideoUrl //查询点赞数 likeNum, likeEnabled, _ = services.GetReportLikeByReportIdOldReportId(userinfo.UserID, reportInfo.Id, 0, 0, 0) } //新增用户访问日志 go AddUserAccessRecord(userinfo, reportInfo.Id, reportInfo.ClassifyNameFirst, 0, authOk) reportDetail.ReportInfo = reportItem reportDetail.ReportChapterList = reportTypeList reportDetail.PermissionCheck = &permissionCheckInfo reportDetail.AuthOk = authOk reportDetail.LikeNum = likeNum reportDetail.LikeEnabled = likeEnabled reportDetail.ReportShowType = int(firstClassify.ShowType) return } // CheckReportPermission 验证用户查看报告的权限 func CheckReportPermission(userInfo user.UserInfo, reportId int, productAuthOk bool) (authOk bool, permissionCheckInfo response.PermissionCheckInfo, err error) { var permissionIds []int if productAuthOk { 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 } // GetReportList 获取报告列表 func GetReportList(user user.UserInfo, keyWord string, classifyIdFirst, classifyIdSecond, pageIndex, pageSize int) (ret *response.ReportList, err error) { var errMsg string defer func() { if err != nil { global.LOG.Critical(fmt.Sprintf("GetReportList: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg)) } }() // 判断用户状态是否是正常和永续 var productAuthOk bool companyProduct, err := company_product.GetByCompany2ProductId(user.CompanyID, 1) if err == utils.ErrNoRow { err = nil } if err != nil { errMsg = err.Error() err = errors.New("查询用户购买产品出错") return } if companyProduct != nil { // 无FICC权限的客户不可见 if companyProduct.CompanyProductID > 0 { // 已购或者试用用户可见 if strings.Contains("永续,正式", companyProduct.Status) || (companyProduct.Status == "试用" && companyProduct.IsSuspend != 1) { productAuthOk = true } } } var condition string pars := make([]interface{}, 0) classifyParent, err := classify.GetByClassifyId(classifyIdFirst) if err != nil { errMsg = err.Error() err = errors.New("分类查询出错") return } if classifyParent.Id == 0 { err = errors.New("该分类不存在") return } condition = `classify_id_first = ? and state = 2` pars = append(pars, classifyIdFirst) permissionMap := make(map[string][]int) checkPermissionMap := make(map[string]bool) permissionImageMap := make(map[string]string) chartPermissionImageMap := make(map[int]string) var classifyIdSeconds []int //var reportImgUrl string chartPermissionList, err := chart_permission.GetFiccListExceptTacticByProductId() if err != nil { errMsg = err.Error() err = errors.New("分类查询出错") return } if len(chartPermissionList) > 0 { for _, v := range chartPermissionList { chartPermissionImageMap[int(v.ChartPermissionID)] = v.YbImgUrl } } if classifyIdSecond > 0 && keyWord == "" { classifyInfo, tErr := classify.GetByClassifyId(classifyIdSecond) if tErr != nil { errMsg = tErr.Error() err = errors.New("分类查询出错") return } if classifyInfo.Id == 0 { err = errors.New("该二级分类不存在") return } condition += " AND classify_id_second = ?" pars = append(pars, classifyIdSecond) //查询二级分类对应的权限 permissionIds, tErr := chart_permission_search_key_word_mapping.GetChartPermissionIdsByKeyWord(classifyInfo.ClassifyName) if tErr != nil { errMsg = tErr.Error() err = errors.New("分类权限查询出错") return } permissionMap[classifyInfo.ClassifyName] = permissionIds //if len(permissionIds) > 0 { // for _, v := range permissionIds { // reportImgUrl = chartPermissionImageMap[v] // } //} } else { if classifyParent.ClassifyName == "晨报" || classifyParent.ClassifyName == "周报" { //reportImgUrl = chartPermissionImageMap[1] classifyIdSeconds = append(classifyIdSeconds, 0) } chartPermissions, tErr := chart_permission_search_key_word_mapping.GetChartPermissionByFrom("rddp") if tErr != nil { errMsg = tErr.Error() err = errors.New("分类权限查询出错") return } if len(chartPermissions) > 0 { for _, v := range chartPermissions { permissionMap[v.KeyWord] = append(permissionMap[v.KeyWord], v.ChartPermissionId) permissionImageMap[v.KeyWord] = chartPermissionImageMap[v.ChartPermissionId] } } //获取二级分类的所有头像 classifyList, tErr := classify.GetListByPid(classifyIdFirst) if tErr != nil { errMsg = tErr.Error() err = errors.New("二级分类查询出错") return } for _, v := range classifyList { classifyIdSeconds = append(classifyIdSeconds, v.Id) } if len(classifyIdSeconds) == 0 && classifyParent.ClassifyName != "晨报" && classifyParent.ClassifyName != "周报" { ret = new(response.ReportList) ret.Paging = response.GetPaging(pageIndex, pageSize, 0) return } condition += ` AND classify_id_second IN ? ` pars = append(pars, classifyIdSeconds) } // 获取有效的权限id列表 var validPermissionIdList []int if productAuthOk { validPermissionIdList, err = company.GetValidPermissionIdListByCompany2ProductId(user.CompanyID, 1) if err != nil && err != utils.ErrNoRow { errMsg = err.Error() err = errors.New("查询分类出错") return } } if len(validPermissionIdList) > 0 { for classifyName, perIds := range permissionMap { checkLoop: for _, checkId := range perIds { for _, validPerid := range validPermissionIdList { if checkId == validPerid { checkPermissionMap[classifyName] = true break checkLoop } } } } } var total int64 var list []*report.Report if keyWord == "" { offset := (pageIndex - 1) * pageSize list, err = report.GetReportList(condition, pars, offset, pageSize) if err != nil { errMsg = err.Error() err = errors.New("报告查询出错") return } total, err = report.GetReportListCount(condition, pars) if err != nil { errMsg = err.Error() err = errors.New("查询报告总数出错") return } } else { if classifyIdSecond > 0 { classifyIdSeconds = append(classifyIdSeconds, classifyIdSecond) } if classifyParent.ClassifyName == "晨报" || classifyParent.ClassifyName == "周报" { classifyIdSeconds = append(classifyIdSeconds, 0) } searchResp, total1, tErr := elasticService.ReportListSearch(keyWord, classifyIdFirst, classifyIdSeconds, pageIndex, pageSize) if tErr != nil { errMsg = tErr.Error() err = errors.New("查询失败") return } total = int64(total1) if searchResp.Hits != nil && total > 0 { var reportIds []int for _, v := range searchResp.Hits.Hits { temp := new(report.Report) itemJson, tmpErr := v.Source.MarshalJSON() if tmpErr != nil { errMsg = tmpErr.Error() err = errors.New("解析出错") return } reportItem := new(response.EsReportItem) tmpErr = json.Unmarshal(itemJson, &reportItem) if tmpErr != nil { errMsg = tmpErr.Error() err = errors.New("解析json出错") return } temp.Id = reportItem.ReportId reportIds = append(reportIds, reportItem.ReportId) temp.ClassifyIdFirst = reportItem.ClassifyIdFirst temp.ClassifyNameFirst = reportItem.ClassifyNameFirst temp.ClassifyIdSecond = reportItem.ClassifyIdSecond temp.ClassifyNameSecond = reportItem.ClassifyNameSecond if len(v.Highlight["ClassifyNameSecond"]) > 0 { temp.ClassifyNameSecond = v.Highlight["ClassifyNameSecond"][0] } temp.Abstract = reportItem.Abstract stageInt, _ := strconv.Atoi(reportItem.StageStr) temp.Stage = stageInt temp.StageStr = reportItem.StageStr temp.Title = reportItem.Title temp.PublishTime, err = time.ParseInLocation(utils.FormatDateTime, reportItem.PublishTime, time.Local) if len(v.Highlight["Title"]) > 0 { temp.Title = v.Highlight["Title"][0] } if len(v.Highlight["Abstract"]) > 0 { temp.Abstract = v.Highlight["Abstract"][0] } if len(v.Highlight["StageStr"]) > 0 { temp.StageStr = v.Highlight["StageStr"][0] } list = append(list, temp) } reportInfoList, tmpErr := report.GetByReportIds(reportIds) if tmpErr != nil { errMsg = tmpErr.Error() err = errors.New("查询报告出错") return } reportListMap := make(map[int]*report.Report) for _, temp := range reportInfoList { reportListMap[temp.Id] = temp } for k, reportDetail := range list { if v, ok := reportListMap[reportDetail.Id]; ok { list[k].CreateTime = v.CreateTime } } } } var reportList []*response.ReportListItem if len(list) > 0 { // 封面图 classifyList, e := classify.GetClassifyList() if e != nil { err = errors.New("获取报告分类列表失败" + e.Error()) return } listImgMap := make(map[int]string, 0) classifyLen := len(classifyList) for i := 0; i < classifyLen; i++ { listImgMap[classifyList[i].Id] = classifyList[i].YbListImg } var videoReportIds []int videoMap := make(map[int][]*response.VideoListItem) weekAuthMap := make(map[int]bool) if classifyParent.ClassifyName == "晨报" && productAuthOk { //获取晨报的音频列表 videoMap, _, errMsg, err = GetReportChapterVideoList(validPermissionIdList, classifyParent.ClassifyName, list) if err != nil { return } } else if classifyParent.ClassifyName == "周报" { //查询所有权限typeID //如果存在可以查看的章节ID for _, reportInfo := range list { videoReportIds = append(videoReportIds, reportInfo.Id) } // 判断周报权限\查询周报的音频列表 videoMap, weekAuthMap, errMsg, err = GetReportChapterVideoList(validPermissionIdList, classifyParent.ClassifyName, list) if err != nil { return } } // 以下分类图标特殊处理 =_=! //reportImgMap := map[string]string{ // "晨报": "report_list_chen.png", // "周报": "report_list_zhou.png", // "月报": "report_list_yue.png", // "大事点评": "report_list_dashidianping.png", // "会议纪要": "report_list_huiyijiyao.png", // "年报合集": "report_list_nianbaoheji.png", //} for _, reportInfo := range list { reportItem := new(response.ReportListItem) reportItem.ReportId = reportInfo.Id // 样式限制行数 reportItem.Title = "