Explorar o código

图表分类同步至资源库

xyxie hai 3 semanas
pai
achega
5fc8a093dc

+ 62 - 8
controllers/data_manage/chart_classify.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_mobile/models/system"
 	"eta/eta_mobile/services/data"
 	"eta/eta_mobile/services/data/data_manage_permission"
+	"eta/eta_mobile/services/eta_forum"
 	"eta/eta_mobile/utils"
 	"fmt"
 	"time"
@@ -259,15 +260,26 @@ func (this *ChartClassifyController) ChartClassifyItems() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-
-	rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
+	isSelected, _ := this.GetInt("IsSelected")
+	var rootList []*data_manage.ChartClassifyItems
+	var err error
+	if isSelected == utils.ChartClassifyIsSelected {
+		rootList, err = data_manage.GetChartClassifyByParentIdAndIsSelected(0, utils.CHART_SOURCE_DEFAULT, isSelected)
+	} else {
+		rootList, err = data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
+	}
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+	var classifyAll []*data_manage.ChartClassifyItems
+	if isSelected == utils.ChartClassifyIsSelected {
+		classifyAll, err = data_manage.GetChartClassifyIsSelectedAll(utils.CHART_SOURCE_DEFAULT, isSelected)
+	} else {
+		classifyAll, err = data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
+	}
 
-	classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
@@ -488,6 +500,23 @@ func (this *ChartClassifyController) DeleteChartClassifyCheck() {
 			tipsMsg = "确认删除当前目录及包含的子目录吗"
 		}
 	}
+	if req.ChartClassifyId == 0 && req.ChartInfoId > 0 {
+		chartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				br.Msg = "图表已删除,请刷新页面"
+				br.ErrMsg = "指标不存在,Err:" + err.Error()
+				return
+			}
+			br.Msg = "删除失败"
+			br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
+			return
+		}
+		if chartInfo.ForumChartInfoId > 0 {
+			deleteStatus = 3
+			tipsMsg = "删除后,该图表将从ETA投研资源库同步删除,影响客户的查看权限,是否确认删除?"
+		}
+	}
 	if deleteStatus == 0 {
 		tipsMsg = "可删除,进行删除操作"
 	}
@@ -660,6 +689,10 @@ func (this *ChartClassifyController) DeleteChartClassify() {
 			// 删除MY ETA 图表 es数据
 			//go data.EsDeleteMyChartInfoByChartInfoId(req.ChartInfoId)
 			go data.EsDeleteMyChartInfoByMyChartIds(myIds)
+			
+			if chartInfo.ForumChartInfoId > 0 {
+				go eta_forum.DeleteChartByForumChartInfoId(chartInfo.ForumChartInfoId)
+			}
 		}
 
 		var condition string
@@ -779,7 +812,9 @@ func (this *ChartClassifyController) ChartClassifyMove() {
 		br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
 		return
 	}
