Browse Source

多因子相关性

hsun 8 months ago
parent
commit
8facd145ed

+ 133 - 216
controllers/data_manage/correlation/correlation_chart_info.go

@@ -13,6 +13,7 @@ import (
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"sort"
 	"strconv"
 	"strings"
 	"time"
@@ -2420,13 +2421,13 @@ func (this *CorrelationChartInfoController) MultiFactorEdit() {
 	br.IsAddLog = true
 }
 
-// MultiFactorSaveAs
-// @Title 多因子图表-另存为
-// @Description 多因子图表-另存为
-// @Param	request	body request.CorrelationChartMultiFactorSaveAsReq true "type json string"
+// MultiFactorDetail
+// @Title 多因子图表-编辑页详情
+// @Description 多因子图表-编辑页详情
+// @Param   UniqueCode  query  string  true  "图表唯一编码"
 // @Success Ret=200 返回图表id
-// @router /chart_info/multi_factor/save_as [post]
-func (this *CorrelationChartInfoController) MultiFactorSaveAs() {
+// @router /chart_info/multi_factor/detail [get]
+func (this *CorrelationChartInfoController) MultiFactorDetail() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		if br.ErrMsg == "" {
@@ -2442,269 +2443,185 @@ func (this *CorrelationChartInfoController) MultiFactorSaveAs() {
 		br.Ret = 408
 		return
 	}
-
-	var req request.CorrelationChartMultiFactorSaveAsReq
-	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = fmt.Sprintf("参数解析失败, Err: %v", e)
+	uniqueCode := this.GetString("UniqueCode")
+	if uniqueCode == "" {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, UniqueCode: %s", uniqueCode)
 		return
 	}
-	if req.ChartInfoId <= 0 {
-		br.Msg = "参数有误"
-		br.ErrMsg = fmt.Sprintf("参数有误, ChartInfoId: %d", req.ChartInfoId)
+
+	chartInfo, e := data_manage.GetChartInfoByUniqueCode(uniqueCode)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "图表已被删除, 请刷新页面"
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = fmt.Sprintf("获取图表信息失败, Err: %v", e)
 		return
 	}
-	req.ChartName = strings.TrimSpace(req.ChartName)
-	if req.ChartName == "" {
-		br.Msg = "请输入图表名称"
+	chartCorrelate := new(data_manage.ChartInfoCorrelation)
+	if e = chartCorrelate.GetItemById(chartInfo.ChartInfoId); e != nil {
+		br.Msg = "图表相关性信息不存在"
+		br.ErrMsg = fmt.Sprintf("获取图表相关性信息失败, Err: %v", e)
 		return
 	}
-	if req.ClassifyId <= 0 {
-		br.Msg = "请选择图表分类"
+	if chartCorrelate.AnalysisMode != 1 {
+		br.Msg = "图表分析模式有误"
+		br.ErrMsg = fmt.Sprintf("图表分析模式有误, Err: %v", e)
 		return
 	}
-
-	cacheKey := "CACHE_CORRELATION_CHART_INFO_COPY_" + strconv.Itoa(sysUser.AdminId)
-	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
-		br.Msg = "系统处理中, 请稍后重试"
+	if chartCorrelate.EdbInfoIdFirst <= 0 {
+		br.Msg = "标的指标异常"
+		br.ErrMsg = fmt.Sprintf("标的指标ID异常, Err: %v", e)
 		return
 	}
-	defer func() {
-		_ = utils.Rc.Delete(cacheKey)
-	}()
+	resp := new(data_manage.FactorCorrelationEditDetail)
 
-	chartSource := utils.CHART_SOURCE_CORRELATION
-	// 校验分类、图表名称
+	// 标的指标
+	baseEdbMapping := new(data_manage.ChartEdbInfoMapping)
 	{
-		var cond string
-		var pars []interface{}
-		switch this.Lang {
-		case utils.EnLangVersion:
-			cond += " AND chart_name_en = ? AND source = ? "
-		default:
-			cond += " AND chart_name = ? AND source = ? "
-		}
-		pars = append(pars, req.ChartName, chartSource)
-		count, e := data_manage.GetChartInfoCountByCondition(cond, pars)
+		mappings, e := data_manage.GetChartEdbMappingListByEdbInfoIdList([]int{chartCorrelate.EdbInfoIdFirst})
 		if e != nil {
-			br.Msg = "保存失败"
-			br.ErrMsg = fmt.Sprintf("获取同名图表失败, Err: %v", e)
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取标的指标信息异常, Err: %v", e)
 			return
 		}
-		if count > 0 {
-			br.Msg = "图表名称已存在, 请重新填写"
-			return
+		if len(mappings) > 0 {
+			baseEdbMapping = mappings[0]
 		}
+	}
 
-		_, e = data_manage.GetChartClassifyById(req.ClassifyId)
+	// 获取图表系列
+	chartMappings := make([]*data_manage.FactorEdbSeriesChartMapping, 0)
+	{
+		ob := new(data_manage.FactorEdbSeriesChartMapping)
+		cond := fmt.Sprintf(" AND %s = ?", ob.Cols().ChartInfoId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, chartInfo.ChartInfoId)
+		list, e := ob.GetItemsByCondition(cond, pars, []string{}, "")
 		if e != nil {
-			if e.Error() == utils.ErrNoRow() {
-				br.Msg = "分类不存在"
-				return
-			}
-			br.Msg = "保存失败"
-			br.ErrMsg = fmt.Sprintf("获取图表分类失败, Err: %v", e)
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取图表关联系列列表失败, Err: %v", e)
 			return
 		}
+		chartMappings = list
 	}
-
-	// 图表信息
-	originChart, e := data_manage.GetChartInfoById(req.ChartInfoId)
-	if e != nil {
-		if e.Error() == utils.ErrNoRow() {
-			br.Msg = "原图表不存在"
-			return
-		}
-		br.Msg = "保存失败"
-		br.ErrMsg = fmt.Sprintf("获取原图表信息失败, Err: %v", e)
+	if len(chartMappings) == 0 {
+		br.Msg = "因子指标系列异常"
+		br.ErrMsg = fmt.Sprintf("因子指标系列引用异常")
 		return
 	}
 
-	chartInfo := new(data_manage.ChartInfo)
-	chartInfo.ChartName = req.ChartName
-	chartInfo.ChartNameEn = req.ChartName
-	chartInfo.ChartClassifyId = req.ClassifyId
-	chartInfo.SysUserId = sysUser.AdminId
-	chartInfo.SysUserRealName = sysUser.RealName
-	chartInfo.CreateTime = time.Now()
-	chartInfo.ModifyTime = time.Now()
-	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
-	chartInfo.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + timestamp)
-	chartInfo.ChartType = originChart.ChartType
-	chartInfo.Calendar = originChart.Calendar
-	chartInfo.DateType = originChart.DateType
-	chartInfo.StartDate = originChart.StartDate
-	chartInfo.EndDate = originChart.EndDate
-	chartInfo.SeasonStartDate = originChart.StartDate
-	chartInfo.SeasonEndDate = originChart.EndDate
-	chartInfo.Disabled = originChart.Disabled
-	chartInfo.Source = originChart.Source
-	chartInfo.ChartThemeId = originChart.ChartThemeId
-	chartInfo.ExtraConfig = originChart.ExtraConfig
-	chartInfo.SourcesFrom = originChart.SourcesFrom
-	chartInfo.Instructions = originChart.Instructions
-	chartInfo.MarkersLines = originChart.MarkersLines
-	chartInfo.MarkersAreas = originChart.MarkersAreas
-
-	// 相关性图
-	originCorrelate := new(data_manage.ChartInfoCorrelation)
-	if e = originCorrelate.GetItemById(req.ChartInfoId); e != nil {
-		if e.Error() == utils.ErrNoRow() {
-			br.Msg = "原相关性图表不存在"
-			return
+	// 是否已被引用, 去重系列IDs
+	factorUsed := make(map[string]bool)
+	seriesIds := make([]int, 0)
+	seriesIdExist := make(map[int]bool)
+	for _, v := range chartMappings {
+		s := fmt.Sprintf("%d-%d", v.FactorEdbSeriesId, v.EdbInfoId)
+		factorUsed[s] = true
+		if !seriesIdExist[v.FactorEdbSeriesId] {
+			seriesIds = append(seriesIds, v.FactorEdbSeriesId)
 		}
-		br.Msg = "保存失败"
-		br.ErrMsg = fmt.Sprintf("获取原相关性图表信息失败, Err: %v", e)
+	}
+	if len(seriesIds) == 0 {
+		br.Msg = "因子指标系列异常"
+		br.ErrMsg = fmt.Sprintf("因子指标系列引用异常")
 		return
 	}
-	chartCorrelate := new(data_manage.ChartInfoCorrelation)
-	chartCorrelate.LeadValue = originCorrelate.LeadValue
-	chartCorrelate.LeadUnit = originCorrelate.LeadUnit
-	chartCorrelate.CalculateValue = originCorrelate.CalculateValue
-	chartCorrelate.CalculateUnit = originCorrelate.CalculateUnit
-	chartCorrelate.EdbInfoIdFirst = originCorrelate.EdbInfoIdFirst
-	chartCorrelate.CreateTime = time.Now().Local()
-	chartCorrelate.ModifyTime = time.Now().Local()
 
-	// 图表指标关联
-	edbMappings := make([]*data_manage.ChartEdbMapping, 0)
+	// 系列信息
+	seriesItems := make([]*data_manage.FactorEdbSeriesItem, 0)
 	{
-		mappings, e := data_manage.GetChartMappingList(req.ChartInfoId)
+		seriesOb := new(data_manage.FactorEdbSeries)
+		cond := fmt.Sprintf(" AND %s IN (%s)", seriesOb.Cols().PrimaryId, utils.GetOrmInReplace(len(seriesIds)))
+		pars := make([]interface{}, 0)
+		pars = append(pars, seriesIds)
+		list, e := seriesOb.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf("%s ASC", seriesOb.Cols().PrimaryId))
 		if e != nil {
-			br.Msg = "保存失败"
-			br.ErrMsg = fmt.Sprintf("获取图表指标关联失败, Err: %v", e)
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取关联系列失败, Err: %v", e)
 			return
 		}
-		for _, v := range mappings {
-			m := new(data_manage.ChartEdbMapping)
-			m.EdbInfoId = v.EdbInfoId
-			edbTimestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
-			m.UniqueCode = utils.MD5(utils.CHART_PREFIX + "_" + edbTimestamp + "_" + strconv.Itoa(v.EdbInfoId))
-			m.IsOrder = true
-			m.IsAxis = 1
-			m.EdbInfoType = 1
-			m.Source = utils.CHART_SOURCE_CORRELATION
-			m.CreateTime = time.Now()
-			m.ModifyTime = time.Now()
-			edbMappings = append(edbMappings, m)
+		for _, v := range list {
+			seriesItems = append(seriesItems, v.Format2Item())
 		}
 	}
 
-	// 指标系列-图表关联
-	seriesMappings := make([]*data_manage.FactorEdbSeriesChartMapping, 0)
+	// 相关性配置
+	var correlateConf data_manage.CorrelationConfig
+	correlateConf.LeadUnit = chartCorrelate.LeadUnit
+	correlateConf.LeadValue = chartCorrelate.LeadValue
+	correlateConf.CalculateUnit = chartCorrelate.CalculateUnit
+	correlateConf.CalculateValue = chartCorrelate.CalculateValue
+
+	// 因子指标信息-包含计算结果
+	edbMappings := make([]*data_manage.FactorEdbSeriesMapping, 0)
+	edbInfoIds := make([]int, 0)
 	{
-		ob := new(data_manage.FactorEdbSeriesChartMapping)
-		cond := fmt.Sprintf(" AND %s = ?", ob.Cols().ChartInfoId)
+		ob := new(data_manage.FactorEdbSeriesMapping)
+		cond := fmt.Sprintf(" AND %s IN (%s)", ob.Cols().FactorEdbSeriesId, utils.GetOrmInReplace(len(seriesIds)))
 		pars := make([]interface{}, 0)
-		pars = append(pars, req.ChartInfoId)
-		mappings, e := ob.GetItemsByCondition(cond, pars, []string{}, "")
+		pars = append(pars, seriesIds)
+		order := fmt.Sprintf("%s ASC, %s ASC", ob.Cols().FactorEdbSeriesId, ob.Cols().EdbInfoId)
+		items, e := ob.GetItemsByCondition(cond, pars, []string{}, order)
 		if e != nil {
-			br.Msg = "保存失败"
-			br.ErrMsg = fmt.Sprintf("获取指标系列-图表关联失败, Err: %v", e)
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取因子指标关联失败, Err: " + e.Error()
 			return
 		}
-		for _, v := range mappings {
-			seriesMappings = append(seriesMappings, &data_manage.FactorEdbSeriesChartMapping{
-				FactorEdbSeriesId: v.FactorEdbSeriesId,
-				ChartInfoId:       req.ChartInfoId,
-				EdbInfoId:         v.EdbInfoId,
-				Source:            v.Source,
-				CreateTime:        time.Now().Local(),
-				ModifyTime:        time.Now().Local(),
-			})
+		for _, v := range items {
+			edbInfoIds = append(edbInfoIds, v.EdbInfoId)
 		}
+		edbMappings = items
 	}
-
-	// 新增图表/相关性图表/图表指标关联/指标系列图表关联
-	chartInfoId, e := data_manage.CreateMultiFactorCorrelationChartAndEdb(chartInfo, edbMappings, chartCorrelate, seriesMappings)
+	edbIdItem := make(map[int]*data_manage.EdbInfo)
+	edbItems, e := data_manage.GetEdbInfoByIdList(edbInfoIds)
 	if e != nil {
-		br.Msg = "保存失败"
-		br.ErrMsg = fmt.Sprintf("新增多因子相关性图表失败, Err: %v", e)
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取因子指标失败, Err: " + e.Error()
 		return
 	}
-	go data.EsAddOrEditChartInfo(chartInfoId)
-
-	// 操作日志
-	{
-		chartLog := new(data_manage.ChartInfoLog)
-		chartLog.ChartInfoId = chartInfo.ChartInfoId
-		chartLog.ChartName = req.ChartName
-		chartLog.ChartClassifyId = req.ClassifyId
-		chartLog.SysUserId = sysUser.AdminId
-		chartLog.SysUserRealName = sysUser.RealName
-		chartLog.UniqueCode = chartInfo.UniqueCode
-		chartLog.CreateTime = time.Now()
-		chartLog.Content = string(this.Ctx.Input.RequestBody)
-		chartLog.Status = "另存为多因子相关性图表"
-		chartLog.Method = this.Ctx.Input.URI()
-		go data_manage.AddChartInfoLog(chartLog)
+	for _, v := range edbItems {
+		edbIdItem[v.EdbInfoId] = v
 	}
 
-	resp := new(data_manage.AddChartInfoResp)
-	resp.ChartInfoId = chartInfo.ChartInfoId
-	resp.UniqueCode = chartInfo.UniqueCode
-	resp.ChartType = chartInfo.ChartType
-
-	br.Data = resp
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "保存成功"
-	br.IsAddLog = true
-}
-
-// MultiFactorDetail
-// @Title 多因子图表-编辑页详情
-// @Description 多因子图表-编辑页详情
-// @Param   UniqueCode  query  string  true  "图表唯一编码"
-// @Success Ret=200 返回图表id
-// @router /chart_info/multi_factor/detail [get]
-func (this *CorrelationChartInfoController) MultiFactorDetail() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		if br.ErrMsg == "" {
-			br.IsSendEmail = false
+	// 相关性矩阵
+	for _, v := range edbMappings {
+		edbItem := edbIdItem[v.EdbInfoId]
+		if edbItem == nil {
+			continue
 		}
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	sysUser := this.SysUser
-	if sysUser == nil {
-		br.Msg = "请登录"
-		br.ErrMsg = "请登录,SysUser Is Empty"
-		br.Ret = 408
-		return
-	}
-	uniqueCode := this.GetString("UniqueCode")
-	if uniqueCode == "" {
-		br.Msg = "参数有误"
-		br.ErrMsg = fmt.Sprintf("参数有误, UniqueCode: %s", uniqueCode)
-		return
-	}
 
-	chartInfo, e := data_manage.GetChartInfoByUniqueCode(uniqueCode)
-	if e != nil {
-		if e.Error() == utils.ErrNoRow() {
-			br.Msg = "图表已被删除, 请刷新页面"
-			return
+		var item data_manage.FactorEdbSeriesCorrelationMatrixItem
+		item.SeriesId = v.FactorEdbSeriesId
+		item.EdbInfoId = edbItem.EdbInfoId
+		item.EdbCode = edbItem.EdbCode
+		item.EdbName = edbItem.EdbName
+		var values []data_manage.FactorEdbSeriesCorrelationMatrixValues
+		if v.CalculateData != "" {
+			if e = json.Unmarshal([]byte(v.CalculateData), &values); e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = fmt.Sprintf("解析因子指标计算结果失败, Err: %v", e)
+				return
+			}
 		}
-		br.Msg = "获取失败"
-		br.ErrMsg = fmt.Sprintf("获取图表信息失败, Err: %v", e)
-		return
-	}
-	chartCorrelate := new(data_manage.ChartInfoCorrelation)
-	if e = chartCorrelate.GetItemById(chartInfo.ChartInfoId); e != nil {
-		br.Msg = "图表相关性信息不存在"
-		br.ErrMsg = fmt.Sprintf("获取图表相关性信息失败, Err: %v", e)
-		return
-	}
-	if chartCorrelate.AnalysisMode != 1 {
-		br.Msg = "图表分析模式有误"
-		br.ErrMsg = fmt.Sprintf("图表分析模式有误, Err: %v", e)
-		return
+		sort.Sort(data_manage.FactorEdbSeriesCorrelationMatrixOrder(values))
+		item.Values = values
+		s := fmt.Sprintf("%d-%d", v.FactorEdbSeriesId, v.EdbInfoId)
+		item.Used = factorUsed[s]
+		// TODO:指标来源名称
+
+		resp.CorrelationMatrix = append(resp.CorrelationMatrix, item)
 	}
 
-	// TODO:
+	resp.ChartInfoId = chartInfo.ChartInfoId
+	resp.UniqueCode = chartInfo.UniqueCode
+	resp.BaseEdbInfo = baseEdbMapping
+	resp.EdbSeries = seriesItems
+	resp.CorrelationConfig = correlateConf
 
+	br.Data = resp
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 7 - 12
models/data_manage/chart_info_correlation.go

@@ -150,6 +150,7 @@ type FactorCorrelationConfig struct {
 // CorrelationChartLegend 相关性图表图例
 type CorrelationChartLegend struct {
 	LegendName string `description:"图例名称"`
+	Color      string `description:"图例颜色"`
 	EdbInfoId  int    `description:"指标ID"`
 	SeriesId   int    `description:"因子指标系列ID"`
 }
@@ -291,16 +292,10 @@ func UpdateMultiFactorCorrelationChartAndEdb(chartInfo *ChartInfo, edbMappingLis
 
 // FactorCorrelationEditDetail 编辑页详情
 type FactorCorrelationEditDetail struct {
-	ChartInfoId int    `description:"图表ID"`
-	UniqueCode  string `description:"图表唯一编码"`
-
-	// TODO:标的指标,相关性,指标系列
-
-	// TODO:系列矩阵
-	CorrelationMatrix FactorEdbSeriesCorrelationMatrixResp
-
-	// TODO:右下图表
-}
-
-type FactorCorrelationEditDetailBase struct {
+	ChartInfoId       int                                    `description:"图表ID"`
+	UniqueCode        string                                 `description:"图表唯一编码"`
+	BaseEdbInfo       *ChartEdbInfoMapping                   `description:"标的指标信息"`
+	EdbSeries         []*FactorEdbSeriesItem                 `description:"指标系列"`
+	CorrelationConfig CorrelationConfig                      `description:"相关性基础配置"`
+	CorrelationMatrix []FactorEdbSeriesCorrelationMatrixItem `description:"相关性矩阵"`
 }

+ 9 - 8
models/data_manage/factor_edb_series.go

@@ -305,14 +305,15 @@ type FactorEdbSeriesCorrelationMatrixResp struct {
 
 // FactorEdbSeriesCorrelationMatrixItem 因子指标系列-相关性矩阵信息
 type FactorEdbSeriesCorrelationMatrixItem struct {
-	SeriesId  int                                      `description:"因子指标系列ID"`
-	EdbInfoId int                                      `description:"指标ID"`
-	EdbCode   string                                   `description:"指标编码"`
-	EdbName   string                                   `description:"指标名称"`
-	Values    []FactorEdbSeriesCorrelationMatrixValues `description:"X轴和Y轴数据"`
-	Msg       string                                   `description:"提示信息"`
-	ErrMsg    string                                   `description:"错误信息"`
-	Used      bool                                     `description:"是否选中"`
+	SeriesId   int                                      `description:"因子指标系列ID"`
+	EdbInfoId  int                                      `description:"指标ID"`
+	EdbCode    string                                   `description:"指标编码"`
+	EdbName    string                                   `description:"指标名称"`
+	Values     []FactorEdbSeriesCorrelationMatrixValues `description:"X轴和Y轴数据"`
+	Msg        string                                   `description:"提示信息"`
+	ErrMsg     string                                   `description:"错误信息"`
+	Used       bool                                     `description:"是否选中"`
+	SourceName string                                   `description:"指标来源名称"`
 }
 
 // FactorEdbSeriesCorrelationMatrixValues 因子指标系列-相关性矩阵XY值

+ 8 - 0
models/data_manage/factor_edb_series_chart_mapping.go

@@ -141,3 +141,11 @@ func (m *FactorEdbSeriesChartMapping) GetPageItemsByCondition(condition string,
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
+
+// GetDistinctSeriesIdByChartId 获取图表关联的系列ID
+func (m *FactorEdbSeriesChartMapping) GetDistinctSeriesIdByChartId(chartId int) (seriesIds []int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`SELECT DISTINCT %s FROM %s WHERE %s = ?`, m.Cols().FactorEdbSeriesId, m.TableName(), m.Cols().ChartInfoId)
+	_, err = o.Raw(sql, chartId).QueryRows(&seriesIds)
+	return
+}

+ 0 - 9
routers/commentsRouter.go

@@ -241,15 +241,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/correlation:CorrelationChartInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/correlation:CorrelationChartInfoController"],
-        beego.ControllerComments{
-            Method: "MultiFactorSaveAs",
-            Router: `/chart_info/multi_factor/save_as`,
-            AllowHTTPMethods: []string{"post"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/correlation:CorrelationChartInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage/correlation:CorrelationChartInfoController"],
         beego.ControllerComments{
             Method: "Newest",

+ 14 - 9
services/data/correlation/chart_info.go

@@ -1421,11 +1421,11 @@ func GetFactorChartDataByChartId(chartInfoId int, extraConfig string) (xEdbIdVal
 			return
 		}
 	}
-	legends := make(map[string]string)
+	legends := make(map[string]*data_manage.CorrelationChartLegend)
 	if extra != nil {
 		for _, v := range extra.LegendConfig {
 			s := fmt.Sprintf("%d-%d", v.SeriesId, v.EdbInfoId)
-			legends[s] = v.LegendName
+			legends[s] = v
 		}
 	}
 
@@ -1448,19 +1448,24 @@ func GetFactorChartDataByChartId(chartInfoId int, extraConfig string) (xEdbIdVal
 				return
 			}
 		}
-		var yData []float64
+		var y []float64
 		for _, v := range values {
 			if k == 0 {
 				xEdbIdValue = append(xEdbIdValue, v.XData)
 			}
-			yData = append(yData, v.YData)
+			y = append(y, v.YData)
 		}
+		var yData data_manage.YData
+		yData.Date = yDate
+		yData.Value = y
+		// 图例
 		s := fmt.Sprintf("%d-%d", m.FactorEdbSeriesId, m.EdbInfoId)
-		yDataList = append(yDataList, data_manage.YData{
-			Date:  yDate,
-			Value: yData,
-			Name:  legends[s], // 图例名称
-		})
+		legend := legends[s]
+		if legend != nil {
+			yData.Name = legend.LegendName
+			yData.Color = legend.Color
+		}
+		yDataList = append(yDataList, yData)
 	}
 	return
 }