Browse Source

跨品种分析历史数据处理

xyxie 8 months ago
parent
commit
8be0f4b3a0

+ 1 - 0
models/data_manage/chart_info.go

@@ -28,6 +28,7 @@ type ChartInfo struct {
 	Sort            int    `description:"排序字段,数字越小越排前面"`
 	EdbEndDate      string `description:"指标最后更新日期"`
 	Source          int    `description:"1:ETA图库;2:商品价格曲线"`
+	ExtraConfig     string `description:"图表额外配置,json数据"`
 }
 
 func GetAllChartInfo() (list []*ChartInfo, err error) {

+ 21 - 0
models/data_manage/cross_variety/chart_info_cross_variety.go

@@ -32,3 +32,24 @@ func GetChartInfoCrossVarietyTotal() (total int, err error) {
 	err = o.Raw(sql).QueryRow(&total)
 	return
 }
+
+// ChartConfigReq
+// @Description: 跨品种分析的图表配置
+type ChartConfigReq struct {
+	TagX           int               `description:"X轴的标签ID"`
+	TagY           int               `description:"Y轴的标签ID"`
+	CalculateValue int               `description:"计算窗口"`
+	CalculateUnit  string            `description:"计算频度"`
+	DateConfigList []ChartConfigDate `description:"日期配置列表"`
+	VarietyList    []int             `description:"品种id列表"`
+	PercentType    int               `description:"百分位:0-数据区间(兼容历史数据); 1-数据个数;"`
+}
+
+// ChartConfigDate
+// @Description: 跨品种分析的日期配置
+type ChartConfigDate struct {
+	DateType int    `description:"日期类型:1-最新日期;2-N天前;3-固定日期"`
+	Num      int    `description:"N天前的N值"`
+	FixDate  string `description:"固定日期的日期"`
+	ShowTips int    `description:"是否显示标注:0-否;1-是"`
+}

+ 34 - 17
services/edb_relation.go

@@ -120,6 +120,9 @@ func InitChartEdbRelation() {
 				if !ok1 {
 					continue
 				}
+				if chartInfo.Source == utils.CHART_SOURCE_CROSS_HEDGING { //过滤掉跨品种分析的图表
+					continue
+				}
 				edbInfo, ok2 := edbInfoMap[v.EdbInfoId]
 				if !ok2 {
 					continue
@@ -242,10 +245,15 @@ func InitChartCrossVariety() {
 			break
 		}
 		chartIds := make([]int, 0)
+		chartIdMap := make(map[int]struct{})
 		tagIds := make([]int, 0)
 		tagIdsMap := make(map[int]struct{})
 		tagChartMap := make(map[int][]*cross_variety.ChartInfoCrossVariety)
 		for _, v := range list {
+			if _, ok := chartIdMap[v.ChartInfoId]; !ok {
+				chartIdMap[v.ChartInfoId] = struct{}{}
+				chartIds = append(chartIds, v.ChartInfoId)
+			}
 			if _, ok := tagIdsMap[v.ChartXTagId]; !ok {
 				tagIds = append(tagIds, v.ChartXTagId)
 				tagIdsMap[v.ChartXTagId] = struct{}{}
@@ -271,6 +279,18 @@ func InitChartCrossVariety() {
 				tagChartMap[v.ChartYTagId] = chartCross
 			}
 		}
+		chartInfoMap := make(map[int]*data_manage.ChartInfo)
+		if len(chartIds) > 0 {
+			// 查询图表信息
+			chartInfoList, e := data_manage.GetChartInfoByChartInfoIds(chartIds)
+			if e != nil {
+				err = fmt.Errorf("查询图表信息列表失败 Err:%s", e)
+				return
+			}
+			for _, v := range chartInfoList {
+				chartInfoMap[v.ChartInfoId] = v
+			}
+		}
 		chartTagVarietyList, e := cross_variety.GetChartTagVarietyEdbInfoIdsByTagIds(tagIds)
 		if e != nil {
 			err = fmt.Errorf("查询指标信息列表失败 Err:%s", e)
@@ -318,9 +338,20 @@ func InitChartCrossVariety() {
 					if chartCross, ok2 := tagChartMap[tag.ChartTagId]; ok2 {
 						for _, crossItem := range chartCross {
 							if _, ok3 := chartInfoCrossMap[crossItem.ChartInfoId]; !ok3 {
-								chartInfoCrossMap[crossItem.ChartInfoId] = struct{}{}
-								chartInfoCrossList = append(chartInfoCrossList, crossItem)
-								chartIds = append(chartIds, crossItem.ChartInfoId)
+								chartInfo, chartOk := chartInfoMap[crossItem.ChartInfoId]
+								if !chartOk { //表示图表不存在
+									continue
+								}
+								// 查询真正有用的指标ID
+								var config cross_variety.ChartConfigReq
+								e := json.Unmarshal([]byte(chartInfo.ExtraConfig), &config)
+								if e != nil {
+									continue
+								}
+								if utils.InArrayByInt(config.VarietyList, tag.ChartVarietyId) {
+									chartInfoCrossMap[crossItem.ChartInfoId] = struct{}{}
+									chartInfoCrossList = append(chartInfoCrossList, crossItem)
+								}
 							}
 						}
 					}
@@ -331,17 +362,6 @@ func InitChartCrossVariety() {
 			chartInfoCrossList = make([]*cross_variety.ChartInfoCrossVariety, 0)
 		}
 
-		// 查询图表信息
-		chartInfoList, e := data_manage.GetChartInfoByChartInfoIds(chartIds)
-		if e != nil {
-			err = fmt.Errorf("查询图表信息列表失败 Err:%s", e)
-			return
-		}
-		chartInfoMap := make(map[int]*data_manage.ChartInfo)
-		for _, v := range chartInfoList {
-			chartInfoMap[v.ChartInfoId] = v
-		}
-
 		//查询引用关系列表,
 		chartEdbRelationList, e := data_manage.GetEdbInfoRelationByReferObjectIds(chartIds, utils.EDB_RELATION_CHART)
 		if e != nil {
@@ -357,9 +377,6 @@ func InitChartCrossVariety() {
 			nowTime := time.Now()
 			for _, item := range chartCrossList {
 				name := fmt.Sprintf("%d-%d", item.ChartInfoId, edbInfoId)
-				if _, chartOk := chartInfoMap[item.ChartInfoId]; !chartOk { //表示图表不存在
-					continue
-				}
 				if _, ok1 := existRelationMap[name]; !ok1 {
 					edbInfo, ok2 := edbInfoMap[edbInfoId]
 					if !ok2 {