-
+	oldParentId := chartClassifyInfo.ParentId
+	oldLevelPath := chartClassifyInfo.LevelPath
+	oldSelected := chartClassifyInfo.IsSelected
 	// 校验移动的父级目录下是否有重名分类
 	exists, e := data_manage.GetChartClassifyByParentIdAndName(req.ParentClassifyId, chartClassifyInfo.ChartClassifyName, req.ClassifyId)
 	if e != nil && e.Error() != utils.ErrNoRow() {
@@ -816,15 +851,18 @@ func (this *ChartClassifyController) ChartClassifyMove() {
 		return
 	}
 	updateCol := make([]string, 0)
-
-	//判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
-	if chartClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
-		parentChartClassifyInfo, err := data_manage.GetChartClassifyById(req.ParentClassifyId)
+	var parentChartClassifyInfo *data_manage.ChartClassify
+	if req.ParentClassifyId >0 {
+		parentChartClassifyInfo, err = data_manage.GetChartClassifyById(req.ParentClassifyId)
 		if err != nil {
 			br.Msg = "移动失败"
 			br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
 			return
 		}
+	}
+	//判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
+	if chartClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
+		
 		chartClassifyInfo.ParentId = parentChartClassifyInfo.ChartClassifyId
 		chartClassifyInfo.Level = parentChartClassifyInfo.Level + 1
 		chartClassifyInfo.ModifyTime = time.Now()
@@ -896,6 +934,22 @@ func (this *ChartClassifyController) ChartClassifyMove() {
 			br.ErrMsg = "修改失败,Err:" + err.Error()
 			return
 		}
+		//更新分类的level_path
+		if oldParentId != req.ParentClassifyId {
+			if err = data.UpdateChartClassifyLevelPathWithChildren(chartClassifyInfo, parentChartClassifyInfo, oldParentId, oldLevelPath); err != nil {
+				br.Msg = "移动失败"
+				br.ErrMsg = "更新分类level_path失败,Err:" + err.Error()
+				return
+			}
+		}
+		if chartClassifyInfo.Source == utils.CHART_SOURCE_DEFAULT {
+			if err = data.UpdateChildClassifySelection(chartClassifyInfo, parentChartClassifyInfo, oldSelected); err != nil {
+				br.Msg = "移动失败"
+				br.ErrMsg = "更新子目录精选标识失败,Err:" + err.Error()
+				return
+			}
+			go eta_forum.ChartClassifySaveBatch(chartClassifyInfo.Source)
+		}
 	}
 	br.Ret = 200
 	br.Success = true

+ 54 - 0
models/data_manage/chart_classify.go

