|
@@ -10,10 +10,8 @@ import (
|
|
|
correlationServ "eta/eta_api/services/data/correlation"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
- "sort"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
- "sync"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -562,258 +560,270 @@ func (this *FactorEdbSeriesController) CorrelationMatrix() {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- // 获取标的指标信息及数据
|
|
|
- baseEdb, e := data_manage.GetEdbInfoById(req.BaseEdbInfoId)
|
|
|
+ // 矩阵计算
|
|
|
+ var calculatePars data_manage.CalculateCorrelationMatrixPars
|
|
|
+ calculatePars.BaseEdbInfoId = req.BaseEdbInfoId
|
|
|
+ calculatePars.SeriesIds = req.SeriesIds
|
|
|
+ calculatePars.Correlation = req.Correlation
|
|
|
+ resp, _, e := correlationServ.CalculateCorrelationMatrix(calculatePars)
|
|
|
if e != nil {
|
|
|
- if e.Error() == utils.ErrNoRow() {
|
|
|
- br.Msg = "标的指标不存在"
|
|
|
- return
|
|
|
- }
|
|
|
- br.Msg = "获取失败"
|
|
|
- br.ErrMsg = "获取标的指标信息失败, Err: " + e.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- dataListA := make([]*data_manage.EdbDataList, 0)
|
|
|
- {
|
|
|
- // 标的指标数据日期区间
|
|
|
- startDate := time.Now().AddDate(0, 0, -calculateDays).Format(utils.FormatDate)
|
|
|
- endDate := time.Now().Format(utils.FormatDate)
|
|
|
- startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
|
- startDate = startDateTime.AddDate(0, 0, 1).Format(utils.FormatDate) // 不包含第一天
|
|
|
- switch baseEdb.EdbInfoType {
|
|
|
- case 0:
|
|
|
- dataListA, e = data_manage.GetEdbDataList(baseEdb.Source, baseEdb.SubSource, baseEdb.EdbInfoId, startDate, endDate)
|
|
|
- case 1:
|
|
|
- _, dataListA, _, _, e, _ = data.GetPredictDataListByPredictEdbInfoId(baseEdb.EdbInfoId, startDate, endDate, false)
|
|
|
- default:
|
|
|
- br.Msg = "获取失败"
|
|
|
- br.ErrMsg = fmt.Sprintf("标的指标类型异常: %d", baseEdb.EdbInfoType)
|
|
|
- return
|
|
|
- }
|
|
|
- if e != nil {
|
|
|
- br.Msg = "获取失败"
|
|
|
- br.ErrMsg = "获取标的指标数据失败, Err:" + e.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 获取因子系列
|
|
|
- seriesIdItem := make(map[int]*data_manage.FactorEdbSeries)
|
|
|
- {
|
|
|
- ob := new(data_manage.FactorEdbSeries)
|
|
|
- cond := fmt.Sprintf(" AND %s IN (%s)", ob.Cols().PrimaryId, utils.GetOrmInReplace(len(req.SeriesIds)))
|
|
|
- pars := make([]interface{}, 0)
|
|
|
- pars = append(pars, req.SeriesIds)
|
|
|
- items, e := ob.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf("%s ASC", ob.Cols().PrimaryId))
|
|
|
- if e != nil {
|
|
|
- br.Msg = "获取失败"
|
|
|
- br.ErrMsg = "获取因子指标系列失败, Err: " + e.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- if len(items) != len(req.SeriesIds) {
|
|
|
- br.Msg = "获取失败"
|
|
|
- br.ErrMsg = "因子指标系列数量有误"
|
|
|
- return
|
|
|
- }
|
|
|
- for _, v := range items {
|
|
|
- seriesIdItem[v.FactorEdbSeriesId] = v
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 获取因子指标
|
|
|
- edbMappings := make([]*data_manage.FactorEdbSeriesMapping, 0)
|
|
|
- edbInfoIds := make([]int, 0)
|
|
|
- {
|
|
|
- ob := new(data_manage.FactorEdbSeriesMapping)
|
|
|
- cond := fmt.Sprintf(" AND %s IN (%s)", ob.Cols().FactorEdbSeriesId, utils.GetOrmInReplace(len(req.SeriesIds)))
|
|
|
- pars := make([]interface{}, 0)
|
|
|
- pars = append(pars, req.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 = "获取因子指标关联失败, Err: " + e.Error()
|
|
|
- return
|
|
|
- }
|
|
|
- for _, v := range items {
|
|
|
- edbInfoIds = append(edbInfoIds, v.EdbInfoId)
|
|
|
- }
|
|
|
- edbMappings = items
|
|
|
- }
|
|
|
- edbIdItem := make(map[int]*data_manage.EdbInfo)
|
|
|
- edbItems, e := data_manage.GetEdbInfoByIdList(edbInfoIds)
|
|
|
- if e != nil {
|
|
|
- br.Msg = "获取失败"
|
|
|
- br.ErrMsg = "获取因子指标失败, Err: " + e.Error()
|
|
|
+ br.Msg = "计算失败"
|
|
|
+ br.ErrMsg = fmt.Sprintf("计算相关性矩阵失败, %v", e)
|
|
|
return
|
|
|
}
|
|
|
- for _, v := range edbItems {
|
|
|
- edbIdItem[v.EdbInfoId] = v
|
|
|
- }
|
|
|
-
|
|
|
- // 获取因子指标数据, 计算相关性
|
|
|
- resp := new(data_manage.FactorEdbSeriesCorrelationMatrixResp)
|
|
|
- calculateDataOb := new(data_manage.FactorEdbSeriesCalculateData)
|
|
|
-
|
|
|
- calculateWorkers := make(chan struct{}, 10)
|
|
|
- wg := sync.WaitGroup{}
|
|
|
- edbExists := make(map[string]bool)
|
|
|
- chartKeyMap := make(map[string]*data_manage.FactorEdbSeriesChartMapping)
|
|
|
- for _, v := range edbMappings {
|
|
|
- existsKey := fmt.Sprintf("%d-%d", v.FactorEdbSeriesId, v.EdbInfoId)
|
|
|
- if edbExists[existsKey] {
|
|
|
- continue
|
|
|
- }
|
|
|
- edbExists[existsKey] = true
|
|
|
|
|
|
- edbItem := edbIdItem[v.EdbInfoId]
|
|
|
- if edbItem == nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- seriesItem := seriesIdItem[v.FactorEdbSeriesId]
|
|
|
- if seriesItem == nil {
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
- wg.Add(1)
|
|
|
- go func(mapping *data_manage.FactorEdbSeriesMapping, edb *data_manage.EdbInfo, series *data_manage.FactorEdbSeries) {
|
|
|
- defer func() {
|
|
|
- wg.Done()
|
|
|
- <-calculateWorkers
|
|
|
- }()
|
|
|
- calculateWorkers <- struct{}{}
|
|
|
-
|
|
|
- var item data_manage.FactorEdbSeriesCorrelationMatrixItem
|
|
|
- item.SeriesId = series.FactorEdbSeriesId
|
|
|
- item.EdbInfoId = edb.EdbInfoId
|
|
|
- item.EdbCode = edb.EdbCode
|
|
|
- item.EdbName = edb.EdbName
|
|
|
-
|
|
|
- // 指标来源
|
|
|
- edbList := make([]*data_manage.ChartEdbInfoMapping, 0)
|
|
|
- edbList = append(edbList, &data_manage.ChartEdbInfoMapping{
|
|
|
- EdbInfoId: edb.EdbInfoId,
|
|
|
- EdbInfoCategoryType: edb.EdbInfoType,
|
|
|
- EdbType: edb.EdbType,
|
|
|
- Source: edb.Source,
|
|
|
- SourceName: edb.SourceName,
|
|
|
- })
|
|
|
- sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
|
|
|
- item.SourceName = strings.Join(sourceNameList, ",")
|
|
|
- item.SourceNameEn = strings.Join(sourceNameEnList, ",")
|
|
|
-
|
|
|
- // 获取指标数据
|
|
|
- dataListB := make([]*data_manage.EdbDataList, 0)
|
|
|
- if series.CalculateState == data_manage.FactorEdbSeriesCalculated {
|
|
|
- cond := fmt.Sprintf(" AND %s = ? AND %s = ?", calculateDataOb.Cols().FactorEdbSeriesId, calculateDataOb.Cols().EdbInfoId)
|
|
|
- pars := make([]interface{}, 0)
|
|
|
- pars = append(pars, mapping.FactorEdbSeriesId, mapping.EdbInfoId)
|
|
|
- dataItems, e := calculateDataOb.GetItemsByCondition(cond, pars, []string{calculateDataOb.Cols().DataTime, calculateDataOb.Cols().Value}, fmt.Sprintf("%s ASC", calculateDataOb.Cols().DataTime))
|
|
|
- if e != nil {
|
|
|
- item.Msg = fmt.Sprintf("计算失败")
|
|
|
- item.ErrMsg = fmt.Sprintf("获取计算数据失败, err: %v", e)
|
|
|
- resp.Fail = append(resp.Fail, item)
|
|
|
- return
|
|
|
- }
|
|
|
- dataListB = data_manage.TransEdbSeriesCalculateData2EdbDataList(dataItems)
|
|
|
- } else {
|
|
|
- switch edb.EdbInfoType {
|
|
|
- case 0:
|
|
|
- dataListB, e = data_manage.GetEdbDataList(edb.Source, edb.SubSource, edb.EdbInfoId, "", "")
|
|
|
- case 1:
|
|
|
- _, dataListB, _, _, e, _ = data.GetPredictDataListByPredictEdbInfoId(edb.EdbInfoId, "", "", false)
|
|
|
- default:
|
|
|
- item.Msg = fmt.Sprintf("计算失败")
|
|
|
- item.ErrMsg = fmt.Sprintf("指标类型异常, edbType: %d", edb.EdbInfoType)
|
|
|
- resp.Fail = append(resp.Fail, item)
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 计算相关性
|
|
|
- xEdbIdValue, yDataList, e := correlationServ.CalculateCorrelation(req.Correlation.LeadValue, req.Correlation.LeadUnit, baseEdb.Frequency, edb.Frequency, dataListA, dataListB)
|
|
|
- if e != nil {
|
|
|
- item.Msg = fmt.Sprintf("计算失败")
|
|
|
- item.ErrMsg = fmt.Sprintf("相关性计算失败, err: %v", e)
|
|
|
- resp.Fail = append(resp.Fail, item)
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- // X及Y轴数据
|
|
|
- yData := yDataList[0].Value
|
|
|
- yLen := len(yData)
|
|
|
- values := make([]data_manage.FactorEdbSeriesCorrelationMatrixValues, len(xEdbIdValue))
|
|
|
- for k, x := range xEdbIdValue {
|
|
|
- var y float64
|
|
|
- if k >= 0 && k < yLen {
|
|
|
- y = yData[k]
|
|
|
- }
|
|
|
- y = utils.SubFloatToFloat(y, 2)
|
|
|
- values[k] = data_manage.FactorEdbSeriesCorrelationMatrixValues{
|
|
|
- XData: x, YData: y,
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 图表关联-此处添加的chart_info_id=0
|
|
|
- newMapping := new(data_manage.FactorEdbSeriesChartMapping)
|
|
|
- newMapping.CalculateType = data_manage.FactorEdbSeriesChartCalculateTypeCorrelation
|
|
|
-
|
|
|
- // 计算参数
|
|
|
- var calculatePars data_manage.FactorEdbSeriesChartCalculateCorrelationReq
|
|
|
- calculatePars.BaseEdbInfoId = req.BaseEdbInfoId
|
|
|
- calculatePars.LeadValue = req.Correlation.LeadValue
|
|
|
- calculatePars.LeadUnit = req.Correlation.LeadUnit
|
|
|
- calculatePars.CalculateValue = req.Correlation.CalculateValue
|
|
|
- calculatePars.CalculateUnit = req.Correlation.CalculateUnit
|
|
|
- bc, e := json.Marshal(calculatePars)
|
|
|
- if e != nil {
|
|
|
- item.Msg = fmt.Sprintf("计算失败")
|
|
|
- item.ErrMsg = fmt.Sprintf("计算参数JSON格式化失败, err: %v", e)
|
|
|
- resp.Fail = append(resp.Fail, item)
|
|
|
- return
|
|
|
- }
|
|
|
- newMapping.CalculatePars = string(bc)
|
|
|
-
|
|
|
- // 计算结果, 注此处保存的是排序前的顺序
|
|
|
- bv, e := json.Marshal(values)
|
|
|
- if e != nil {
|
|
|
- item.Msg = fmt.Sprintf("计算失败")
|
|
|
- item.ErrMsg = fmt.Sprintf("计算结果JSON格式化失败, err: %v", e)
|
|
|
- resp.Fail = append(resp.Fail, item)
|
|
|
- return
|
|
|
- }
|
|
|
- newMapping.CalculateData = string(bv)
|
|
|
- newMapping.FactorEdbSeriesId = mapping.FactorEdbSeriesId
|
|
|
- newMapping.EdbInfoId = mapping.EdbInfoId
|
|
|
- newMapping.CreateTime = time.Now().Local()
|
|
|
- newMapping.ModifyTime = time.Now().Local()
|
|
|
- chartKeyMap[existsKey] = newMapping
|
|
|
-
|
|
|
- // 按照固定规则排期数[0 1 2 3 -1 -2 -3], 仅矩阵展示为此顺序
|
|
|
- sort.Sort(data_manage.FactorEdbSeriesCorrelationMatrixOrder(values))
|
|
|
- item.Msg = "计算成功"
|
|
|
- item.Values = values
|
|
|
- resp.Success = append(resp.Success, item)
|
|
|
- }(v, edbItem, seriesItem)
|
|
|
- }
|
|
|
- wg.Wait()
|
|
|
-
|
|
|
- // 新增图表关联, 此处按照顺序添加
|
|
|
- chartMappings := make([]*data_manage.FactorEdbSeriesChartMapping, 0)
|
|
|
- for _, v := range edbMappings {
|
|
|
- k := fmt.Sprintf("%d-%d", v.FactorEdbSeriesId, v.EdbInfoId)
|
|
|
- item := chartKeyMap[k]
|
|
|
- if item == nil {
|
|
|
- continue
|
|
|
- }
|
|
|
- chartMappings = append(chartMappings, item)
|
|
|
- }
|
|
|
- chartMappingOb := new(data_manage.FactorEdbSeriesChartMapping)
|
|
|
- if e = chartMappingOb.ClearAndCreateMapping(req.SeriesIds, chartMappings); e != nil {
|
|
|
- br.Msg = "获取失败"
|
|
|
- br.ErrMsg = fmt.Sprintf("新增图表关联失败, Err: %v", e)
|
|
|
- return
|
|
|
- }
|
|
|
+ // 获取标的指标信息及数据
|
|
|
+ //baseEdb, e := data_manage.GetEdbInfoById(req.BaseEdbInfoId)
|
|
|
+ //if e != nil {
|
|
|
+ // if e.Error() == utils.ErrNoRow() {
|
|
|
+ // br.Msg = "标的指标不存在"
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // br.Msg = "获取失败"
|
|
|
+ // br.ErrMsg = "获取标的指标信息失败, Err: " + e.Error()
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ //dataListA := make([]*data_manage.EdbDataList, 0)
|
|
|
+ //{
|
|
|
+ // // 标的指标数据日期区间
|
|
|
+ // startDate := time.Now().AddDate(0, 0, -calculateDays).Format(utils.FormatDate)
|
|
|
+ // endDate := time.Now().Format(utils.FormatDate)
|
|
|
+ // startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
|
|
|
+ // startDate = startDateTime.AddDate(0, 0, 1).Format(utils.FormatDate) // 不包含第一天
|
|
|
+ // switch baseEdb.EdbInfoType {
|
|
|
+ // case 0:
|
|
|
+ // dataListA, e = data_manage.GetEdbDataList(baseEdb.Source, baseEdb.SubSource, baseEdb.EdbInfoId, startDate, endDate)
|
|
|
+ // case 1:
|
|
|
+ // _, dataListA, _, _, e, _ = data.GetPredictDataListByPredictEdbInfoId(baseEdb.EdbInfoId, startDate, endDate, false)
|
|
|
+ // default:
|
|
|
+ // br.Msg = "获取失败"
|
|
|
+ // br.ErrMsg = fmt.Sprintf("标的指标类型异常: %d", baseEdb.EdbInfoType)
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // if e != nil {
|
|
|
+ // br.Msg = "获取失败"
|
|
|
+ // br.ErrMsg = "获取标的指标数据失败, Err:" + e.Error()
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+ //
|
|
|
+ //// 获取因子系列
|
|
|
+ //seriesIdItem := make(map[int]*data_manage.FactorEdbSeries)
|
|
|
+ //{
|
|
|
+ // ob := new(data_manage.FactorEdbSeries)
|
|
|
+ // cond := fmt.Sprintf(" AND %s IN (%s)", ob.Cols().PrimaryId, utils.GetOrmInReplace(len(req.SeriesIds)))
|
|
|
+ // pars := make([]interface{}, 0)
|
|
|
+ // pars = append(pars, req.SeriesIds)
|
|
|
+ // items, e := ob.GetItemsByCondition(cond, pars, []string{}, fmt.Sprintf("%s ASC", ob.Cols().PrimaryId))
|
|
|
+ // if e != nil {
|
|
|
+ // br.Msg = "获取失败"
|
|
|
+ // br.ErrMsg = "获取因子指标系列失败, Err: " + e.Error()
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // if len(items) != len(req.SeriesIds) {
|
|
|
+ // br.Msg = "获取失败"
|
|
|
+ // br.ErrMsg = "因子指标系列数量有误"
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // for _, v := range items {
|
|
|
+ // seriesIdItem[v.FactorEdbSeriesId] = v
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+ //
|
|
|
+ //// 获取因子指标
|
|
|
+ //edbMappings := make([]*data_manage.FactorEdbSeriesMapping, 0)
|
|
|
+ //edbInfoIds := make([]int, 0)
|
|
|
+ //{
|
|
|
+ // ob := new(data_manage.FactorEdbSeriesMapping)
|
|
|
+ // cond := fmt.Sprintf(" AND %s IN (%s)", ob.Cols().FactorEdbSeriesId, utils.GetOrmInReplace(len(req.SeriesIds)))
|
|
|
+ // pars := make([]interface{}, 0)
|
|
|
+ // pars = append(pars, req.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 = "获取因子指标关联失败, Err: " + e.Error()
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // for _, v := range items {
|
|
|
+ // edbInfoIds = append(edbInfoIds, v.EdbInfoId)
|
|
|
+ // }
|
|
|
+ // edbMappings = items
|
|
|
+ //}
|
|
|
+ //edbIdItem := make(map[int]*data_manage.EdbInfo)
|
|
|
+ //edbItems, e := data_manage.GetEdbInfoByIdList(edbInfoIds)
|
|
|
+ //if e != nil {
|
|
|
+ // br.Msg = "获取失败"
|
|
|
+ // br.ErrMsg = "获取因子指标失败, Err: " + e.Error()
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ //for _, v := range edbItems {
|
|
|
+ // edbIdItem[v.EdbInfoId] = v
|
|
|
+ //}
|
|
|
+ //
|
|
|
+ //// 获取因子指标数据, 计算相关性
|
|
|
+ //resp := new(data_manage.FactorEdbSeriesCorrelationMatrixResp)
|
|
|
+ //calculateDataOb := new(data_manage.FactorEdbSeriesCalculateData)
|
|
|
+ //
|
|
|
+ //calculateWorkers := make(chan struct{}, 10)
|
|
|
+ //wg := sync.WaitGroup{}
|
|
|
+ //edbExists := make(map[string]bool)
|
|
|
+ //chartKeyMap := make(map[string]*data_manage.FactorEdbSeriesChartMapping)
|
|
|
+ //for _, v := range edbMappings {
|
|
|
+ // existsKey := fmt.Sprintf("%d-%d", v.FactorEdbSeriesId, v.EdbInfoId)
|
|
|
+ // if edbExists[existsKey] {
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // edbExists[existsKey] = true
|
|
|
+ //
|
|
|
+ // edbItem := edbIdItem[v.EdbInfoId]
|
|
|
+ // if edbItem == nil {
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // seriesItem := seriesIdItem[v.FactorEdbSeriesId]
|
|
|
+ // if seriesItem == nil {
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // wg.Add(1)
|
|
|
+ // go func(mapping *data_manage.FactorEdbSeriesMapping, edb *data_manage.EdbInfo, series *data_manage.FactorEdbSeries) {
|
|
|
+ // defer func() {
|
|
|
+ // wg.Done()
|
|
|
+ // <-calculateWorkers
|
|
|
+ // }()
|
|
|
+ // calculateWorkers <- struct{}{}
|
|
|
+ //
|
|
|
+ // var item data_manage.FactorEdbSeriesCorrelationMatrixItem
|
|
|
+ // item.SeriesId = series.FactorEdbSeriesId
|
|
|
+ // item.EdbInfoId = edb.EdbInfoId
|
|
|
+ // item.EdbCode = edb.EdbCode
|
|
|
+ // item.EdbName = edb.EdbName
|
|
|
+ //
|
|
|
+ // // 指标来源
|
|
|
+ // edbList := make([]*data_manage.ChartEdbInfoMapping, 0)
|
|
|
+ // edbList = append(edbList, &data_manage.ChartEdbInfoMapping{
|
|
|
+ // EdbInfoId: edb.EdbInfoId,
|
|
|
+ // EdbInfoCategoryType: edb.EdbInfoType,
|
|
|
+ // EdbType: edb.EdbType,
|
|
|
+ // Source: edb.Source,
|
|
|
+ // SourceName: edb.SourceName,
|
|
|
+ // })
|
|
|
+ // sourceNameList, sourceNameEnList := data.GetEdbSourceByEdbInfoIdList(edbList)
|
|
|
+ // item.SourceName = strings.Join(sourceNameList, ",")
|
|
|
+ // item.SourceNameEn = strings.Join(sourceNameEnList, ",")
|
|
|
+ //
|
|
|
+ // // 获取指标数据
|
|
|
+ // dataListB := make([]*data_manage.EdbDataList, 0)
|
|
|
+ // if series.CalculateState == data_manage.FactorEdbSeriesCalculated {
|
|
|
+ // cond := fmt.Sprintf(" AND %s = ? AND %s = ?", calculateDataOb.Cols().FactorEdbSeriesId, calculateDataOb.Cols().EdbInfoId)
|
|
|
+ // pars := make([]interface{}, 0)
|
|
|
+ // pars = append(pars, mapping.FactorEdbSeriesId, mapping.EdbInfoId)
|
|
|
+ // dataItems, e := calculateDataOb.GetItemsByCondition(cond, pars, []string{calculateDataOb.Cols().DataTime, calculateDataOb.Cols().Value}, fmt.Sprintf("%s ASC", calculateDataOb.Cols().DataTime))
|
|
|
+ // if e != nil {
|
|
|
+ // item.Msg = fmt.Sprintf("计算失败")
|
|
|
+ // item.ErrMsg = fmt.Sprintf("获取计算数据失败, err: %v", e)
|
|
|
+ // resp.Fail = append(resp.Fail, item)
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // dataListB = data_manage.TransEdbSeriesCalculateData2EdbDataList(dataItems)
|
|
|
+ // } else {
|
|
|
+ // switch edb.EdbInfoType {
|
|
|
+ // case 0:
|
|
|
+ // dataListB, e = data_manage.GetEdbDataList(edb.Source, edb.SubSource, edb.EdbInfoId, "", "")
|
|
|
+ // case 1:
|
|
|
+ // _, dataListB, _, _, e, _ = data.GetPredictDataListByPredictEdbInfoId(edb.EdbInfoId, "", "", false)
|
|
|
+ // default:
|
|
|
+ // item.Msg = fmt.Sprintf("计算失败")
|
|
|
+ // item.ErrMsg = fmt.Sprintf("指标类型异常, edbType: %d", edb.EdbInfoType)
|
|
|
+ // resp.Fail = append(resp.Fail, item)
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 计算相关性
|
|
|
+ // xEdbIdValue, yDataList, e := correlationServ.CalculateCorrelation(req.Correlation.LeadValue, req.Correlation.LeadUnit, baseEdb.Frequency, edb.Frequency, dataListA, dataListB)
|
|
|
+ // if e != nil {
|
|
|
+ // item.Msg = fmt.Sprintf("计算失败")
|
|
|
+ // item.ErrMsg = fmt.Sprintf("相关性计算失败, err: %v", e)
|
|
|
+ // resp.Fail = append(resp.Fail, item)
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // X及Y轴数据
|
|
|
+ // yData := yDataList[0].Value
|
|
|
+ // yLen := len(yData)
|
|
|
+ // values := make([]data_manage.FactorEdbSeriesCorrelationMatrixValues, len(xEdbIdValue))
|
|
|
+ // for k, x := range xEdbIdValue {
|
|
|
+ // var y float64
|
|
|
+ // if k >= 0 && k < yLen {
|
|
|
+ // y = yData[k]
|
|
|
+ // }
|
|
|
+ // y = utils.SubFloatToFloat(y, 2)
|
|
|
+ // values[k] = data_manage.FactorEdbSeriesCorrelationMatrixValues{
|
|
|
+ // XData: x, YData: y,
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 图表关联-此处添加的chart_info_id=0
|
|
|
+ // newMapping := new(data_manage.FactorEdbSeriesChartMapping)
|
|
|
+ // newMapping.CalculateType = data_manage.FactorEdbSeriesChartCalculateTypeCorrelation
|
|
|
+ //
|
|
|
+ // // 计算参数
|
|
|
+ // var calculatePars data_manage.FactorEdbSeriesChartCalculateCorrelationReq
|
|
|
+ // calculatePars.BaseEdbInfoId = req.BaseEdbInfoId
|
|
|
+ // calculatePars.LeadValue = req.Correlation.LeadValue
|
|
|
+ // calculatePars.LeadUnit = req.Correlation.LeadUnit
|
|
|
+ // calculatePars.CalculateValue = req.Correlation.CalculateValue
|
|
|
+ // calculatePars.CalculateUnit = req.Correlation.CalculateUnit
|
|
|
+ // bc, e := json.Marshal(calculatePars)
|
|
|
+ // if e != nil {
|
|
|
+ // item.Msg = fmt.Sprintf("计算失败")
|
|
|
+ // item.ErrMsg = fmt.Sprintf("计算参数JSON格式化失败, err: %v", e)
|
|
|
+ // resp.Fail = append(resp.Fail, item)
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // newMapping.CalculatePars = string(bc)
|
|
|
+ //
|
|
|
+ // // 计算结果, 注此处保存的是排序前的顺序
|
|
|
+ // bv, e := json.Marshal(values)
|
|
|
+ // if e != nil {
|
|
|
+ // item.Msg = fmt.Sprintf("计算失败")
|
|
|
+ // item.ErrMsg = fmt.Sprintf("计算结果JSON格式化失败, err: %v", e)
|
|
|
+ // resp.Fail = append(resp.Fail, item)
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // newMapping.CalculateData = string(bv)
|
|
|
+ // newMapping.FactorEdbSeriesId = mapping.FactorEdbSeriesId
|
|
|
+ // newMapping.EdbInfoId = mapping.EdbInfoId
|
|
|
+ // newMapping.CreateTime = time.Now().Local()
|
|
|
+ // newMapping.ModifyTime = time.Now().Local()
|
|
|
+ // chartKeyMap[existsKey] = newMapping
|
|
|
+ //
|
|
|
+ // // 按照固定规则排期数[0 1 2 3 -1 -2 -3], 仅矩阵展示为此顺序
|
|
|
+ // sort.Sort(data_manage.FactorEdbSeriesCorrelationMatrixOrder(values))
|
|
|
+ // item.Msg = "计算成功"
|
|
|
+ // item.Values = values
|
|
|
+ // resp.Success = append(resp.Success, item)
|
|
|
+ // }(v, edbItem, seriesItem)
|
|
|
+ //}
|
|
|
+ //wg.Wait()
|
|
|
+ //
|
|
|
+ //// 新增图表关联, 此处按照顺序添加
|
|
|
+ //chartMappings := make([]*data_manage.FactorEdbSeriesChartMapping, 0)
|
|
|
+ //for _, v := range edbMappings {
|
|
|
+ // k := fmt.Sprintf("%d-%d", v.FactorEdbSeriesId, v.EdbInfoId)
|
|
|
+ // item := chartKeyMap[k]
|
|
|
+ // if item == nil {
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // chartMappings = append(chartMappings, item)
|
|
|
+ //}
|
|
|
+ //chartMappingOb := new(data_manage.FactorEdbSeriesChartMapping)
|
|
|
+ //if e = chartMappingOb.ClearAndCreateMapping(req.SeriesIds, chartMappings); e != nil {
|
|
|
+ // br.Msg = "获取失败"
|
|
|
+ // br.ErrMsg = fmt.Sprintf("新增图表关联失败, Err: %v", e)
|
|
|
+ // return
|
|
|
+ //}
|
|
|
|
|
|
br.Data = resp
|
|
|
br.Ret = 200
|