Эх сурвалжийг харах

Merge remote-tracking branch 'origin/eta/2.3' into debug

Roc 4 сар өмнө
parent
commit
416dfbf1b0
54 өөрчлөгдсөн 2123 нэмэгдсэн , 187 устгасан
  1. 1 1
      controllers/data_manage/chart_classify.go
  2. 137 7
      controllers/data_manage/chart_info.go
  3. 2 2
      controllers/data_manage/chart_info_share.go
  4. 354 0
      controllers/data_manage/collect_chart.go
  5. 514 0
      controllers/data_manage/collect_chart_classify.go
  6. 0 0
      controllers/data_manage/collect_edb.go
  7. 0 0
      controllers/data_manage/collect_edb_classify.go
  8. 1 1
      controllers/data_manage/correlation/correlation_chart_classify.go
  9. 6 6
      controllers/data_manage/correlation/correlation_chart_info.go
  10. 4 4
      controllers/data_manage/cross_variety/chart_info.go
  11. 1 1
      controllers/data_manage/cross_variety/classify.go
  12. 2 2
      controllers/data_manage/excel/balance_table.go
  13. 1 1
      controllers/data_manage/future_good/future_good_chart_classify.go
  14. 9 9
      controllers/data_manage/future_good/future_good_chart_info.go
  15. 3 3
      controllers/data_manage/future_good/future_good_profit_chart_info.go
  16. 1 1
      controllers/data_manage/line_equation/line_chart_classify.go
  17. 3 3
      controllers/data_manage/line_equation/line_chart_info.go
  18. 3 3
      controllers/data_manage/line_feature/chart_info.go
  19. 1 1
      controllers/data_manage/line_feature/classify.go
  20. 68 15
      controllers/data_manage/public_chart.go
  21. 1 2
      controllers/data_manage/public_chart_classify.go
  22. 64 12
      controllers/data_manage/public_edb.go
  23. 0 0
      controllers/data_manage/public_edb_classify.go
  24. 1 1
      controllers/data_manage/range_analysis/chart_classify.go
  25. 2 2
      controllers/data_manage/range_analysis/chart_info.go
  26. 40 21
      models/data_manage/chart_info.go
  27. 365 0
      models/data_manage/collect_chart.go
  28. 280 0
      models/data_manage/collect_chart_classify.go
  29. 0 0
      models/data_manage/collect_edb.go
  30. 0 0
      models/data_manage/collect_edb_classify.go
  31. 2 0
      models/data_manage/edb_info.go
  32. 2 2
      models/data_manage/public_chart_classify.go
  33. 3 9
      models/data_manage/public_chart_info.go
  34. 1 1
      models/data_manage/public_edb_info.go
  35. 100 1
      routers/commentsRouter.go
  36. 2 0
      routers/router.go
  37. 2 2
      services/data/chart_info.go
  38. 13 6
      services/data/chart_info_elastic.go
  39. 2 2
      services/data/chart_info_excel_balance.go
  40. 58 0
      services/data/collect_chart.go
  41. 0 0
      services/data/collect_edb.go
  42. 3 3
      services/data/correlation/chart_info.go
  43. 2 2
      services/data/cross_variety/chart.go
  44. 2 2
      services/data/data_approve/approve.go
  45. 0 49
      services/data/edb_info.go
  46. 57 0
      services/data/edb_info_es.go
  47. 2 2
      services/data/line_equation/chart_info.go
  48. 3 3
      services/data/line_feature/chart_info.go
  49. 0 0
      services/data/public_chart.go
  50. 0 0
      services/data/public_chart_classify.go
  51. 0 0
      services/data/public_edb.go
  52. 0 0
      services/data/public_edb_classify.go
  53. 3 3
      services/data/range_analysis/chart_info.go
  54. 2 2
      services/elastic/chart.go

+ 1 - 1
controllers/data_manage/chart_classify.go

@@ -649,7 +649,7 @@ func (this *ChartClassifyController) DeleteChartClassify() {
 		}
 		//删除ES
 		{
-			go data.EsDeleteChartInfo(req.ChartInfoId)
+			go data.DeleteChartInfoToEs(req.ChartInfoId)
 			// 删除MY ETA 图表 es数据
 			//go data.EsDeleteMyChartInfoByChartInfoId(req.ChartInfoId)
 			go data.EsDeleteMyChartInfoByMyChartIds(myIds)

+ 137 - 7
controllers/data_manage/chart_info.go

@@ -5,6 +5,7 @@ import (
 	"eta_gn/eta_api/controllers"
 	"eta_gn/eta_api/models"
 	"eta_gn/eta_api/models/data_manage"
+	"eta_gn/eta_api/models/data_manage/request"
 	"eta_gn/eta_api/models/data_manage/response"
 	"eta_gn/eta_api/models/system"
 	"eta_gn/eta_api/services"
@@ -91,7 +92,7 @@ func (this *ChartInfoController) ChartInfoSave() {
 	}
 
 	//修改es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -445,7 +446,7 @@ func (this *ChartInfoController) ChartEnInfoEdit() {
 		return
 	}
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -643,7 +644,7 @@ func (this *ChartInfoController) ChartInfoBaseEdit() {
 		return
 	}
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -886,7 +887,7 @@ func (this *ChartInfoController) ChartInfoMove() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(req.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(req.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
 
@@ -2430,7 +2431,7 @@ func (this *ChartInfoController) ChartInfoImageSet() {
 		}
 
 		//修改es数据
-		go data.EsAddOrEditChartInfo(req.ChartInfoId)
+		go data.AddOrEditChartInfoToEs(req.ChartInfoId)
 		//修改my eta es数据
 		go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
 	}
@@ -3218,7 +3219,7 @@ func (this *ChartInfoController) CopyChartInfo() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
 
@@ -4219,7 +4220,7 @@ func (this *ChartInfoController) ChartInfoImgSetBySvg() {
 		}
 
 		//修改es数据
-		go data.EsAddOrEditChartInfo(chartInfoId)
+		go data.AddOrEditChartInfoToEs(chartInfoId)
 		//修改my eta es数据
 		go data.EsAddOrEditMyChartInfoByChartInfoId(chartInfoId)
 	}
@@ -4233,3 +4234,132 @@ func (this *ChartInfoController) ChartInfoImgSetBySvg() {
 	br.Data = resp
 	return
 }
+
+// BatchMove
+// @Title 图表批量移动接口
+// @Description 图表批量移动接口
+// @Param	request	body request.MoveChartClassifyReq true "type json string"
+// @Success Ret=200 移动成功
+// @router /chart_info/batch_move [post]
+func (this *ChartInfoController) BatchMove() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	var req request.MoveChartClassifyReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.NewClassifyId <= 0 {
+		br.Msg = `请选择要转移的新分类`
+		br.IsSendEmail = false
+		return
+	}
+
+	classifyItem, err := data_manage.GetChartClassifyById(req.NewClassifyId)
+	if err != nil {
+		br.Msg = "获取指标分类失败!"
+		br.ErrMsg = "获取指标分类失败!" + err.Error()
+		return
+	}
+	if classifyItem.SysUserId != this.SysUser.AdminId {
+		br.Msg = `您没有权限移动指标到该分类!`
+		br.IsSendEmail = false
+		return
+	}
+
+	chartInfoIdList := make([]int, 0)
+	if req.IsSelectAll {
+		// 获取指标
+		chartInfoList, err := data.GetAllChartInfoListBySearchPublicChartReq(req.SearchPublicChartReq, this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = "获取指标列表失败!"
+			br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
+			return
+		}
+		// 如果有过滤指标,那么就过滤吧
+		if len(req.NoChartIdList) > 0 {
+			noChartIdMap := make(map[int]bool)
+			for _, v := range req.NoChartIdList {
+				noChartIdMap[v] = true
+			}
+
+			for _, chartInfo := range chartInfoList {
+				if _, ok := noChartIdMap[chartInfo.ChartInfoId]; !ok {
+
+					if chartInfo.SysUserId != this.SysUser.AdminId {
+						br.Msg = `您没有权限移动该指标!`
+						br.IsSendEmail = false
+						return
+					}
+
+					// 如果不在未选中的指标id列表中,那么就加入到选中的指标id列表
+					chartInfoIdList = append(chartInfoIdList, chartInfo.ChartInfoId)
+				}
+			}
+		} else {
+			for _, chartInfo := range chartInfoList {
+				chartInfoIdList = append(chartInfoIdList, chartInfo.ChartInfoId)
+				for _, v := range chartInfoList {
+					if v.SysUserId != this.SysUser.AdminId {
+						br.Msg = `您没有权限移动该指标!`
+						br.IsSendEmail = false
+						return
+					}
+				}
+			}
+		}
+	} else {
+		chartInfoList, err := data_manage.GetChartInfoViewByIdList(req.ChartIdList)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range chartInfoList {
+			if v.SysUserId != this.SysUser.AdminId {
+				br.Msg = `您没有权限移动该指标!`
+				br.IsSendEmail = false
+				return
+			}
+		}
+		chartInfoIdList = req.ChartIdList
+	}
+
+	num := len(chartInfoIdList)
+	if num <= 0 {
+		br.Msg = `请选择要移动的指标!`
+		br.IsSendEmail = false
+		return
+	}
+	if num > 100 {
+		br.Msg = `最多只能选择100条指标!`
+		br.IsSendEmail = false
+		return
+	}
+
+	// 开始批量修改指标分类
+	if len(chartInfoIdList) > 0 {
+		err = data_manage.UpdateClassifyIdByChartInfoIdList(chartInfoIdList, req.NewClassifyId)
+		if err != nil {
+			br.Msg = `指标移动失败!`
+			br.ErrMsg = `指标移动失败,ERR:` + err.Error()
+			return
+		}
+
+		// 还得修改ES呢
+		for _, v := range chartInfoIdList {
+			data.AddOrEditChartInfoToEs(v)
+		}
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}

+ 2 - 2
controllers/data_manage/chart_info_share.go

@@ -155,7 +155,7 @@ func (c *ChartInfoShareController) Save() {
 	}
 
 	// 更新es
-	go data.EsAddOrEditChartInfo(req.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(req.ChartInfoId)
 
 	br.Ret = 200
 	br.Success = true
@@ -597,7 +597,7 @@ func (c *ChartInfoShareController) BatchSave() {
 
 		// 更新es
 		for _, chartInfoId := range selectChartInfoIdList {
-			data.EsAddOrEditChartInfo(chartInfoId)
+			data.AddOrEditChartInfoToEs(chartInfoId)
 		}
 	}
 

+ 354 - 0
controllers/data_manage/collect_chart.go

@@ -0,0 +1,354 @@
+package data_manage
+
+import (
+	"encoding/json"
+	"eta_gn/eta_api/controllers"
+	"eta_gn/eta_api/models"
+	"eta_gn/eta_api/models/data_manage"
+	"eta_gn/eta_api/services/data"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"sort"
+	"strings"
+	"time"
+)
+
+// ChartCollectController 图表收藏
+type ChartCollectController struct {
+	controllers.BaseAuthController
+}
+
+// List
+// @Title 收藏列表-分页
+// @Description 收藏列表-分页
+// @Param   PageSize		query	int		false	"每页数据量"
+// @Param   CurrentIndex	query	int		false	"页码"
+// @Param   ClassifyId		query	int		false	"分类ID"
+// @Param   Keyword			query	string	false	"搜索关键词:图表ID/图表名称"
+// @Success Ret=200 保存成功
+// @router /chart_collect/list [get]
+func (this *ChartCollectController) List() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	//resp := new(response.ChartInfoChartListResp)
+	resp := new(data_manage.CollectChartInfoListResp)
+	resp.List = make([]*data_manage.CollectChartInfoItem, 0)
+
+	// 分页
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	var total int
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	// 当前用户
+	var cond string
+	var pars []interface{}
+	cond += ` AND a.sys_user_id = ?`
+	pars = append(pars, sysUser.AdminId)
+
+	// 分类筛选
+	classifyId, _ := this.GetInt("ClassifyId")
+	if classifyId > 0 {
+		classifyIds, e := data.GetChartCollectClassifyChildIds(classifyId, sysUser.AdminId, true)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取子分类IDs失败, %v", e)
+			return
+		}
+		if len(classifyIds) == 0 {
+			resp.Paging = page
+			br.Data = resp
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "获取成功"
+			return
+		}
+		cond += fmt.Sprintf(` AND a.chart_collect_classify_id IN (%s) `, utils.GetOrmInReplace(len(classifyIds)))
+		pars = append(pars, classifyIds)
+	}
+
+	// 关键词搜索
+	keywords := this.GetString("Keyword")
+	keywords = strings.TrimSpace(keywords)
+	if keywords != "" {
+		kw := fmt.Sprint("%", keywords, "%")
+		cond += fmt.Sprintf(` AND (b.chart_code LIKE ? OR b.chart_name LIKE ?)`)
+		pars = append(pars, kw, kw)
+	}
+
+	// 获取图表列表
+	dataCount, e := data_manage.GetCollectChartInfoCount(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取收藏图表总数失败, %v", e)
+		return
+	}
+	if dataCount == 0 {
+		resp.Paging = page
+		br.Data = resp
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		return
+	}
+	list, e := data_manage.GetCollectChartInfoPageList(cond, pars, startSize, pageSize)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取收藏图表列表失败, %v", e)
+		return
+	}
+	for _, v := range list {
+		resp.List = append(resp.List, data_manage.FormatChartInfo2CollectItem(v))
+	}
+	sort.Slice(resp.List, func(i, j int) bool {
+		return resp.List[i].Sort < resp.List[j].Sort
+	})
+
+	page = paging.GetPaging(currentIndex, pageSize, int(dataCount))
+	resp.Paging = page
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// Collect
+// @Title 新增收藏
+// @Description 新增收藏
+// @Param	request	body data_manage.ChartCollectReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /chart_collect/collect [post]
+func (this *ChartCollectController) Collect() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req data_manage.ChartCollectReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常: %v", e)
+		return
+	}
+	if req.ChartInfoId <= 0 {
+		br.Msg = "请选择图表"
+		return
+	}
+
+	chartItem, e := data_manage.GetChartInfoById(req.ChartInfoId)
+	if e != nil {
+		if utils.IsErrNoRow(e) {
+			br.Msg = "图表不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取图表信息失败: %v", e)
+		return
+	}
+	if chartItem.ChartInfoId <= 0 {
+		br.Msg = "图表不存在, 请刷新页面"
+		br.IsSendEmail = false
+		return
+	}
+
+	collectOb := new(data_manage.ChartCollect)
+
+	// 待添加的分类配置
+	addList := make([]*data_manage.ChartCollect, 0)
+	for _, classifyId := range req.ClassifyIdList {
+		addList = append(addList, &data_manage.ChartCollect{
+			ChartCollectClassifyId: classifyId,
+			ChartInfoId:            req.ChartInfoId,
+			SysUserId:              sysUser.AdminId,
+			SysRealName:            sysUser.RealName,
+			CreateTime:             time.Now().Local(),
+			ModifyTime:             time.Now().Local(),
+		})
+
+	}
+
+	cond := fmt.Sprintf(" %s = ? AND %s = ?", collectOb.Cols().SysUserId, collectOb.Cols().ChartInfoId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, sysUser.AdminId, req.ChartInfoId)
+
+	// 清除原有保存收藏配置,并新增保存收藏
+	e = collectOb.RemoveAndCreateMulti(cond, pars, addList)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("新增图表收藏失败: %v", e)
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// CancelCollect
+// @Title 取消收藏
+// @Description 取消收藏
+// @Param	request	body data_manage.ChartCollectReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /chart_collect/cancel_collect [post]
+func (this *ChartCollectController) CancelCollect() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req data_manage.ChartCollectReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常: %v", e)
+		return
+	}
+	if req.ChartInfoId <= 0 {
+		br.Msg = "请选择图表"
+		return
+	}
+	if req.ClassifyId <= 0 {
+		br.Msg = "请选择分类"
+		return
+	}
+
+	// 取消收藏
+	collectOb := new(data_manage.ChartCollect)
+	cond := fmt.Sprintf("%s = ? AND %s = ? AND %s = ?", collectOb.Cols().SysUserId, collectOb.Cols().ChartCollectClassifyId, collectOb.Cols().ChartInfoId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, sysUser.AdminId, req.ClassifyId, req.ChartInfoId)
+	if e := collectOb.RemoveByCondition(cond, pars); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("取消收藏失败: %v", e)
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Move
+// @Title 移动收藏
+// @Description 移动收藏
+// @Success 200 {object} data_manage.ChartCollectMoveReq
+// @router /chart_collect/move [post]
+func (this *ChartCollectController) Move() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var req data_manage.ChartCollectMoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
+		return
+	}
+
+	var newSort int
+	if req.PrevChartInfoId <= 0 {
+		firstOne, err := data_manage.GetChartCollectSort(sysUser.AdminId, req.ClassifyId, 0)
+		if err != nil {
+			br.Msg = "获取数据失败!"
+			br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
+			return
+		}
+		newSort = firstOne.Sort - 1
+	} else if req.NextChartInfoId <= 0 {
+		lastOne, err := data_manage.GetChartCollectSort(sysUser.AdminId, req.ClassifyId, 1)
+		if err != nil {
+			br.Msg = "获取数据失败!"
+			br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
+			return
+		}
+		newSort = lastOne.Sort + 1
+	} else {
+		preMapItem, err := data_manage.GetChartCollectByChartInfoId(sysUser.AdminId, req.PrevChartInfoId, req.ClassifyId)
+		if err != nil {
+			br.Msg = "获取数据失败!"
+			br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
+			return
+		}
+		nextMapItem, err := data_manage.GetChartCollectByChartInfoId(sysUser.AdminId, req.NextChartInfoId, req.ClassifyId)
+		if err != nil {
+			br.Msg = "获取数据失败!"
+			br.ErrMsg = "获取数据失败,GetMyChartClassifyMapping,Err:" + err.Error()
+			return
+		}
+		newSort = (preMapItem.Sort + nextMapItem.Sort) / 2
+
+		newSort = preMapItem.Sort + 1
+		var updateSortStr string
+		if preMapItem.Sort == nextMapItem.Sort {
+			updateSortStr = `sort + 2`
+		} else if nextMapItem.Sort-preMapItem.Sort == 1 {
+			updateSortStr = `sort + 1`
+		}
+		if updateSortStr != `` {
+			_ = data_manage.UpdateChartCollectSortByClassifyId(req.ClassifyId, preMapItem.Sort, preMapItem.ChartCollectId, updateSortStr)
+		}
+	}
+	if e := data_manage.UpdateChartCollectMove(newSort, sysUser.AdminId, req.ChartInfoId, req.ClassifyId); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("更新图表收藏失败, %v", e)
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 514 - 0
controllers/data_manage/collect_chart_classify.go

