Przeglądaj źródła

Merge branch 'feature/eta1.6.7_permission' into debug

xyxie 1 rok temu
rodzic
commit
41f11780c3

+ 51 - 6
controllers/classify.go

@@ -199,6 +199,20 @@ func (this *ClassifyController) Add() {
 			return
 		}
 	}
+	//获取报告分类权限列表
+	if classify.ParentId > 0 { //二级分类才能修改权限
+		req2 := services.EditClassifyPermissionReq{
+			Keyword:               item.ClassifyName,
+			ChartPermissionIdList: req.ChartPermissionIdList,
+			NewKeyword:            item.ClassifyName,
+		}
+		err = services.EditClassifyChartPermission(req2)
+		if err != nil {
+			br.Msg = "修改分类权限失败"
+			br.ErrMsg = "修改分类权限失败,Err:" + err.Error()
+			return
+		}
+	}
 
 	// 新增关联了电话会的二级分类时, 同步FICC活动分类
 	//if req.ParentId > 0 && req.RelateTel == 1 {
@@ -454,7 +468,7 @@ func (this *ClassifyController) Edit() {
 		br.Msg = "分类名称:" + req.ClassifyName + "已存在"
 		return
 	}
-
+	oldClassifyName := item.ClassifyName
 	item.ClassifyName = req.ClassifyName
 	item.Abstract = req.Abstract
 	item.ParentId = req.ParentId
