Sfoglia il codice sorgente

fix: 多因子相关性另存为

hsun 8 mesi fa
parent
commit
f47a80a930

+ 52 - 2
controllers/data_manage/correlation/correlation_chart_info.go

@@ -1391,12 +1391,39 @@ func (this *CorrelationChartInfoController) Copy() {
 		}
 
 		// 新增图表/相关性图表/图表指标关联/指标系列图表关联
-		chartInfoId, e := data_manage.CreateMultiFactorCorrelationChartAndEdb(chartInfo, edbMappings, chartCorrelate, originChartMappings, true, originSeries, originEdbSeriesMapping)
+		chartInfoId, seriesIdMap, e := data_manage.CreateMultiFactorCorrelationChartAndEdb(chartInfo, edbMappings, chartCorrelate, originChartMappings, true, originSeries, originEdbSeriesMapping)
 		if e != nil {
 			br.Msg = "保存失败"
 			br.ErrMsg = fmt.Sprintf("新增多因子相关性图表失败, Err: %v", e)
 			return
 		}
+
+		// 如果原图表有设置图例-那么替换图例设置中的系列ID
+		if originChart.ExtraConfig != "" {
+			conf := new(data_manage.CorrelationChartInfoExtraConfig)
+			e = json.Unmarshal([]byte(originChart.ExtraConfig), &conf)
+			if e != nil {
+				br.Msg = "保存失败"
+				br.ErrMsg = fmt.Sprintf("解析图表额外配置失败, Err: %v", e)
+				return
+			}
+			for _, v := range conf.LegendConfig {
+				v.SeriesId = seriesIdMap[v.SeriesId]
+			}
+			b, e := json.Marshal(conf)
+			if e != nil {
+				br.Msg = "保存失败"
+				br.ErrMsg = fmt.Sprintf("图表来源JSON格式化失败, Err: %v", e)
+				return
+			}
+			chartInfo.ExtraConfig = string(b)
+			if e = chartInfo.Update([]string{"ExtraConfig"}); e != nil {
+				br.Msg = "保存失败"
+				br.ErrMsg = fmt.Sprintf("更新图例信息失败, %v", e)
+				return
+			}
+		}
+
 		go data.EsAddOrEditChartInfo(chartInfoId)
 	}
 
@@ -2343,6 +2370,7 @@ func (this *CorrelationChartInfoController) MultiFactorAdd() {
 	for _, v := range chartMappings {
 		v.Source = chartSource
 		k := fmt.Sprintf("%d-%d", v.FactorEdbSeriesId, v.EdbInfoId)
+		v.EdbUsed = 0 // 先重置一下
 		if edbUsed[k] {
 			v.EdbUsed = 1
 		}
@@ -2383,12 +2411,34 @@ func (this *CorrelationChartInfoController) MultiFactorAdd() {
 	}
 
 	// 新增图表/相关性图表/图表指标关联/指标系列图表关联
-	chartInfoId, e := data_manage.CreateMultiFactorCorrelationChartAndEdb(chartInfo, edbMappings, chartCorrelate, chartMappings, req.SaveAs, originSeries, originEdbSeriesMapping)
+	chartInfoId, seriesIdMap, e := data_manage.CreateMultiFactorCorrelationChartAndEdb(chartInfo, edbMappings, chartCorrelate, chartMappings, req.SaveAs, originSeries, originEdbSeriesMapping)
 	if e != nil {
 		br.Msg = "保存失败"
 		br.ErrMsg = fmt.Sprintf("新增多因子相关性图表失败, Err: %v", e)
 		return
 	}
+
+	// 另存为-替换图例设置中的系列ID
+	if req.SaveAs {
+		if req.ExtraConfig != nil {
+			for _, v := range req.ExtraConfig.LegendConfig {
+				v.SeriesId = seriesIdMap[v.SeriesId]
+			}
+			b, e := json.Marshal(req.ExtraConfig)
+			if e != nil {
+				br.Msg = "保存失败"
+				br.ErrMsg = fmt.Sprintf("图表来源JSON格式化失败, Err: %v", e)
+				return
+			}
+			chartInfo.ExtraConfig = string(b)
+			if e = chartInfo.Update([]string{"ExtraConfig"}); e != nil {
+				br.Msg = "保存失败"
+				br.ErrMsg = fmt.Sprintf("更新图例信息失败, %v", e)
+				return
+			}
+		}
+	}
+
 	go data.EsAddOrEditChartInfo(chartInfoId)
 
 	// 操作日志

+ 2 - 2
models/data_manage/chart_info_correlation.go

@@ -168,7 +168,8 @@ type CorrelationChartInfoExtraConfig struct {
 }
 
 // CreateMultiFactorCorrelationChartAndEdb 新增多因子相关性图表
-func CreateMultiFactorCorrelationChartAndEdb(chartInfo *ChartInfo, edbMappingList []*ChartEdbMapping, correlationInfo *ChartInfoCorrelation, chartMappings []*FactorEdbSeriesChartMapping, saveAs bool, copySeries []*FactorEdbSeries, copySeriesEdb []*FactorEdbSeriesMapping) (chartInfoId int, err error) {
+func CreateMultiFactorCorrelationChartAndEdb(chartInfo *ChartInfo, edbMappingList []*ChartEdbMapping, correlationInfo *ChartInfoCorrelation, chartMappings []*FactorEdbSeriesChartMapping, saveAs bool, copySeries []*FactorEdbSeries, copySeriesEdb []*FactorEdbSeriesMapping) (chartInfoId int, seriesIdMap map[int]int, err error) {
+	seriesIdMap = make(map[int]int) // 此处做一个原ID与新ID的映射, 另存为才用的到
 	o := orm.NewOrmUsingDB("data")
 	tx, e := o.Begin()
 	if e != nil {
@@ -238,7 +239,6 @@ func CreateMultiFactorCorrelationChartAndEdb(chartInfo *ChartInfo, edbMappingLis
 	}
 
 	// 另存为
-	seriesIdMap := make(map[int]int) // 此处做一个原ID与新ID的映射
 	for _, v := range copySeries {
 		id := v.FactorEdbSeriesId
 		v.FactorEdbSeriesId = 0