Browse Source

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

xyxie 1 year ago
parent
commit
df87aa3ba2

+ 11 - 26
controllers/chart_permission.go

@@ -34,8 +34,9 @@ func (this *ChartPermissionController) List() {
 		br.Ret = 408
 		return
 	}
-
-	list, e := services.GetChartPermissionList()
+	cond := ``
+	pars := make([]interface{}, 0)
+	list, e := services.GetChartPermissionList(cond, pars)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取品种列表失败, Err: " + e.Error()
@@ -106,15 +107,10 @@ func (this *ChartPermissionController) Add() {
 		return
 	}
 	if req.PermissionName == "" {
-		br.Msg = "参数有误"
+		br.Msg = "请输入品种名称"
 		return
 	}
-	var req2 services.ChartPermissionAddReq
-	req2.PermissionName = req.PermissionName
-	req2.ParentId = req.ParentId
-	req2.IsPublic = req.IsPublic
-	req2.Enabled = req.Enabled
-	e, msg := services.AddChartPermission(&req2)
+	e, msg := services.AddChartPermission(req)
 	if e != nil {
 		br.Msg = msg
 		br.ErrMsg = "新增品种失败, Err: " + e.Error()
@@ -154,7 +150,7 @@ func (this *ChartPermissionController) Edit() {
 		br.ErrMsg = "参数解析失败,Err:" + e.Error()
 		return
 	}
-	if req.PermissionId == 0 {
+	if req.PermissionId <= 0 {
 		br.Msg = "请选择要编辑的品种"
 		return
 	}
@@ -163,13 +159,8 @@ func (this *ChartPermissionController) Edit() {
 		br.Msg = "请输入品种名称"
 		return
 	}
-	var req2 services.ChartPermissionEditReq
-	req2.ChartPermissionId = req.PermissionId
-	req2.PermissionName = req.PermissionName
-	req2.ParentId = req.ParentId
-	req2.IsPublic = req.IsPublic
-	req2.PublicPermissionIds = req.PublicPermissionIds
-	e, msg := services.EditChartPermission(&req2)
+
+	e, msg := services.EditChartPermission(req)
 	if e != nil {
 		br.Msg = msg
 		br.ErrMsg = "编辑品种失败, Err: " + e.Error()
@@ -215,11 +206,7 @@ func (this *ChartPermissionController) Move() {
 		br.Msg = "请选择要移动的品种"
 		return
 	}
-	var req2 services.ChartPermissionMoveReq
-	req2.ChartPermissionId = req.PermissionId
-	req2.PrevChartPermissionId = req.PrevPermissionId
-	req2.NextChartPermissionId = req.NextPermissionId
-	e, msg := services.MoveChartPermission(&req2)
+	e, msg := services.MoveChartPermission(req)
 	if e != nil {
 		br.Msg = msg
 		br.ErrMsg = "移动品种失败, Err: " + e.Error()
@@ -267,10 +254,8 @@ func (this *ChartPermissionController) SetEnabled() {
 		br.Msg = "请选择正确的启用禁用状态"
 		return
 	}
-	var req2 services.ChartPermissionEnabledReq
-	req2.ChartPermissionId = req.PermissionId
-	req2.Enabled = req.Enabled
-	e, msg := services.SetEnabledChartPermission(&req2)
+
+	e, msg := services.SetEnabledChartPermission(req)
 	if e != nil {
 		br.Msg = msg
 		br.ErrMsg = "编辑品种失败, Err: " + e.Error()

+ 15 - 23
controllers/classify.go

@@ -91,6 +91,7 @@ func (this *ClassifyController) Add() {
 	classify.ModifyTime = nowTime
 	classify.Sort = maxSort + 1
 	classify.Enabled = 1
+	classify.ShowType = 1 //默认列表格式
 	/*classify.Abstract = req.Abstract
 	classify.Descript = req.Descript
 	classify.Abstract = req.Abstract
@@ -201,17 +202,15 @@ func (this *ClassifyController) Add() {
 	}*/
 	//获取报告分类权限列表
 	if classify.ParentId > 0 { //二级分类才能修改权限
-		req2 := services.EditClassifyPermissionReq{
-			Keyword:               req.ClassifyName,
-			ChartPermissionIdList: req.ChartPermissionIdList,
-			NewKeyword:            req.ClassifyName,
-		}
-		err = services.EditClassifyChartPermission(req2)
+		err = models.EditChartPermissionSearchKeyWordMappingMulti(req.ClassifyName, req.ChartPermissionIdList)
 		if err != nil {
 			br.Msg = "修改分类权限失败"
 			br.ErrMsg = "修改分类权限失败,Err:" + err.Error()
 			return
 		}
+		go func() {
+			_ = services.EditClassifyChartPermissionSync(req.ClassifyName)
+		}()
 	}
 
 	// 新增关联了电话会的二级分类时, 同步FICC活动分类
@@ -468,7 +467,6 @@ func (this *ClassifyController) Edit() {
 		br.Msg = "分类名称:" + req.ClassifyName + "已存在"
 		return
 	}
-	oldClassifyName := item.ClassifyName
 	item.ClassifyName = req.ClassifyName
 	item.ParentId = req.ParentId
 	item.ModifyTime = time.Now().Local()
@@ -529,17 +527,15 @@ func (this *ClassifyController) Edit() {
 	// 为二级分类时, 更新父级分类是否含电话会字段
 	if req.ParentId > 0 {
 		//二级分类才能修改权限
-		req2 := services.EditClassifyPermissionReq{
-			Keyword:               oldClassifyName,
-			ChartPermissionIdList: req.ChartPermissionIdList,
-			NewKeyword:            item.ClassifyName,
-		}
-		err = services.EditClassifyChartPermission(req2)
+		err = models.EditChartPermissionSearchKeyWordMappingMulti(item.ClassifyName, req.ChartPermissionIdList)
 		if err != nil {
 			br.Msg = "修改分类权限失败"
 			br.ErrMsg = "修改分类权限失败,Err:" + err.Error()
 			return
 		}
+		go func() {
+			_ = services.EditClassifyChartPermissionSync(item.ClassifyName)
+		}()
 		/*go func() {
 			_ = services.UpdateParentClassifyHasTel(req.ClassifyId, req.ParentId, req.HasTeleconference)
 		}()*/
@@ -819,7 +815,7 @@ func (this *ClassifyController) ListClassify() {
 	}
 
 	// 查询分类绑定的权限
-	permissionList, _ := services.GetClassifyChartPermission("")
+	permissionList, _ := models.GetAllPermissionMapping()
 	classifyPermissionMap := make(map[string][]int, 0)
 	if len(permissionList) > 0 {
 		for _, v := range permissionList {
@@ -885,8 +881,7 @@ func (this *ClassifyController) ClassifyPermission() {
 	}
 
 	//获取报告分类权限列表
-	//list, err := models.GetPermission(classifyInfo.ClassifyName)
-	list, err := services.GetClassifyChartPermission(classifyInfo.ClassifyName)
+	list, err := models.GetPermission(classifyInfo.ClassifyName)
 	if err != nil {
 		br.Msg = "获取分类信息失败"
 		br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -937,18 +932,15 @@ func (this *ClassifyController) EditClassifyPermission() {
 	}
 
 	//获取报告分类权限列表
-	req2 := services.EditClassifyPermissionReq{
-		Keyword:               classifyInfo.ClassifyName,
-		ChartPermissionIdList: req.ChartPermissionIdList,
-		NewKeyword:            classifyInfo.ClassifyName,
-	}
-	err = services.EditClassifyChartPermission(req2)
+	err = models.EditChartPermissionSearchKeyWordMappingMulti(classifyInfo.ClassifyName, req.ChartPermissionIdList)
 	if err != nil {
 		br.Msg = "修改分类权限失败"
 		br.ErrMsg = "修改分类权限失败,Err:" + err.Error()
 		return
 	}
-
+	go func() {
+		_ = services.EditClassifyChartPermissionSync(classifyInfo.ClassifyName)
+	}()
 	// 是关联电话会二级分类修改了权限, 同步关联报告电话会的分类
 	//if classifyInfo.ParentId > 0 && classifyInfo.RelateTel == 1 {
 	//	go func() {

+ 1 - 1
controllers/report_chapter_type.go

@@ -283,7 +283,7 @@ func (this *ReportChapterTypeController) AuthSetting() {
 		return
 	}
 	// todo 测试品种在报告中的使用
-	permissionList, e := services.GetChartPermissionList()
+	permissionList, e := services.GetChartPermissionList("", []interface{}{})
 	if e != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "获取权限列表失败, Err: " + e.Error()

+ 159 - 25
models/chart_permission.go

@@ -1,34 +1,38 @@
 package models
 
 import (
+	"eta/eta_api/utils"
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
 
 // ChartPermission 报告权限表
 type ChartPermission struct {
-	ChartPermissionId   int       `orm:"column(chart_permission_id);pk" description:"问题ID" json:"chart_permission_id"`
-	ChartPermissionName string    `description:"名称" json:"chart_permission_name"`
-	PermissionName      string    `description:"权限名" json:"permission_name"`
-	Sort                int       `description:"排序" json:"sort"`
-	Enabled             int       `description:"是否可用" json:"enabled"`
-	CreatedTime         time.Time `description:"创建时间" json:"created_time"`
-	LastUpdatedTime     time.Time `description:"更新时间" json:"last_updated_time"`
-	TeleconferenceSort  int       `description:"电话会类型排序" json:"teleconference_sort"`
-	Remark              string    `description:"备注" json:"remark"`
-	ClassifyName        string    `description:"分类名称" json:"classify_name"`
-	ProductName         string    `description:"产品名称" json:"product_name"`
-	ProductId           int       `description:"产品ID" json:"product_id"`
-	ImageURL            string    `description:"图片地址" json:"image_url"`
-	ShowType            int       `description:"1:查研观向小程序展示" json:"show_type"`
-	IsOther             int       `description:"是否是其他,用于查研观向小程序后台展示" json:"is_other"`
-	IsReport            int       `description:"是否是报告,用于查研观向小程序前台报告展示" json:"is_report"`
-	CygxAuth            int       `description:"是否是权限,用于查研观向小程序前台权限校验" json:"cygx_auth"`
-	YbImgUrl            string    `description:"研报小程序报告列表icon" json:"yb_img_url"`
-	PriceDrivenState    int       `description:"品种价格驱动开启状态 0-关闭 1-开启" json:"price_driven_state"`
-	ParentId            int       `description:"父级权限id" json:"parent_id"`
-	IsPublic            int       `description:"是否是公有权限1:公有权限,0私有权限" json:"is_public"`
-	PermissionType      int       `description:"1主观,2客观" json:"permission_type"`
+	ChartPermissionId     int       `orm:"column(chart_permission_id);pk" description:"问题ID" json:"chart_permission_id"`
+	ChartPermissionName   string    `description:"名称" json:"chart_permission_name"`
+	PermissionName        string    `description:"权限名" json:"permission_name"`
+	Sort                  int       `description:"排序" json:"sort"`
+	Enabled               int       `description:"是否可用" json:"enabled"`
+	CreatedTime           time.Time `description:"创建时间" json:"created_time"`
+	LastUpdatedTime       time.Time `description:"更新时间" json:"last_updated_time"`
+	TeleconferenceSort    int       `description:"电话会类型排序" json:"teleconference_sort"`
+	Remark                string    `description:"备注" json:"remark"`
+	ClassifyName          string    `description:"分类名称" json:"classify_name"`
+	ProductName           string    `description:"产品名称" json:"product_name"`
+	ProductId             int       `description:"产品ID" json:"product_id"`
+	ImageURL              string    `orm:"column(image_url);" description:"图片地址" json:"image_url"`
+	ShowType              int       `description:"1:查研观向小程序展示" json:"show_type"`
+	IsOther               int       `description:"是否是其他,用于查研观向小程序后台展示" json:"is_other"`
+	IsReport              int       `description:"是否是报告,用于查研观向小程序前台报告展示" json:"is_report"`
+	CygxAuth              int       `description:"是否是权限,用于查研观向小程序前台权限校验" json:"cygx_auth"`
+	PermissionType        int       `description:"1主观,2客观" json:"permission_type"`
+	YbImgUrl              string    `description:"研报小程序报告列表icon" json:"yb_img_url"`
+	ProductPermissionName string    `description:"种类权限名称" json:"product_permission_name"`
+	PriceDrivenState      int       `description:"品种价格驱动开启状态 0-关闭 1-开启" json:"price_driven_state"`
+	ImageUrlM             string    `description:"图片地址(查研观向移动端)" json:"image_url_m"`
+	ParentId              int       `description:"父级权限id" json:"parent_id"`
+	IsPublic              int       `description:"是否是公有权限1:公有权限,0私有权限" json:"is_public"`
 }
 
 type ChartPermissionItem struct {
@@ -43,9 +47,9 @@ type ChartPermissionItem struct {
 }
 
 // Update 更新
-func (chartPermissionInfo *ChartPermission) Update(cols []string) (err error) {
-	o := orm.NewOrmUsingDB("weekly")
-	_, err = o.Update(chartPermissionInfo, cols...)
+func (c *ChartPermission) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	_, err = o.Update(c, cols...)
 	return
 }
 
@@ -76,3 +80,133 @@ type PermissionMoveReq struct {
 	PrevPermissionId int `description:"上一个兄弟节点品种id"`
 	NextPermissionId int `description:"下一个兄弟节点品种id"`
 }
+
+func (c *ChartPermission) SetEnabled(id, enabled int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+	sql := ` UPDATE chart_permission SET enabled =?  WHERE id = ?`
+	_, err = to.Raw(sql, enabled, id).Exec()
+	if err != nil {
+		return
+	}
+	sql = ` UPDATE chart_permission SET enabled =?  WHERE parent_id = ?`
+	_, err = to.Raw(sql, enabled, id).Exec()
+	if err != nil {
+		return
+	}
+	return
+}
+
+// Create 新增权限
+func (c *ChartPermission) Create() (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	id, err := o.Insert(c)
+	if err != nil {
+		return
+	}
+	c.ChartPermissionId = int(id)
+	return
+}
+
+// SetIsPublic 更新公有私有权限
+func (c *ChartPermission) SetIsPublic(ids []int, parentId, isPublic int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `update chart_permission set is_public=? WHERE parent_id = ?  and  chart_permission_id IN (` + utils.GetOrmInReplace(len(ids)) + `)`
+	_, err = o.Raw(sql, isPublic, parentId, ids).Exec()
+	return
+}
+
+// UpdatesByParentId 更新启动禁用
+func (c *ChartPermission) UpdateClassifyNameByParentId(parentId int, classifyName string) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `update chart_permission set classify_name=? WHERE parent_id = ?`
+	_, err = o.Raw(sql, classifyName, parentId).Exec()
+	return
+}
+
+// SetEnabledByParentId 更新启动禁用
+func (c *ChartPermission) SetEnabledByParentId(parentId, enabled int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := ` UPDATE chart_permission SET enabled =?  WHERE parent_id = ?`
+	_, err = o.Raw(sql, enabled, parentId).Exec()
+	return
+}
+
+// SetEnabledByChartPermissionId 更新启动禁用
+func (c *ChartPermission) SetEnabledByChartPermissionId(chartPermissionId, enabled int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := ` UPDATE chart_permission SET enabled =?  WHERE chart_permission_id = ?`
+	_, err = o.Raw(sql, enabled, chartPermissionId).Exec()
+	return
+}
+
+// GetItemById 查询品种
+func (c *ChartPermission) GetItemById(chartPermissionId int) (item *ChartPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `select * from chart_permission WHERE chart_permission_id = ?`
+	err = o.Raw(sql, chartPermissionId).QueryRow(&item)
+	return
+}
+
+// GetItemsByCondition 查询列表
+func (c *ChartPermission) GetItemsByCondition(condition string, pars []interface{}) (items []*ChartPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `select * from chart_permission WHERE 1=1 ` + condition + ` order by sort asc, chart_permission_id asc`
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// GetItemByCondition 查询列表
+func (c *ChartPermission) GetItemByCondition(condition string, pars []interface{}) (item *ChartPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `select * from chart_permission WHERE 1=1 ` + condition
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+// UpdateChartPermissionSortByParentId 根据父类id更新排序
+func UpdateChartPermissionSortByParentId(parentId, chartPermissionId, nowSort int, updateSort string, productId int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := ` update chart_permission set sort = ` + updateSort + ` WHERE parent_id=? AND product_id = ? AND (sort > ? `
+	if chartPermissionId > 0 {
+		sql += ` or ( chart_permission_id > ` + fmt.Sprint(chartPermissionId) + ` and sort = ` + fmt.Sprint(nowSort) + `))`
+	} else {
+		sql += `)`
+	}
+	_, err = o.Raw(sql, parentId, productId, nowSort).Exec()
+	return
+}
+
+// GetMaxSort 获取最大的排序值
+func (c *ChartPermission) GetMaxSort() (maxSort int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `select max(sort) from chart_permission `
+	err = o.Raw(sql).QueryRow(&maxSort)
+	return
+}
+
+// GetMaxSortByParentId 获取最大的排序值
+func (c *ChartPermission) GetMaxSortByParentId(parentId int) (maxSort int, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `select max(sort) from chart_permission WHERE parent_id=? `
+	err = o.Raw(sql, parentId).QueryRow(&maxSort)
+	return
+}
+
+// GetFirstChartPermissionByParentId 获取当前父级分类下,且排序数相同 的排序第一条的数据
+func (c *ChartPermission) GetFirstChartPermissionByParentId(parentId int) (item *ChartPermission, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `select * from chart_permission WHERE parent_id=? ORDER BY sort ASC, chart_permission_id ASC LIMIT 1`
+	err = o.Raw(sql, parentId).QueryRow(item)
+	return
+}

+ 9 - 2
models/permission.go

@@ -13,15 +13,22 @@ type ChartPermissionSearchKeyWordMapping struct {
 }
 
 func GetPermission(classifyNameSecond string) (items []*ChartPermissionSearchKeyWordMapping, err error) {
-	o := orm.NewOrmUsingDB("weekly")
+	o := orm.NewOrmUsingDB("rddp")
 	sql := `SELECT * FROM chart_permission_search_key_word_mapping AS a WHERE a.from='rddp' AND a.key_word=? `
 	_, err = o.Raw(sql, classifyNameSecond).QueryRows(&items)
 	return
 }
 
+func GetAllPermissionMapping() (items []*ChartPermissionSearchKeyWordMapping, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `SELECT * FROM chart_permission_search_key_word_mapping AS a WHERE a.from='rddp'`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
 // EditChartPermissionSearchKeyWordMappingMulti 修改报告报告权限(先删除原有的权限,再添加新的权限)
 func EditChartPermissionSearchKeyWordMappingMulti(keyword string, permissionIdList []int) (err error) {
-	o := orm.NewOrmUsingDB("weekly")
+	o := orm.NewOrmUsingDB("rddp")
 	to, err := o.Begin()
 	if err != nil {
 		return

+ 373 - 271
services/chart_permission.go

@@ -1,268 +1,444 @@
 package services
 
 import (
-	"encoding/json"
 	"eta/eta_api/models"
 	"eta/eta_api/models/company"
 	"eta/eta_api/utils"
 	"fmt"
-	"io/ioutil"
-	"net/http"
-	"strings"
+	"time"
 )
 
-func GetChartPermissionList() (list []*models.ChartPermission, err error) {
-	var req GetChartPermissionReq
-	data, err := getChartPermission(req)
+// 获取权限列表
+func GetChartPermissionList(cond string, pars []interface{}) (permissionList []*models.ChartPermission, err error) {
+	ob := new(models.ChartPermission)
+	permissionList, err = ob.GetItemsByCondition(cond, pars)
 	if err != nil {
+		err = fmt.Errorf("获取权限列表失败, Err: %s", err.Error())
 		return
 	}
-	list = data.List
-	return
-}
 
-type GetChartPermissionReq struct {
-	ChartPermissionId int `json:"chart_permission_id"`
-	ProductId         int `json:"product_id"`
-}
-type GetChartPermissionItem struct {
-	List       []*models.ChartPermission
-	ParentList []*models.ChartPermission
-}
-type GetChartPermissionResp struct {
-	Code   int                    `json:"code" description:"状态码"`
-	Msg    string                 `json:"msg" description:"提示信息"`
-	Data   GetChartPermissionItem `json:"data" description:"返回数据"`
-	ErrMsg string                 `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
-}
-
-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的品种
-	}
-	b, err := crmEtaPost(url, pars)
-	if err != nil {
-		err = fmt.Errorf("url:%s err: %s", url, err.Error())
-		return
-	}
-	//result := new(models.ResultData)
-	result := new(GetChartPermissionResp)
-	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
-	}
-	res = result.Data
 	return
 }
 
-type ChartPermissionResp struct {
-	Code   int    `json:"code" description:"状态码"`
-	Msg    string `json:"msg" description:"提示信息"`
-	ErrMsg string `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
-}
-
-type ChartPermissionAddReq struct {
-	PermissionName string `description:"品种权限名称"`
-	ParentId       int    `description:"父级ID"`
-	Enabled        int    `description:"是否可用 0禁用, 1启用"` //启用,禁用操作会关联二级品种
-	IsPublic       int    `description:"是否是公有权限1:公有权限,0私有权限"`
-	ProductId      int
-}
-
-type ChartPermissionEditReq struct {
-	ChartPermissionId   int    `description:"品种权限Id"` // 如果ID存在,则是更新操作,否则是新增操作
-	PermissionName      string `description:"品种权限名称"`
-	ParentId            int    `description:"父级ID"`
-	IsPublic            int    `description:"是否是公有权限1:公有权限,0私有权限"`
-	PublicPermissionIds []int  `description:"公有权限的ID列表"` //一级品种没有公有私有属性
-}
-
-type ChartPermissionEnabledReq struct {
-	ChartPermissionId int `description:"品种权限Id"`        // 如果ID存在,则是更新操作,否则是新增操作
-	Enabled           int `description:"是否可用 0禁用, 1启用"` //启用,禁用操作会关联二级品种
-
-}
-
-type ChartPermissionMoveReq struct {
-	ChartPermissionId int `description:"品种id"`
-	//	ParentChartPermissionId int `description:"父级品种id"`
-	PrevChartPermissionId int `description:"上一个兄弟节点品种id"`
-	NextChartPermissionId int `description:"下一个兄弟节点品种id"`
-}
-
-func crmEtaPost(url string, pars interface{}) (respBody []byte, err error) {
-	params, e := json.Marshal(pars)
-	if e != nil {
-		err = fmt.Errorf("data json marshal err: %s", e.Error())
+// 新增权限
+func AddChartPermission(req models.PermissionAddReq) (err error, errMsg string) {
+	// 重名校验
+	ob := new(models.ChartPermission)
+	existCond := ` AND permission_name = ? AND parent_id = ?`
+	existPars := make([]interface{}, 0)
+	existPars = append(existPars, req.PermissionName, req.ParentId)
+	exist, e := ob.GetItemByCondition(existCond, existPars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		errMsg = "操作失败"
+		err = fmt.Errorf("获取重名品种权限失败, Err: " + e.Error())
 		return
 	}
-
-	body := ioutil.NopCloser(strings.NewReader(string(params)))
-	client := &http.Client{}
-	req, e := http.NewRequest("POST", url, body)
-	if e != nil {
-		err = fmt.Errorf("http create request err: %s", e.Error())
+	if exist != nil && exist.ChartPermissionId > 0 {
+		errMsg = "品种名称已存在"
+		err = fmt.Errorf("品种名称已存在")
 		return
 	}
 
-	contentType := "application/json;charset=utf-8"
-	req.Header.Set("Content-Type", contentType)
-	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
-	resp, e := client.Do(req)
+	// 获取最大的排序值
+	maxSort, e := ob.GetMaxSort()
 	if e != nil {
-		err = fmt.Errorf("http client do err: %s", e.Error())
-		return
+		errMsg = "查询品种排序失败"
+		err = fmt.Errorf("查询品种排序失败, Err: " + e.Error())
+		return
+	}
+	parentPermissionName := ""
+	if req.ParentId > 0 {
+		//查询父级是否存在
+		parent, e := ob.GetItemById(req.ParentId)
+		if e != nil {
+			errMsg = "查询父级品种失败"
+			err = fmt.Errorf("查询父级品种失败, Err: " + e.Error())
+			return
+		}
+		if parent.ChartPermissionId == 0 {
+			errMsg = "请选择正确的父级品种"
+			err = fmt.Errorf("请选择正确的父级品种")
+			return
+		}
+		if parent.ParentId != 0 {
+			errMsg = "只能选择一级品种作为父级品种"
+			err = fmt.Errorf("只能选择一级品种作为父级品种")
+			return
+		}
+		parentPermissionName = parent.PermissionName
+	} else {
+		parentPermissionName = req.PermissionName
+	}
+	// 新增
+	ob.ChartPermissionName = req.PermissionName
+	ob.PermissionName = req.PermissionName
+	ob.Remark = req.PermissionName
+	ob.ParentId = req.ParentId
+	ob.ProductId = 1
+	ob.IsPublic = req.IsPublic
+	ob.Enabled = req.Enabled
+	ob.Sort = maxSort + 1
+
+	ob.CreatedTime = time.Now()
+	ob.LastUpdatedTime = time.Now()
+	if ob.ProductId == 1 {
+		ob.ProductName = "ficc"
+	} else {
+		ob.ProductName = "权益"
+	}
+	ob.ProductPermissionName = ob.ProductName + ob.PermissionName
+	ob.ClassifyName = parentPermissionName
+	if e = ob.Create(); e != nil {
+		errMsg = "操作失败"
+		err = fmt.Errorf("新增品种权限失败, Err: " + e.Error())
+		return
+	}
+	if req.ParentId > 0 && req.Enabled == 1 {
+		//  更新父级品种的启用禁用
+		err = ob.SetEnabledByChartPermissionId(req.ParentId, req.Enabled)
+		if err != nil {
+			errMsg = "更新品种启用禁用状态失败"
+			err = fmt.Errorf("更新品种启用禁用状态失败, Err: " + err.Error())
+			return
+		}
 	}
-	defer func() {
-		_ = resp.Body.Close()
+	// 同步本次变更的数据
+	go func() {
+		_, _ = ChartFiccPermissionSync()
 	}()
-	b, e := ioutil.ReadAll(resp.Body)
+	return
+}
+
+func EditChartPermission(req models.PermissionEditReq) (err error, errMsg string) {
+	//查询是否存在品种
+	ob := new(models.ChartPermission)
+	item, e := ob.GetItemById(req.PermissionId)
 	if e != nil {
-		err = fmt.Errorf("resp body read err: %s", e.Error())
+		errMsg = "查询品种信息失败"
+		err = fmt.Errorf("查询品种信息失败, Err: " + e.Error())
 		return
 	}
-	if len(b) == 0 {
-		err = fmt.Errorf("resp body is empty")
+	if item.ChartPermissionId == 0 {
+		errMsg = "请选择正确的品种"
+		err = fmt.Errorf("请选择正确的品种")
 		return
 	}
-	// 生产环境解密, 注意有个坑前后的双引号
-	if utils.RunMode == "release" {
-		str := string(b)
-		str = strings.Trim(str, `"`)
-		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
+	// 查询品种名称是否修改
+	if item.PermissionName != req.PermissionName {
+		existCond := ` AND permission_name = ? AND parent_id = ? AND chart_permission_id !=?`
+		existPars := make([]interface{}, 0)
+		existPars = append(existPars, req.PermissionName, item.ParentId, req.PermissionId)
+		exist, e := ob.GetItemByCondition(existCond, existPars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			errMsg = "操作失败"
+			err = fmt.Errorf("获取重名品种权限失败, Err: " + e.Error())
+			return
+		}
+		if exist != nil && exist.ChartPermissionId > 0 {
+			errMsg = "品种名称已存在"
+			err = fmt.Errorf("品种名称已存在")
+			return
+		}
 	}
-	respBody = b
-	return
-}
 
-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的品种
-	}
-	b, err := crmEtaPost(url, pars)
+	//判断父级品种是否存在
+	parentPermissionName := ""
+	if req.ParentId > 0 {
+		//查询父级是否存在
+		parent, e := ob.GetItemById(req.ParentId)
+		if e != nil {
+			errMsg = "查询父级品种失败"
+			err = fmt.Errorf("查询父级品种失败, Err: " + e.Error())
+			return
+		}
+		if parent.ChartPermissionId == 0 {
+			errMsg = "请选择正确的父级品种"
+			err = fmt.Errorf("请选择正确的父级品种")
+			return
+		}
+		if parent.ParentId != 0 {
+			errMsg = "只能选择一级品种作为父级品种"
+			err = fmt.Errorf("只能选择一级品种作为父级品种")
+			return
+		}
+		parentPermissionName = parent.PermissionName
+	} else {
+		parentPermissionName = req.PermissionName
+	}
+	updateCol := []string{"PermissionName", "IsPublic", "ParentId", "ClassifyName", "LastUpdatedTime", "ProductPermissionName"}
+	if item.ProductId == 1 {
+		item.Remark = req.PermissionName //remark 在权益品种中用来区分主客观
+		updateCol = append(updateCol, "Remark")
+	}
+	item.PermissionName = req.PermissionName
+	item.IsPublic = req.IsPublic
+	item.ParentId = req.ParentId
+	item.ClassifyName = parentPermissionName
+	item.ProductPermissionName = item.ProductName + item.PermissionName
+	item.LastUpdatedTime = time.Now()
+	err = item.Update(updateCol)
 	if err != nil {
-		errMsg = "新增品种失败"
-		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 {
-		errMsg = "新增品种失败"
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+		errMsg = "更新失败"
+		err = fmt.Errorf("更新品种失败, Err: " + err.Error())
 		return
 	}
-	utils.FileLog.Info("%s", string(b))
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
-		errMsg = result.Msg
-		return
+
+	//判断是否是一级品种
+	if item.ParentId == 0 {
+		// 判断是否设置公有的二级品种
+		if len(req.PublicPermissionIds) > 0 {
+			// 更新二级品种的公有权限
+			err = ob.SetIsPublic(req.PublicPermissionIds, item.ChartPermissionId, 1)
+			if err != nil {
+				errMsg = "更新品种公有权限失败"
+				err = fmt.Errorf("更新品种公有权限失败, Err: " + err.Error())
+				return
+			}
+		}
+		// 更新二级的启动禁用
+		err = ob.UpdateClassifyNameByParentId(item.ChartPermissionId, req.PermissionName)
+		if err != nil {
+			errMsg = "更新品种启用禁用状态失败"
+			err = fmt.Errorf("更新品种启用禁用状态失败, Err: " + err.Error())
+			return
+		}
+	} else if item.ParentId > 0 {
+		if item.Enabled == 1 {
+			//  更新父级品种的启用禁用
+			err = ob.SetEnabledByChartPermissionId(item.ParentId, item.Enabled)
+			if err != nil {
+				errMsg = "更新品种启用禁用状态失败"
+				err = fmt.Errorf("更新品种启用禁用状态失败, Err: " + err.Error())
+				return
+			}
+		}
 	}
+	// 同步本次变更的数据
+	go func() {
+		_, _ = ChartFiccPermissionSync()
+	}()
 	return
 }
 
-func EditChartPermission(pars *ChartPermissionEditReq) (err error, errMsg string) {
-	if utils.CrmEtaServerUrl == "" {
+// SetEnabledChartPermission  设置启用禁用
+func SetEnabledChartPermission(req models.PermissionEnabledReq) (err error, errMsg string) {
+	//查询是否存在品种
+	ob := new(models.ChartPermission)
+	item, e := ob.GetItemById(req.PermissionId)
+	if e != nil {
+		errMsg = "查询品种信息失败"
+		err = fmt.Errorf("查询品种信息失败, Err: " + e.Error())
 		return
 	}
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/edit")
-	b, err := crmEtaPost(url, pars)
-	if err != nil {
-		errMsg = "更新品种失败"
-		err = fmt.Errorf("url:%s err: %s", url, err.Error())
+	if item.ChartPermissionId == 0 {
+		errMsg = "请选择正确的品种"
+		err = fmt.Errorf("请选择正确的品种")
 		return
 	}
-	//result := new(models.ResultData)
-	result := new(ChartPermissionResp)
-	if e := json.Unmarshal(b, &result); e != nil {
-		errMsg = "更新品种失败"
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	// 查询品种名称是否修改
+	item.Enabled = req.Enabled
+	item.LastUpdatedTime = time.Now()
+	err = item.Update([]string{"Enabled", "LastUpdatedTime"})
+	if err != nil {
+		errMsg = "更新失败"
+		err = fmt.Errorf("更新品种失败, Err: " + err.Error())
 		return
 	}
-	utils.FileLog.Info("%s", string(b))
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
-		errMsg = result.Msg
-		return
+
+	//判断是否是一级品种
+	if item.ParentId == 0 {
+		// 判断是否设置公有的二级品种
+		// 更新二级的启动禁用
+		err = ob.SetEnabledByParentId(item.ChartPermissionId, req.Enabled)
+		if err != nil {
+			errMsg = "更新品种启用禁用状态失败"
+			err = fmt.Errorf("更新品种启用禁用状态失败, Err: " + err.Error())
+			return
+		}
+
+		//
+	} else if item.ParentId > 0 {
+		if req.Enabled == 1 {
+			//  更新父级品种的启用禁用
+			err = ob.SetEnabledByChartPermissionId(item.ParentId, req.Enabled)
+			if err != nil {
+				errMsg = "更新品种启用禁用状态失败"
+				err = fmt.Errorf("更新品种启用禁用状态失败, Err: " + err.Error())
+				return
+			}
+		}
 	}
+	// 同步本次变更的数据
+	go func() {
+		_, _ = ChartFiccPermissionSync()
+	}()
 	return
 }
 
-func SetEnabledChartPermission(pars *ChartPermissionEnabledReq) (err error, errMsg string) {
-	if utils.CrmEtaServerUrl == "" {
-		return
-	}
-	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/enabled/set")
-	b, err := crmEtaPost(url, pars)
+// MoveChartPermission 移动品种
+func MoveChartPermission(req models.PermissionMoveReq) (err error, errMsg string) {
+	ob := new(models.ChartPermission)
+	chartPermissionId := req.PermissionId
+	prevChartPermissionId := req.PrevPermissionId
+	nextChartPermissionId := req.NextPermissionId
+
+	//如果有传入 上一个兄弟节点分类id
+	var (
+		permissionInfo *models.ChartPermission
+		prevPermission *models.ChartPermission
+		nextPermission *models.ChartPermission
+
+		prevSort int
+		nextSort int
+	)
+
+	// 移动对象为分类, 判断权限
+	permissionInfo, err = ob.GetItemById(chartPermissionId)
 	if err != nil {
-		errMsg = "更新品种失败"
-		err = fmt.Errorf("url:%s err: %s", url, err.Error())
+		if err.Error() == utils.ErrNoRow() {
+			errMsg = "当前品种不存在"
+			err = fmt.Errorf("获取品种信息失败,Err:" + err.Error())
+			return
+		}
+		errMsg = "移动失败"
+		err = fmt.Errorf("获取分类信息失败,Err:" + err.Error())
 		return
-	}
-	//result := new(models.ResultData)
-	result := new(ChartPermissionResp)
-	if e := json.Unmarshal(b, &result); e != nil {
-		errMsg = "更新品种失败"
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+	} else if permissionInfo.ChartPermissionId == 0 {
+		errMsg = "当前品种不存在"
+		err = fmt.Errorf("获取品种信息失败,Err:" + err.Error())
 		return
 	}
-	utils.FileLog.Info("%s", string(b))
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
-		errMsg = result.Msg
-		return
+
+	parentChartPermissionId := permissionInfo.ParentId
+	productId := permissionInfo.ProductId
+	if prevChartPermissionId > 0 {
+		prevPermission, err = ob.GetItemById(prevChartPermissionId)
+		if err != nil {
+			errMsg = "移动失败"
+			err = fmt.Errorf("获取上一个兄弟节点分类信息失败,Err:" + err.Error())
+			return
+		}
+		prevSort = prevPermission.Sort
 	}
+
+	if nextChartPermissionId > 0 {
+		//下一个兄弟节点
+		nextPermission, err = ob.GetItemById(nextChartPermissionId)
+		if err != nil {
+			errMsg = "移动失败"
+			err = fmt.Errorf("获取下一个兄弟节点分类信息失败,Err:" + err.Error())
+			return
+		}
+		nextSort = nextPermission.Sort
+	}
+
+	err, errMsg = moveChartPermission(permissionInfo, prevPermission, nextPermission, parentChartPermissionId, prevSort, nextSort, productId)
 	return
 }
 
-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 {
-		errMsg = "移动品种失败"
-		err = fmt.Errorf("url:%s err: %s", url, err.Error())
+// moveChartPermission 移动指标分类
+func moveChartPermission(permissionInfo, prevPermission, nextPermission *models.ChartPermission, parentId, prevSort, nextSort, productId int) (err error, errMsg string) {
+	ob := new(models.ChartPermission)
+	updateCol := make([]string, 0)
+
+	//判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
+	if permissionInfo.ParentId != parentId {
+		errMsg = "移动失败"
+		err = fmt.Errorf("不支持目录层级变更")
 		return
 	}
-	//result := new(models.ResultData)
-	result := new(ChartPermissionResp)
-	if e := json.Unmarshal(b, &result); e != nil {
-		errMsg = "移动品种失败"
-		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
-		return
+
+	if prevSort > 0 {
+		//如果是移动在两个兄弟节点之间
+		if nextSort > 0 {
+			//下一个兄弟节点
+			//如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
+			if prevSort == nextSort || prevSort == permissionInfo.Sort {
+				//变更兄弟节点的排序
+				updateSortStr := `sort + 2`
+
+				//变更分类
+				if prevPermission != nil {
+					_ = models.UpdateChartPermissionSortByParentId(parentId, prevPermission.ChartPermissionId, prevPermission.Sort, updateSortStr, productId)
+				} else {
+					_ = models.UpdateChartPermissionSortByParentId(parentId, 0, prevSort, updateSortStr, productId)
+				}
+
+			} else {
+				//如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
+				if nextSort-prevSort == 1 {
+					//变更兄弟节点的排序
+					updateSortStr := `sort + 1`
+
+					//变更分类
+					if prevPermission != nil {
+						_ = models.UpdateChartPermissionSortByParentId(parentId, prevPermission.ChartPermissionId, prevSort, updateSortStr, productId)
+					} else {
+						_ = models.UpdateChartPermissionSortByParentId(parentId, 0, prevSort, updateSortStr, productId)
+					}
+
+				}
+			}
+		}
+
+		permissionInfo.Sort = prevSort + 1
+		permissionInfo.LastUpdatedTime = time.Now()
+		updateCol = append(updateCol, "Sort", "LastUpdatedTime")
+	} else if prevPermission == nil && nextPermission == nil && parentId > 0 {
+		//处理只拖动到目录里,默认放到目录底部的情况
+		var maxSort int
+		maxSort, err = ob.GetMaxSortByParentId(parentId)
+		if err != nil {
+			errMsg = "移动失败"
+			err = fmt.Errorf("查询组内排序信息失败,Err:" + err.Error())
+			return
+		}
+		permissionInfo.Sort = maxSort + 1 //那就是排在组内最后一位
+		permissionInfo.LastUpdatedTime = time.Now()
+		updateCol = append(updateCol, "Sort", "LastUpdatedTime")
+	} else {
+		// 拖动到父级分类的第一位
+		firstPermission, tmpErr := ob.GetFirstChartPermissionByParentId(parentId)
+		if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
+			errMsg = "移动失败"
+			err = fmt.Errorf("获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + tmpErr.Error())
+			return
+		}
+
+		//如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
+		if firstPermission != nil && firstPermission.ChartPermissionId != 0 && firstPermission.Sort == 0 {
+			updateSortStr := ` sort + 1 `
+			_ = models.UpdateChartPermissionSortByParentId(parentId, firstPermission.ChartPermissionId-1, 0, updateSortStr, productId)
+		}
+
+		permissionInfo.Sort = 0 //那就是排在第一位
+		permissionInfo.LastUpdatedTime = time.Now()
+		updateCol = append(updateCol, "Sort", "LastUpdatedTime")
 	}
-	utils.FileLog.Info("%s", string(b))
-	if result.Code != 200 {
-		err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
-		errMsg = result.Msg
-		return
+
+	//更新
+	if len(updateCol) > 0 {
+		err = permissionInfo.Update(updateCol)
+		if err != nil {
+			errMsg = "移动失败"
+			err = fmt.Errorf("修改失败,Err:" + err.Error())
+			return
+		}
 	}
+
+	// 同步本次变更的数据
+	go func() {
+		_, _ = ChartFiccPermissionSync()
+	}()
 	return
 }
 
 // GetChartPermissionEnabledList 查询已启用的FICC权限列表
 func GetChartPermissionEnabledList() (list []*company.PermissionSetList, err error) {
-	var req GetChartPermissionReq
-	data, err := getChartPermission(req)
+	dataList, err := GetChartPermissionList(" AND enabled = 1", []interface{}{})
 	if err != nil {
 		return
 	}
-	dataList := data.List
 	//enabledList := make([]*models.ChartPermission, 0)
 	parentList := make([]*models.ChartPermission, 0)
 	enabledMap := make(map[int][]*company.PermissionSetItem)
@@ -300,77 +476,3 @@ 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
-}

+ 129 - 0
services/chart_permission_sync.go

@@ -0,0 +1,129 @@
+package services
+
+import (
+	"encoding/json"
+	"eta/eta_api/utils"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"strings"
+)
+
+type ChartPermissionResp struct {
+	Code   int    `json:"code" description:"状态码"`
+	Msg    string `json:"msg" description:"提示信息"`
+	ErrMsg string `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
+}
+
+func crmEtaPost(url string, pars interface{}) (respBody []byte, err error) {
+	params, e := json.Marshal(pars)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	body := ioutil.NopCloser(strings.NewReader(string(params)))
+	client := &http.Client{}
+	req, e := http.NewRequest("POST", url, body)
+	if e != nil {
+		err = fmt.Errorf("http create request err: %s", e.Error())
+		return
+	}
+
+	contentType := "application/json;charset=utf-8"
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
+	resp, e := client.Do(req)
+	if e != nil {
+		err = fmt.Errorf("http client do err: %s", e.Error())
+		return
+	}
+	defer func() {
+		_ = resp.Body.Close()
+	}()
+	b, e := ioutil.ReadAll(resp.Body)
+	if e != nil {
+		err = fmt.Errorf("resp body read err: %s", e.Error())
+		return
+	}
+	if len(b) == 0 {
+		err = fmt.Errorf("resp body is empty")
+		return
+	}
+	// 生产环境解密, 注意有个坑前后的双引号
+	if utils.RunMode == "release" {
+		str := string(b)
+		str = strings.Trim(str, `"`)
+		b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
+	}
+	respBody = b
+	return
+}
+
+func ChartFiccPermissionSync() (err error, errMsg string) {
+	defer func() {
+		if err != nil {
+			utils.FileLog.Info("同步品种权限数据失败, Err: " + err.Error() + errMsg)
+		}
+	}()
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
+	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/sync")
+	pars := make(map[string]interface{})
+	b, err := crmEtaPost(url, pars)
+	if err != nil {
+		errMsg = "同步品种失败"
+		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 {
+		errMsg = "同步品种失败"
+		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, err: %s", string(b), result.ErrMsg)
+		errMsg = result.Msg
+		return
+	}
+	return
+}
+
+type EditClassifyPermissionReq struct {
+	Keyword string
+}
+
+// EditClassifyChartPermissionSync 设置报告分类权限
+func EditClassifyChartPermissionSync(keyword string) (err error) {
+	defer func() {
+		if err != nil {
+			utils.FileLog.Info("同步设置报告分类权限失败, Err: " + err.Error())
+		}
+	}()
+	if utils.CrmEtaServerUrl == "" {
+		return
+	}
+	req := &EditClassifyPermissionReq{Keyword: keyword}
+	url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/classify/sync")
+	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
+}