@@ -470,7 +484,7 @@ func (this *ClassifyController) Edit() {
 	item.ShowType = req.ShowType
 	item.HasTeleconference = req.HasTeleconference
 	item.VipTitle = req.VipTitle
-	item.Sort = req.Sort
+	//	item.Sort = req.Sort
 	item.IsShow = req.IsShow
 	item.YbFiccSort = req.YbFiccSort
 	item.YbFiccIcon = req.YbFiccIcon
@@ -504,6 +518,18 @@ func (this *ClassifyController) Edit() {
 
 	// 为二级分类时, 更新父级分类是否含电话会字段
 	if req.ParentId > 0 {
+		//二级分类才能修改权限
+		req2 := services.EditClassifyPermissionReq{
+			Keyword:               oldClassifyName,
+			ChartPermissionIdList: req.ChartPermissionIdList,
+			NewKeyword:            item.ClassifyName,
+		}
+		err = services.EditClassifyChartPermission(req2)
+		if err != nil {
+			br.Msg = "修改分类权限失败"
+			br.ErrMsg = "修改分类权限失败,Err:" + err.Error()
+			return
+		}
 		go func() {
 			_ = services.UpdateParentClassifyHasTel(req.ClassifyId, req.ParentId, req.HasTeleconference)
 		}()
@@ -795,16 +821,29 @@ func (this *ClassifyController) ListClassify() {
 		}
 	}
 
+	// 查询分类绑定的权限
+	permissionList, _ := services.GetClassifyChartPermission("")
+	classifyPermissionMap := make(map[string][]int, 0)
+	if len(permissionList) > 0 {
+		for _, v := range permissionList {
+			classifyPermissionMap[v.KeyWord] = append(classifyPermissionMap[v.KeyWord], v.ChartPermissionId)
+		}
+	}
 	// 二级分类
 	childrenMap := make(map[int][]*models.ClassifyItem, 0)
 	for i := range children {
+
 		if childrenMap[children[i].ParentId] == nil {
 			childrenMap[children[i].ParentId] = make([]*models.ClassifyItem, 0)
 		}
-		childrenMap[children[i].ParentId] = append(childrenMap[children[i].ParentId], &models.ClassifyItem{
+		tmp := &models.ClassifyItem{
 			Classify:       *children[i],
 			ClassifyMenuId: relateMap[children[i].Id],
-		})
+		}
+		if permissionIds, ok := classifyPermissionMap[children[i].ClassifyName]; ok {
+			tmp.ChartPermissionIdList = permissionIds
+		}
+		childrenMap[children[i].ParentId] = append(childrenMap[children[i].ParentId], tmp)
 	}
 
 	// 一级分类
@@ -851,7 +890,8 @@ func (this *ClassifyController) ClassifyPermission() {
 	}
 
 	//获取报告分类权限列表
-	list, err := models.GetPermission(classifyInfo.ClassifyName)
+	//list, err := models.GetPermission(classifyInfo.ClassifyName)
+	list, err := services.GetClassifyChartPermission(classifyInfo.ClassifyName)
 	if err != nil {
 		br.Msg = "获取分类信息失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -902,7 +942,12 @@ func (this *ClassifyController) EditClassifyPermission() {
 	}
 
 	//获取报告分类权限列表
-	err = models.EditChartPermissionSearchKeyWordMappingMulti(classifyInfo.ClassifyName, req.ChartPermissionIdList)
+	req2 := services.EditClassifyPermissionReq{
+		Keyword:               classifyInfo.ClassifyName,
+		ChartPermissionIdList: req.ChartPermissionIdList,
+		NewKeyword:            classifyInfo.ClassifyName,
+	}
+	err = services.EditClassifyChartPermission(req2)
 	if err != nil {
 		br.Msg = "修改分类权限失败"
 		br.ErrMsg = "修改分类权限失败,Err:" + err.Error()

+ 86 - 19
controllers/english_report/english_classify.go

@@ -191,17 +191,25 @@ func (this *EnglishReportController) ListClassify() {
 // @Param   ParentId   query   int  true       "父级Id 添加父级时为0"
 // @Param   Sort   query   string  false       "排序"
 // @Success 200 新增成功
-// @router /classify/add [get]
+// @router /classify/add [post]
 func (this *EnglishReportController) AddClassify() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-	classifyName := this.GetString("ClassifyName")
-	parentId, _ := this.GetInt("ParentId")
-	sort, _ := this.GetInt("Sort")
-
+	//classifyName := this.GetString("ClassifyName")
+	//parentId, _ := this.GetInt("ParentId")
+	var req models.EnClassifyAddReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	classifyName := req.ClassifyName
+	parentId := req.ParentId
+	ob := new(models.EnglishClassify)
 	// 查新父级分类是否存在
 	rootId := 0
 	if parentId > 0 {
@@ -221,14 +229,21 @@ func (this *EnglishReportController) AddClassify() {
 			rootId = parentClassify.RootId
 		}
 	}
+	maxSort, e := ob.GetMaxSort()
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "查询品种排序失败, Err: " + e.Error()
+		return
+	}
 
+	nowTime := time.Now().Local()
 	item := &models.EnglishClassify{
 		ClassifyName: classifyName,
-		Sort:         sort,
+		Sort:         maxSort + 1,
 		ParentId:     parentId,
 		RootId:       rootId,
-		CreateTime:   time.Now(),
-		ModifyTime:   time.Now(),
+		CreateTime:   nowTime,
+		ModifyTime:   nowTime,
 		IsShow:       1,
 	}
 	counts, err := models.GetEnglishClassifyCountsByName(classifyName, parentId)
@@ -249,8 +264,8 @@ func (this *EnglishReportController) AddClassify() {
 		br.ErrMsg = "保存失败,Err:" + err.Error()
 		return
 	}
+	item.Id = int(newId)
 	if parentId == 0 { //一级目录的rootId等于自己本身
-		item.Id = int(newId)
 		item.RootId = int(newId)
 		err = item.UpdateEnglishClassify([]string{"RootId"})
 		if err != nil {
@@ -260,11 +275,28 @@ func (this *EnglishReportController) AddClassify() {
 		}
 	}
 
+	if item.ParentId != item.RootId && item.ParentId > 0 { //三级分类才能绑定品种权限
+		permissions := make([]*models.EnClassifyPermission, 0)
+		for _, p := range req.EnPermissions {
+			v := new(models.EnClassifyPermission)
+			v.EnPermissionId = p
+			v.EnClassifyId = item.Id
+			v.CreateTime = nowTime
+			permissions = append(permissions, v)
+		}
+		if e = models.CreateEnClassifyPermissions(permissions); e != nil {
+			br.Msg = "保存失败"
+			br.ErrMsg = "更新分类品种权限失败, Err: " + e.Error()
+			return
+		}
+	}
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "新增成功"
 }
 
+// EditClassify
 // @Title 编辑分类
 // @Description 编辑分类接口
 // @Param   ClassifyId   int  true       "分类Id"
@@ -272,17 +304,25 @@ func (this *EnglishReportController) AddClassify() {
 // @Param   ParentId   query   int  true       "父级Id 添加父级时为0"
 // @Param   Sort   query   string  false       "排序"
 // @Success 200 保存成功
-// @router /classify/edit [get]
+// @router /classify/edit [post]
 func (this *EnglishReportController) EditClassify() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-	classifyId, _ := this.GetInt("ClassifyId")
-	classifyName := this.GetString("ClassifyName")
-	parentId, _ := this.GetInt("ParentId")
-	sort, _ := this.GetInt("Sort")
+
+	var req models.EnClassifyEditReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	classifyId := req.ClassifyId
+	classifyName := req.ClassifyName
+	parentId := req.ParentId
+	//ob := new(models.EnglishClassify)
 
 	if parentId == classifyId {
 		br.Msg = "上级分类不能选择自己"
@@ -359,14 +399,24 @@ func (this *EnglishReportController) EditClassify() {
 	if parentId == 0 { //一级分类的顶级分类为自己的ID
 		rootId = oldItem.Id
 	}
+
+	/*maxSort, e := ob.GetMaxSortByParentId(parentId)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "查询品种排序失败, Err: " + e.Error()
+		return
+	}*/
+
+	nowTime := time.Now().Local()
+
 	item := &models.EnglishClassify{
 		Id:           oldItem.Id,
 		ClassifyName: classifyName,
-		Sort:         sort,
-		ParentId:     parentId,
-		RootId:       rootId,
-		ModifyTime:   time.Now(),
-		IsShow:       1,
+		//	Sort:         maxSort + 1,
+		ParentId:   parentId,
+		RootId:     rootId,
+		ModifyTime: nowTime,
+		IsShow:     1,
 	}
 	{
 		// 更新研报里的分类名称
@@ -389,6 +439,23 @@ func (this *EnglishReportController) EditClassify() {
 		br.ErrMsg = "保存失败,Err:" + err.Error()
 		return
 	}
+	// 更新权限
+	if item.ParentId != item.RootId && item.ParentId > 0 { //三级分类才能编辑品种
+		permissions := make([]*models.EnClassifyPermission, 0)
+		for _, p := range req.EnPermissions {
+			v := new(models.EnClassifyPermission)
+			v.EnPermissionId = p
+			v.EnClassifyId = req.ClassifyId
+			v.CreateTime = nowTime
+			permissions = append(permissions, v)
+		}
+		if e = models.ClearAndCreateEnClassifyPermissions(req.ClassifyId, permissions); e != nil {
+			br.Msg = "保存失败"
+			br.ErrMsg = "更新分类品种权限失败, Err: " + e.Error()
+			return
+		}
+	}
+
 	err = models.UpdateEnglishReportClassifyByFirstSecondClassifyId(classifyId, parentId)
 	if err != nil {
 		br.Msg = "保存失败"

+ 33 - 32
models/classify.go

@@ -44,35 +44,36 @@ type Classify struct {
 }
 
 type ClassifyAddReq struct {
-	ClassifyName      string                 `description:"分类名称"`
-	ParentId          int                    `description:"父级分类id,没有父级分类传0"`
-	Abstract          string                 `description:"栏目简介"`
-	Descript          string                 `description:"分享描述"`
-	ReportAuthor      string                 `description:"栏目作者"`
-	AuthorDescript    string                 `description:"作者简介"`
-	ColumnImgUrl      string                 `description:"栏目配图"`
-	ReportImgUrl      string                 `description:"报告配图"`
-	HeadImgUrl        string                 `description:"头部banner"`
-	AvatarImgUrl      string                 `description:"头像"`
-	HomeImgUrl        string                 `description:"首页配图"`
-	ClassifyLabel     string                 `description:"分类标签"`
-	ShowType          int                    `description:"展示类型:1-列表 2-专栏"`
-	HasTeleconference int                    `description:"是否有电话会:0-否 1-是"`
-	VipTitle          string                 `description:"研究员头衔"`
-	Sort              int                    `description:"后台排序"`
-	IsShow            int                    `description:"是否在小程序显示:1-显示 0-隐藏"`
-	YbFiccSort        int                    `description:"小程序FICC页排序"`
-	YbFiccIcon        string                 `description:"小程序FICC页icon"`
-	YbFiccPcIcon      string                 `description:"小程序PC端FICC页背景图"`
-	YbIconUrl         string                 `description:"小程序已购页icon"`
-	YbBgUrl           string                 `description:"小程序已购详情背景图"`
-	YbListImg         string                 `description:"小程序研报列表封面图"`
-	YbShareBgImg      string                 `description:"小程序研报详情分享背景图"`
-	YbRightBanner     string                 `description:"Pc端详情页,右侧,报告合集背景图"`
-	MenuList          []*ClassifyMenuSaveReq `description:"子目录列表"`
-	ClassifyMenuId    int                    `description:"二级分类-子目录ID"`
-	RelateTel         int                    `description:"是否在电话会中可选: 0-否; 1-是"`
-	RelateVideo       int                    `description:"是否在路演视频中可选: 0-否; 1-是"`
+	ClassifyName          string                 `description:"分类名称"`
+	ParentId              int                    `description:"父级分类id,没有父级分类传0"`
+	ChartPermissionIdList []int                  `description:"权限id数组"`
+	Abstract              string                 `description:"栏目简介"`
+	Descript              string                 `description:"分享描述"`
+	ReportAuthor          string                 `description:"栏目作者"`
+	AuthorDescript        string                 `description:"作者简介"`
+	ColumnImgUrl          string                 `description:"栏目配图"`
+	ReportImgUrl          string                 `description:"报告配图"`
+	HeadImgUrl            string                 `description:"头部banner"`
+	AvatarImgUrl          string                 `description:"头像"`
+	HomeImgUrl            string                 `description:"首页配图"`
+	ClassifyLabel         string                 `description:"分类标签"`
+	ShowType              int                    `description:"展示类型:1-列表 2-专栏"`
+	HasTeleconference     int                    `description:"是否有电话会:0-否 1-是"`
+	VipTitle              string                 `description:"研究员头衔"`
+	Sort                  int                    `description:"后台排序"`
+	IsShow                int                    `description:"是否在小程序显示:1-显示 0-隐藏"`
+	YbFiccSort            int                    `description:"小程序FICC页排序"`
+	YbFiccIcon            string                 `description:"小程序FICC页icon"`
+	YbFiccPcIcon          string                 `description:"小程序PC端FICC页背景图"`
+	YbIconUrl             string                 `description:"小程序已购页icon"`
+	YbBgUrl               string                 `description:"小程序已购详情背景图"`
+	YbListImg             string                 `description:"小程序研报列表封面图"`
+	YbShareBgImg          string                 `description:"小程序研报详情分享背景图"`
+	YbRightBanner         string                 `description:"Pc端详情页,右侧,报告合集背景图"`
+	MenuList              []*ClassifyMenuSaveReq `description:"子目录列表"`
+	ClassifyMenuId        int                    `description:"二级分类-子目录ID"`
+	RelateTel             int                    `description:"是否在电话会中可选: 0-否; 1-是"`
+	RelateVideo           int                    `description:"是否在路演视频中可选: 0-否; 1-是"`
 }
 
 func GetClassifyByName(classifyName string, parentId int) (item *Classify, err error) {
@@ -190,13 +191,13 @@ type ClassifyList struct {
 	Enabled           int       `description:"是否可用,1可用,0禁用"`
 	Child             []*ClassifyItem
 	ClassifyMenuList  []*ClassifyMenu
-	Permissions       []int `description:"绑定的权限ID"`
 }
 
 type ClassifyItem struct {
 	Classify
-	ClassifyMenuId   int `description:"二级分类-子目录ID"`
-	ClassifyMenuList []*ClassifyMenu
+	ClassifyMenuId        int `description:"二级分类-子目录ID"`
+	ClassifyMenuList      []*ClassifyMenu
+	ChartPermissionIdList []int `description:"绑定的权限ID"`
 }
 
 type ClassifyListResp struct {

+ 12 - 1
models/en_classify_permission.go

@@ -1,9 +1,9 @@
 package models
 
 import (
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
-	"eta/eta_api/utils"
 	"strings"
 	"time"
 )
@@ -128,6 +128,17 @@ func ClearAndCreateEnClassifyPermissions(classifyId int, permissions []*EnClassi
 	return
 }
 
+func CreateEnClassifyPermissions(permissions []*EnClassifyPermission) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	if len(permissions) > 0 {
+		if _, e := o.InsertMulti(len(permissions), permissions); e != nil {
+			err = fmt.Errorf("insert multi err: %s", e.Error())
+			return
+		}
+	}
+	return
+}
+
 type EnClassifyPermissionEditReq struct {
 	ClassifyId    int   `description:"分类ID"`
 	EnPermissions []int `description:"权限IDs"`

+ 11 - 0
models/english_classify.go

@@ -45,3 +45,14 @@ type EnglishClassifyMoveReq struct {
 	PrevClassifyId int `description:"上一个兄弟节点分类id"`
 	NextClassifyId int `description:"下一个兄弟节点分类id"`
 }
+
+type EnClassifyAddReq struct {
+	EnPermissions []int  `description:"权限IDs"`
+	ClassifyName  string `description:"分类名称"`
+	ParentId      int    `description:"父级分类id"`
+}
+
+type EnClassifyEditReq struct {
+	ClassifyId int `description:"分类ID"`
+	EnClassifyAddReq
+}

+ 2 - 2
routers/commentsRouter.go

@@ -4916,7 +4916,7 @@ func init() {
         beego.ControllerComments{
             Method: "AddClassify",
             Router: `/classify/add`,
-            AllowHTTPMethods: []string{"get"},
+            AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})
@@ -4934,7 +4934,7 @@ func init() {
         beego.ControllerComments{
             Method: "EditClassify",
             Router: `/classify/edit`,
-            AllowHTTPMethods: []string{"get"},
+            AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,
             Params: nil})

+ 87 - 0
services/chart_permission.go

@@ -37,6 +37,9 @@ type GetChartPermissionResp struct {
 }
 
 func getChartPermission(pars GetChartPermissionReq) (res GetChartPermissionItem, err error) {
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
 	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/list")
 	if pars.ProductId == 0 {
 		pars.ProductId = 1 //默认查ficc的品种
@@ -136,6 +139,9 @@ func crmEtaPost(url string, pars interface{}) (respBody []byte, err error) {
 }
 
 func AddChartPermission(pars *ChartPermissionAddReq) (err error, errMsg string) {
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
 	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/add")
 	if pars.ProductId == 0 {
 		pars.ProductId = 1 //默认新增ficc的品种
@@ -163,6 +169,9 @@ func AddChartPermission(pars *ChartPermissionAddReq) (err error, errMsg string)
 }
 
 func EditChartPermission(pars *ChartPermissionEditReq) (err error, errMsg string) {
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
 	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/edit")
 	b, err := crmEtaPost(url, pars)
 	if err != nil {
@@ -187,6 +196,9 @@ func EditChartPermission(pars *ChartPermissionEditReq) (err error, errMsg string
 }
 
 func MoveChartPermission(pars *ChartPermissionMoveReq) (err error, errMsg string) {
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
 	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/move")
 	b, err := crmEtaPost(url, pars)
 	if err != nil {
@@ -210,6 +222,7 @@ func MoveChartPermission(pars *ChartPermissionMoveReq) (err error, errMsg string
 	return
 }
 
+// GetChartPermissionEnabledList 查询已启用的FICC权限列表
 func GetChartPermissionEnabledList() (list []*company.PermissionSetList, err error) {
 	var req GetChartPermissionReq
 	data, err := getChartPermission(req)
@@ -254,3 +267,77 @@ func GetChartPermissionEnabledList() (list []*company.PermissionSetList, err err
 	}
 	return
 }
+
+type EditClassifyPermissionReq struct {
+	Keyword               string
+	ChartPermissionIdList []int `description:"权限id数组"`
+	NewKeyword            string
+}
+
+// GetClassifyChartPermission 获取报告分类已绑定的权限
+func GetClassifyChartPermission(classifyName string) (list []*models.ChartPermissionSearchKeyWordMapping, err error) {
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
+	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/classify")
+	var req ClassifyPermissionReq
+	req.Keyword = classifyName
+	b, err := crmEtaPost(url, req)
+	if err != nil {
+		err = fmt.Errorf("url:%s err: %s", url, err.Error())
+		return
+	}
+	//result := new(models.ResultData)
+	result := new(GetClassifyChartPermissionResp)
+	if e := json.Unmarshal(b, &result); e != nil {
+		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+		return
+	}
+	utils.FileLog.Info("%s", string(b))
+	if result.Code != 200 {
+		err = fmt.Errorf("result: %s", string(b))
+		return
+	}
+	list = result.Data.List
+	return
+}
+
+type ClassifyPermissionReq struct {
+	Keyword string
+}
+
+type ClassifyPermissionList struct {
+	List []*models.ChartPermissionSearchKeyWordMapping
+}
+
+type GetClassifyChartPermissionResp struct {
+	Code   int                    `json:"code" description:"状态码"`
+	Msg    string                 `json:"msg" description:"提示信息"`
+	Data   ClassifyPermissionList `json:"data" description:"返回数据"`
+	ErrMsg string                 `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
+}
+
+// EditClassifyChartPermission 设置报告分类权限
+func EditClassifyChartPermission(req EditClassifyPermissionReq) (err error) {
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
+	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/classify/edit")
+	b, err := crmEtaPost(url, req)
+	if err != nil {
+		err = fmt.Errorf("url:%s err: %s", url, err.Error())
+		return
+	}
+	//result := new(models.ResultData)
+	result := new(ChartPermissionResp)
+	if e := json.Unmarshal(b, &result); e != nil {
+		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+		return
+	}
+	utils.FileLog.Info("%s", string(b))
+	if result.Code != 200 {
+		err = fmt.Errorf("result: %s", string(b))
+		return
+	}
+	return
+}