浏览代码

更新图表信息

xyxie 11 月之前
父节点
当前提交
4367486d97
共有 2 个文件被更改,包括 117 次插入4 次删除
  1. 113 1
      services/chart_info.go
  2. 4 3
      utils/constants.go

+ 113 - 1
services/chart_info.go

@@ -1,6 +1,7 @@
 package services
 
 import (
+	"encoding/json"
 	"errors"
 	"eta/eta_forum_hub/models"
 	"eta/eta_forum_hub/models/system"
@@ -162,6 +163,7 @@ func AddChartInfo(req *models.AddChartReq, sysUserId int, sysUserRealName string
 	// todo 先整理好指标信息,生成指标ID,再将图表和指标ID进行绑定
 	chartEdbInfoList := req.ChartEdbMapping
 	mapList := make([]*models.ChartEdbMapping, 0)
+	newEdbInfoIdMap := make(map[int]int) // ETA系统和ETA社区指标ID的映射关系
 	for _, v := range chartEdbInfoList {
 		mapItem := new(models.ChartEdbMapping)
 		mapItem.ChartInfoId = int(newId)
@@ -203,6 +205,7 @@ func AddChartInfo(req *models.AddChartReq, sysUserId int, sysUserRealName string
 		mapItem.ConvertEnUnit = v.ConvertEnUnit
 		mapItem.EdbCode = edbCode
 		mapList = append(mapList, mapItem)
+		newEdbInfoIdMap[v.EdbInfoId] = mapItem.EdbInfoId
 	}
 	if len(mapList) <= 0 {
 		errMsg = `图表指标映射不能为空`
@@ -215,6 +218,22 @@ func AddChartInfo(req *models.AddChartReq, sysUserId int, sysUserRealName string
 		err = errors.New("保存失败,Err:" + err.Error())
 		return
 	}
+
+	extraConfig := chartInfo.ExtraConfig
+	barConfig := chartInfo.BarConfig
+	//更新图表配置里的config信息
+	e, _ := transferChartConfigEdbInfoId(chartInfo, newEdbInfoIdMap)
+	if e == nil {
+		//更新图表的特殊字段
+		if chartInfo.ExtraConfig != extraConfig || chartInfo.BarConfig != barConfig {
+			err = chartInfo.Update([]string{"ExtraConfig", "BarConfig"})
+			if err != nil {
+				errMsg = `保存失败`
+				err = errors.New("保存图表配置失败,Err:" + err.Error())
+				return
+			}
+		}
+	}
 	//添加es数据
 	go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
 
@@ -362,6 +381,7 @@ func UpdateChartInfoAndEdbInfo(req *models.AddChartReq, sysUserId int, sysUserRe
 	// todo 先整理好指标信息,生成指标ID,再将图表和指标ID进行绑定
 	chartEdbInfoList := req.ChartEdbMapping
 	addMappingList := make([]*models.ChartEdbMapping, 0)
+	newEdbInfoIdMap := make(map[int]int) // ETA系统和ETA社区指标ID的映射关系
 	for _, v := range chartEdbInfoList {
 		mapItem := new(models.ChartEdbMapping)
 		mapItem.ChartInfoId = chartInfo.ChartInfoId
@@ -437,7 +457,7 @@ func UpdateChartInfoAndEdbInfo(req *models.AddChartReq, sysUserId int, sysUserRe
 			mapItem.EdbCode = edbCode
 			addMappingList = append(addMappingList, mapItem)
 		}
-
+		newEdbInfoIdMap[v.EdbInfoId] = mapItem.EdbInfoId
 	}
 	if len(addMappingList) > 0 {
 		err = models.AddChartEdbMapping(addMappingList)
@@ -464,6 +484,21 @@ func UpdateChartInfoAndEdbInfo(req *models.AddChartReq, sysUserId int, sysUserRe
 		}
 	}
 
+	extraConfig := chartInfo.ExtraConfig
+	barConfig := chartInfo.BarConfig
+	//更新图表配置里的config信息
+	e, _ := transferChartConfigEdbInfoId(chartInfo, newEdbInfoIdMap)
+	if e == nil {
+		//更新图表的特殊字段
+		if chartInfo.ExtraConfig != extraConfig || chartInfo.BarConfig != barConfig {
+			err = chartInfo.Update([]string{"ExtraConfig", "BarConfig"})
+			if err != nil {
+				errMsg = `保存失败`
+				err = errors.New("保存图表配置失败,Err:" + err.Error())
+				return
+			}
+		}
+	}
 	//添加es数据
 	go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
 
@@ -549,3 +584,80 @@ func EsDeleteChartInfo(chartInfoId int) {
 	err = elastic.EsDeleteDataV2(utils.CHART_INDEX_NAME, strconv.Itoa(chartInfoId))
 	return
 }
+
+func transferChartConfigEdbInfoId(chartInfo *models.ChartInfo, newEdbInfoIdMap map[int]int) (err error, errMsg string) {
+	chartType := chartInfo.ChartType
+	switch chartType {
+	case 7: // 柱形图
+		var barConfig models.BarChartInfoReq
+		if chartInfo.BarConfig == `` {
+			errMsg = "柱方图未配置"
+			err = errors.New(errMsg)
+			return
+		}
+		err = json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
+		if err != nil {
+			errMsg = "柱方图配置异常"
+			err = errors.New(errMsg)
+			return
+		}
+		//替换里面的edbInfoId
+		for i := 0; i < len(barConfig.EdbInfoIdList); i++ {
+			if newId, ok := newEdbInfoIdMap[barConfig.EdbInfoIdList[i].EdbInfoId]; ok {
+				barConfig.EdbInfoIdList[i].EdbInfoId = newId
+			}
+		}
+		for i := 0; i < len(barConfig.XEdbList); i++ {
+			if newId, ok := newEdbInfoIdMap[barConfig.XEdbList[i].EdbInfoId]; ok {
+				barConfig.XEdbList[i].EdbInfoId = newId
+			}
+		}
+
+		for i := 0; i < len(barConfig.YEdbList); i++ {
+			if newId, ok := newEdbInfoIdMap[barConfig.YEdbList[i].EdbInfoId]; ok {
+				barConfig.YEdbList[i].EdbInfoId = newId
+			}
+		}
+		configStr, e := json.Marshal(barConfig)
+		if e != nil {
+			errMsg = "柱方图配置异常"
+			err = errors.New(errMsg + "json.Marshal 失败" + e.Error())
+			return
+		}
+		chartInfo.BarConfig = string(configStr)
+		return
+	case 10: // 截面散点图
+		var tmpExtraConfig models.SectionScatterReq
+		if chartInfo.ExtraConfig == `` {
+			errMsg = "截面散点图未配置"
+			err = errors.New(errMsg)
+			return
+		}
+		err = json.Unmarshal([]byte(chartInfo.ExtraConfig), &tmpExtraConfig)
+		if err != nil {
+			errMsg = "截面散点配置异常"
+			err = errors.New(errMsg)
+			return
+		}
+		//替换里面的edbInfoId
+		for i := 0; i < len(tmpExtraConfig.SeriesList); i++ {
+			for j := 0; j < len(tmpExtraConfig.SeriesList[i].EdbInfoList); j++ {
+				if newId, ok := newEdbInfoIdMap[tmpExtraConfig.SeriesList[i].EdbInfoList[j].XEdbInfoId]; ok {
+					tmpExtraConfig.SeriesList[i].EdbInfoList[j].XEdbInfoId = newId
+				}
+				if newId, ok := newEdbInfoIdMap[tmpExtraConfig.SeriesList[i].EdbInfoList[j].YEdbInfoId]; ok {
+					tmpExtraConfig.SeriesList[i].EdbInfoList[j].YEdbInfoId = newId
+				}
+			}
+		}
+		configStr, e := json.Marshal(tmpExtraConfig)
+		if e != nil {
+			errMsg = "截面散点配置异常"
+			err = errors.New(errMsg + "json.Marshal 失败" + e.Error())
+			return
+		}
+		chartInfo.ExtraConfig = string(configStr)
+		return
+	}
+	return
+}

+ 4 - 3
utils/constants.go

@@ -213,9 +213,10 @@ const (
 const (
 	CHART_SOURCE_DEFAULT             = 1
 	CHART_SOURCE_FUTURE_GOOD         = 2
-	CHART_SOURCE_CORRELATION         = 3 // 相关性图表
-	CHART_SOURCE_ROLLING_CORRELATION = 4 // 滚动相关性图表
-	CHART_SOURCE_FUTURE_GOOD_PROFIT  = 5 // 商品利润曲线
+	CHART_SOURCE_CORRELATION         = 3  // 相关性图表
+	CHART_SOURCE_ROLLING_CORRELATION = 4  // 滚动相关性图表
+	CHART_SOURCE_FUTURE_GOOD_PROFIT  = 5  // 商品利润曲线
+	CHART_TYPE_RADAR                 = 11 //雷达图
 )
 
 // MonthQuarterMap 月份与季度的map