Browse Source

添加图表埋点

xyxie 9 months ago
parent
commit
845c374b46

+ 92 - 0
models/data_manage/edb_info_relation.go

@@ -0,0 +1,92 @@
+package data_manage
+
+import (
+	"eta/eta_api/utils"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type EdbInfoRelation struct {
+	EdbInfoRelationId  int       `orm:"column(edb_info_relation_id);pk"`
+	EdbInfoId          int       `description:"指标id"`
+	Source             int       `description:"来源:1:同花顺,2:wind,3:彭博,4:指标运算,5:累计值转月,6:同比值,7:同差值,8:N数值移动平均计算,9:手工指标,10:隆众"`
+	EdbName            string    `description:"指标名称"`
+	EdbCode            string    `description:"指标编码"`
+	ReferObjectId      int       `description:"引用对象ID(图表ID,ETA逻辑ID等)"`
+	ReferObjectType    int       `description:"引用对象ID类型(1.图表,2.ETA逻辑)"`
+	ReferObjectSubType int       `description:"引用对象子类"`
+	CreateTime         time.Time `description:"创建时间"`
+	ModifyTime         time.Time `description:"修改时间"`
+}
+
+func (e *EdbInfoRelation) TableName() string {
+	return "edb_info_relation"
+}
+
+// GetEdbInfoRelationByEdbInfoIds 查询引用的指标ID
+func GetEdbInfoRelationByEdbInfoIds(edbInfoIds []int) (edbIds []int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	msql := ` SELECT edb_info_id FROM edb_info_relation WHERE edb_info_id in (` + utils.GetOrmInReplace(len(edbInfoIds)) + `)  GROUP BY edb_info_id `
+	_, err = o.Raw(msql, edbInfoIds).QueryRows(&edbIds)
+	return
+}
+
+// GetEdbInfoRelationByReferObjectId 查询引用的指标ID
+func GetEdbInfoRelationByReferObjectId(referObjectId int, referObjectType int) (items []*EdbInfoRelation, err error) {
+	o := orm.NewOrmUsingDB("data")
+	msql := ` SELECT * FROM edb_info_relation WHERE referObjectId =? AND referObjectType=?  GROUP BY edb_info_id `
+	_, err = o.Raw(msql, referObjectId, referObjectType).QueryRows(&items)
+	return
+}
+
+// 新增记录
+func AddOrUpdateEdbInfoRelation(relationList []*EdbInfoRelation, deleteIds []int, refreshEdbInfoIds []int, indexCodeList []string) (err error) {
+
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+			return
+		}
+		_ = o.Commit()
+	}()
+
+	if len(deleteIds) > 0 {
+		sql := ` DELETE FROM edb_info_relation WHERE edb_info_relation_id in (` + utils.GetOrmInReplace(len(deleteIds)) + `) `
+		_, err = o.Raw(sql, deleteIds).Exec()
+		if err != nil {
+			return
+		}
+	}
+	if len(relationList) > 0 {
+		_, err = o.InsertMulti(len(relationList), relationList)
+		if err != nil {
+			return
+		}
+	}
+
+	if len(refreshEdbInfoIds) > 0 {
+		//更新指标的刷新状态
+		sql := ` UPDATE edb_info SET no_update = 0 WHERE source in (?, ?) AND edb_info_id IN (` + utils.GetOrmInReplace(len(refreshEdbInfoIds)) + `) AND  no_update = 1`
+		_, err = o.Raw(sql, utils.DATA_SOURCE_MYSTEEL_CHEMICAL, utils.DATA_SOURCE_WIND, refreshEdbInfoIds).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	//更新数据源钢联化工指标
+	if len(indexCodeList) > 0 {
+		// 更改数据源的更新状态
+		sql := ` UPDATE base_from_mysteel_chemical_index SET is_stop = 0 WHERE index_code IN (` + utils.GetOrmInReplace(len(indexCodeList)) + `) and is_stop=1`
+		_, err = o.Raw(sql, indexCodeList).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	// todo 由此被禁用的计算指标是否能恢复刷新
+	return
+}

+ 4 - 1
services/data/chart_info.go

@@ -2231,7 +2231,8 @@ func AddChartInfo(req data_manage.AddChartInfoReq, sysUserId int, sysUserRealNam
 		err = errors.New("保存失败,Err:" + err.Error())
 		return
 	}
-
+	// 添加指标引用记录
+	_ = SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
 	go EsAddOrEditChartInfo(chartInfo.ChartInfoId)
 
@@ -2583,6 +2584,8 @@ func EditChartInfo(req data_manage.EditChartInfoReq, sysUser *system.Admin, lang
 	resp.UniqueCode = chartItem.UniqueCode
 	resp.ChartType = req.ChartType
 
+	// todo 添加指标引用记录
+	_ = SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 	//添加es数据
 	go EsAddOrEditChartInfo(chartItem.ChartInfoId)
 	//修改my eta es数据

+ 4 - 0
services/data/correlation/chart_info.go

@@ -913,6 +913,8 @@ func AddChartInfo(req data_manage.AddChartInfoReq, source int, sysUser *system.A
 		return
 	}
 
+	// 添加指标引用记录
+	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartInfo)
 	//添加es数据
 	go data.EsAddOrEditChartInfo(chartInfoId)
 
@@ -1154,6 +1156,8 @@ func EditChartInfo(req data_manage.EditChartInfoReq, sysUser *system.Admin, lang
 	resp.UniqueCode = chartItem.UniqueCode
 	resp.ChartType = req.ChartType
 
+	// 添加指标引用记录
+	_ = data.SaveChartEdbInfoRelation(edbInfoIdArr, chartItem)
 	//添加es数据
 	go data.EsAddOrEditChartInfo(chartItem.ChartInfoId)
 	//修改my eta es数据

+ 89 - 0
services/data/edb_info_relation.go

@@ -0,0 +1,89 @@
+package data
+
+import (
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/utils"
+	"fmt"
+)
+
+// SaveChartEdbInfoRelation 添加/编辑图表指标引用关联记录
+func SaveChartEdbInfoRelation(edbInfoIds []int, chartInfo *data_manage.ChartInfo) (err error) {
+	// 实现添加引用记录的逻辑
+	if len(edbInfoIds) == 0 {
+		return
+	}
+	defer func() {
+		if err != nil {
+			tips := "SaveChartEdbInfoRelation-添加/编辑图表指标引用关联记录失败, ErrMsg:\n" + err.Error()
+			utils.FileLog.Info(tips)
+			go alarm_msg.SendAlarmMsg(tips, 3)
+		}
+	}()
+	refreshIds := make([]int, 0)
+	indexCodeList := make([]string, 0)
+	// 查询指标信息
+	edbInfoList, e := data_manage.GetEdbInfoByIdList(edbInfoIds)
+	if e != nil {
+		err = fmt.Errorf("查询指标信息失败,%s", e.Error())
+		return
+	}
+	// 只统计钢联化工和wind来源的指标
+	for _, edbInfo := range edbInfoList {
+		if edbInfo.Source != utils.DATA_SOURCE_WIND && edbInfo.Source != utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			continue
+		}
+		refreshIds = append(refreshIds, edbInfo.EdbInfoId)
+		if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			indexCodeList = append(indexCodeList, edbInfo.EdbCode)
+		}
+	}
+	// 循转组装引用
+	// 查询已有的引用关系
+	existList, e := data_manage.GetEdbInfoRelationByReferObjectId(chartInfo.ChartInfoId, utils.EDB_RELATION_CHART)
+	if e != nil {
+		err = fmt.Errorf("查询已有的引用关系失败,%s", e.Error())
+		return
+	}
+	deleteMap := make(map[int]bool)
+	relationMap := make(map[int]bool)
+	for _, exist := range existList {
+		deleteMap[exist.EdbInfoId] = true
+		relationMap[exist.EdbInfoId] = true
+	}
+	// 新增不存在的引用关系
+	// 删除不再需要的引用关系
+	addList := make([]*data_manage.EdbInfoRelation, 0)
+	deleteRelationIds := make([]int, 0)
+	for _, edbInfo := range edbInfoList {
+		if edbInfo.Source != utils.DATA_SOURCE_WIND && edbInfo.Source != utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			continue
+		}
+		if _, ok := relationMap[edbInfo.EdbInfoId]; ok {
+			delete(deleteMap, edbInfo.EdbInfoId)
+		} else {
+			tmp := &data_manage.EdbInfoRelation{
+				ReferObjectId:      chartInfo.ChartInfoId,
+				ReferObjectType:    utils.EDB_RELATION_CHART,
+				ReferObjectSubType: chartInfo.Source,
+				EdbInfoId:          edbInfo.EdbInfoId,
+				EdbName:            edbInfo.EdbName,
+				Source:             edbInfo.Source,
+				EdbCode:            edbInfo.EdbCode,
+			}
+			addList = append(addList, tmp)
+		}
+	}
+
+	// 删除不再需要的引用关系
+	for deleteId, _ := range deleteMap {
+		deleteRelationIds = append(deleteRelationIds, deleteId)
+	}
+	//更新指标刷新状态为启用
+	err = data_manage.AddOrUpdateEdbInfoRelation(addList, deleteRelationIds, refreshIds, indexCodeList)
+	if err != nil {
+		err = fmt.Errorf("删除不再需要的引用关系失败,%s", err.Error())
+		return
+	}
+	return
+}

+ 8 - 0
utils/constants.go

@@ -430,3 +430,11 @@ const (
 	ZhLangVersion = "zh" // 中文语言版本
 	EnLangVersion = "en" // 英文语言版本
 )
+
+// 指标引用对象
+const (
+	EDB_RELATION_CHART    = 1 // 图表
+	EDB_RELATION_SANDBOX  = 2 // ETA逻辑
+	EDB_RELATION_CALENDAR = 3 // 事件日历
+	EDB_RELATION_TABLE    = 4 // 表格
+)