Sfoglia il codice sorgente

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_cygx into cygx_9.8

xingzai 2 anni fa
parent
commit
947d1b8178

+ 5 - 3
controllers/activity.go

@@ -3,8 +3,6 @@ package controllers
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/medivhzhan/weapp/v2"
-	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
@@ -12,6 +10,9 @@ import (
 	"strconv"
 	"strings"
 	"time"
+
+	"github.com/medivhzhan/weapp/v2"
+	"github.com/rdlucklib/rdluck_tools/paging"
 )
 
 // 活动
@@ -1274,7 +1275,6 @@ func (this *ActivityCoAntroller) SignupAdd() {
 		return
 	}
 
-	item := new(models.CygxActivitySignup)
 	if user.CompanyId > 1 {
 		companyItem, err := models.GetCompanyDetailById(user.CompanyId)
 		//冻结客户
@@ -1313,6 +1313,8 @@ func (this *ActivityCoAntroller) SignupAdd() {
 			return
 		}
 		if havePower {
+
+			item := new(models.CygxActivitySignup)
 			hasPermission = 1
 			signupStatus = "Success"
 			resultTime := utils.StrTimeToTime(activityInfo.ActivityTime) //时间字符串格式转时间格式

+ 23 - 16
controllers/article.go

@@ -87,27 +87,34 @@ func (this *ArticleController) Detail() {
 		var pars []interface{}
 		pars = make([]interface{}, 0)
 		condition = ` AND article_id  = ? `
-		pars = append(pars, articleId)
-		industrialList, err := models.GetIndustrialArticleGroupManagementList(condition, pars)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取信息失败,Err:" + err.Error()
-			return
-		}
-		if len(industrialList) > 0 {
-			industryUserFollowMap, err := services.GetIndustryUserFollowMap(user)
-			if err != nil {
+		reportMappingMap, _ := services.GetReportMappingMap()
+
+		if reportMappingMap[detail.CategoryId] {
+			chooseCategoryMap, _ := services.GetChooseCategoryMap(user)
+			detail.IsShowFollowButton = true
+			detail.IsFollowButton = chooseCategoryMap[detail.CategoryId]
+		} else {
+			pars = append(pars, articleId)
+			industrialList, err := models.GetIndustrialArticleGroupManagementList(condition, pars)
+			if err != nil && err.Error() != utils.ErrNoRow() {
 				br.Msg = "获取信息失败"
-				br.ErrMsg = "GetActivitySignupResp,Err:" + err.Error()
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
 				return
 			}
-			for _, v := range industrialList {
-				fmt.Println(v.IndustrialManagementId)
-				if industryUserFollowMap[v.IndustrialManagementId] {
-					detail.IsFollowButton = true
+			if len(industrialList) > 0 {
+				industryUserFollowMap, err := services.GetIndustryUserFollowMap(user)
+				if err != nil {
+					br.Msg = "获取信息失败"
+					br.ErrMsg = "GetActivitySignupResp,Err:" + err.Error()
+					return
+				}
+				for _, v := range industrialList {
+					if industryUserFollowMap[v.IndustrialManagementId] {
+						detail.IsFollowButton = true
+					}
 				}
+				detail.IsShowFollowButton = true
 			}
-			detail.IsShowFollowButton = true
 		}
 	}
 	//是否属于专项调研报告

+ 12 - 2
controllers/chart_permission.go

@@ -6,7 +6,7 @@ import (
 	"hongze/hongze_cygx/utils"
 )
 
-//品种
+// 品种
 type ChartPermissionController struct {
 	BaseCommonController
 }
@@ -152,6 +152,7 @@ func (this *ChartPermissionAuthController) ReportDetail() {
 
 // @Title 获取策略下的所有分类
 // @Description 获取策略下的所有分类接口
+// @Param   ChartPermissionId   query   int  false     "行业id"
 // @Success 200 {object} models.ReportMappingResp
 // @router /strategyAll [get]
 func (this *ChartPermissionAuthController) StrategyDetail() {
@@ -166,8 +167,13 @@ func (this *ChartPermissionAuthController) StrategyDetail() {
 		br.Ret = 408
 		return
 	}
+	//默认给策略的ID
+	chartPermissionId, _ := this.GetInt("ChartPermissionId")
+	if chartPermissionId == 0 {
+		chartPermissionId = utils.CE_LUE_ID
+	}
 	uid := user.UserId
-	list, err := models.GetReportMappingStrategyHomeAll()
+	list, err := models.GetReportMappingStrategyHomeAll(chartPermissionId)
 
 	if err != nil {
 		br.Msg = "获取信息失败"
@@ -289,6 +295,10 @@ func (this *ChartPermissionAuthController) ReportDetailV7() {
 			resp.List[k].IsShowSustainable = true
 		}
 	}
+	item := new(models.ChartPermission)
+	item.PermissionName = utils.GU_SHOU_NAME
+	item.ChartPermissionId = utils.GU_SHOU_ID
+	resp.List = append(resp.List, item)
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 54 - 8
controllers/industry.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"encoding/json"
 	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
 	"strconv"
 	"time"
@@ -47,18 +48,63 @@ func (this *IndustryController) Fllow() {
 	var pars []interface{}
 	var industrialIds []int
 	if source == "article" {
-		pars = make([]interface{}, 0)
-		condition = ` AND article_id  = ? `
-		pars = append(pars, sourceId)
-		industrialList, err := models.GetIndustrialArticleGroupManagementList(condition, pars)
-		if err != nil && err.Error() != utils.ErrNoRow() {
+		articleDetail, err := models.GetArticleDetailById(sourceId)
+		if err != nil {
 			br.Msg = "获取信息失败"
 			br.ErrMsg = "获取信息失败,Err:" + err.Error()
 			return
 		}
-		if len(industrialList) > 0 {
-			for _, v := range industrialList {
-				industrialIds = append(industrialIds, v.IndustrialManagementId)
+		//判读是否属于策略的文章类型
+		reportMappingMap, _ := services.GetReportMappingMap()
+		if reportMappingMap[articleDetail.CategoryId] {
+			chooseCategoryMap, _ := services.GetChooseCategoryMap(user)
+			//判断用户是否关注策略对应分类
+			if !chooseCategoryMap[articleDetail.CategoryId] {
+				item := new(models.CygxXzsChooseCategory)
+				item.CategoryId = articleDetail.CategoryId
+				item.UserId = uid
+				item.Email = user.Email
+				item.Mobile = user.Mobile
+				item.RealName = user.RealName
+				item.CompanyId = user.CompanyId
+				item.CompanyName = user.CompanyName
+				item.CreateTime = time.Now()
+				item.ModifyTime = time.Now()
+				_, err = models.AddCygxCategoryFllow(item)
+				if err != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "操作失败,Err:" + err.Error()
+					return
+				}
+				resp.Status = 1
+			} else {
+				err = models.RemoveCygxCategoryFllow(user.Mobile, articleDetail.CategoryId)
+				if err != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "取消关注失败,Err:" + err.Error()
+					return
+				}
+				resp.Status = 2
+			}
+			br.Msg = "操作成功"
+			br.Ret = 200
+			br.Success = true
+			br.Data = resp
+			return
+		} else {
+			pars = make([]interface{}, 0)
+			condition = ` AND article_id  = ? `
+			pars = append(pars, sourceId)
+			industrialList, err := models.GetIndustrialArticleGroupManagementList(condition, pars)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
+				return
+			}
+			if len(industrialList) > 0 {
+				for _, v := range industrialList {
+					industrialIds = append(industrialIds, v.IndustrialManagementId)
+				}
 			}
 		}
 	} else if source == "activity" {

+ 2 - 3
models/article.go

@@ -214,12 +214,11 @@ func GetArticleDetailByIdStr(articleIdStr string) (items []*ArticleDetail, err e
 func GetArticlePermission(companyId int) (item *ChartPermission, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-			b.* 
+			a.chart_permission_name as  permission_name
 			FROM
 			cygx_report_mapping AS a
-			INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id 
 			WHERE
-			a.category_id = ?`
+			a.category_id = ? LIMIT  1 `
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	//_, err = o.Raw(sql, companyId).QueryRows(&item)
 	return

+ 1 - 0
models/db.go

@@ -131,6 +131,7 @@ func init() {
 		new(CygxResearchSummaryVoiceHistory),
 		new(CygxMinutesSummaryVoiceHistory),
 		new(CygxReportSelectionVoiceHistory),
+		new(CygxXzsChooseCategory),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 18 - 4
models/report_mapping.go

@@ -56,7 +56,7 @@ func GetReportMappingStrategyAll() (items []*ReportMapping, err error) {
 }
 
 // 获取策略下面的所有分类
-func GetReportMappingStrategyHomeAll() (items []*ReportMappingHome, err error) {
+func GetReportMappingStrategyHomeAll(chartPermissionId int) (items []*ReportMappingHome, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
 	re.category_id,re.sub_category_name,re.match_type_name
@@ -65,12 +65,12 @@ FROM
 	INNER JOIN cygx_article AS art ON art.category_id = re.category_id 
 WHERE
 	re.report_type = 1 
-	AND re.chart_permission_id = 23 
+	AND re.chart_permission_id = ? 
 GROUP  BY
 	re.match_type_name
 ORDER BY
 	sort DESC , art.publish_date DESC`
-	_, err = o.Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql, chartPermissionId).QueryRows(&items)
 	return
 }
 
@@ -136,7 +136,7 @@ func GetdetailByCategoryIdSet(categoryId int) (ids string, err error) {
 // 通过分类ID获取详情
 func GetdetailByCategoryIdPush(categoryId int) (item *ReportMapping, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_report_mapping WHERE category_id=? `
+	sql := `SELECT * FROM cygx_report_mapping WHERE category_id=?  LIMIT 1 `
 	err = o.Raw(sql, categoryId).QueryRow(&item)
 	return
 }
@@ -252,3 +252,17 @@ WHERE
 	err = o.Raw(sql, categoryId).QueryRow(&item)
 	return
 }
+
+// 获取所有的报告分类
+func GetReportMappingByPermissionName(chartPermissionName string) (items []*ReportMapping, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+				* 
+			FROM
+				cygx_report_mapping
+			WHERE
+				1 = 1 
+				AND chart_permission_name = ? `
+	_, err = o.Raw(sql, chartPermissionName).QueryRows(&items)
+	return
+}

+ 42 - 0
models/xzs_choose_category.go

@@ -0,0 +1,42 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxXzsChooseCategory struct {
+	Id          int       `orm:"column(id);pk"`
+	UserId      int       `description:"用户ID"`
+	Mobile      string    `description:"手机号"`
+	Email       string    `description:"邮箱"`
+	CompanyId   int       `description:"公司id"`
+	CompanyName string    `description:"公司名称"`
+	RealName    string    `description:"用户实际名称"`
+	CategoryId  int       `description:"权益文章对应分类,cygx_article"`
+	CreateTime  time.Time `description:"创建时间"`
+	ModifyTime  time.Time `description:"更新时间"`
+}
+
+// 根据手机号获取用户关注的产业
+func GetCygxXzsChooseCategoryList(mobile string) (items []*CygxXzsChooseCategory, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_xzs_choose_category WHERE mobile = ?`
+	_, err = o.Raw(sql, mobile).QueryRows(&items)
+	return
+}
+
+// 添加
+func AddCygxCategoryFllow(item *CygxXzsChooseCategory) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+// 删除
+func RemoveCygxCategoryFllow(mobile string, CategoryId int) (err error) {
+	o := orm.NewOrm()
+	sql := `DELETE FROM cygx_xzs_choose_category WHERE mobile=? AND category_id=? `
+	_, err = o.Raw(sql, mobile, CategoryId).Exec()
+	return
+}

+ 20 - 12
services/article.go

@@ -674,15 +674,16 @@ func GetArticleListByApi(cont context.Context) (err error) {
 	return
 }
 
-func init122() {
-	allList, err := models.GetArticleAll()
-
-	fmt.Println(err)
-	for _, v := range allList {
-		HandleArticleListByApi(v.ArticleId)
-	}
+//func init() {
+//allList, err := models.GetArticleAll()
+//
+//fmt.Println(err)
+//for _, v := range allList {
+//	HandleArticleListByApi(v.ArticleId)
+//}
+//HandleArticleListByApi(7930)
 
-}
+//}
 
 // 处理同步过来的文章
 func HandleArticleListByApi(artcleId int) (err error) {
@@ -1160,7 +1161,7 @@ func HandleArticleListByApi(artcleId int) (err error) {
 }
 
 //func init() {
-//	DoArticleOnenIdWxTemplateMsg(6940)
+//	DoArticleOnenIdWxTemplateMsg(8081)
 //}
 
 // 过滤策略平台报告,研选报告重复推送,以及权限勾选的推送
@@ -1191,6 +1192,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	articleInfo.Abstract, _ = GetReportContentTextSub(articleInfo.Abstract)
 	var chartPermissionId int
 
+	//固收的权限,暂时当策略的逻辑一样处理
 	var chartPermissionName string
 	reportMapDetail, err := models.GetdetailByCategoryIdPush(articleInfo.CategoryId)
 	if err != nil {
@@ -1198,6 +1200,8 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	}
 	if reportMapDetail.ChartPermissionId == utils.CE_LUE_ID {
 		chartPermissionId = utils.CE_LUE_ID
+	} else if reportMapDetail.ChartPermissionId == utils.GU_SHOU_ID {
+		chartPermissionId = utils.GU_SHOU_ID
 	} else {
 		if reportMapDetail.PermissionType == 1 {
 			chartPermissionName = reportMapDetail.ChartPermissionName + "(主观)"
@@ -1214,7 +1218,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	//文章关联的产业
 	var industryName string
 	var industrialManagementId string
-	if chartPermissionId == utils.CE_LUE_ID {
+	if chartPermissionId == utils.CE_LUE_ID || chartPermissionId == utils.GU_SHOU_ID {
 		industryName = reportMapDetail.SubCategoryName
 	} else {
 		detailIndustryNameList, err := models.GetIndustrialManagemenDetailByAaticleID(articleId)
@@ -1298,6 +1302,9 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	slicepermissionId := strings.Split(strconv.Itoa(chartPermissionId), ",")
 	if len(slicepermissionId) > 0 {
 		for _, v := range slicepermissionId {
+			if v == strconv.Itoa(utils.GU_SHOU_ID) {
+				v = strconv.Itoa(utils.CE_LUE_ID)
+			}
 			permissionIdList = append(permissionIdList, v)
 		}
 		condition += ` AND p.chart_permission_id  IN (` + utils.GetOrmInReplace(len(slicepermissionId)) + ` )  `
@@ -1307,12 +1314,13 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	if err != nil {
 		return err
 	}
+	//return
 	for _, v := range openidPowerList {
 		mapOpenidPower[v.UserId] = v.OpenId
 	}
 	//获取关注这个文章对应产业的用户的 openid
 	mapOpenidFllow := make(map[int]string)
-	if chartPermissionId != utils.CE_LUE_ID {
+	if chartPermissionId != utils.CE_LUE_ID && chartPermissionId != utils.GU_SHOU_ID {
 		openidFllowList, err := models.GetCygxUserFllowOpenid(articleId)
 		if err != nil {
 			return err
@@ -1359,7 +1367,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	keyword4 := articleInfo.Abstract
 	mapAlreadySend := make(map[int]int)
 	//如果是策略就按照策略的推送方式来写
-	if reportMapDetail.ChartPermissionName == utils.CE_LUE_NAME {
+	if reportMapDetail.ChartPermissionName == utils.CE_LUE_NAME || reportMapDetail.ChartPermissionName == utils.GU_SHOU_NAME {
 		//获取提交过推送规则的用户的 openid
 		mapUserFllowCeLue := make(map[int]string)
 		userFllowCeLueList, err := models.GetCygxUserFllowCeLueOpenid(articleInfo.CategoryId)

+ 26 - 0
services/report_mapping.go

@@ -0,0 +1,26 @@
+package services
+
+import (
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+)
+
+func GetReportMappingMap() (mapResp map[int]bool, err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("GetReportMappingMap, ErrMsg: "+err.Error(), 3)
+		}
+	}()
+	mapResp = make(map[int]bool, 0)
+	list, err := models.GetReportMappingByPermissionName(utils.CE_LUE_NAME)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	if len(list) > 0 {
+		for _, v := range list {
+			mapResp[v.CategoryId] = true
+		}
+	}
+	return
+
+}

+ 29 - 0
services/xzs_choose_category.go

@@ -0,0 +1,29 @@
+package services
+
+import (
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+)
+
+func GetChooseCategoryMap(wxUser *models.WxUserItem) (mapResp map[int]bool, err error) {
+	if wxUser.Mobile == "" {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("GetChooseCategoryMap, ErrMsg: "+err.Error(), 3)
+		}
+	}()
+	mapResp = make(map[int]bool, 0)
+	list, err := models.GetCygxXzsChooseCategoryList(wxUser.Mobile)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	if len(list) > 0 {
+		for _, v := range list {
+			mapResp[v.CategoryId] = true
+		}
+	}
+	return
+
+}

+ 13 - 13
services/yidong.go

@@ -12,7 +12,7 @@ import (
 	"time"
 )
 
-//GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
+// GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
 func GetActivityTypeIdWithYiDong(industrySwName string) (chartPermissionId int) {
 	mapIndustrySwName := map[string]int{
 		"家用电器": utils.XIAO_FEI_ID,
@@ -69,7 +69,7 @@ func GetActivityTypeIdWithYiDong(industrySwName string) (chartPermissionId int)
 	return
 }
 
-//GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
+// GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
 func GetActivityTypeNameWithYiDong(industrySwName string) (chartPermissionName string) {
 	mapIndustrySwName := map[string]string{
 		"家用电器": utils.XIAO_FEI_NAME,
@@ -126,7 +126,7 @@ func GetActivityTypeNameWithYiDong(industrySwName string) (chartPermissionName s
 	return
 }
 
-//获取易董token
+// 获取易董token
 func GetYiDongToken() (token string, err error) {
 	defer func() {
 		if err != nil {
@@ -177,7 +177,7 @@ func GetYiDongToken() (token string, err error) {
 	return
 }
 
-//获取易董活动列表
+// 获取易董活动列表
 func GetYiDongActivity(cont context.Context) (err error) {
 	//func GetYiDongActivity() (err error) {
 	defer func() {
@@ -257,11 +257,11 @@ func GetYiDongActivity(cont context.Context) (err error) {
 			item.YidongActivityId = v.ID
 			item.ActivityTypeId = 3
 			item.ActivityTypeName = "公司调研电话会"
-			sliceCompanyInfo := strings.Split(v.Title, "(")
-			sliceActivityTitle := strings.Split(v.Title, ")")
+			sliceCompanyInfo := strings.Split(v.CompanyInfo, "(")
+			sliceActivityTitle := strings.Split(v.CompanyInfo, ")")
 			companyInfo := sliceCompanyInfo[0]
 			if len(sliceActivityTitle) > 1 {
-				item.ActivityName = companyInfo + sliceActivityTitle[len(sliceActivityTitle)-1]
+				item.ActivityName = companyInfo + v.Title
 			} else {
 				item.ActivityName = v.Title
 			}
@@ -336,7 +336,7 @@ func GetYiDongActivity(cont context.Context) (err error) {
 	return
 }
 
-//获取易董活动详情
+// 获取易董活动详情
 func GetYiDongActivityDetail(activityId string) (detail *models.ApifoxModaldetail, err error) {
 	defer func() {
 		if err != nil {
@@ -390,7 +390,7 @@ func GetYiDongActivityDetail(activityId string) (detail *models.ApifoxModaldetai
 	return
 }
 
-//生成用户相关信息接口 获取用户tgc
+// 生成用户相关信息接口 获取用户tgc
 func GetYiDongCreateUserInfo(user *models.WxUserItem) (userTgc string, err error) {
 	defer func() {
 		if err != nil {
@@ -441,7 +441,7 @@ func GetYiDongCreateUserInfo(user *models.WxUserItem) (userTgc string, err error
 	return
 }
 
-//GetYiDongOriginalLink 将易懂的短连接转为长链接
+// GetYiDongOriginalLink 将易懂的短连接转为长链接
 func GetYiDongOriginalLink(item *models.ActivityDetail) (yidongLongLink string, err error) {
 	defer func() {
 		if err != nil {
@@ -504,7 +504,7 @@ func GetYiDongOriginalLink(item *models.ActivityDetail) (yidongLongLink string,
 	return
 }
 
-//处理易董这边过来的时间格式
+// 处理易董这边过来的时间格式
 func GetActivityTextTime(timeYidong string) (timeText string) {
 	strTime := timeYidong
 	startTime := utils.StrTimeToTime(strTime)
@@ -546,7 +546,7 @@ func init232() {
 	//fmt.Println(timeText)
 }
 
-//GetYiDongActivityMeeting获取易董到会详情
+// GetYiDongActivityMeeting获取易董到会详情
 func GetYiDongActivityMeeting(cont context.Context) (err error) {
 	var condition string
 
@@ -672,7 +672,7 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 	return
 }
 
-//YidongActivityGroup 添加活动与产业标的的关联
+// YidongActivityGroup 添加活动与产业标的的关联
 func YidongActivityGroup(subjectName string, activityId int) (err error) {
 	subjectList, err := models.GetCygxIndustrialSubjectList(subjectName)
 	if err != nil {

+ 2 - 0
utils/constants.go

@@ -98,6 +98,8 @@ const (
 	HZ_COMPANY_ID                    int    = 16                                                                                                                                                                                                 // 弘则公司的ID
 	HONG_GUAN_NAME                   string = "宏观"
 	HONG_GUAN_ID                     int    = 1
+	GU_SHOU_NAME                     string = "固收"
+	GU_SHOU_ID                       int    = 100000   // 自定义权限类型ID ,十万起步
 	YAN_XUAN_ARTICLE_TYPE_IDS        string = "1,2,12" // 属于研选的报告类型ID
 	NO_YAN_XUAN_ARTICLE_TYPE_IDS     string = "13"     // 不属于研选的报告类型ID
 )