Explorar el Código

研报章节优化,排序

xiexiaoyuan hace 3 años
padre
commit
9210b72f09

+ 28 - 0
cache/report_chapter_type/report_chapter_type.go

@@ -0,0 +1,28 @@
+package report_chapter_type
+
+import (
+	"context"
+	jsoniter "github.com/json-iterator/go"
+	"hongze/hongze_yb/global"
+	model "hongze/hongze_yb/models/tables/report_chapter_type"
+	"hongze/hongze_yb/utils"
+	"time"
+)
+// GetEffectTypeID 获取缓存中的可用章节
+func GetEffectTypeID() (chapterIds []int, err error ) {
+	cacheKey := utils.HONGZEYB_ + "report_chapter_type:GetEffectTypeID"
+	chapterIdsStr, _ := global.Redis.Get(context.TODO(), cacheKey).Result()
+	if chapterIdsStr != "" {
+		err = jsoniter.UnmarshalFromString(chapterIdsStr, &chapterIds)
+		return
+	}
+	chapterIds, err = model.GetEffectTypeID()
+	if err == nil && len(chapterIds) > 0 {
+		chapterIdsStr, err = jsoniter.MarshalToString(chapterIds)
+		if err != nil {
+			return
+		}
+		_ = global.Redis.SetEX(context.TODO(), cacheKey, chapterIdsStr, 2*time.Hour)
+	}
+	return
+}

+ 28 - 0
models/response/report.go

@@ -76,6 +76,7 @@ type ReportChapterMenu struct {
 	ReportId        int    `json:"report_id"`
 	ReportChapterTypeName   string       `json:"report_chapter_type_name"`
 	ReportChapterTypeThumb  string	    `json:"report_chapter_type_thumb"`
+	Sort             int  `json:"sort"`
 }
 
 type ReportListItem struct {
@@ -178,4 +179,31 @@ func (p ReportCollectListResp) Less(i, j int) bool {
 
 func (p ReportCollectListResp) Swap(i, j int) {
 	p[i], p[j] = p[j], p[i]
+}
+
+type ReportChapterList []*ReportChapterListItem
+func (r ReportChapterList) Len() int {
+	return len(r)
+}
+
+func (r ReportChapterList) Less(i, j int) bool {
+	return r[i].Sort < r[j].Sort
+}
+
+func (r ReportChapterList) Swap(i, j int) {
+	r[i], r[j] = r[j], r[i]
+}
+
+type ReportChapterMenuList []*ReportChapterMenu
+
+func (rc ReportChapterMenuList) Len() int {
+	return len(rc)
+}
+
+func (rc ReportChapterMenuList) Less(i, j int) bool {
+	return rc[i].Sort < rc[j].Sort
+}
+
+func (rc ReportChapterMenuList) Swap(i, j int) {
+	rc[i], rc[j] = rc[j], rc[i]
 }

+ 16 - 0
models/tables/chart_permission_chapter_mapping/query.go

@@ -31,4 +31,20 @@ func GetPermissionIdsByReportId(reportId int, researchType string) (permissionId
 		permissionIds = append(permissionIds, v.ChartPermissionId)
 	}
 	return
+}
+
+// GetPermissionIdsByWeek 根据报告ID筛选出对应的权限
+func GetPermissionIdsByWeek() (permissionIds []int, err error)  {
+	var charPermissionMapping []*ChartPermissionChapterMapping
+	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).
+		Select("DISTINCT chart_permission_id").
+		Where("research_type = 'week'").
+		Scan(&charPermissionMapping).Error
+	if err != nil {
+		return
+	}
+	for _, v := range charPermissionMapping {
+		permissionIds = append(permissionIds, v.ChartPermissionId)
+	}
+	return
 }

+ 3 - 2
services/company/permission.go

@@ -262,7 +262,7 @@ func CheckPermissionByPermissionIdList2Ficc(companyId int64, userId int, permiss
 	return
 }
 
