浏览代码

fix:章节类型报告详情

Roc 10 月之前
父节点
当前提交
407101a3e1

+ 4 - 4
models/tables/chart_permission_chapter_mapping/query.go

@@ -5,7 +5,7 @@ import (
 )
 
 // GetReportIdsByPermisssionIds 根据权限ID筛选报告ID, rddp 类型表示新后台新增的报告,区分老后台
-func GetReportIdsByPermisssionIds(permissionIds []int, researchType string) (reportIds []int, err error)  {
+func GetReportIdsByPermisssionIds(permissionIds []int, researchType string) (reportIds []int, err error) {
 	var charPermissionMapping []*ChartPermissionChapterMapping
 	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).Select("DISTINCT report_chapter_type_id ").Where("chart_permission_id in (?) AND research_type = ? ", permissionIds, researchType).Scan(&charPermissionMapping).Error
 	if err != nil {
@@ -18,7 +18,7 @@ func GetReportIdsByPermisssionIds(permissionIds []int, researchType string) (rep
 }
 
 // GetPermissionIdsByReportId 根据报告ID筛选出对应的权限
-func GetPermissionIdsByReportId(reportId int, researchType string) (permissionIds []int, err error)  {
+func GetPermissionIdsByReportId(reportId int, researchType string) (permissionIds []int, err error) {
 	var charPermissionMapping []*ChartPermissionChapterMapping
 	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).
 		Select("DISTINCT chart_permission_id").
@@ -34,7 +34,7 @@ func GetPermissionIdsByReportId(reportId int, researchType string) (permissionId
 }
 
 // GetPermissionIdsByWeek 根据报告ID筛选出对应的权限
-func GetPermissionIdsByWeek() (permissionIds []int, err error)  {
+func GetPermissionIdsByWeek() (permissionIds []int, err error) {
 	var charPermissionMapping []*ChartPermissionChapterMapping
 	err = global.DEFAULT_MYSQL.Model(ChartPermissionChapterMapping{}).
 		Select("DISTINCT chart_permission_id").
@@ -47,4 +47,4 @@ func GetPermissionIdsByWeek() (permissionIds []int, err error)  {
 		permissionIds = append(permissionIds, v.ChartPermissionId)
 	}
 	return
-}
+}

+ 54 - 0
models/tables/report_chapter_permission_mapping/query.go

@@ -0,0 +1,54 @@
+package report_chapter_permission_mapping
+
+import "hongze/hongze_yb/global"
+
+// GetReportChapterListByPermissionIdsAndReportId
+// @Description: 根据报告ID和品种ID列表获取章节
+// @author: Roc
+// @datetime 2024-06-24 11:00:16
+// @param permissionIds []int
+// @param reportId int
+// @return reportChapterIdList []int
+// @return err error
+func GetReportChapterListByPermissionIdsAndReportId(permissionIds []int, reportId int) (reportChapterIdList []int, err error) {
+	var items []*ReportChapterPermissionMapping
+	obj := ReportChapterPermissionMapping{}
+	err = global.MYSQL["rddp"].Table(obj.TableName()+" AS a ").
+		Joins("INNER JOIN report_chapter AS b ON a.report_chapter_id = b.report_chapter_id").
+		Select("DISTINCT a.report_chapter_id ").
+		Where("a.chart_permission_id in (?) AND b.report_id = ? ", permissionIds, reportId).
+		Scan(&items).Error
+	if err != nil {
+		return
+	}
+	for _, v := range items {
+		reportChapterIdList = append(reportChapterIdList, v.ReportChapterID)
+	}
+
+	return
+}
+
+// GetReportChapterListByReportId
+// @Description: 根据报告ID获取所有章节id
+// @author: Roc
+// @datetime 2024-06-24 11:02:23
+// @param reportId int
+// @return reportChapterIdList []int
+// @return err error
+func GetReportChapterListByReportId(reportId int) (reportChapterIdList []int, err error) {
+	var items []*ReportChapterPermissionMapping
+	obj := ReportChapterPermissionMapping{}
+	err = global.MYSQL["rddp"].Table(obj.TableName()+" AS a ").
+		Joins("INNER JOIN report_chapter AS b ON a.report_chapter_id = b.report_chapter_id").
+		Select("DISTINCT report_chapter_id ").
+		Where(" b.report_id = ? ", reportId).
+		Scan(&items).Error
+	if err != nil {
+		return
+	}
+	for _, v := range items {
+		reportChapterIdList = append(reportChapterIdList, v.ReportChapterID)
+	}
+
+	return
+}

+ 31 - 0
models/tables/report_chapter_permission_mapping/report_chapter_permission_mapping.go

@@ -0,0 +1,31 @@
+package report_chapter_permission_mapping
+
+import (
+	"time"
+)
+
+// ReportChapterPermissionMapping 报告章节的权限关系表
+type ReportChapterPermissionMapping struct {
+	ReportChapterPermissionMappingID int       `gorm:"primaryKey;column:report_chapter_permission_mapping_id" json:"report_chapter_permission_mapping_id"`
+	ReportChapterID                  int       `gorm:"column:report_chapter_id" json:"report_chapter_id"`     // 报告章节的id
+	ChartPermissionID                int       `gorm:"column:chart_permission_id" json:"chart_permission_id"` // 权限id
+	CreateTime                       time.Time `gorm:"column:create_time" json:"create_time"`
+}
+
+// TableName get sql table name.获取数据库表名
+func (m *ReportChapterPermissionMapping) TableName() string {
+	return "report_chapter_permission_mapping"
+}
+
+// ReportChapterPermissionMappingColumns get sql column name.获取数据库列名
+var ReportChapterPermissionMappingColumns = struct {
+	ReportChapterPermissionMappingID string
+	ReportChapterID                  string
+	ChartPermissionID                string
+	CreateTime                       string
+}{
+	ReportChapterPermissionMappingID: "report_chapter_permission_mapping_id",
+	ReportChapterID:                  "report_chapter_id",
+	ChartPermissionID:                "chart_permission_id",
+	CreateTime:                       "create_time",
+}

+ 75 - 74
services/company/permission.go

@@ -330,98 +330,99 @@ func GetCheckPermission(companyId int64, userId int, permissionIdList []int) (ok
 			permissionMap[permissionId] = true
 		}
 	}
+	if companyId < 1 {
+		permissionCheckInfo.Type = CheckTypeApply
+		return
+	}
 
 	var productId int64
 	productId = 1
-	if companyId > 1 {
-		//查询是否 开通ficc的客户
-		companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
-		if tmpErr != nil {
-			// 没有开通ficc的客户
-			if tmpErr == utils.ErrNoRow {
-				permissionCheckInfo.Type = CheckTypeApply
-				return
-			}
-			err = tmpErr
-			return
-		}
-
-		wxUser, tmpErr := wx_user.GetByUserId(userId)
-		if tmpErr != nil {
+	//查询是否 开通ficc的客户
+	companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
+	if tmpErr != nil {
+		// 没有开通ficc的客户
+		if tmpErr == utils.ErrNoRow {
 			permissionCheckInfo.Type = CheckTypeApply
-			err = tmpErr
 			return
 		}
+		err = tmpErr
+		return
+	}
 
-		//客户信息
-		companyInfo, tmpErr := companyCache.GetByCompanyId(companyId)
-		if tmpErr != nil {
-			// 没有开通ficc的客户
-			if tmpErr == utils.ErrNoRow {
-				permissionCheckInfo.Type = CheckTypeApply
-				return
-			}
-			err = tmpErr
-			return
-		}
-		customerInfo := response.CustomerInfo{
-			CompanyName: companyInfo.CompanyName,
-			Status:      companyProductInfo.Status,
-			Name:        wxUser.RealName,
-			IsSuspend:   companyProductInfo.IsSuspend,
-			Mobile:      wxUser.Mobile,
-		}
-		permissionCheckInfo.CustomerInfo = customerInfo
+	wxUser, tmpErr := wx_user.GetByUserId(userId)
+	if tmpErr != nil {
+		permissionCheckInfo.Type = CheckTypeApply
+		err = tmpErr
+		return
+	}
 
-		// 如果客户ficc产品的状态是流失,那么也是让去申请
-		if companyProductInfo.Status == "流失" || companyProductInfo.Status == "关闭" {
+	//客户信息
+	companyInfo, tmpErr := companyCache.GetByCompanyId(companyId)
+	if tmpErr != nil {
+		// 没有开通ficc的客户
+		if tmpErr == utils.ErrNoRow {
 			permissionCheckInfo.Type = CheckTypeApply
 			return
 		}
+		err = tmpErr
+		return
+	}
+	customerInfo := response.CustomerInfo{
+		CompanyName: companyInfo.CompanyName,
+		Status:      companyProductInfo.Status,
+		Name:        wxUser.RealName,
+		IsSuspend:   companyProductInfo.IsSuspend,
+		Mobile:      wxUser.Mobile,
+	}
+	permissionCheckInfo.CustomerInfo = customerInfo
 
-		//查找对应客户的销售信息
-		adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
-		if tmpErr != nil {
-			//if tmpErr ==
-			err = tmpErr
-			return
-		}
+	// 如果客户ficc产品的状态是流失,那么也是让去申请
+	if companyProductInfo.Status == "流失" || companyProductInfo.Status == "关闭" {
+		permissionCheckInfo.Type = CheckTypeApply
+		return
+	}
 
-		permissionCheckInfo.Name = adminInfo.RealName
-		permissionCheckInfo.Mobile = adminInfo.Mobile
-		if companyProductInfo.Status == "冻结" {
-			permissionCheckInfo.Type = CheckTypeContact
-			return
-		}
+	//查找对应客户的销售信息
+	adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
+	if tmpErr != nil {
+		//if tmpErr ==
+		err = tmpErr
+		return
+	}
 
-		//客户状态是:试用暂停状态(联系销售)
-		if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
-			permissionCheckInfo.Type = CheckTypeContact
-			return
-		}
+	permissionCheckInfo.Name = adminInfo.RealName
+	permissionCheckInfo.Mobile = adminInfo.Mobile
+	if companyProductInfo.Status == "冻结" {
+		permissionCheckInfo.Type = CheckTypeContact
+		return
+	}
 
-		// 获取有效的权限id列表
-		validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		// 校验在有效的权限id列表中是否存在该权限
-		if len(permissionIdList) > 0 {
-			for _, validPermissionId := range validPermissionIdList {
-				//如果有该权限id,那么直接返回校验通过
-				if _, validOk := permissionMap[validPermissionId]; validOk {
-					finalValidPermissionIds = append(finalValidPermissionIds, validPermissionId)
-					ok = true
-				}
+	//客户状态是:试用暂停状态(联系销售)
+	if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
+		permissionCheckInfo.Type = CheckTypeContact
+		return
+	}
+
+	// 获取有效的权限id列表
+	validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
+	if tmpErr != nil {
+		err = tmpErr
+		return
+	}
+	// 校验在有效的权限id列表中是否存在该权限
+	if len(permissionIdList) > 0 {
+		for _, validPermissionId := range validPermissionIdList {
+			//如果有该权限id,那么直接返回校验通过
+			if _, validOk := permissionMap[validPermissionId]; validOk {
+				finalValidPermissionIds = append(finalValidPermissionIds, validPermissionId)
+				ok = true
 			}
-			return
 		}
-
-		permissionCheckInfo.Type = CheckTypeContact
-	} else {
-		permissionCheckInfo.Type = CheckTypeApply
+		return
 	}
+
+	permissionCheckInfo.Type = CheckTypeContact
+
 	return
 }
 

+ 4 - 3
services/report/report.go

@@ -409,11 +409,12 @@ func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail respons
 
 	var authOk bool
 	var permissionCheckInfo response.PermissionCheckInfo
-	var vaildWeekTypeIds []int
+	//var vaildWeekTypeIds []int
+	var reportChapterIdList []int
 	if reportInfo.ClassifyNameFirst == "晨报" {
 		authOk, permissionCheckInfo, err = CheckDayReportPermission(userinfo, productAuthOk)
 	} else if reportInfo.ClassifyNameFirst == "周报" {
-		authOk, permissionCheckInfo, vaildWeekTypeIds, err = CheckWeekReportPermission(userinfo, productAuthOk)
+		authOk, permissionCheckInfo, _, reportChapterIdList, err = CheckWeekReportPermission(userinfo, reportId, productAuthOk)
 	} else {
 		authOk, permissionCheckInfo, err = CheckReportPermission(userinfo, reportId, productAuthOk)
 	}
@@ -497,7 +498,7 @@ func GetReportDetail(userinfo user.UserInfo, reportId int) (reportDetail respons
 		}
 
 		if authOk {
-			reportTypeList, err = GetChapterListByReport(reportInfo.ClassifyNameFirst, reportInfo.Id, vaildWeekTypeIds, reportInfo.CreateTime)
+			reportTypeList, err = GetChapterListByReportChapterIdList(reportInfo.ClassifyNameFirst, reportInfo.Id, reportChapterIdList)
 			if err != nil {
 				return
 			}

+ 118 - 11
services/report/report_chapter.go

@@ -12,6 +12,7 @@ import (
 	"hongze/hongze_yb/models/tables/rddp/report"
 	"hongze/hongze_yb/models/tables/rddp/report_chapter"
 	"hongze/hongze_yb/models/tables/rddp/smart_report_resource"
+	"hongze/hongze_yb/models/tables/report_chapter_permission_mapping"
 	"hongze/hongze_yb/models/tables/report_chapter_type"
 	"hongze/hongze_yb/models/tables/user_report_chapter_set"
 	"hongze/hongze_yb/services"
@@ -191,7 +192,7 @@ func GetChapterDetail(user user.UserInfo, reportChapterId int) (reportChapterDet
 		err = errors.New("无有效的章节类型")
 		return
 	}
-	reportChapter, err := report_chapter.GetContentById(reportChapterId, typeIds)
+	reportChapter, err := report_chapter.GetItemById(reportChapterId)
 	if err != nil {
 		errMsg = err.Error()
 		err = errors.New("章节查询出错")
@@ -213,12 +214,13 @@ func GetChapterDetail(user user.UserInfo, reportChapterId int) (reportChapterDet
 		err = errors.New("报告不存在")
 		return
 	}
-	if reportInfo.ClassifyNameFirst == "周报" && reportChapter.IsEdit != 1 {
-		err = errors.New("章节未编辑")
-		return
-	}
+	//if reportInfo.ClassifyNameFirst == "周报" && reportChapter.IsEdit != 1 {
+	//	err = errors.New("章节未编辑")
+	//	return
+	//}
 	//判断权限
 	var newTypeIds []int
+	var reportChapterIdList []int
 	if reportInfo.ClassifyNameFirst == "晨报" {
 		authOk, permissionCheckInfo, err = CheckDayReportPermission(user, productAuthOk)
 		if err != nil && err != utils.ErrNoRow {
@@ -226,15 +228,15 @@ func GetChapterDetail(user user.UserInfo, reportChapterId int) (reportChapterDet
 			err = errors.New("权限查询出错")
 			return
 		}
-	} else if reportInfo.ClassifyNameFirst == "周报" {
-		authOk, permissionCheckInfo, newTypeIds, err = CheckWeekReportPermission(user, productAuthOk)
+	} else {
+		authOk, permissionCheckInfo, newTypeIds, reportChapterIdList, err = CheckWeekReportPermission(user, reportInfo.Id, productAuthOk)
 		if err != nil && err != utils.ErrNoRow {
 			errMsg = err.Error()
 			err = errors.New("权限查询出错")
 			return
 		}
-		for _, v := range newTypeIds {
-			if v == reportChapter.TypeId {
+		for _, v := range reportChapterIdList {
+			if v == reportChapter.ReportChapterId {
 				chapterAuthOk = true
 			}
 		}
@@ -385,8 +387,19 @@ func GetMenuChapter(reportId int, typeIds []int, classifyNameFirst string, repor
 	return
 }
 
-// CheckWeekReportPermission 验证周报的权限
-func CheckWeekReportPermission(userInfo user.UserInfo, productAuthOk bool) (authOk bool, permissionCheckInfo response.PermissionCheckInfo, validTypeIds []int, err error) {
+// CheckWeekReportPermission
+// @Description: 验证周报的权限(并获取拥有权限的章节id列表)
+// @author: Roc
+// @datetime 2024-06-24 11:06:52
+// @param userInfo user.UserInfo
+// @param reportId int
+// @param productAuthOk bool
+// @return authOk bool
+// @return permissionCheckInfo response.PermissionCheckInfo
+// @return validTypeIds []int 分类关联的章节类型ID列表
+// @return reportChapterIdList []int 并获取拥有权限的章节id列表
+// @return err error
+func CheckWeekReportPermission(userInfo user.UserInfo, reportId int, productAuthOk bool) (authOk bool, permissionCheckInfo response.PermissionCheckInfo, validTypeIds, reportChapterIdList []int, err error) {
 	var permissionIds []int
 	var validPermissionIds []int //最后允许显示的章节
 	if productAuthOk {
@@ -402,7 +415,13 @@ func CheckWeekReportPermission(userInfo user.UserInfo, productAuthOk bool) (auth
 	//返回可用的章节列表
 	if len(validPermissionIds) > 0 {
 		validTypeIds, err = chart_permission_chapter_mapping.GetReportIdsByPermisssionIds(validPermissionIds, "week")
+		if err != nil {
+			return
+		}
+
+		reportChapterIdList, err = report_chapter_permission_mapping.GetReportChapterListByPermissionIdsAndReportId(validPermissionIds, reportId)
 	}
+
 	return
 }
 
@@ -515,3 +534,91 @@ func GetReportChapterVideoList(permissionIds []int, classifyName string, list []
 
 	return
 }
+
+// GetChapterListByReportChapterIdList
+// @Description: 根据报告获取章节列表
+// @author: Roc
+// @datetime 2024-06-24 11:23:36
+// @param classifyNameFirst string
+// @param reportId int
+// @param reportChapterIdList []int
+// @param reportCreateTime time.Time
+// @return reportTypeList response.ReportChapterList
+// @return err error
+func GetChapterListByReportChapterIdList(classifyNameFirst string, reportId int, reportChapterIdList []int) (reportTypeList response.ReportChapterList, err error) {
+	var errMsg string
+	defer func() {
+		if err != nil {
+			global.LOG.Critical(fmt.Sprintf("GetChapterListByReport: err:%s, errMsg:%s", err.Error(), errMsg))
+		}
+	}()
+	//查询有效的章节
+	typeList, tErr := report_chapter_type.GetEffectTypes()
+	if tErr != nil {
+		errMsg = tErr.Error()
+		err = errors.New("章节类型查询出错")
+		return
+	}
+	if len(typeList) == 0 {
+		err = errors.New("无有效的章节")
+		return
+	}
+
+	typeMap := make(map[uint64]*report_chapter_type.ReportChapterType)
+	for _, v := range typeList {
+		typeMap[v.ReportChapterTypeId] = v
+	}
+
+	var chapterList []*report_chapter.ReportChapter
+	if len(reportChapterIdList) > 0 {
+		//获取所有当前研报有权限的章节
+		chapterList, tErr = report_chapter.GetListByChapterIds(reportChapterIdList)
+	} else {
+		// 获取所有报告章节
+		chapterList, tErr = report_chapter.GetListByReportId(reportId, classifyNameFirst)
+	}
+	if tErr != nil && tErr != utils.ErrNoRow {
+		errMsg = err.Error()
+		err = errors.New("章节查询出错")
+		return
+	}
+	if len(chapterList) == 0 {
+		err = errors.New("无有效章节")
+		return
+	}
+
+	for _, item := range chapterList {
+		typeItem, ok1 := typeMap[uint64(item.TypeId)]
+		// 如果是配置的章节,那么就需要判断是否禁用,如果禁用,则不展示
+		if item.TypeId > 0 && !ok1 {
+			continue
+		}
+
+		temp := new(response.ReportChapterListItem)
+		temp.ReportChapterId = item.ReportChapterId
+		temp.TypeId = item.TypeId
+		temp.TypeName = item.TypeName
+		temp.Title = item.Title
+		temp.Trend = item.Trend
+		temp.ReportId = item.ReportId
+		temp.Sort = item.Sort
+		temp.PublishTime = item.PublishTime
+		temp.VideoUrl = item.VideoUrl
+		temp.VideoName = item.VideoName
+		temp.VideoPlaySeconds = item.VideoPlaySeconds
+		temp.VideoSize = item.VideoSize
+
+		// 系统配置的参数,只有配置的章节类型,才能赋值
+		if typeItem != nil {
+			temp.ReportChapterTypeKey = typeItem.ReportChapterTypeKey
+			temp.ReportChapterTypeName = typeItem.ReportChapterTypeName
+			temp.ReportChapterTypeThumb = typeItem.YbIconUrl
+		}
+
+		reportTypeList = append(reportTypeList, temp)
+	}
+	if len(reportTypeList) > 0 {
+		sort.Sort(reportTypeList)
+	}
+	return
+}