@@ -0,0 +1,514 @@
+package data_manage
+
+import (
+	"encoding/json"
+	"eta_gn/eta_api/controllers"
+	"eta_gn/eta_api/models"
+	"eta_gn/eta_api/models/data_manage"
+	"eta_gn/eta_api/services/data"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"sort"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// ChartCollectClassifyController 图表收藏分类
+type ChartCollectClassifyController struct {
+	controllers.BaseAuthController
+}
+
+// List
+// @Title 分类列表-含图表
+// @Description 分类列表-含图表
+// @Param   ParentId  query  int  false  "父级ID"
+// @Success 200 {object} data_manage.ChartCollectClassifyListItem
+// @router /chart_collect/classify/list [get]
+func (this *ChartCollectClassifyController) List() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	parentId, _ := this.GetInt("ParentId")
+
+	resp := make([]*data_manage.ChartCollectClassifyListItem, 0)
+	// 查询分类
+	classifyOb := new(data_manage.ChartCollectClassify)
+	{
+		cond := fmt.Sprintf(" AND %s = ? AND %s = ?", classifyOb.Cols().ParentId, classifyOb.Cols().SysUserId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, parentId, sysUser.AdminId)
+		list, e := classifyOb.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf("%s ASC", classifyOb.Cols().Sort))
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取子分类失败, %v", e)
+			return
+		}
+		for _, v := range list {
+			resp = append(resp, &data_manage.ChartCollectClassifyListItem{
+				NodeType:     1,
+				ClassifyId:   v.ChartCollectClassifyId,
+				ClassifyName: v.ClassifyName,
+				ParentId:     v.ParentId,
+				Level:        v.Level,
+				Sort:         v.Sort,
+				UniqueCode:   v.UniqueCode,
+			})
+		}
+	}
+
+	// 查询分类下收藏的图表
+	{
+		list, e := data_manage.GetCollectChartInfoByClassifyId(parentId)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取分类下图表失败, %v", e)
+			return
+		}
+		for _, v := range list {
+			resp = append(resp, &data_manage.ChartCollectClassifyListItem{
+				NodeType:    2,
+				ChartInfoId: v.ChartInfoId,
+				ChartName:   v.ChartName,
+				ParentId:    parentId,
+				Sort:        v.Sort,
+				UniqueCode:  v.UniqueCode,
+			})
+		}
+	}
+	sort.Slice(resp, func(i, j int) bool {
+		return resp[i].Sort < resp[j].Sort
+	})
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// Tree
+// @Title 分类树
+// @Description 分类树
+// @Success 200 {object} data_manage.ChartCollectClassifyItem
+// @router /chart_collect/classify/tree [get]
+func (this *ChartCollectClassifyController) Tree() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	// 获取所有分类
+	classifyOb := new(data_manage.ChartCollectClassify)
+	cond := fmt.Sprintf(" AND %s = ?", classifyOb.Cols().SysUserId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, sysUser.AdminId)
+	list, e := classifyOb.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf("%s ASC, %s ASC", classifyOb.Cols().ParentId, classifyOb.Cols().Sort))
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取分类列表失败, %v", e)
+		return
+	}
+	items := make([]*data_manage.ChartCollectClassifyItem, 0)
+	for _, v := range list {
+		items = append(items, v.Format2Item())
+	}
+	tree := data.GetChartCollectClassifyTreeRecursive(items, 0)
+
+	br.Data = tree
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// Add
+// @Title 新增分类
+// @Description 新增分类
+// @Param	request	body data_manage.ChartCollectClassifyAddReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /chart_collect/classify/add [post]
+func (this *ChartCollectClassifyController) Add() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req data_manage.ChartCollectClassifyAddReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常: %v", e)
+		return
+	}
+	req.ClassifyName = strings.TrimSpace(req.ClassifyName)
+	if req.ClassifyName == "" {
+		br.Msg = "请输入名称"
+		return
+	}
+	classifyOb := new(data_manage.ChartCollectClassify)
+
+	// 校验分类名称
+	//{
+	//	cond := fmt.Sprintf(" AND %s = ? AND %s = ?", classifyOb.Cols().ParentId, classifyOb.Cols().ClassifyName)
+	//	pars := make([]interface{}, 0)
+	//	pars = append(pars, req.ParentId, req.ClassifyName)
+	//	count, e := classifyOb.GetCountByCondition(cond, pars)
+	//	if e != nil {
+	//		br.Msg = "操作失败"
+	//		br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
+	//		return
+	//	}
+	//	if count > 0 {
+	//		br.Msg = "分类名称已存在"
+	//		return
+	//	}
+	//}
+
+	// 层级路径
+	var levelPath string
+	var rootId int
+	if req.ParentId > 0 {
+		parent, e := classifyOb.GetItemById(req.ParentId)
+		if e != nil {
+			br.Msg = "上级分类有误"
+			br.ErrMsg = fmt.Sprintf("获取上级分类失败, %v", e)
+			return
+		}
+		levelPath = parent.LevelPath
+		rootId = parent.RootId
+	}
+
+	sortMax, e := classifyOb.GetSortMax(req.ParentId)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取分类最大排序失败, %v", e)
+		return
+	}
+	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+	classifyOb.ParentId = req.ParentId
+	classifyOb.ClassifyName = req.ClassifyName
+	classifyOb.Level = req.Level + 1
+	classifyOb.Sort = sortMax + 1
+	classifyOb.SysUserId = sysUser.AdminId
+	classifyOb.SysUserRealName = sysUser.RealName
+	classifyOb.UniqueCode = utils.MD5(classifyOb.TableName() + "_" + timestamp)
+	classifyOb.CreateTime = time.Now().Local()
+	classifyOb.ModifyTime = time.Now().Local()
+	if e = classifyOb.Create(); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("新增分类失败, %v", e)
+		return
+	}
+	if req.ParentId > 0 {
+		classifyOb.LevelPath = fmt.Sprintf("%s,%d", levelPath, classifyOb.ChartCollectClassifyId)
+		classifyOb.RootId = rootId
+	} else {
+		classifyOb.LevelPath = fmt.Sprint(classifyOb.ChartCollectClassifyId)
+		classifyOb.RootId = classifyOb.ChartCollectClassifyId
+	}
+	if e = classifyOb.Update([]string{classifyOb.Cols().LevelPath, classifyOb.Cols().RootId}); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("更新分类失败, %v", e)
+		return
+	}
+
+	br.Data = classifyOb.Format2Item()
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Edit
+// @Title 编辑分类
+// @Description 编辑分类
+// @Param	request	body data_manage.ChartCollectClassifyEditReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /chart_collect/classify/edit [post]
+func (this *ChartCollectClassifyController) Edit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req data_manage.ChartCollectClassifyEditReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常: %v", e)
+		return
+	}
+	if req.ClassifyId < 0 {
+		br.Msg = "请选择分类"
+		return
+	}
+	req.ClassifyName = strings.TrimSpace(req.ClassifyName)
+	if req.ClassifyName == "" {
+		br.Msg = "请输入分类名称"
+		return
+	}
+
+	classifyOb := new(data_manage.ChartCollectClassify)
+	classifyItem, e := classifyOb.GetItemById(req.ClassifyId)
+	if e != nil {
+		if utils.IsErrNoRow(e) {
+			br.Msg = "分类不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取分类失败, %v", e)
+		return
+	}
+
+	// 校验分类名称
+	//{
+	//	cond := fmt.Sprintf(" AND %s <> ? AND %s = ?", classifyOb.Cols().PrimaryId, classifyOb.Cols().ClassifyName)
+	//	pars := make([]interface{}, 0)
+	//	pars = append(pars, req.ClassifyId, req.ClassifyName)
+	//	count, e := classifyOb.GetCountByCondition(cond, pars)
+	//	if e != nil {
+	//		br.Msg = "操作失败"
+	//		br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
+	//		return
+	//	}
+	//	if count > 0 {
+	//		br.Msg = "分类名称已存在"
+	//		return
+	//	}
+	//}
+	classifyItem.ClassifyName = req.ClassifyName
+	classifyItem.ModifyTime = time.Now().Local()
+	updateCols := []string{classifyOb.Cols().ClassifyName, classifyOb.Cols().ModifyTime}
+	if e = classifyItem.Update(updateCols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("更新分类失败, %v", e)
+		return
+	}
+
+	br.Data = classifyItem.Format2Item()
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Remove
+// @Title 删除分类
+// @Description 删除分类
+// @Param	request	body data_manage.ChartCollectClassifyRemoveReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /chart_collect/classify/remove [post]
+func (this *ChartCollectClassifyController) Remove() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req data_manage.ChartCollectClassifyRemoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常"
+		br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
+		return
+	}
+	if req.ClassifyId < 0 {
+		br.Msg = "请选择分类"
+		return
+	}
+
+	classifyOb := new(data_manage.ChartCollectClassify)
+	_, e := classifyOb.GetItemById(req.ClassifyId)
+	if e != nil {
+		if utils.IsErrNoRow(e) {
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "操作成功"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取分类失败, %v", e)
+		return
+	}
+
+	// 获取子分类IDs
+	classifyIds, e := data.GetChartCollectClassifyChildIds(req.ClassifyId, sysUser.AdminId, true)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取子分类IDs失败, %v", e)
+		return
+	}
+	if len(classifyIds) == 0 {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "操作成功"
+		return
+	}
+
+	// 移除所有子分类以及子分类所收藏的图表
+	if e = classifyOb.RemoveClassifyAndCollect(classifyIds); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("移除分类及收藏失败, %v", e)
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Move
+// @Title 移动分类
+// @Description 移动分类
+// @Param	request	body data_manage.ChartCollectClassifyMoveReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /chart_collect/classify/move [post]
+func (this *ChartCollectClassifyController) Move() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req data_manage.ChartCollectClassifyMoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
+		return
+	}
+
+	classifyOb := new(data_manage.ChartCollectClassify)
+	item, e := classifyOb.GetItemById(req.ClassifyId)
+	if e != nil {
+		if utils.IsErrNoRow(e) {
+			br.Msg = "分类不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = fmt.Sprintf("获取分类失败, %v", e)
+		return
+	}
+
+	updateCol := make([]string, 0)
+	//如果有传入 上一个兄弟节点分类id
+	if req.PrevClassifyId > 0 {
+		prevClassify, err := data_manage.GetChartCollectClassifyById(sysUser.AdminId, req.PrevClassifyId)
+		if err != nil {
+			br.Msg = "移动失败"
+			br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
+			return
+		}
+
+		//如果是移动在两个兄弟节点之间
+		if req.NextClassifyId > 0 {
+			//下一个兄弟节点
+			nextClassify, err := data_manage.GetChartCollectClassifyById(sysUser.AdminId, req.NextClassifyId)
+			if err != nil {
+				br.Msg = "移动失败"
+				br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
+				return
+			}
+			//如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
+			if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == item.Sort {
+				//变更兄弟节点的排序
+				updateSortStr := `sort + 2`
+				_ = data_manage.UpdateChartCollectClassifySortByClassifyId(sysUser.AdminId, prevClassify.ChartCollectClassifyId, prevClassify.Sort, updateSortStr)
+			} else {
+				//如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
+				if nextClassify.Sort-prevClassify.Sort == 1 {
+					//变更兄弟节点的排序
+					updateSortStr := `sort + 1`
+					_ = data_manage.UpdateChartCollectClassifySortByClassifyId(sysUser.AdminId, 0, prevClassify.Sort, updateSortStr)
+				}
+			}
+		}
+
+		item.Sort = prevClassify.Sort + 1
+		item.ModifyTime = time.Now()
+		updateCol = append(updateCol, "Sort", "ModifyTime")
+	} else {
+		firstClassify, err := data_manage.GetFirstChartCollectClassifyByAdminId(sysUser.AdminId)
+		if err != nil && !utils.IsErrNoRow(err) {
+			br.Msg = "移动失败"
+			br.ErrMsg = "获取获取当前账号下的排序第一条的分类信息失败,Err:" + err.Error()
+			return
+		}
+
+		//如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
+		if firstClassify != nil && firstClassify.ChartCollectClassifyId > 0 && firstClassify.Sort == 0 {
+			updateSortStr := ` sort + 1 `
+			_ = data_manage.UpdateChartCollectClassifySortByClassifyId(sysUser.AdminId, firstClassify.ChartCollectClassifyId-1, 0, updateSortStr)
+		}
+
+		item.Sort = 0 //那就是排在第一位
+		item.ModifyTime = time.Now()
+		updateCol = append(updateCol, "Sort", "ModifyTime")
+	}
+
+	if len(updateCol) > 0 {
+		if e = item.Update(updateCol); e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("更新分类失败, %v", e)
+			return
+		}
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 0 - 0
controllers/data_manage/edb_collect.go → controllers/data_manage/collect_edb.go


+ 0 - 0
controllers/data_manage/edb_collect_classify.go → controllers/data_manage/collect_edb_classify.go


+ 1 - 1
controllers/data_manage/correlation/correlation_chart_classify.go

@@ -495,7 +495,7 @@ func (this *CorrelationChartClassifyController) DeleteChartClassify() {
 		}
 		//删除ES
 		{
-			go data.EsDeleteChartInfo(chartInfo.ChartInfoId)
+			go data.DeleteChartInfoToEs(chartInfo.ChartInfoId)
 			// 删除MY ETA 图表 es数据
 			//go data.EsDeleteMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
 			go data.EsDeleteMyChartInfoByMyChartIds(myIds)

+ 6 - 6
controllers/data_manage/correlation/correlation_chart_info.go

@@ -427,7 +427,7 @@ func (this *CorrelationChartInfoController) Move() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(req.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(req.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
 
@@ -1438,7 +1438,7 @@ func (this *CorrelationChartInfoController) Copy() {
 			}
 		}
 
-		go data.EsAddOrEditChartInfo(chartInfoId)
+		go data.AddOrEditChartInfoToEs(chartInfoId)
 	}
 
 	// 新增操作日志
@@ -1834,7 +1834,7 @@ func (this *CorrelationChartInfoController) EnInfoEdit() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -2106,7 +2106,7 @@ func (this *CorrelationChartInfoController) BaseInfoEdit() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -2481,7 +2481,7 @@ func (this *CorrelationChartInfoController) MultiFactorAdd() {
 		}
 	}
 
-	go data.EsAddOrEditChartInfo(chartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfoId)
 
 	// 操作日志
 	{
@@ -2817,7 +2817,7 @@ func (this *CorrelationChartInfoController) MultiFactorEdit() {
 
 	// ES
 	go func() {
-		data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+		data.AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 		data.EsAddOrEditMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
 	}()
 

+ 4 - 4
controllers/data_manage/cross_variety/chart_info.go

@@ -991,7 +991,7 @@ func (c *ChartInfoController) Move() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(req.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(req.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
 
@@ -1183,7 +1183,7 @@ func (c *ChartInfoController) EnInfoEdit() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -1304,7 +1304,7 @@ func (c *ChartInfoController) DeleteChart() {
 	}
 	//删除ES
 	{
-		go data.EsDeleteChartInfo(chartInfo.ChartInfoId)
+		go data.DeleteChartInfoToEs(chartInfo.ChartInfoId)
 		// 删除MY ETA 图表 es数据
 		go data.EsDeleteMyChartInfoByMyChartIds(myIds)
 	}
@@ -1857,7 +1857,7 @@ func (c *ChartInfoController) BaseInfoEdit() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 

+ 1 - 1
controllers/data_manage/cross_variety/classify.go

@@ -380,7 +380,7 @@ func (c *ClassifyController) DeleteChartClassify() {
 		}
 		//删除ES
 		{
-			go data.EsDeleteChartInfo(chartInfo.ChartInfoId)
+			go data.DeleteChartInfoToEs(chartInfo.ChartInfoId)
 			// 删除MY ETA 图表 es数据
 			//go data.EsDeleteMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
 			go data.EsDeleteMyChartInfoByMyChartIds(myIds)

+ 2 - 2
controllers/data_manage/excel/balance_table.go

@@ -878,7 +878,7 @@ func (c *ExcelInfoController) DeleteBalanceChart() {
 		}
 		//删除ES
 		{
-			go data.EsDeleteChartInfo(req.ChartInfoId)
+			go data.DeleteChartInfoToEs(req.ChartInfoId)
 			// 删除MY ETA 图表 es数据
 			//go data.EsDeleteMyChartInfoByChartInfoId(req.ChartInfoId)
 			go data.EsDeleteMyChartInfoByMyChartIds(myIds)
@@ -1685,7 +1685,7 @@ func (this *ExcelInfoController) BalanceChartInfoBaseEdit() {
 		return
 	}
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 

+ 1 - 1
controllers/data_manage/future_good/future_good_chart_classify.go

@@ -472,7 +472,7 @@ func (this *FutureGoodChartClassifyController) DeleteChartClassify() {
 		}
 		//删除ES
 		{
-			go data.EsDeleteChartInfo(req.ChartInfoId)
+			go data.DeleteChartInfoToEs(req.ChartInfoId)
 			// 删除MY ETA 图表 es数据
 			//go data.EsDeleteMyChartInfoByChartInfoId(req.ChartInfoId)
 			go data.EsDeleteMyChartInfoByMyChartIds(myIds)

+ 9 - 9
controllers/data_manage/future_good/future_good_chart_info.go

@@ -265,7 +265,7 @@ func (this *FutureGoodChartInfoController) ChartInfoSave() {
 	}
 
 	//修改es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -552,7 +552,7 @@ func (this *FutureGoodChartInfoController) ChartInfoAdd() {
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfoId)
 
 	//新增操作日志
 	{
@@ -763,7 +763,7 @@ func (this *FutureGoodChartInfoController) ChartInfoEdit() {
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -959,7 +959,7 @@ func (this *FutureGoodChartInfoController) ChartEnInfoEdit() {
 		return
 	}
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -1171,7 +1171,7 @@ func (this *FutureGoodChartInfoController) ChartInfoMove() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(req.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(req.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
 
@@ -2473,7 +2473,7 @@ func (this *FutureGoodChartInfoController) ChartInfoImageSet() {
 		}
 
 		//修改es数据
-		go data.EsAddOrEditChartInfo(req.ChartInfoId)
+		go data.AddOrEditChartInfoToEs(req.ChartInfoId)
 		//修改my eta es数据
 		go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
 	}
@@ -2726,7 +2726,7 @@ func (this *FutureGoodChartInfoController) CopyChartInfo() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
 
@@ -3419,7 +3419,7 @@ func (this *FutureGoodChartInfoController) BaseInfoEdit() {
 		return
 	}
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -3500,7 +3500,7 @@ func (this *FutureGoodChartInfoController) ChartInfoImgSetBySvg() {
 		}
 
 		//修改es数据
-		go data.EsAddOrEditChartInfo(chartInfoId)
+		go data.AddOrEditChartInfoToEs(chartInfoId)
 		//修改my eta es数据
 		go data.EsAddOrEditMyChartInfoByChartInfoId(chartInfoId)
 	}

+ 3 - 3
controllers/data_manage/future_good/future_good_profit_chart_info.go

@@ -335,7 +335,7 @@ func (this *FutureGoodChartInfoController) ProfitChartInfoAdd() {
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 
 	//新增操作日志
 	{
@@ -669,7 +669,7 @@ func (this *FutureGoodChartInfoController) ProfitChartInfoEdit() {
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -858,7 +858,7 @@ func copyProfitChartInfo(oldChartInfo *data_manage.ChartInfo, chartClassifyId in
 	//保存图表与指标的关系
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
 

+ 1 - 1
controllers/data_manage/line_equation/line_chart_classify.go

@@ -480,7 +480,7 @@ func (this *LineEquationChartClassifyController) DeleteChartClassify() {
 		}
 		//删除ES
 		{
-			go data.EsDeleteChartInfo(chartInfo.ChartInfoId)
+			go data.DeleteChartInfoToEs(chartInfo.ChartInfoId)
 			// 删除MY ETA 图表 es数据
 			go data.EsDeleteMyChartInfoByMyChartIds(myIds)
 		}

+ 3 - 3
controllers/data_manage/line_equation/line_chart_info.go

@@ -505,7 +505,7 @@ func (this *LineEquationChartInfoController) Move() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(req.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(req.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
 
@@ -1501,7 +1501,7 @@ func (this *LineEquationChartInfoController) EnInfoEdit() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -1745,7 +1745,7 @@ func (this *LineEquationChartInfoController) BaseInfoEdit() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 

+ 3 - 3
controllers/data_manage/line_feature/chart_info.go

@@ -1554,7 +1554,7 @@ func (this *LineFeaturesChartInfoController) Move() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(req.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(req.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(req.ChartInfoId)
 
@@ -2633,7 +2633,7 @@ func (this *LineFeaturesChartInfoController) EnInfoEdit() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -2879,7 +2879,7 @@ func (this *LineFeaturesChartInfoController) BaseInfoEdit() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 

+ 1 - 1
controllers/data_manage/line_feature/classify.go

@@ -480,7 +480,7 @@ func (this *LineFeaturesChartClassifyController) DeleteChartClassify() {
 		}
 		//删除ES
 		{
-			go data.EsDeleteChartInfo(chartInfo.ChartInfoId)
+			go data.DeleteChartInfoToEs(chartInfo.ChartInfoId)
 			// 删除MY ETA 图表 es数据
 			go data.EsDeleteMyChartInfoByMyChartIds(myIds)
 		}

+ 68 - 15
controllers/data_manage/chart_public.go → controllers/data_manage/public_chart.go

@@ -132,7 +132,7 @@ func (c *ChartPublicController) Save() {
 
 		// 更新ES
 		for _, dataPublicItem := range dataPublicItemList {
-			data.EsAddOrEditChartInfo(dataPublicItem.DataId)
+			data.AddOrEditChartInfoToEs(dataPublicItem.DataId)
 		}
 	}
 
@@ -271,30 +271,80 @@ func (c *ChartPublicController) ListByEs() {
 
 	// 因为是ES查找的,所以需要重新查一下图表的信息,主要是为了把是否授权字段找出来
 	if len(chartInfoList) > 0 {
+		// 图表map信息
+		chartInfoMap := make(map[int]*data_manage.ChartInfo)
+		classifyMap := make(map[int]*data_manage.ChartClassify)
+		publicClassifyMap := make(map[int]*data_manage.ChartPublicClassify)
+
+		// 指标id,分类id,公共分类id
 		chartInfoIdList := make([]int, 0)
+		tmpClassifyIdList := make([]int, 0)
+		tmpPublicClassifyIdList := make([]int, 0)
+
 		for _, v := range chartInfoList {
 			v.ConvertToResp()
 			v.HaveOperaAuth = true
 			chartInfoIdList = append(chartInfoIdList, v.ChartInfoId)
+			tmpClassifyIdList = append(tmpClassifyIdList, v.ChartClassifyId)
+			tmpPublicClassifyIdList = append(tmpPublicClassifyIdList, v.ChartPublicClassifyId)
 		}
 
-		tmpChartList, err := data_manage.GetChartInfoByIdList(chartInfoIdList)
-		if err != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取所有有权限的图表失败,Err:" + err.Error()
-			return
+		// 获取所有有权限的图表
+		{
+			tmpChartList, err := data_manage.GetChartInfoByIdList(chartInfoIdList)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的图表失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range tmpChartList {
+				chartInfoMap[v.ChartInfoId] = v
+			}
 		}
-		chartInfoMap := make(map[int]*data_manage.ChartInfo)
-		for _, v := range tmpChartList {
-			chartInfoMap[v.ChartInfoId] = v
+
+		// 图表分类
+		{
+			tmpList, err := data_manage.GetChartClassifyByIdList(tmpClassifyIdList)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的图表分类失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range tmpList {
+				classifyMap[v.ChartClassifyId] = v
+			}
+		}
+
+		// 公共分类
+		{
+			obj := data_manage.ChartPublicClassify{}
+			tmpList, err := obj.GetChartClassifyByIdList(tmpPublicClassifyIdList)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的公共分类失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range tmpList {
+				publicClassifyMap[v.ChartPublicClassifyId] = v
+			}
 		}
 
+		// 数据重新赋值
 		for _, v := range chartInfoList {
-			tmpChartInfo, ok := chartInfoMap[v.ChartInfoId]
-			if !ok {
-				continue
+			if tmpChartInfo, ok := chartInfoMap[v.ChartInfoId]; ok {
+				v.IsJoinPermission = tmpChartInfo.IsJoinPermission
+			}
+
+			// 普通分类
+			if classifyItem, ok := classifyMap[v.ChartInfoId]; ok {
+				v.ClassifyNamePath = classifyItem.ChartClassifyNamePath
 			}
-			v.IsJoinPermission = tmpChartInfo.IsJoinPermission
+
+			// 公共分类
+			if classifyItem, ok := publicClassifyMap[v.ChartPublicClassifyId]; ok {
+				v.PublicClassifyNamePath = classifyItem.ChartPublicClassifyNamePath
+			}
+
 		}
 	}
 
@@ -410,13 +460,13 @@ func (c *ChartPublicController) AllListByEs() {
 	br.Data = resp
 }
 
-// BatchMoveChart
+// BatchMove
 // @Title 图表批量移动接口
 // @Description 图表批量移动接口
 // @Param	request	body request.MoveChartClassifyReq true "type json string"
 // @Success Ret=200 移动成功
 // @router /chart_info/public/batch_move [post]
-func (c *ChartPublicController) BatchMoveChart() {
+func (c *ChartPublicController) BatchMove() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		c.Data["json"] = br
@@ -451,6 +501,9 @@ func (c *ChartPublicController) BatchMoveChart() {
 		return
 	}
 
+	// 只是取公开
+	req.SearchPublicChartReq.ChartPublicList = []int{3}
+
 	chartInfoIdList := make([]int, 0)
 	if req.IsSelectAll {
 		// 获取图表

+ 1 - 2
controllers/data_manage/chart_public_classify.go → controllers/data_manage/public_chart_classify.go

@@ -48,8 +48,7 @@ func (c *ChartPublicClassifyController) SimpleList() {
 
 	var sortList data_manage.ChartClassifyItemList
 	if parentId > 0 {
-
-		allChartInfo, err := data_manage.GetChartInfoByPublicClassifyId(parentId, 0, source)
+		allChartInfo, err := data_manage.GetChartInfoByPublicClassifyId(parentId, source)
 		if err != nil {
 			br.Msg = "获取指标数据失败"
 			br.ErrMsg = "获取指标数据失败,Err:" + err.Error()

+ 64 - 12
controllers/data_manage/edb_public.go → controllers/data_manage/public_edb.go

@@ -446,7 +446,16 @@ func (c *EdbPublicController) ListByEs() {
 
 	// 因为是ES查找的,所以需要重新查一下指标的信息,主要是为了把是否授权字段找出来
 	if len(edbInfoList) > 0 {
+		// 图表map
+		edbInfoMap := make(map[int]*data_manage.EdbInfo)
+		classifyMap := make(map[int]*data_manage.EdbClassify)
+		publicClassifyMap := make(map[int]*data_manage.EdbPublicClassify)
+
+		// 指标id,分类id,公共分类id
 		edbInfoIdList := make([]int, 0)
+		tmpClassifyIdList := make([]int, 0)
+		tmpPublicClassifyIdList := make([]int, 0)
+
 		for _, v := range edbInfoList {
 			v.ConvertToResp()
 			v.EdbNameAlias = v.EdbName
@@ -454,23 +463,63 @@ func (c *EdbPublicController) ListByEs() {
 			edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
 		}
 
-		tmpEdbList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
-		if err != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
-			return
+		// 查找指标
+		{
+			tmpEdbList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range tmpEdbList {
+				edbInfoMap[v.EdbInfoId] = v
+				tmpClassifyIdList = append(tmpClassifyIdList, v.ClassifyId)
+				tmpPublicClassifyIdList = append(tmpPublicClassifyIdList, v.EdbPublicClassifyId)
+			}
 		}
-		edbInfoMap := make(map[int]*data_manage.EdbInfo)
-		for _, v := range tmpEdbList {
-			edbInfoMap[v.EdbInfoId] = v
+
+		// 指标分类
+		{
+			tmpList, err := data_manage.GetEdbClassifyByIdList(tmpClassifyIdList)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的图表分类失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range tmpList {
+				classifyMap[v.ClassifyId] = v
+			}
+		}
+
+		// 公共分类
+		{
+			obj := data_manage.EdbPublicClassify{}
+			tmpList, err := obj.GetEdbClassifyByIdList(tmpPublicClassifyIdList)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的公共分类失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range tmpList {
+				publicClassifyMap[v.EdbPublicClassifyId] = v
+			}
 		}
 
+		// 数据重新赋值
 		for _, v := range edbInfoList {
-			tmpEdbInfo, ok := edbInfoMap[v.EdbInfoId]
-			if !ok {
-				continue
+			if tmpEdbInfo, ok := edbInfoMap[v.EdbInfoId]; ok {
+				v.IsJoinPermission = tmpEdbInfo.IsJoinPermission
+			}
+
+			// 普通分类
+			if classifyItem, ok := classifyMap[v.EdbInfoId]; ok {
+				v.ClassifyNamePath = classifyItem.ClassifyNamePath
+			}
+
+			// 公共分类
+			if classifyItem, ok := publicClassifyMap[v.EdbPublicClassifyId]; ok {
+				v.PublicClassifyNamePath = classifyItem.EdbPublicClassifyNamePath
 			}
-			v.IsJoinPermission = tmpEdbInfo.IsJoinPermission
 		}
 	}
 
@@ -650,6 +699,9 @@ func (c *EdbPublicController) BatchMoveEdb() {
 		return
 	}
 
+	// 只是取公开
+	req.SearchPublicEdbReq.EdbPublicList = []int{3}
+
 	edbInfoIdList := make([]int, 0)
 	if req.IsSelectAll {
 		// 获取指标

+ 0 - 0
controllers/data_manage/edb_public_classify.go → controllers/data_manage/public_edb_classify.go


+ 1 - 1
controllers/data_manage/range_analysis/chart_classify.go

@@ -514,7 +514,7 @@ func (this *RangeChartClassifyController) DeleteChartClassify() {
 		}
 		//删除ES
 		{
-			go data.EsDeleteChartInfo(chartInfo.ChartInfoId)
+			go data.DeleteChartInfoToEs(chartInfo.ChartInfoId)
 			// 删除MY ETA 图表 es数据
 			//go data.EsDeleteMyChartInfoByChartInfoId(chartInfo.ChartInfoId)
 			go data.EsDeleteMyChartInfoByMyChartIds(myIds)

+ 2 - 2
controllers/data_manage/range_analysis/chart_info.go

@@ -1985,7 +1985,7 @@ func (this *RangeChartChartInfoController) BaseInfoEdit() {
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -2083,7 +2083,7 @@ func (this *RangeChartChartInfoController) ChartInfoSave() {
 	}
 
 	//修改es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 

+ 40 - 21
models/data_manage/chart_info.go

@@ -1998,27 +1998,29 @@ type ChartInfoView struct {
 	BarConfig         string               `description:"柱方图的配置,json数据" json:"-"`
 	Source            int                  `description:"1:ETA图库;2:商品价格曲线;3:相关性图表"`
 	//CorrelationLeadUnit string `description:"相关性图表-领先单位"`
-	ExtraConfig           string          `description:"图表额外配置,json数据"`
-	ChartSource           string          `description:"图表来源str"`
-	ChartSourceEn         string          `description:"图表来源(英文)"`
-	Button                ChartViewButton `gorm:"-" description:"操作按钮"`
-	SeasonExtraConfig     string          `description:"季节性图表中的配置,json数据"`
-	StartYear             int             `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N"`
-	ChartThemeId          int             `description:"图表应用主题ID"`
-	ChartThemeStyle       string          `description:"图表应用主题样式"`
-	SourcesFrom           string          `description:"图表来源"`
-	Instructions          string          `description:"图表说明"`
-	MarkersLines          string          `description:"标识线"`
-	MarkersAreas          string          `description:"标识区"`
-	IsJoinPermission      int             `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
-	HaveOperaAuth         bool            `description:"是否有数据权限,默认:false"`
-	ForumChartInfoId      int             `description:"社区的图表ID"`
-	ChartAlias            string          `description:"图表别名"`
-	SharedUserIdList      []int           `description:"共享用户id列表" gorm:"-"`
-	SharedUserName        string          `description:"共享用户姓名,多个用英文,隔开" gorm:"-"`
-	PublicStatus          int             `description:"公开状态;0:未公开;1:审批中;2:已驳回;3:已公开"`
-	ChartPublicClassifyId int             `description:"图表公开分类id"`
-	PublicTime            time.Time       `description:"设置公开的时间"`
+	ExtraConfig            string          `description:"图表额外配置,json数据"`
+	ChartSource            string          `description:"图表来源str"`
+	ChartSourceEn          string          `description:"图表来源(英文)"`
+	Button                 ChartViewButton `gorm:"-" description:"操作按钮"`
+	SeasonExtraConfig      string          `description:"季节性图表中的配置,json数据"`
+	StartYear              int             `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N"`
+	ChartThemeId           int             `description:"图表应用主题ID"`
+	ChartThemeStyle        string          `description:"图表应用主题样式"`
+	SourcesFrom            string          `description:"图表来源"`
+	Instructions           string          `description:"图表说明"`
+	MarkersLines           string          `description:"标识线"`
+	MarkersAreas           string          `description:"标识区"`
+	IsJoinPermission       int             `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth          bool            `description:"是否有数据权限,默认:false"`
+	ForumChartInfoId       int             `description:"社区的图表ID"`
+	ChartAlias             string          `description:"图表别名"`
+	SharedUserIdList       []int           `description:"共享用户id列表" gorm:"-"`
+	SharedUserName         string          `description:"共享用户姓名,多个用英文,隔开" gorm:"-"`
+	PublicStatus           int             `description:"公开状态;0:未公开;1:审批中;2:已驳回;3:已公开"`
+	ChartPublicClassifyId  int             `description:"图表公开分类id"`
+	PublicTime             time.Time       `description:"设置公开的时间"`
+	ClassifyNamePath       string          `description:"分类完整路径"`
+	PublicClassifyNamePath string          `description:"公共分类完整路径"`
 }
 
 type ChartViewButton struct {
@@ -2942,3 +2944,20 @@ func getThsHfEdbDataListMinAndMaxByMongo(source, subSource, edbInfoId int, start
 	maxData = result.MaxValue
 	return
 }
+
+// UpdateClassifyIdByChartInfoIdList
+// @Description: 根据图表id列表更新所属分类id
+// @author: Roc
+// @datetime 2024-12-10 13:18:52
+// @param chartInfoIdList int
+// @param chartClassifyId int
+// @return err error
+func UpdateClassifyIdByChartInfoIdList(chartInfoIdList []int, chartClassifyId int) (err error) {
+	if len(chartInfoIdList) <= 0 {
+		return
+	}
+	sql := ` UPDATE chart_info SET chart_classify_id = ? WHERE  chart_info_id in (?) `
+	err = global.DmSQL["data"].Exec(sql, chartClassifyId, chartInfoIdList).Error
+
+	return
+}

+ 365 - 0
models/data_manage/collect_chart.go

@@ -0,0 +1,365 @@
+package data_manage
+
+import (
+	"eta_gn/eta_api/global"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// ChartCollect 图表收藏
+type ChartCollect struct {
+	ChartCollectId         int       `gorm:"primaryKey;autoIncrement;column:chart_collect_id;type:int(10) unsigned;not null"`
+	ChartCollectClassifyId int       `gorm:"index:idx_classify_id;column:chart_collect_classify_id;type:int(10) unsigned;not null;default:0"` // 图表收藏分类ID
+	ChartInfoId            int       `gorm:"column:chart_info_id;type:int(10) unsigned;not null;default:0"`                                   // 图表ID
+	SysUserId              int       `gorm:"column:sys_user_id;type:int(10) unsigned;not null;default:0"`                                     // 创建人ID
+	SysRealName            string    `gorm:"column:sys_real_name;type:int(10) unsigned;not null;default:0"`                                   // 创建人姓名
+	Sort                   int       `gorm:"column:sort;type:int(10);default:0"`                                                              // 排序
+	CreateTime             time.Time `gorm:"column:create_time;type:datetime"`                                                                // 创建时间
+	ModifyTime             time.Time `gorm:"column:modify_time;type:datetime"`                                                                // 更新时间
+}
+
+func (m *ChartCollect) TableName() string {
+	return "chart_collect"
+}
+
+type ChartCollectCols struct {
+	PrimaryId              string
+	ChartCollectClassifyId string
+	ChartInfoId            string
+	SysUserId              string
+	SysRealName            string
+	Sort                   string
+	CreateTime             string
+	ModifyTime             string
+}
+
+func (m *ChartCollect) Cols() ChartCollectCols {
+	return ChartCollectCols{
+		PrimaryId:              "chart_collect_id",
+		ChartCollectClassifyId: "chart_collect_classify_id",
+		ChartInfoId:            "chart_info_id",
+		SysUserId:              "sys_user_id",
+		SysRealName:            "sys_real_name",
+		Sort:                   "sort",
+		CreateTime:             "create_time",
+		ModifyTime:             "modify_time",
+	}
+}
+
+func (m *ChartCollect) Create() (err error) {
+	err = global.DmSQL["data"].Create(m).Error
+	return
+}
+
+func (m *ChartCollect) CreateMulti(items []*ChartCollect) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	err = global.DmSQL["data"].CreateInBatches(items, utils.MultiAddNum).Error
+	return
+}
+
+func (m *ChartCollect) Update(cols []string) (err error) {
+	err = global.DmSQL["data"].Select(cols).Updates(m).Error
+	return
+}
+
+func (m *ChartCollect) Remove() (err error) {
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
+	err = global.DmSQL["data"].Exec(sql, m.ChartCollectId).Error
+	return
+}
+
+func (m *ChartCollect) MultiRemove(ids []int) (err error) {
+	if len(ids) == 0 {
+		return
+	}
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	err = global.DmSQL["data"].Exec(sql, ids).Error
+	return
+}
+
+func (m *ChartCollect) RemoveByCondition(condition string, pars []interface{}) (err error) {
+	if condition == "" {
+		return
+	}
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
+	err = global.DmSQL["data"].Exec(sql, pars...).Error
+	return
+}
+
+// RemoveAndCreateMulti
+// @Description: 清除原有配置并新增收藏
+// @receiver m
+// @param delCondition
+// @param delPars
+// @param items
+// @return err
+func (m *ChartCollect) RemoveAndCreateMulti(delCondition string, delPars []interface{}, items []*ChartCollect) (err error) {
+	to := global.DmSQL["data"].Begin()
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	// 先删除
+	{
+		if delCondition == "" {
+			return
+		}
+		sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), delCondition)
+		err = to.Exec(sql, delPars...).Error
+		if err != nil {
+			return
+		}
+	}
+
+	if len(items) == 0 {
+		return
+	}
+	err = to.CreateInBatches(items, utils.MultiAddNum).Error
+
+	return
+}
+
+func (m *ChartCollect) GetItemById(id int) (item *ChartCollect, err error) {
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
+	err = global.DmSQL["data"].Raw(sql, id).First(&item).Error
+	return
+}
+
+func (m *ChartCollect) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *ChartCollect, err error) {
+	order := ``
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
+	err = global.DmSQL["data"].Raw(sql, pars...).First(&item).Error
+	return
+}
+
+func (m *ChartCollect) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = global.DmSQL["data"].Raw(sql, pars...).Scan(&count).Error
+	return
+}
+
+func (m *ChartCollect) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*ChartCollect, err error) {
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	err = global.DmSQL["data"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
+func (m *ChartCollect) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*ChartCollect, err error) {
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	pars = append(pars, startSize, pageSize)
+	err = global.DmSQL["data"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
+// GetCollectChartInfoByClassifyId 获取分类下收藏的图表信息
+func GetCollectChartInfoByClassifyId(classifyId int) (items []*ChartInfo, err error) {
+	sql := `SELECT b.* FROM chart_collect AS a JOIN chart_info AS b ON a.chart_info_id = b.chart_info_id WHERE a.chart_collect_classify_id = ? ORDER BY a.sort ASC`
+	err = global.DmSQL["data"].Raw(sql, classifyId).Find(&items).Error
+	return
+}
+
+// ChartCollectReq 加入/取消收藏
+type ChartCollectReq struct {
+	ClassifyId     int   `description:"分类ID"`
+	ClassifyIdList []int `description:"分类ID列表"`
+	ChartInfoId    int   `description:"图表ID"`
+}
+
+// GetCollectChartInfoCount 获取收藏的图表信息总数
+func GetCollectChartInfoCount(condition string, pars []interface{}) (total int64, err error) {
+	sql := fmt.Sprintf(`SELECT COUNT(1) AS ct FROM (
+	  SELECT b.chart_info_id FROM chart_collect AS a JOIN chart_info AS b ON a.chart_info_id = b.chart_info_id
+	  WHERE 1=1 %s
+	  GROUP BY b.chart_info_id
+	) AS sub`, condition)
+	err = global.DmSQL["data"].Raw(sql, pars...).Scan(&total).Error
+	return
+}
+
+// GetCollectChartInfoPageList 获取收藏的图表信息列表-分页
+func GetCollectChartInfoPageList(condition string, pars []interface{}, startSize, pageSize int) (list []*CollectChartInfoQuery, err error) {
+	sql := fmt.Sprintf(`SELECT b."chart_info_id",
+       WM_CONCAT(DISTINCT a."chart_collect_classify_id") AS "collect_classify_id",
+MAX(a.create_time) as collect_time,
+MAX(b."chart_name") "chart_name",
+MAX(b."chart_type") "chart_type",
+MAX(b."source") "source",
+MAX(b."chart_classify_id") "chart_classify_id",
+MAX(b."create_time") "create_time",
+MAX(b."unique_code") "unique_code",
+MAX(b."chart_image") "chart_image",
+MAX(b."modify_time") "modify_time",
+MAX(a."sort") AS "sort"
+ FROM chart_collect AS a JOIN chart_info AS b ON a.chart_info_id = b.chart_info_id
+	  WHERE 1=1 %s
+	  GROUP BY b.chart_info_id
+ORDER BY collect_time DESC LIMIT ?,?`, condition)
+	pars = append(pars, startSize, pageSize)
+	err = global.DmSQL["data"].Raw(sql, pars...).Scan(&list).Error
+	return
+}
+
+// GetUserAllCollectChartInfoIdList
+// @Description: 获取用户所有收藏的图表id列表
+// @author: Roc
+// @datetime 2024-11-28 15:27:52
+// @param userId int
+// @return list []int
+// @return err error
+func GetUserAllCollectChartInfoIdList(userId int) (list []int, err error) {
+	sql := `SELECT chart_info_id FROM chart_collect WHERE 1=1 AND sys_user_id = ? GROUP BY chart_info_id`
+	err = global.DmSQL["data"].Raw(sql, userId).Scan(&list).Error
+	return
+}
+
+type CollectChartInfoQuery struct {
+	ChartInfo
+	CollectClassifyIdStr string    `gorm:"column:collect_classify_id" description:"收藏分类ID"`
+	CollectTime          time.Time `gorm:"column:collect_time" description:"收藏时间"`
+}
+
+// CollectChartInfoItem 收藏列表图表信息
+type CollectChartInfoItem struct {
+	ChartInfoId           int    `description:"图表ID"`
+	ChartInfoType         int    `description:"图表类型:0-普通图表; 1-预测图表"`
+	ChartType             int    `description:"图表类型:1-基础图表; 2-计算图表"`
+	Source                int    `description:"来源ID"`
+	SourceName            string `description:"来源名称"`
+	ChartName             string `description:"图表名称"`
+	Frequency             string `description:"频率"`
+	Unit                  string `description:"单位"`
+	UniqueCode            string `description:"唯一编码"`
+	ChartImage            string `description:"图表图片"`
+	ClassifyId            int    `description:"图表分类ID"`
+	CollectClassifyIdList []int  `description:"收藏分类ID列表"`
+	CollectTime           string `description:"收藏时间"`
+	CreateTime            string `description:"创建时间"`
+	Sort                  int    `description:"排序"`
+}
+
+func FormatChartInfo2CollectItem(origin *CollectChartInfoQuery) (item *CollectChartInfoItem) {
+	item = new(CollectChartInfoItem)
+	item.ChartInfoId = origin.ChartInfoId
+	item.ChartType = origin.ChartType
+	item.Source = origin.Source
+	item.ChartName = origin.ChartName
+	item.Unit = origin.Unit
+	item.UniqueCode = origin.UniqueCode
+	item.ChartImage = origin.ChartImage
+	item.ClassifyId = origin.ChartClassifyId
+	collectClassifyIdList := make([]int, 0)
+	if origin.CollectClassifyIdStr != `` {
+		collectClassifyIdStrList := strings.Split(origin.CollectClassifyIdStr, ",")
+		for _, v := range collectClassifyIdStrList {
+			collectClassifyId, tmpErr := strconv.Atoi(v)
+			if tmpErr == nil {
+				collectClassifyIdList = append(collectClassifyIdList, collectClassifyId)
+			}
+		}
+	}
+	item.CollectClassifyIdList = collectClassifyIdList
+	item.CollectTime = origin.CollectTime.Format(utils.FormatDateTime)
+	item.CreateTime = origin.CreateTime.Format(utils.FormatDateTime)
+	item.Sort = origin.Sort
+	return
+}
+
+// CollectChartInfoListResp 收藏图表分页列表相应
+type CollectChartInfoListResp struct {
+	Paging *paging.PagingItem
+	List   []*CollectChartInfoItem
+}
+
+// ChartCollectMoveReq 移动收藏
+type ChartCollectMoveReq struct {
+	ChartInfoId     int `description:"收藏的图表ID(分类下图表ID唯一)"`
+	PrevChartInfoId int `description:"前一个收藏的图表ID"`
+	NextChartInfoId int `description:"后一个收藏的图表ID"`
+	ClassifyId      int `description:"当前分类ID"`
+}
+
+func GetChartCollectSort(adminId, classifyId, sort int) (item *ChartCollect, err error) {
+	sql := ` SELECT * FROM chart_collect WHERE 1=1 AND sys_user_id = ? AND chart_collect_classify_id = ? `
+	if sort == 1 {
+		sql += ` ORDER BY sort DESC, chart_collect_id ASC LIMIT 1 `
+	} else {
+		sql += ` ORDER BY sort ASC, chart_collect_id DESC LIMIT 1 `
+	}
+	err = global.DmSQL["data"].Raw(sql, adminId, classifyId).First(&item).Error
+	return
+}
+
+func GetChartCollectByChartInfoId(adminId, chartInfoId, classifyId int) (item *ChartCollect, err error) {
+	sql := `SELECT * FROM chart_collect WHERE sys_user_id = ? AND chart_info_id = ? AND chart_collect_classify_id=? `
+	err = global.DmSQL["data"].Raw(sql, adminId, chartInfoId, classifyId).First(&item).Error
+	return
+}
+
+func UpdateChartCollectSortByClassifyId(classifyId, nowSort int, prevMyChartClassifyMappingId int, updateSort string) (err error) {
+	sql := ` update chart_collect set sort = ` + updateSort + ` WHERE chart_collect_classify_id = ?  `
+	if prevMyChartClassifyMappingId > 0 {
+		sql += ` AND ( sort > ? or ( chart_collect_id < ? and sort=? )) `
+	}
+	err = global.DmSQL["data"].Exec(sql, classifyId, nowSort, prevMyChartClassifyMappingId, nowSort).Error
+	return
+}
+
+func UpdateChartCollectMove(sort, adminId, chartInfoId, myChartClassifyId int) (err error) {
+	sql := ` UPDATE chart_collect SET sort = ?,modify_time=NOW() WHERE sys_user_id=? AND chart_info_id=? AND chart_collect_classify_id=? `
+	err = global.DmSQL["data"].Exec(sql, sort, adminId, chartInfoId, myChartClassifyId).Error
+	return
+}
+
+// ChartCollectItem 图表收藏信息
+type ChartCollectItem struct {
+	ChartCollectId         int       `gorm:"primaryKey;autoIncrement;column:chart_collect_id;type:int(10) unsigned;not null"`
+	ChartCollectClassifyId int       `gorm:"index:idx_classify_id;column:chart_collect_classify_id;type:int(10) unsigned;not null;default:0"` // 图表收藏分类ID
+	ChartInfoId            int       `gorm:"column:chart_info_id;type:int(10) unsigned;not null;default:0"`                                   // 图表ID
+	SysUserId              int       `gorm:"column:sys_user_id;type:int(10) unsigned;not null;default:0"`                                     // 创建人ID
+	SysRealName            string    `gorm:"column:sys_real_name;type:int(10) unsigned;not null;default:0"`                                   // 创建人姓名
+	ClassifyName           string    `gorm:"column:classify_name;type:varchar(255);not null;default:''"`                                      // 分类名称
+	Sort                   int       `gorm:"column:sort;type:int(10);default:0"`                                                              // 排序
+	CreateTime             time.Time `gorm:"column:create_time;type:datetime"`                                                                // 创建时间
+	ModifyTime             time.Time `gorm:"column:modify_time;type:datetime"`                                                                // 更新时间
+}
+
+func (m *ChartCollect) GetItemsByUserIdAndChartInfoIdList(userId int, chartInfoIdList []int) (items []*ChartCollectItem, err error) {
+	if len(chartInfoIdList) <= 0 {
+		return
+	}
+	sql := `SELECT a.*,b.classify_name FROM chart_collect  AS a
+    JOIN chart_collect_classify b on a.chart_collect_classify_id = b.chart_collect_classify_id
+    WHERE a.sys_user_id = ? AND a.chart_info_id in (?)  ORDER BY a.chart_collect_id DESC `
+	err = global.DmSQL["data"].Raw(sql, userId, chartInfoIdList).Find(&items).Error
+
+	return
+}

+ 280 - 0
models/data_manage/collect_chart_classify.go

@@ -0,0 +1,280 @@
+package data_manage
+
+import (
+	"eta_gn/eta_api/global"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"strings"
+	"time"
+)
+
+// ChartCollectClassify 图表收藏分类
+type ChartCollectClassify struct {
+	ChartCollectClassifyId int       `gorm:"primaryKey;autoIncrement;column:chart_collect_classify_id;type:int(10) unsigned;not null"`
+	ClassifyName           string    `gorm:"column:classify_name;type:varchar(255);not null;default:''"`     // 分类名称
+	ParentId               int       `gorm:"column:parent_id;type:int(10) unsigned;not null;default:0"`      // 父级Id
+	SysUserId              int       `gorm:"column:sys_user_id;type:int(10) unsigned;not null;default:0"`    // 创建人Id
+	SysUserRealName        string    `gorm:"column:sys_user_real_name;type:varchar(128);not null"`           // 创建人姓名
+	UniqueCode             string    `gorm:"unique;column:unique_code;type:varchar(64);not null;default:''"` // 唯一编码
+	Level                  int       `gorm:"column:level;type:int(10) unsigned;not null;default:0"`          // 层级
+	Sort                   int       `gorm:"column:sort;type:int(10) unsigned;not null;default:0"`           // 排序
+	RootId                 int       `gorm:"column:root_id;type:int(10) unsigned;not null;default:0"`        // 顶级Id
+	LevelPath              string    `gorm:"column:level_path;type:varchar(255);not null;default:''"`        // 层级路径,逗号分隔
+	CreateTime             time.Time `gorm:"column:create_time;type:datetime"`                               // 创建时间
+	ModifyTime             time.Time `gorm:"column:modify_time;type:datetime"`                               // 修改时间
+}
+
+func (m *ChartCollectClassify) TableName() string {
+	return "chart_collect_classify"
+}
+
+type ChartCollectClassifyCols struct {
+	PrimaryId       string
+	ClassifyName    string
+	ParentId        string
+	SysUserId       string
+	SysUserRealName string
+	UniqueCode      string
+	Level           string
+	Sort            string
+	RootId          string
+	LevelPath       string
+	CreateTime      string
+	ModifyTime      string
+}
+
+func (m *ChartCollectClassify) Cols() ChartCollectClassifyCols {
+	return ChartCollectClassifyCols{
+		PrimaryId:       "chart_collect_classify_id",
+		ClassifyName:    "classify_name",
+		ParentId:        "parent_id",
+		SysUserId:       "sys_user_id",
+		SysUserRealName: "sys_user_real_name",
+		UniqueCode:      "unique_code",
+		Level:           "level",
+		Sort:            "sort",
+		RootId:          "root_id",
+		LevelPath:       "level_path",
+		CreateTime:      "create_time",
+		ModifyTime:      "modify_time",
+	}
+}
+
+func (m *ChartCollectClassify) Create() (err error) {
+	err = global.DmSQL["data"].Create(m).Error
+	return
+}
+
+func (m *ChartCollectClassify) CreateMulti(items []*ChartCollectClassify) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	err = global.DmSQL["data"].CreateInBatches(items, utils.MultiAddNum).Error
+	return
+}
+
+func (m *ChartCollectClassify) Update(cols []string) (err error) {
+	err = global.DmSQL["data"].Select(cols).Updates(m).Error
+	return
+}
+
+func (m *ChartCollectClassify) Remove() (err error) {
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
+	err = global.DmSQL["data"].Exec(sql, m.ChartCollectClassifyId).Error
+	return
+}
+
+func (m *ChartCollectClassify) MultiRemove(ids []int) (err error) {
+	if len(ids) == 0 {
+		return
+	}
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
+	err = global.DmSQL["data"].Exec(sql, ids).Error
+	return
+}
+
+func (m *ChartCollectClassify) RemoveByCondition(condition string, pars []interface{}) (err error) {
+	if condition == "" {
+		return
+	}
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s`, m.TableName(), condition)
+	err = global.DmSQL["data"].Exec(sql, pars...).Error
+	return
+}
+
+func (m *ChartCollectClassify) GetItemById(id int) (item *ChartCollectClassify, err error) {
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().PrimaryId)
+	err = global.DmSQL["data"].Raw(sql, id).First(&item).Error
+	return
+}
+
+func (m *ChartCollectClassify) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *ChartCollectClassify, err error) {
+	order := ``
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
+	err = global.DmSQL["data"].Raw(sql, pars...).First(&item).Error
+	return
+}
+
+func (m *ChartCollectClassify) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = global.DmSQL["data"].Raw(sql, pars...).Scan(&count).Error
+	return
+}
+
+func (m *ChartCollectClassify) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*ChartCollectClassify, err error) {
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	err = global.DmSQL["data"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
+func (m *ChartCollectClassify) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*ChartCollectClassify, err error) {
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	pars = append(pars, startSize, pageSize)
+	err = global.DmSQL["data"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
+func (m *ChartCollectClassify) GetSortMax(parentId int) (sort int, err error) {
+	sql := fmt.Sprintf(`SELECT COALESCE(MAX(%s), 0) FROM %s WHERE %s = ?`, m.Cols().Sort, m.TableName(), m.Cols().ParentId)
+	err = global.DmSQL["data"].Raw(sql, parentId).Scan(&sort).Error
+	return
+}
+
+// ChartCollectClassifyItem 图表收藏分类
+type ChartCollectClassifyItem struct {
+	ClassifyId   int                         `description:"收藏ID"`
+	ClassifyName string                      `description:"图表收藏分类ID"`
+	ParentId     int                         `description:"图表ID"`
+	Level        int                         `description:"图表ID"`
+	Sort         int                         `description:"图表ID"`
+	LevelPath    string                      `description:"层级路径"`
+	UniqueCode   string                      `description:"唯一编码"`
+	Children     []*ChartCollectClassifyItem `description:"子分类"`
+}
+
+func (m *ChartCollectClassify) Format2Item() (item *ChartCollectClassifyItem) {
+	item = new(ChartCollectClassifyItem)
+	item.ClassifyId = m.ChartCollectClassifyId
+	item.ClassifyName = m.ClassifyName
+	item.ParentId = m.ParentId
+	item.Level = m.Level
+	item.Sort = m.Sort
+	item.LevelPath = m.LevelPath
+	item.UniqueCode = m.UniqueCode
+	//item.Children = make([]*ChartCollectClassifyItem, 0)
+	return
+}
+
+// ChartCollectClassifyListItem 图表收藏分类列表
+type ChartCollectClassifyListItem struct {
+	NodeType     int                             `description:"类型: 1-分类; 2-图表"`
+	ClassifyId   int                             `description:"分类ID"`
+	ClassifyName string                          `description:"分类名称"`
+	ChartInfoId  int                             `description:"图表ID"`
+	ChartCode    string                          `description:"图表编码"`
+	ChartName    string                          `description:"图表名称"`
+	ParentId     int                             `description:"父级ID"`
+	Level        int                             `description:"层级"`
+	Sort         int                             `description:"排序"`
+	UniqueCode   string                          `description:"唯一编码, 图表的话用indexCode"`
+	Children     []*ChartCollectClassifyListItem `description:"子分类"`
+}
+
+// ChartCollectClassifyAddReq 新增分类
+type ChartCollectClassifyAddReq struct {
+	ClassifyName string `description:"分类名称"`
+	ParentId     int    `description:"父级ID"`
+	Level        int    `description:"层级"`
+}
+
+// ChartCollectClassifyEditReq 编辑分类
+type ChartCollectClassifyEditReq struct {
+	ClassifyId   int    `description:"分类ID"`
+	ClassifyName string `description:"分类名称"`
+}
+
+// ChartCollectClassifyRemoveReq 删除分类
+type ChartCollectClassifyRemoveReq struct {
+	ClassifyId int `description:"分类ID"`
+}
+
+// RemoveClassifyAndCollect 移除分类及收藏
+func (m *ChartCollectClassify) RemoveClassifyAndCollect(classifyIds []int) (err error) {
+	if len(classifyIds) == 0 {
+		return
+	}
+	tx := global.DmSQL["data"].Begin()
+	defer func() {
+		if err != nil {
+			_ = tx.Rollback()
+			return
+		}
+		_ = tx.Commit()
+	}()
+
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.Cols().PrimaryId, utils.GetOrmInReplace(len(classifyIds)))
+	e := tx.Exec(sql, classifyIds).Error
+	if e != nil {
+		err = fmt.Errorf("remove classify err: %v", e)
+		return
+	}
+
+	collectOb := new(ChartCollect)
+	sql = fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, collectOb.TableName(), collectOb.Cols().ChartCollectClassifyId, utils.GetOrmInReplace(len(classifyIds)))
+	e = tx.Exec(sql, classifyIds).Error
+	if e != nil {
+		err = fmt.Errorf("remove collect err: %v", e)
+		return
+	}
+	return
+}
+
+// ChartCollectClassifyMoveReq 移动分类
+type ChartCollectClassifyMoveReq struct {
+	ClassifyId     int `description:"分类ID"`
+	PrevClassifyId int `description:"上一个兄弟节点分类ID"`
+	NextClassifyId int `description:"下一个兄弟节点分类ID"`
+}
+
+// GetChartCollectClassifyById 获取分类
+func GetChartCollectClassifyById(adminId, classifyId int) (item *ChartCollectClassify, err error) {
+	sql := `SELECT * FROM chart_collect_classify WHERE sys_user_id = ? AND chart_collect_classify_id = ? `
+	err = global.DmSQL["data"].Raw(sql, adminId, classifyId).First(&item).Error
+	return
+}
+
+// GetFirstChartCollectClassifyByAdminId 获取当前账号下,排序第一条的分类数据
+func GetFirstChartCollectClassifyByAdminId(adminId int) (item *ChartCollectClassify, err error) {
+	sql := `SELECT * FROM chart_collect_classify WHERE sys_user_id = ? ORDER BY sort ASC, chart_collect_classify_id ASC LIMIT 1`
+	err = global.DmSQL["data"].Raw(sql, adminId).First(&item).Error
+	return
+}
+
+// UpdateChartCollectClassifySortByClassifyId 更新排序
+func UpdateChartCollectClassifySortByClassifyId(adminId, classifyId, nowSort int, updateSort string) (err error) {
+	sql := fmt.Sprintf(`UPDATE chart_collect_classify SET sort = %d WHERE sys_user_id = ? and sort > ? `, updateSort)
+	if classifyId > 0 {
+		sql += ` OR ( chart_collect_classify_id > ` + fmt.Sprint(classifyId) + ` AND sort = ` + fmt.Sprint(nowSort) + `)`
+	}
+	err = global.DmSQL["data"].Exec(sql, adminId, nowSort).Error
+	return
+}

+ 0 - 0
models/data_manage/edb_collect.go → models/data_manage/collect_edb.go


+ 0 - 0
models/data_manage/edb_collect_classify.go → models/data_manage/collect_edb_classify.go


+ 2 - 0
models/data_manage/edb_info.go

@@ -417,6 +417,8 @@ type EdbInfoList struct {
 	PublicStatus            int                     `description:"公开状态;0:未公开;1:审批中;2:已驳回;3:已公开"`
 	EdbPublicClassifyId     int                     `description:"指标公开分类id"`
 	PublicTime              time.Time               `description:"设置公开的时间"`
+	ClassifyNamePath        string                  `description:"分类完整路径"`
+	PublicClassifyNamePath  string                  `description:"公共分类完整路径"`
 }
 
 type EdbDataInsertConfigItem struct {

+ 2 - 2
models/data_manage/public_chart_classify.go

@@ -97,7 +97,7 @@ func (m ChartPublicClassify) GetChartClassifyById(classifyId int) (item *ChartPu
 	return
 }
 
-// GetEdbClassifyByIdList
+// GetChartClassifyByIdList
 // @Description: 根据id列表获取分类列表
 // @author: Roc
 // @receiver m
@@ -105,7 +105,7 @@ func (m ChartPublicClassify) GetChartClassifyById(classifyId int) (item *ChartPu
 // @param classifyIdList []int
 // @return items []*ChartPublicClassify
 // @return err error
-func (m ChartPublicClassify) GetEdbClassifyByIdList(classifyIdList []int) (items []*ChartPublicClassify, err error) {
+func (m ChartPublicClassify) GetChartClassifyByIdList(classifyIdList []int) (items []*ChartPublicClassify, err error) {
 	if len(classifyIdList) <= 0 {
 		return
 	}

+ 3 - 9
models/data_manage/public_chart_info.go

@@ -14,17 +14,11 @@ import (
 // @param source int
 // @return items []*ChartClassifyItems
 // @return err error
-func GetChartInfoByPublicClassifyId(classifyId, chartInfoType, source int) (items []*ChartClassifyItems, err error) {
+func GetChartInfoByPublicClassifyId(classifyId, source int) (items []*ChartClassifyItems, err error) {
 	o := global.DmSQL["data"]
-	sql := ` SELECT chart_info_id,classify_id,chart_name AS classify_name,chart_name_en AS classify_name_en,unique_code,source_name,source,sys_user_id,sys_user_real_name,start_date,chart_code,chart_type, sort,is_join_permission FROM chart_info WHERE chart_public_classify_id = ? AND chart_info_type = ?`
+	sql := ` SELECT chart_info_id,chart_classify_id,chart_public_classify_id,chart_name AS classify_name,chart_name_en AS classify_name_en,unique_code,source,sys_user_id,sys_user_real_name,start_date,chart_type, sort,is_join_permission FROM chart_info WHERE chart_public_classify_id = ? AND source = ?`
 
-	pars := []interface{}{classifyId, chartInfoType}
-
-	// 如果筛选了指标类型,那么就根据条件来
-	if source > 0 {
-		sql += ` AND source = ? `
-		pars = append(pars, source)
-	}
+	pars := []interface{}{classifyId, source}
 
 	sql += ` order by sort asc,chart_info_id asc `
 	err = o.Raw(sql, pars...).Scan(&items).Error

+ 1 - 1
models/data_manage/public_edb_info.go

@@ -16,7 +16,7 @@ import (
 // @return err error
 func GetEdbInfoByPublicClassifyId(classifyId, edbInfoType, edbType int) (items []*EdbClassifyItems, err error) {
 	o := global.DmSQL["data"]
-	sql := ` SELECT edb_info_id,classify_id,edb_name AS classify_name,edb_name_en AS classify_name_en,unique_code,source_name,source,sys_user_id,sys_user_real_name,start_date,edb_code,edb_type, sort,is_join_permission FROM edb_info WHERE edb_public_classify_id = ? AND edb_info_type = ?`
+	sql := ` SELECT edb_info_id,classify_id,edb_public_classify_id,edb_name AS classify_name,edb_name_en AS classify_name_en,unique_code,source_name,source,sys_user_id,sys_user_real_name,start_date,edb_code,edb_type, sort,is_join_permission FROM edb_info WHERE edb_public_classify_id = ? AND edb_info_type = ?`
 
 	pars := []interface{}{classifyId, edbInfoType}
 

+ 100 - 1
routers/commentsRouter.go

@@ -2833,6 +2833,96 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"],
+        beego.ControllerComments{
+            Method: "Add",
+            Router: `/chart_collect/classify/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"],
+        beego.ControllerComments{
+            Method: "Edit",
+            Router: `/chart_collect/classify/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"],
+        beego.ControllerComments{
+            Method: "List",
+            Router: `/chart_collect/classify/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"],
+        beego.ControllerComments{
+            Method: "Move",
+            Router: `/chart_collect/classify/move`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"],
+        beego.ControllerComments{
+            Method: "Remove",
+            Router: `/chart_collect/classify/remove`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectClassifyController"],
+        beego.ControllerComments{
+            Method: "Tree",
+            Router: `/chart_collect/classify/tree`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectController"],
+        beego.ControllerComments{
+            Method: "CancelCollect",
+            Router: `/chart_collect/cancel_collect`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectController"],
+        beego.ControllerComments{
+            Method: "Collect",
+            Router: `/chart_collect/collect`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectController"],
+        beego.ControllerComments{
+            Method: "List",
+            Router: `/chart_collect/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartCollectController"],
+        beego.ControllerComments{
+            Method: "Move",
+            Router: `/chart_collect/move`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartFrameworkController"],
         beego.ControllerComments{
             Method: "Add",
@@ -2941,6 +3031,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartInfoController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartInfoController"],
+        beego.ControllerComments{
+            Method: "BatchMove",
+            Router: `/chart_info/batch_move`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartInfoController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartInfoController"],
         beego.ControllerComments{
             Method: "CommonChartInfoDetailFromUniqueCode",
@@ -3537,7 +3636,7 @@ func init() {
 
     beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartPublicController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers/data_manage:ChartPublicController"],
         beego.ControllerComments{
-            Method: "BatchMoveChart",
+            Method: "BatchMove",
             Router: `/chart_info/public/batch_move`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),

+ 2 - 0
routers/router.go

@@ -167,6 +167,8 @@ func init() {
 				&data_manage.ChartInfoShareController{},
 				&data_manage.ChartPublicController{},
 				&data_manage.ChartPublicClassifyController{},
+				&data_manage.ChartCollectController{},
+				&data_manage.ChartCollectClassifyController{},
 			),
 			web.NSNamespace("/data_approve",
 				web.NSInclude(

+ 2 - 2
services/data/chart_info.go

@@ -2382,7 +2382,7 @@ func AddChartInfo(req data_manage.AddChartInfoReq, sysUserId int, sysUserRealNam
 	_ = SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 
 	//添加es数据
-	go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	go AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 
 	return
 }
@@ -2745,7 +2745,7 @@ func EditChartInfo(req data_manage.EditChartInfoReq, sysUser *system.Admin, lang
 	_ = SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 
 	//添加es数据
-	go EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 

+ 13 - 6
services/data/chart_info_elastic.go

@@ -21,13 +21,13 @@ func AddAllChartInfo() {
 	}
 	total := len(allList)
 	for k, v := range allList {
-		EsAddOrEditChartInfo(v.ChartInfoId)
+		AddOrEditChartInfoToEs(v.ChartInfoId)
 		fmt.Println("剩余", total-k-1, "条图表数据,当前图表id:", v.ChartInfoId)
 	}
 }
 
-// EsAddOrEditChartInfo 新增和修改ES中的图表数据
-func EsAddOrEditChartInfo(chartInfoId int) {
+// AddOrEditChartInfoToEs 新增和修改ES中的图表数据
+func AddOrEditChartInfoToEs(chartInfoId int) {
 	var err error
 	defer func() {
 		if err != nil {
@@ -49,13 +49,13 @@ func EsAddOrEditChartInfo(chartInfoId int) {
 	itemInfo.SharedUserIdList = sharedList
 
 	//添加es
-	err = elastic.EsAddOrEditChartInfoData(utils.CHART_INDEX_NAME, strconv.Itoa(itemInfo.ChartInfoId), itemInfo)
+	err = elastic.AddOrEditChartInfoToEsData(utils.CHART_INDEX_NAME, strconv.Itoa(itemInfo.ChartInfoId), itemInfo)
 
 	return
 }
 
-// EsDeleteChartInfo 删除ES中的图表数据
-func EsDeleteChartInfo(chartInfoId int) {
+// DeleteChartInfoToEs 删除ES中的图表数据
+func DeleteChartInfoToEs(chartInfoId int) {
 	var err error
 	defer func() {
 		if err != nil {
@@ -73,8 +73,11 @@ func EsSearchChartInfo(keyword string, showSysId int, sourceList []int, noPermis
 	return
 }
 
+// ###### 下面是MY ETA 相关,没有意义了
+
 // EsAddOrEditMyChartInfoByChartInfoId 根据图表id 新增和修改ES中的图表数据
 func EsAddOrEditMyChartInfoByChartInfoId(chartInfoId int) {
+	return
 	errMsg := make([]string, 0)
 	defer func() {
 		if len(errMsg) > 0 {
@@ -105,6 +108,7 @@ func EsAddOrEditMyChartInfoByChartInfoId(chartInfoId int) {
 
 // EsAddOrEditMyChartInfoByMyChartId 根据我的图库id 新增和修改ES中的图表数据
 func EsAddOrEditMyChartInfoByMyChartId(myChartId int) {
+	return
 	errMsg := make([]string, 0)
 	defer func() {
 		if len(errMsg) > 0 {
@@ -134,6 +138,7 @@ func EsAddOrEditMyChartInfoByMyChartId(myChartId int) {
 
 // EsDeleteMyChartInfoByMyChartId 根据我的图库id 删除ES中的图表数据
 func EsDeleteMyChartInfoByMyChartId(myChartId int) {
+	return
 	var err error
 	defer func() {
 		if err != nil {
@@ -147,12 +152,14 @@ func EsDeleteMyChartInfoByMyChartId(myChartId int) {
 
 // EsSearchMyChartInfo 搜索图表信息
 func EsSearchMyChartInfo(keyword string, adminId int, noPermissionChartIdList []int, startSize, pageSize int) (list []*data_manage.MyChartList, total int64, err error) {
+	return
 	list, total, err = elastic.SearchMyChartInfoData(utils.MY_CHART_INDEX_NAME, keyword, adminId, noPermissionChartIdList, startSize, pageSize)
 	return
 }
 
 // EsDeleteMyChartInfoByMyChartIds 根据我的图表IDs删除ES中的我的图表
 func EsDeleteMyChartInfoByMyChartIds(ids []int) {
+	return
 	if len(ids) == 0 {
 		return
 	}

+ 2 - 2
services/data/chart_info_excel_balance.go

@@ -475,7 +475,7 @@ func editBalanceExcelChart(req request.AddBalanceTableChartReq) (chartInfo *data
 	chartInfo.ChartInfoId = int(newId)*/
 
 	//添加es数据
-	//go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	//go AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 
 	return
 }
@@ -1478,7 +1478,7 @@ func copyBalanceExcelChart(oldChartInfo *data_manage.ChartInfoView, sysUserId in
 	chartInfo.ChartInfoId = int(newId)*/
 
 	//添加es数据
-	//go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	//go AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 
 	return
 }

+ 58 - 0
services/data/collect_chart.go

@@ -0,0 +1,58 @@
+package data
+
+import (
+	"eta_gn/eta_api/models/data_manage"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"strconv"
+	"strings"
+)
+
+// GetChartCollectClassifyTreeRecursive 递归获取分类树形结构
+func GetChartCollectClassifyTreeRecursive(list []*data_manage.ChartCollectClassifyItem, parentId int) []*data_manage.ChartCollectClassifyItem {
+	res := make([]*data_manage.ChartCollectClassifyItem, 0)
+	for _, v := range list {
+		if v.ParentId == parentId {
+			t := GetChartCollectClassifyTreeRecursive(list, v.ClassifyId)
+			if len(t) > 0 {
+				v.Children = t
+			}
+			res = append(res, v)
+		}
+	}
+	return res
+}
+
+// GetChartCollectClassifyChildIds 获取分类的子分类IDs
+func GetChartCollectClassifyChildIds(classifyId, adminId int, selfInclude bool) (classifyIds []int, err error) {
+	// DM就不用FIND_IN_SET去查了, 从分类的LevelPath中遍历出来
+	exists := make(map[int]bool)
+	if selfInclude {
+		exists[classifyId] = true
+		classifyIds = append(classifyIds, classifyId)
+	}
+	classifyOb := new(data_manage.ChartCollectClassify)
+	cond := fmt.Sprintf(` AND %s = ?`, classifyOb.Cols().SysUserId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, adminId)
+	list, e := classifyOb.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf(`%s ASC`, classifyOb.Cols().Sort))
+	if e != nil {
+		err = fmt.Errorf("获取用户收藏分类失败, %v", e)
+		return
+	}
+	strClassifyId := strconv.Itoa(classifyId)
+	for _, v := range list {
+		if v.LevelPath == "" {
+			continue
+		}
+		if exists[v.ChartCollectClassifyId] {
+			continue
+		}
+		pathArr := strings.Split(v.LevelPath, ",")
+		if len(pathArr) > 0 && utils.InArrayByStr(pathArr, strClassifyId) {
+			classifyIds = append(classifyIds, v.ChartCollectClassifyId)
+			exists[v.ChartCollectClassifyId] = true
+		}
+	}
+	return
+}

+ 0 - 0
services/data/edb_collect.go → services/data/collect_edb.go


+ 3 - 3
services/data/correlation/chart_info.go

@@ -898,7 +898,7 @@ func AddChartInfo(req data_manage.AddChartInfoReq, source int, sysUser *system.A
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfoId)
 
 	return
 }
@@ -1101,7 +1101,7 @@ func EditChartInfo(req data_manage.EditChartInfoReq, sysUser *system.Admin, lang
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -1161,7 +1161,7 @@ func CopyChartInfo(configId, classifyId int, chartName string, correlationChartI
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 
 	return
 }

+ 2 - 2
services/data/cross_variety/chart.go

@@ -746,7 +746,7 @@ func AddChartInfo(req request.AddChartReq, sysUser *system.Admin, lang string) (
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfoId)
 
 	return
 }
@@ -987,7 +987,7 @@ func EditChartInfo(req request.EditChartReq, sysUser *system.Admin, lang string)
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 

+ 2 - 2
services/data/data_approve/approve.go

@@ -441,7 +441,7 @@ func UpdatePublicByDataList(dataType, dataApproveState int, dataList []SetDataPu
 
 		// 更新ES
 		for _, dataId := range dataIdList {
-			data.EsAddOrEditChartInfo(dataId)
+			data.AddOrEditChartInfoToEs(dataId)
 		}
 	}
 
@@ -823,7 +823,7 @@ func GetApproveDetail(approveId int) (resp *response.DataApproveDetail, msg stri
 			// 获取分类信息
 			{
 				publicClassifyObj := data_manage.ChartPublicClassify{}
-				publicClassifyList, tmpErr := publicClassifyObj.GetEdbClassifyByIdList(dataClassifyIdList)
+				publicClassifyList, tmpErr := publicClassifyObj.GetChartClassifyByIdList(dataClassifyIdList)
 				if tmpErr != nil {
 					err = tmpErr
 					return

+ 0 - 49
services/data/edb_info.go

@@ -9,7 +9,6 @@ import (
 	"eta_gn/eta_api/models/data_manage/excel"
 	"eta_gn/eta_api/services/alarm_msg"
 	"eta_gn/eta_api/services/data/data_manage_permission"
-	"eta_gn/eta_api/services/elastic"
 	"eta_gn/eta_api/utils"
 	"fmt"
 	"sort"
@@ -699,54 +698,6 @@ func AddEdbInfo(secName, unit, frequency, noticeTime, mobile string, classifyId,
 	return
 }
 
-// AddOrEditEdbInfoToEs 添加/修改ES中的指标
-func AddOrEditEdbInfoToEs(edbInfoId int) {
-	var err error
-	defer func() {
-		if err != nil {
-			utils.FileLog.Error("添加/修改ES中的指标失败; err:%s", err.Error())
-		}
-	}()
-	//添加es
-	itemInfo, err := data_manage.GetEdbInfoEsByCondition("AND edb_info_id=?", []interface{}{edbInfoId})
-	if err != nil {
-		return
-	}
-	obj := data_manage.EdbInfoShare{}
-	list, _ := obj.GetListByEdbInfoId(edbInfoId)
-	sharedList := make([]int, 0)
-	for _, v := range list {
-		sharedList = append(sharedList, v.SysUserId)
-	}
-	itemInfo.SharedUserIdList = sharedList
-
-	err = elastic.EsAddOrEditEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(itemInfo.EdbInfoId), itemInfo)
-}
-
-// AddOrEditAllEdbInfoToEs 修复ES中的所有指标
-func AddOrEditAllEdbInfoToEs() {
-	//添加es
-	total, itemInfoList, _ := data_manage.GetEsEdbInfo("", []interface{}{}, 0, 100000)
-	obj := data_manage.EdbInfoShare{}
-	for k, itemInfo := range itemInfoList {
-		list, _ := obj.GetListByEdbInfoId(itemInfo.EdbInfoId)
-		sharedList := make([]int, 0)
-		for _, v := range list {
-			sharedList = append(sharedList, v.SysUserId)
-		}
-		itemInfo.SharedUserIdList = sharedList
-
-		elastic.EsAddOrEditEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(itemInfo.EdbInfoId), itemInfo)
-		fmt.Println("剩余", int(total)-k-1, "条指标数据")
-	}
-}
-
-// DeleteEdbInfoToEs 删除ES中的指标
-func DeleteEdbInfoToEs(edbInfoId int) {
-	//添加es
-	go elastic.EsDeleteEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(edbInfoId))
-}
-
 // RefreshManualData 根据手工指标code刷新手工指标数据
 func RefreshManualData(edbCode string) {
 	var err error

+ 57 - 0
services/data/edb_info_es.go

@@ -0,0 +1,57 @@
+package data
+
+import (
+	"eta_gn/eta_api/models/data_manage"
+	"eta_gn/eta_api/services/elastic"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"strconv"
+)
+
+// AddOrEditEdbInfoToEs 添加/修改ES中的指标
+func AddOrEditEdbInfoToEs(edbInfoId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			utils.FileLog.Error("添加/修改ES中的指标失败; err:%s", err.Error())
+		}
+	}()
+	//添加es
+	itemInfo, err := data_manage.GetEdbInfoEsByCondition("AND edb_info_id=?", []interface{}{edbInfoId})
+	if err != nil {
+		return
+	}
+	obj := data_manage.EdbInfoShare{}
+	list, _ := obj.GetListByEdbInfoId(edbInfoId)
+	sharedList := make([]int, 0)
+	for _, v := range list {
+		sharedList = append(sharedList, v.SysUserId)
+	}
+	itemInfo.SharedUserIdList = sharedList
+
+	err = elastic.EsAddOrEditEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(itemInfo.EdbInfoId), itemInfo)
+}
+
+// AddOrEditAllEdbInfoToEs 修复ES中的所有指标
+func AddOrEditAllEdbInfoToEs() {
+	//添加es
+	total, itemInfoList, _ := data_manage.GetEsEdbInfo("", []interface{}{}, 0, 100000)
+	obj := data_manage.EdbInfoShare{}
+	for k, itemInfo := range itemInfoList {
+		list, _ := obj.GetListByEdbInfoId(itemInfo.EdbInfoId)
+		sharedList := make([]int, 0)
+		for _, v := range list {
+			sharedList = append(sharedList, v.SysUserId)
+		}
+		itemInfo.SharedUserIdList = sharedList
+
+		elastic.EsAddOrEditEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(itemInfo.EdbInfoId), itemInfo)
+		fmt.Println("剩余", int(total)-k-1, "条指标数据")
+	}
+}
+
+// DeleteEdbInfoToEs 删除ES中的指标
+func DeleteEdbInfoToEs(edbInfoId int) {
+	//添加es
+	go elastic.EsDeleteEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(edbInfoId))
+}

+ 2 - 2
services/data/line_equation/chart_info.go

@@ -550,7 +550,7 @@ func BatchAddChartInfo(batchAddChartReq []request.AddChart, lineChartInfoConfig
 		// 添加指标引用记录
 		_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, v.ChartInfo)
 		//添加es数据
-		go data.EsAddOrEditChartInfo(v.ChartInfo.ChartInfoId)
+		go data.AddOrEditChartInfoToEs(v.ChartInfo.ChartInfoId)
 	}
 
 	return
@@ -793,7 +793,7 @@ func BatchSaveChartInfo(multipleGraphConfigId int, batchAddChartReq []request.Ad
 		_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, v.ChartInfo)
 
 		//添加es数据
-		go data.EsAddOrEditChartInfo(v.ChartInfo.ChartInfoId)
+		go data.AddOrEditChartInfoToEs(v.ChartInfo.ChartInfoId)
 	}
 	return
 }

+ 3 - 3
services/data/line_feature/chart_info.go

@@ -535,7 +535,7 @@ func AddChartInfo(req data_manage.AddChartInfoReq, edbInfoMapping *data_manage.C
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfoId)
 
 	return
 }
@@ -664,7 +664,7 @@ func EditChartInfo(req data_manage.EditChartInfoReq, edbInfoMapping *data_manage
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -720,7 +720,7 @@ func CopyChartInfo(configId, configSource, classifyId int, chartName string, edb
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 
 	return
 }

+ 0 - 0
services/data/chart_public.go → services/data/public_chart.go


+ 0 - 0
services/data/chart_public_classify.go → services/data/public_chart_classify.go


+ 0 - 0
services/data/edb_public.go → services/data/public_edb.go


+ 0 - 0
services/data/edb_public_classify.go → services/data/public_edb_classify.go


+ 3 - 3
services/data/range_analysis/chart_info.go

@@ -1224,7 +1224,7 @@ func AddChartInfo(req data_manage.AddChartInfoReq, source int, sysUser *system.A
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfoId)
 
 	return
 }
@@ -1437,7 +1437,7 @@ func EditChartInfo(req data_manage.EditChartInfoReq, sysUser *system.Admin, lang
 	// 添加指标引用记录
 	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartItem.ChartInfoId)
 	//修改my eta es数据
 	go data.EsAddOrEditMyChartInfoByChartInfoId(chartItem.ChartInfoId)
 
@@ -1607,7 +1607,7 @@ func CopyChartInfo(classifyId int, chartName string, oldChartInfo *data_manage.C
 	}
 
 	//添加es数据
-	go data.EsAddOrEditChartInfo(chartInfo.ChartInfoId)
+	go data.AddOrEditChartInfoToEs(chartInfo.ChartInfoId)
 
 	return
 }

+ 2 - 2
services/elastic/chart.go

@@ -9,8 +9,8 @@ import (
 	"github.com/olivere/elastic/v7"
 )
 
-// EsAddOrEditChartInfoData 新增/修改es中的图表数据
-func EsAddOrEditChartInfoData(indexName, docId string, item *data_manage.ChartEsInfo) (err error) {
+// AddOrEditChartInfoToEsData 新增/修改es中的图表数据
+func AddOrEditChartInfoToEsData(indexName, docId string, item *data_manage.ChartEsInfo) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("EsAddOrEditData Err:", err.Error())