-func GetCheckPermission(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo response.PermissionCheckInfo, err error) {
+func GetCheckPermission(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo response.PermissionCheckInfo, finalValidPermissionIds []int, err error) {
 	defer func() {
 		// 如果无权限,那么就去查询是否申请过
 		if ok == false {
@@ -370,10 +370,11 @@ func GetCheckPermission(companyId int64, userId int, permissionIdList []int) (ok
 			for _, validPermissionId := range validPermissionIdList {
 				//如果有该权限id,那么直接返回校验通过
 				if _, validOk := permissionMap[validPermissionId]; validOk {
+					finalValidPermissionIds = append(finalValidPermissionIds, validPermissionId)
 					ok = true
-					return
 				}
 			}
+			return
 		}
 
 		permissionCheckInfo.Type = "contact"

+ 2 - 2
services/report/classify.go

@@ -111,7 +111,7 @@ func GetClassifyDetail(user user.UserInfo, classifyIdSecond int) (detail *respon
 		err = errors.New("分类权限查询出错")
 		return
 	}
-	authOk, permissionCheckInfo, err := company.GetCheckPermission(user.CompanyID, int(user.UserID), permissionIds)
+	authOk, permissionCheckInfo, _, err := company.GetCheckPermission(user.CompanyID, int(user.UserID), permissionIds)
 	if err != nil && err != utils.ErrNoRow {
 		errMsg = err.Error()
 		err = errors.New("权限查询出错")
@@ -165,7 +165,7 @@ func GetClassifyReportList(user user.UserInfo, classifyIdSecond int, pageIndex,
 		err = errors.New("分类权限查询出错")
 		return
 	}
-	authOk, permissionCheckInfo, err := company.GetCheckPermission(user.CompanyID, int(user.UserID), permissionIds)
+	authOk, permissionCheckInfo, _, err := company.GetCheckPermission(user.CompanyID, int(user.UserID), permissionIds)
 	if err != nil && err != utils.ErrNoRow {
 		errMsg = err.Error()
 		err = errors.New("权限查询出错")

+ 7 - 4
services/report/report.go

@@ -4,6 +4,7 @@ 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"
@@ -64,7 +65,8 @@ func GetLatestClassReport(permissionIds []int, userId uint64) (purchaseList []*p
 		return
 	}
 	//获取最新的有权限的周报
-	typeIds, err := report_chapter_type.GetEffectTypeID()
+	//typeIds, err := report_chapter_type.GetEffectTypeID()
+	typeIds, err := report_chapter_type_cache.GetEffectTypeID()
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("晨报查询出错")
@@ -357,10 +359,11 @@ func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail respons
 	//判断权限
 	var authOk bool
 	var permissionCheckInfo response.PermissionCheckInfo
+	var vaildWeekTypeIds []int
 	if reportInfo.ClassifyNameFirst == "晨报"{
 		authOk, permissionCheckInfo, err = CheckDayReportPermission(userinfo)
 	}else if reportInfo.ClassifyNameFirst == "周报"{
-		authOk, permissionCheckInfo, err = CheckWeekReportPermission(userinfo, reportId)
+		authOk, permissionCheckInfo, vaildWeekTypeIds, err = CheckWeekReportPermission(userinfo)
 	}else{
 		authOk, permissionCheckInfo, err = CheckReportPermission(userinfo, reportId)
 	}
@@ -391,7 +394,7 @@ func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail respons
 			reportItem.BannerUrl = utils.ALIYUN_YBIMG_HOST + "report_banner_week.jpg"
 		}
 		if authOk {
-			reportTypeList, err = GetChapterListByReport(reportInfo.ClassifyNameFirst, reportInfo.Id, userinfo.CompanyID)
+			reportTypeList, err = GetChapterListByReport(reportInfo.ClassifyNameFirst, reportInfo.Id, vaildWeekTypeIds)
 			if err != nil {
 				return
 			}
@@ -416,7 +419,7 @@ func CheckReportPermission(userInfo user.UserInfo, reportId int) (authOk bool, p
 	if err != nil && err != utils.ErrNoRow {
 		return
 	}
-	authOk, permissionCheckInfo, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), permissionIds)
+	authOk, permissionCheckInfo,_, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), permissionIds)
 	return
 }
 

+ 28 - 32
services/report/report_chapter.go

@@ -3,6 +3,7 @@ package report
 import (
 	"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/tables/chart_permission_chapter_mapping"
@@ -14,6 +15,7 @@ import (
 	"hongze/hongze_yb/task"
 	"hongze/hongze_yb/utils"
 	"html"
+	"sort"
 )
 
 // GetReportTypeIdsByPermissionIds 获取所有和权限绑定的报告章节ID
@@ -43,7 +45,7 @@ func GetWeekTypeIdsByPermissionIds(permissionIds []int, typeIds []int) (newTypeI
 		return
 	}
 	if len(typeIds) == 0 {
-		typeIds, err = report_chapter_type.GetEffectTypeID()
+		typeIds, err = report_chapter_type_cache.GetEffectTypeID()
 		if err != nil {
 			return
 		}
@@ -59,7 +61,7 @@ func GetWeekTypeIdsByPermissionIds(permissionIds []int, typeIds []int) (newTypeI
 }
 
 // GetChapterListByReport 根据报告获取章节列表
-func GetChapterListByReport(classifyNameFirst string, reportId int, companyId int64) (reportTypeList[]*response.ReportChapterListItem, err error) {
+func GetChapterListByReport(classifyNameFirst string, reportId int, validWeekTypeIds []int) (reportTypeList response.ReportChapterList, err error) {
 	var errMsg string
 	defer func() {
 		if err != nil {
@@ -87,16 +89,7 @@ func GetChapterListByReport(classifyNameFirst string, reportId int, companyId in
 	}
 
 	if classifyNameFirst == "周报" {
-		permissionIds, tErr := company.GetValidPermissionIdListByCompany2ProductId(companyId, 1)
-		if tErr != nil {
-			return
-		}
-		newTypeIds, tErr := GetWeekTypeIdsByPermissionIds(permissionIds, typeIds)
-		if tErr != nil {
-			err = tErr
-			return
-		}
-		for _, v := range newTypeIds {
+		for _, v := range validWeekTypeIds {
 			newTypeMap[v] = true
 		}
 	}
@@ -126,7 +119,7 @@ func GetChapterListByReport(classifyNameFirst string, reportId int, companyId in
 			temp.TypeName = item.TypeName
 			temp.Title = item.Title
 			temp.ReportId = item.ReportId
-			temp.Sort = item.Sort
+			temp.Sort = typeItem.Sort
 			temp.PublishTime = item.PublishTime
 			temp.ReportChapterTypeKey = typeItem.ReportChapterTypeKey
 			temp.ReportChapterTypeName = typeItem.ReportChapterTypeName
@@ -134,6 +127,9 @@ func GetChapterListByReport(classifyNameFirst string, reportId int, companyId in
 			reportTypeList = append(reportTypeList, temp)
 		}
 	}
+	if len(reportTypeList) > 0 {
+		sort.Sort(reportTypeList)
+	}
 	return
 }
 
@@ -146,7 +142,7 @@ func GetChapterDetail(user user.UserInfo, reportChapterId int) (reportChapterDet
 		}
 	}()
 
-	typeIds, err := report_chapter_type.GetEffectTypeID()
+	typeIds, err := report_chapter_type_cache.GetEffectTypeID()
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("章节类型查询出错")
@@ -196,24 +192,12 @@ func GetChapterDetail(user user.UserInfo, reportChapterId int) (reportChapterDet
 			return
 		}
 	}else if reportInfo.ClassifyNameFirst == "周报"{
-		authOk, permissionCheckInfo, err = CheckWeekReportPermission(user, reportInfo.Id)
+		authOk, permissionCheckInfo, newTypeIds, err = CheckWeekReportPermission(user)
 		if err != nil && err != utils.ErrNoRow {
 			errMsg = err.Error()
 			err = errors.New("权限查询出错")
 			return
 		}
-		permissionIds, tErr := company.GetValidPermissionIdListByCompany2ProductId(user.CompanyID, 1)
-		if tErr != nil && tErr != utils.ErrNoRow{
-			errMsg = tErr.Error()
-			err = errors.New("权限查询出错")
-			return
-		}
-		newTypeIds, err = GetWeekTypeIdsByPermissionIds(permissionIds, typeIds)
-		if err != nil && err != utils.ErrNoRow{
-			errMsg = err.Error()
-			err = errors.New("周报章节权限查询出错")
-			return
-		}
 		for _, v := range newTypeIds {
 			if v == reportChapter.TypeId {
 				chapterAuthOk = true
@@ -261,7 +245,7 @@ func GetChapterDetail(user user.UserInfo, reportChapterId int) (reportChapterDet
 	return
 }
 
-func GetMenuChapter(reportId int, typeIds []int, classifyNameFirst string) (reportTypeList []*response.ReportChapterMenu, err error)  {
+func GetMenuChapter(reportId int, typeIds []int, classifyNameFirst string) (reportTypeList response.ReportChapterMenuList, err error)  {
 	//查询有效的章节
 	typeList, tErr := report_chapter_type.GetEffectTypes()
 	if tErr != nil {
@@ -290,20 +274,32 @@ func GetMenuChapter(reportId int, typeIds []int, classifyNameFirst string) (repo
 				temp.ReportId = item.ReportId
 				temp.ReportChapterTypeName = typeItem.ReportChapterTypeName
 				temp.ReportChapterTypeThumb = typeItem.YbIconUrl
+				temp.Sort = typeItem.Sort
 				reportTypeList = append(reportTypeList, temp)
 			}
 		}
 	}
+	if len(reportTypeList) > 0{
+		sort.Sort(reportTypeList)
+	}
 	return
 }
 
 // CheckWeekReportPermission 验证周报的权限
-func CheckWeekReportPermission(userInfo user.UserInfo, reportId int) (authOk bool, permissionCheckInfo response.PermissionCheckInfo, err error) {
-	permissionIds, err := chart_permission_chapter_mapping.GetPermissionIdsByReportId(reportId, "week")
+func CheckWeekReportPermission(userInfo user.UserInfo) (authOk bool, permissionCheckInfo response.PermissionCheckInfo, validTypeIds []int,  err error) {
+	var permissionIds []int
+	permissionIds, err = chart_permission_chapter_mapping.GetPermissionIdsByWeek()
+
 	if err != nil && err != utils.ErrNoRow {
 		return
 	}
-	authOk, permissionCheckInfo, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), permissionIds)
+	var validPermissionIds []int    //最后允许显示的章节
+	authOk, permissionCheckInfo, validPermissionIds, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), permissionIds)
+	if err != nil {
+		return
+	}
+	//返回可用的章节列表
+	validTypeIds, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(validPermissionIds, "week")
 	return
 }
 
@@ -317,6 +313,6 @@ func CheckDayReportPermission(userInfo user.UserInfo) (authOk bool, permissionCh
 		authOk = true
 		return
 	}
-	authOk, permissionCheckInfo, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), []int{})
+	authOk, permissionCheckInfo,_, err = company.GetCheckPermission(userInfo.CompanyID, int(userInfo.UserID), []int{})
 	return
 }

+ 1 - 0
utils/constants.go

@@ -73,6 +73,7 @@ const (
 
 const (
 	HZ_CHART_LIB_DETAIL = "HZ_CHART_LIB_DETAIL_"
+	HONGZEYB_ = "hongze_yb:"
 )
 
 //var (