@@ -22,6 +22,10 @@ type ChartClassify struct {
 	Source              int       `description:"1:ETA图库;2:商品价格曲线"`
 	IsJoinPermission    int       `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
 	ChartClassifyNameEn string    `description:"英文分类名称"`
+	RootId              int       `description:"顶级分类id"`
+	IsSelected          int       `description:"是否精选资源,0:否;1:是"`
+	ResourceStatus      int       `description:"在ETA投研资源库中的状态,0:初始状态,1上架,2下架"`
+	LevelPath           string    `description:"所有的父级分类id"`
 }
 
 func AddChartClassify(item *ChartClassify) (lastId int64, err error) {
@@ -167,6 +171,12 @@ func GetChartClassifyByParentId(parentId, source int) (items []*ChartClassifyIte
 	return
 }
 
+func GetChartClassifyByParentIdAndIsSelected(parentId, source int, isSelected int) (items []*ChartClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM chart_classify WHERE parent_id=? AND source = ? AND is_selected = ? order by sort asc,chart_classify_id asc`
+	_, err = o.Raw(sql, parentId, source, isSelected).QueryRows(&items)
+	return
+}
 // GetChartClassifyAll
 // @param source int 1:ETA图库;2:商品价格曲线;3:相关性图表
 func GetChartClassifyAll(source int) (items []*ChartClassifyItems, err error) {
@@ -176,6 +186,14 @@ func GetChartClassifyAll(source int) (items []*ChartClassifyItems, err error) {
 	return
 }
 
+// GetChartClassifyAll
+// @param source int 1:ETA图库;2:商品价格曲线;3:相关性图表
+func GetChartClassifyIsSelectedAll(source int, isSelected int) (items []*ChartClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM chart_classify WHERE parent_id<>0 AND source = ? AND is_selected = ? order by sort asc,chart_classify_id asc`
+	_, err = o.Raw(sql, source, isSelected).QueryRows(&items)
+	return
+}
 type ChartClassifyItems struct {
 	ChartClassifyId     int `description:"分类id"`
 	ChartInfoId         int `description:"指标id"`
@@ -449,3 +467,39 @@ func GetChartInfoBySourceAndParentId(source, parentId, adminId int) (items []*Ch
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+// GetChartClassifyInfoSelectedBySource 获取所有的精选目录
+func GetChartClassifyInfoSelectedBySource(source int) (items []*ChartClassify, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM chart_classify WHERE source = ? AND is_selected = ? ORDER BY parent_id ASC, sort ASC, chart_classify_id ASC`
+	_, err = o.Raw(sql, source, utils.ChartClassifyIsSelected).QueryRows(&items)
+	return
+}
+
+func GetChartClassifyByLevelPath(levelPath string) (items []*ChartClassify, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM chart_classify where level_path like '` + levelPath + `%'`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+func UpdateChartClassifyIsSelected(source int, isSelected int, levelPath string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE chart_classify SET is_selected = ? WHERE source = ? AND level_path LIKE '` + levelPath + `%'`
+	_, err = o.Raw(sql, isSelected, source).Exec()
+	return
+}
+
+func UpdateChartClassifyResourceStatus(source int, resourceStatus int, levelPath string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE chart_classify SET resource_status = ? WHERE source = ? AND level_path LIKE '` + levelPath + `%'`
+	_, err = o.Raw(sql, resourceStatus, source).Exec()
+	return
+}
+
+// 查询存在已经上架的图表的分类
+func GetChartClassifyHasUpChartBySource(source int, levelPath string) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT count(1) FROM chart_info WHERE source = ? AND resource_status = ? and chart_classify_id in (SELECT chart_classify_id FROM chart_classify WHERE level_path like '` + levelPath + `%')`
+	err = o.Raw(sql, source, utils.ChartClassifyResourceStatusUp).QueryRow(&count)
+	return
+}

+ 1 - 0
models/data_manage/chart_info.go

@@ -57,6 +57,7 @@ type ChartInfo struct {
 	Unit              string `description:"中文单位名称"`
 	UnitEn            string `description:"英文单位名称"`
 	IsJoinPermission  int    `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	ForumChartInfoId  int    `description:"投研资源库图表ID"`
 }
 
 type ChartInfoMore struct {

+ 100 - 7
services/data/chart_classify.go

@@ -5,9 +5,11 @@ import (
 	"eta/eta_mobile/models/data_manage"
 	"eta/eta_mobile/models/system"
 	"eta/eta_mobile/services/data/data_manage_permission"
+	"eta/eta_mobile/services/eta_forum"
 	"eta/eta_mobile/utils"
 	"fmt"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -239,7 +241,7 @@ func HandleNoPermissionChart(allNodes []*data_manage.ChartClassifyItems, noPermi
 func AddChartClassify(chartClassifyName string, parentId, level, source int, lang string, sysUser *system.Admin) (classifyInfo *data_manage.ChartClassify, err error, errMsg string, isSendEmail bool) {
 	isSendEmail = true
 	errMsg = "保存分类失败"
-
+	isSelected := 0
 	// 校验分类名称相同的数量
 	{
 		var count int
@@ -263,7 +265,25 @@ func AddChartClassify(chartClassifyName string, parentId, level, source int, lan
 
 	//获取该层级下最大的排序数
 	maxSort, err := data_manage.GetChartClassifyMaxSort(parentId, source)
-
+//查询顶级rootId
+	rootId := 0
+	levelPath := ""
+	if parentId > 0 {
+		parentClassify, tErr := data_manage.GetChartClassifyById(parentId)
+		if tErr != nil {
+			if tErr.Error() == utils.ErrNoRow() {
+				errMsg = "父级分类不存在"
+				err = errors.New(errMsg)
+				return
+			}
+			errMsg = "获取失败"
+			err = errors.New("获取分类信息失败,Err:" + tErr.Error())
+			return
+		}
+		rootId = parentClassify.RootId
+		levelPath = parentClassify.LevelPath
+		isSelected = parentClassify.IsSelected
+	}
 	classifyInfo = new(data_manage.ChartClassify)
 	classifyInfo.ParentId = parentId
 	classifyInfo.ChartClassifyName = chartClassifyName
@@ -278,15 +298,35 @@ func AddChartClassify(chartClassifyName string, parentId, level, source int, lan
 	classifyInfo.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
 	classifyInfo.Sort = maxSort + 1
 	classifyInfo.Source = source
-
-	_, err = data_manage.AddChartClassify(classifyInfo)
+	classifyInfo.RootId = rootId
+	classifyInfo.IsSelected = isSelected
+	newId, err := data_manage.AddChartClassify(classifyInfo)
 	if err != nil {
 		return
 	}
-
+	updateCols := make([]string, 0)
+	if parentId == 0 { //一级目录的rootId等于自己本身
+		classifyInfo.RootId = int(newId)
+		updateCols = append(updateCols, "RootId")
+	}
+	if parentId > 0 {
+		levelPath = fmt.Sprintf("%s%d,", levelPath, newId)
+	} else {
+		levelPath = fmt.Sprintf("%d,", newId)
+	}
+	updateCols = append(updateCols, "LevelPath")
+	classifyInfo.LevelPath = levelPath
+	err = classifyInfo.Update(updateCols)
+	if err != nil {
+		errMsg = "更新分类失败"
+		return
+	}
 	// 目前只有ETA图库需要继承分类权限
 	if classifyInfo.Source == utils.CHART_SOURCE_DEFAULT {
 		go data_manage_permission.InheritParentClassify(5, classifyInfo.Source, classifyInfo.ChartClassifyId, classifyInfo.ParentId, classifyInfo.ChartClassifyName)
+		if isSelected == utils.ChartClassifyIsSelected { // 如果分类设置为精选资源,则需要同步到ETA资源库
+			go eta_forum.ChartClassifySave(classifyInfo.ChartClassifyId)
+		}
 	}
 
 	return
@@ -308,13 +348,12 @@ func AddChartClassify(chartClassifyName string, parentId, level, source int, lan
 func EditChartClassify(chartClassifyId, source int, chartClassifyName, lang string, sysUser *system.Admin) (classifyInfo *data_manage.ChartClassify, err error, errMsg string, isSendEmail bool) {
 	isSendEmail = true
 	errMsg = "保存失败"
-
+	
 	// 获取分类信息
 	classifyInfo, err = data_manage.GetChartClassifyById(chartClassifyId)
 	if err != nil {
 		return
 	}
-
 	// 分类来源校验
 	if classifyInfo.Source != source {
 		errMsg = "图表分类异常"
@@ -422,3 +461,57 @@ func GetChartClassifyParentRecursive(list []*data_manage.ChartClassifyItems, cla
 	}
 	return res
 }
+
+// 新增处理子分类精选状态的函数
+func UpdateChildClassifySelection(classifyInfo *data_manage.ChartClassify, parentClassifyInfo *data_manage.ChartClassify, oldSelected int) error {
+	// 处理一级目录
+	if classifyInfo.ParentId == 0 {
+		if oldSelected != classifyInfo.IsSelected {
+			return data_manage.UpdateChartClassifyIsSelected(
+				classifyInfo.Source,
+				classifyInfo.IsSelected,
+				classifyInfo.LevelPath,
+			)
+		}
+		return nil
+	}else {
+		// 处理二级及以上目录
+		if classifyInfo.IsSelected != parentClassifyInfo.IsSelected {
+			return data_manage.UpdateChartClassifyIsSelected(
+				classifyInfo.Source,
+				parentClassifyInfo.IsSelected,
+				classifyInfo.LevelPath,
+			)
+		}
+	}
+
+	
+	return nil
+}
+
+// 新增内部函数
+func UpdateChartClassifyLevelPathWithChildren(chartClassifyInfo *data_manage.ChartClassify, parentChartClassifyInfo *data_manage.ChartClassify, oldParentId int, oldLevelPath string) error {
+	levelPath := fmt.Sprintf("%s%d,", parentChartClassifyInfo.LevelPath, chartClassifyInfo.ChartClassifyId)
+	chartClassifyInfo.LevelPath = levelPath
+	if err := chartClassifyInfo.Update([]string{"LevelPath"}); err != nil {
+		return fmt.Errorf("修改失败,Err:" + err.Error())
+	}
+
+	// 更新子分类的levelpath
+	tmpList, err := data_manage.GetChartClassifyByLevelPath(oldLevelPath)
+	if err != nil {
+		return fmt.Errorf("保存分类失败,Err:" + err.Error())
+	}
+    // 把原先的父级levePath,替换成最新的父级序列
+	for _, tmp := range tmpList {
+		after, _ := strings.CutPrefix(tmp.LevelPath, oldLevelPath)
+		if after != "" {
+			tmp.LevelPath = levelPath + after
+			tmp.ModifyTime = time.Now()
+			if e := tmp.Update([]string{"LevelPath", "ModifyTime"}); e != nil {
+				return fmt.Errorf("修改子分类,Err:" + e.Error())
+			}
+		}
+	}
+	return nil
+}

+ 113 - 0
services/eta_forum/chart_classify.go

@@ -0,0 +1,113 @@
+package eta_forum
+
+import (
+	"encoding/json"
+	"eta/eta_mobile/models/data_manage"
+	"eta/eta_mobile/utils"
+	"fmt"
+)
+
+// ChartClassifySave 上传图表分类信息
+func ChartClassifySave(chartClassifyId int) (err error) {
+	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
+		return
+	}
+	//查询分类信息
+	chartClassifyInfo, err := data_manage.GetChartClassifyById(chartClassifyId)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			err = fmt.Errorf("分类不存在")
+			return
+		}
+		err = fmt.Errorf("获取分类信息失败,Err:" + err.Error())
+		return
+	}
+	if chartClassifyInfo.IsSelected != utils.ChartClassifyIsSelected {
+		return
+	}
+
+	reqJson, err := json.Marshal(chartClassifyInfo) 
+	if err != nil {
+		err = fmt.Errorf("参数解析异常,Err:" + err.Error())
+		return
+	}
+	respItem, err := ChartClassifySaveLib(string(reqJson))
+	if err != nil {
+		err = fmt.Errorf("上传图表分类信息失败,Err:" + err.Error())
+		return
+	}
+	if respItem.Ret != 200 {
+		err = fmt.Errorf("上传图表分类信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
+		return
+	}
+	return
+}
+
+type ChartClassifySaveBatchReq struct {
+	List []*data_manage.ChartClassify
+}
+
+//批量上传图表分类信息
+func ChartClassifySaveBatch(source int) (err error) {
+	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
+		return
+	}
+
+	//查询分类信息
+	chartClassifyList, err := data_manage.GetChartClassifyInfoSelectedBySource(source)
+	if err != nil {
+		err = fmt.Errorf("获取分类信息失败,Err:" + err.Error())
+		return
+	}
+	req := ChartClassifySaveBatchReq{
+		List: chartClassifyList,
+	}
+	reqJson, err := json.Marshal(req)
+	if err != nil {
+		err = fmt.Errorf("参数解析异常,Err:" + err.Error())
+		return
+	}
+	respItem, err := ChartClassifySaveBatchLib(string(reqJson))
+	if err != nil {
+		err = fmt.Errorf("上传图表分类信息失败,Err:" + err.Error())
+		return
+	}	
+	if respItem.Ret != 200 {
+		err = fmt.Errorf("上传图表分类信息失败,Err:%v,errMsg:%v", respItem.Msg, respItem.ErrMsg)
+		return
+	}
+	return
+}
+
+
+type DeleteChartReq struct {
+	ChartInfoId int `description:"图表id"`
+}
+
+// DeleteChart 上传图表接口
+func DeleteChartByForumChartInfoId(forumChartInfoId int) (err error, errMsg string) {
+	// 查询图表信息
+	req := new(DeleteChartReq)
+	req.ChartInfoId = forumChartInfoId
+
+	// 添加计算指标
+	reqJson, err := json.Marshal(req)
+	if err != nil {
+		errMsg = "参数解析异常"
+		err = fmt.Errorf("参数解析异常,Err:" + err.Error())
+		return
+	}
+	respItem, err := ChartDeleteLib(string(reqJson))
+	if err != nil {
+		errMsg = "撤回失败"
+		err = fmt.Errorf("撤回失败,Err:" + err.Error())
+		return
+	}
+	if respItem.Ret != 200 {
+		errMsg = "撤回失败"
+		err = fmt.Errorf(respItem.ErrMsg)
+		return
+	}
+
+	return
+}

+ 71 - 0
services/eta_forum/eta_forum_hub_lib.go

@@ -7,6 +7,7 @@ import (
 	"fmt"
 	"io/ioutil"
 	"net/http"
+	"strings"
 )
 
 // GetUserChartListLib 查询有权限的图表列表
@@ -49,6 +50,34 @@ func getChartFromUniqueCodeLib(req string) (resp ChartFromUniqueCodeResp, err er
 	return
 }
 
+// ChartClassifySaveLib 上传图表分类信息
+func ChartClassifySaveLib(req string) (resp *models.BaseResponse, err error) {
+	_, resultByte, err := post(req, "/v1/chart_classify/save")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// ChartClassifySaveBatchLib 批量上传图表分类信息
+func ChartClassifySaveBatchLib(req string) (resp *models.BaseResponse, err error) {
+	_, resultByte, err := post(req, "/v1/chart_classify/batch_save")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
+// ChartDeleteLib 从社区撤回图表
+func ChartDeleteLib(req string) (resp *models.BaseResponse, err error) {
+	_, resultByte, err := post(req, "/v1/chart/delete")
+	err = json.Unmarshal(resultByte, &resp)
+	if err != nil {
+		return
+	}
+	return
+}
 // get
 func get(paramStr string, urlStr string) (resp *models.BaseResponse, result []byte, err error) {
 	if utils.ETA_FORUM_HUB_URL == "" {
@@ -86,3 +115,45 @@ func HttpGet(url string) ([]byte, error) {
 	utils.FileLog.Debug("HttpPost:" + string(b))
 	return b, err
 }
+
+func post(paramStr string, urlStr string) (resp *models.BaseResponse, result []byte, err error) {
+	if utils.ETA_FORUM_HUB_URL == "" {
+		err = fmt.Errorf("ETA社区桥接服务地址为空")
+		return
+	}
+	postUrl := utils.ETA_FORUM_HUB_URL + urlStr
+	result, err = HttpPost(postUrl, paramStr, "application/json")
+	if err != nil {
+		err = fmt.Errorf("调用ETA社区桥接服务接口失败 error:%s", err.Error())
+		return
+	}
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+
+	return
+}
+
+func HttpPost(url, postData string, params ...string) ([]byte, error) {
+	body := ioutil.NopCloser(strings.NewReader(postData))
+	client := &http.Client{}
+	req, err := http.NewRequest("POST", url, body)
+	if err != nil {
+		return nil, err
+	}
+	contentType := "application/x-www-form-urlencoded;charset=utf-8"
+	if len(params) > 0 && params[0] != "" {
+		contentType = params[0]
+	}
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("authorization", utils.MD5(utils.ETA_FORUM_HUB_NAME_EN+utils.ETA_FORUM_HUB_MD5_KEY))
+	resp, err := client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+	b, err := ioutil.ReadAll(resp.Body)
+	utils.FileLog.Debug("HttpPost:" + string(b))
+	return b, err
+}

+ 7 - 0
utils/constants.go

@@ -475,3 +475,10 @@ const (
 	ZhLangVersion = "zh" // 中文语言版本
 	EnLangVersion = "en" // 英文语言版本
 )
+// 图表分类设置精选资源分类
+const (
+	ChartClassifyIsSelected = 1 // 图表分类设置精选资源分类
+	ChartClassifyResourceStatusUp = 1 // 图表分类上架状态
+	ChartClassifyResourceStatusDown = 2 // 图表分类下架状态
+	ChartClassifyResourceStatusDefault = 0 // 图表分类默认状态
+)