浏览代码

fix:指标替换

Roc 3 月之前
父节点
当前提交
1c0881d830

+ 2 - 1
cache/replace_edb_info.go

@@ -7,10 +7,11 @@ import (
 )
 
 // 将替换指标操作加入到队列中
-func AddReplaceEdbInfo(oldEdbInfo, newEdbInfo *data_manage.EdbInfo) bool {
+func AddReplaceEdbInfo(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, userId int) bool {
 	record := new(data_manage.ReplaceEdbInfoItem)
 	record.OldEdbInfo = oldEdbInfo
 	record.NewEdbInfo = newEdbInfo
+	record.UserId = userId
 	if utils.Re == nil {
 		err := utils.Rc.LPush(utils.CACHE_KEY_REPLACE_EDB, record)
 

+ 23 - 15
models/data_manage/edb_info.go

@@ -903,7 +903,7 @@ type EdbInfoReplaceReq struct {
 }
 
 // ReplaceChartEdb 替换图表中的指标
-func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []int, replaceChartTotal, replaceCalculateTotal int, err error) {
+func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo, userId int) (relationEdbInfoIdList []int, replaceChartTotal, replaceCalculateTotal int, err error) {
 	var errmsg string
 	relationEdbInfoIdList = make([]int, 0) // 关联的指标id
 	logMsg := ``                           // 记录替换的日志
@@ -926,11 +926,13 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"替换指标失败提醒", "errmsg:"+errmsg, utils.EmailSendToUsers)
 		}
 	}()
-	//替换图表
+	//替换自己创建的图表
 	{
 		chartEdbMappingList := make([]*ChartEdbInfoMapping, 0)
-		csql := `SELECT * FROM chart_edb_mapping WHERE edb_info_id=?`
-		err = to.Raw(csql, oldEdbInfo.EdbInfoId).Scan(&chartEdbMappingList).Error
+		csql := `SELECT a.* FROM chart_edb_mapping AS a 
+         JOIN chart_info AS b on a.chart_info_id=b.chart_info_id
+         WHERE b.sys_user_id = ? AND  a.edb_info_id=? `
+		err = to.Raw(csql, userId, oldEdbInfo.EdbInfoId).Scan(&chartEdbMappingList).Error
 		if err != nil {
 			errmsg = "获取指标关联图表信息失败:Err:" + err.Error()
 			return
@@ -1133,7 +1135,8 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 				}
 			}
 		}
-		// 查询所有的图表信息
+
+		// 查询我的所有图表信息
 		if len(chartEdbMappingList) > 0 {
 			chartInfoIdList := make([]string, 0)
 			for _, mv := range chartEdbMappingList {
@@ -1187,8 +1190,10 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 		//获取所有包含的计算指标
 		mappingList := make([]*EdbInfoCalculateMapping, 0)
 		queryList := make([]*EdbInfoCalculateMapping, 0)
-		msql := ` SELECT * FROM edb_info_calculate_mapping WHERE from_edb_info_id = ?`
-		err = to.Raw(msql, oldEdbInfo.EdbInfoId).Find(&queryList).Error
+		msql := ` SELECT a.* FROM edb_info_calculate_mapping AS a 
+          JOIN edb_info AS b ON a.edb_info_id=b.edb_info_id
+          WHERE b.sys_user_id = ? AND a.from_edb_info_id = ?`
+		err = to.Raw(msql, userId, oldEdbInfo.EdbInfoId).Find(&queryList).Error
 		if err != nil {
 			errmsg = "获取计算指标关联基础指标信息失败:Err:" + err.Error()
 			return
@@ -1229,7 +1234,9 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 		//获取所有包含的计算指标
 		predictEdbConfList := make([]*PredictEdbConf, 0)
 		queryList := make([]*PredictEdbConf, 0)
-		msql := ` SELECT * FROM predict_edb_conf WHERE source_edb_info_id = ?`
+		msql := ` SELECT a.* FROM predict_edb_conf AS a
+          JOIN edb_info AS b on a.predict_edb_info_id = b.edb_info_id
+          WHERE source_edb_info_id = ?`
 		err = to.Raw(msql, oldEdbInfo.EdbInfoId).Scan(&predictEdbConfList).Error
 		if err != nil {
 			errmsg = "获取关联的预测指标信息失败:Err:" + err.Error()
@@ -1242,15 +1249,15 @@ func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []i
 			}
 			exists[v.PredictEdbInfoId] = true
 			predictEdbConfList = append(predictEdbConfList, v)
-		}
-		replaceCalculateTotal += len(predictEdbConfList)
 
-		//替换预测指标的来源指标
-		msql = `UPDATE predict_edb_conf SET source_edb_info_id=? WHERE source_edb_info_id=? `
-		err = to.Exec(msql, newEdbInfo.EdbInfoId, oldEdbInfo.EdbInfoId).Error
-		if err != nil {
-			return
+			//替换预测指标的来源指标
+			msql = `UPDATE predict_edb_conf SET source_edb_info_id=? WHERE config_id=? `
+			err = to.Exec(msql, newEdbInfo.EdbInfoId, v.ConfigId).Error
+			if err != nil {
+				return
+			}
 		}
+		replaceCalculateTotal += len(predictEdbConfList)
 
 		if len(predictEdbConfList) > 0 {
 			edbInfoIdList := make([]string, 0)
@@ -1989,6 +1996,7 @@ func GetEdbInfoByClassifyIdAndSource(classifyId, edbInfoType, source int) (items
 type ReplaceEdbInfoItem struct {
 	OldEdbInfo *EdbInfo
 	NewEdbInfo *EdbInfo
+	UserId     int
 }
 
 type EdbInfoEditRecord struct {

+ 9 - 0
models/data_manage/excel/excel_edb_mapping.go

@@ -104,6 +104,15 @@ func GetExcelEdbMappingByEdbInfoIdAndSource(edbInfoId int, sources []int) (items
 	return
 }
 
+// GetUserExcelEdbMappingByEdbInfoIdAndSource 根据指标id获取所属用户的配置关系
+func GetUserExcelEdbMappingByEdbInfoIdAndSource(userId, edbInfoId int, sources []int) (items []*ExcelEdbMapping, err error) {
+	sql := ` SELECT a.*  FROM excel_edb_mapping AS a 
+           JOIN excel_info AS b on a.excel_info_id = b.excel_info_id
+           WHERE 1=1 AND a.sys_user_id = ? AND b.edb_info_id = ? AND b.source in (` + utils.GetOrmInReplace(len(sources)) + `) `
+	err = global.DmSQL["data"].Raw(sql, userId, edbInfoId, sources).Find(&items).Error
+	return
+}
+
 // DeleteCustomAnalysisExcelEdbMappingByEdbInfoId
 // @Description: 根据指标id删除与自定义分析表格的关系
 // @author: Roc

+ 3 - 3
models/data_manage/multiple_graph_config.go

@@ -81,7 +81,7 @@ type RollingCorrelationConfig struct {
 }
 
 // ReplaceEdbInfoInLineEquationMultipleGraphConfig 获取拟合方程配置
-func ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo *EdbInfo) (replaceConfigTotal int, err error) {
+func ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo *EdbInfo, userId int) (replaceConfigTotal int, err error) {
 	var errmsg string
 	logMsg := `` // 记录替换的日志
 	to := global.DmSQL["data"].Begin()
@@ -106,8 +106,8 @@ func ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo *Edb
 	//替换multiple_graph_config中的指标
 	{
 		multipleGraphConfigList := make([]*MultipleGraphConfig, 0)
-		csql := `SELECT * FROM multiple_graph_config WHERE edb_info_id_a=0 AND edb_info_id_b=0 AND curve !=''`
-		err = to.Raw(csql).Find(&multipleGraphConfigList).Error
+		csql := `SELECT * FROM multiple_graph_config WHERE sys_user_id = ? AND  edb_info_id_a=0 AND edb_info_id_b=0 AND curve !=''`
+		err = to.Raw(csql, userId).Find(&multipleGraphConfigList).Error
 		if err != nil {
 			errmsg = "获取指标关联图表配置信息失败:Err:" + err.Error()
 			return

+ 38 - 15
models/data_manage/multiple_graph_config_chart_mapping.go

@@ -54,7 +54,7 @@ func GetMultipleGraphConfigChartMappingListById(configId int) (items []*Multiple
 }
 
 // ReplaceMultipleGraphConfigChartEdb 替换相关性分析配置中的指标
-func ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (replaceConfigTotal int, err error) {
+func ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo *EdbInfo, userId int) (replaceConfigTotal int, err error) {
 	var errmsg string
 	logMsg := `` // 记录替换的日志
 	to := global.DmSQL["data"].Begin()
@@ -78,8 +78,8 @@ func ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (replac
 
 	//替换multiple_graph_config中的指标
 	multipleGraphConfigList := make([]*MultipleGraphConfig, 0)
-	csql := `SELECT * FROM multiple_graph_config WHERE (edb_info_id_a=? or edb_info_id_b=?)`
-	err = to.Raw(csql, oldEdbInfo.EdbInfoId, oldEdbInfo.EdbInfoId).Find(&multipleGraphConfigList).Error
+	csql := `SELECT * FROM multiple_graph_config WHERE sys_user_id = ? AND (edb_info_id_a=? or edb_info_id_b=?)`
+	err = to.Raw(csql, userId, oldEdbInfo.EdbInfoId, oldEdbInfo.EdbInfoId).Find(&multipleGraphConfigList).Error
 	if err != nil {
 		errmsg = "获取指标关联图表配置信息失败:Err:" + err.Error()
 		return
@@ -160,22 +160,45 @@ func ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (replac
 	}
 
 	// 更新相关性图表中的
-	sql := `UPDATE chart_info_correlation SET edb_info_id_first=?, modify_time=? WHERE edb_info_id_first=?`
-	err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId).Error
-	if err != nil {
-		errmsg = "更新相关性图表中的指标id关联失败:Err:" + err.Error()
-		return
-	}
+	{
+		// 查询我的相关性图表
+
+		tmpChartInfoCorrelationList := make([]*ChartInfoCorrelation, 0)
+		tmpSql := `SELECT a.* FROM chart_info_correlation AS a 
+         JOIN chart_info AS b on a.correlation_chart_info_id = b.chart_info_id
+         WHERE b.sys_user_id = ? AND (edb_info_id_a=? or edb_info_id_b=?) `
+		err = to.Raw(tmpSql, userId, oldEdbInfo.EdbInfoId, oldEdbInfo.EdbInfoId).Find(&tmpChartInfoCorrelationList).Error
+		if err != nil {
+			errmsg = "获取指标关联图表配置信息失败:Err:" + err.Error()
+			return
+		}
+		chartInfoIdList := make([]int, 0)
+		for _, v := range tmpChartInfoCorrelationList {
+			chartInfoIdList = append(chartInfoIdList, v.CorrelationChartInfoId)
+		}
+
+		num := len(chartInfoIdList)
+		// 更新相关性图表中的
+		if num > 0 {
+			sql := `UPDATE chart_info_correlation SET edb_info_id_first=?, modify_time=? WHERE edb_info_id_first=? AND correlation_chart_info_id IN (?) `
+			err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId, chartInfoIdList).Error
+			if err != nil {
+				errmsg = "更新相关性图表中的指标id关联失败:Err:" + err.Error()
+				return
+			}
+
+			sql = `UPDATE chart_info_correlation SET edb_info_id_second=?, modify_time=? WHERE edb_info_id_second=? AND correlation_chart_info_id IN (?) `
+			err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId, chartInfoIdList).Error
+			if err != nil {
+				errmsg = "更新相关性图表中的指标id关联失败:Err:" + err.Error()
+				return
+			}
+		}
 
-	sql = `UPDATE chart_info_correlation SET edb_info_id_second=?, modify_time=? WHERE edb_info_id_second=?`
-	err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId).Error
-	if err != nil {
-		errmsg = "更新相关性图表中的指标id关联失败:Err:" + err.Error()
-		return
 	}
 
 	// 替换拟合方程曲线替换指标
-	sql = `UPDATE chart_tag_variety SET edb_info_id=?, modify_time=? WHERE edb_info_id=?`
+	sql := `UPDATE chart_tag_variety SET edb_info_id=?, modify_time=? WHERE edb_info_id=?`
 	err = to.Exec(sql, newEdbInfo.EdbInfoId, time.Now(), oldEdbInfo.EdbInfoId).Error
 	if err != nil {
 		errmsg = "更新指标id关联跨品种分析标签失败:Err:" + err.Error()

+ 2 - 2
services/data/edb_info.go

@@ -1709,12 +1709,12 @@ func EdbInfoReplace(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, sysAdminId int,
 	}()
 
 	// 替换关联表中的source_edb_info_id
-	relationEdbInfoIdList, replaceChartTotal, replaceCalculateTotal, err := data_manage.ReplaceChartEdb(oldEdbInfo, newEdbInfo)
+	relationEdbInfoIdList, replaceChartTotal, replaceCalculateTotal, err := data_manage.ReplaceChartEdb(oldEdbInfo, newEdbInfo, sysAdminId)
 	if err != nil {
 		return
 	}
 	//加入到缓存队列中处理
-	go cache.AddReplaceEdbInfo(oldEdbInfo, newEdbInfo)
+	go cache.AddReplaceEdbInfo(oldEdbInfo, newEdbInfo, sysAdminId)
 	// 更新所有的关联指标
 	err, _ = EdbInfoRefreshAllFromBaseV3(relationEdbInfoIdList, true, true, true)
 	return

+ 9 - 8
services/edb_info_replace.go

@@ -33,9 +33,10 @@ func DealReplaceEdbCache() {
 			}
 			oldEdbInfo := record.OldEdbInfo
 			newEdbInfo := record.NewEdbInfo
-			utils.FileLog.Info(fmt.Sprintf("指标开始替换 DealReplaceEdbCache: 旧指标ID:%d,新指标ID:%d", oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId))
+			userId := record.UserId
+			utils.FileLog.Info(fmt.Sprintf("指标开始替换 DealReplaceEdbCache: 旧指标ID:%d,新指标ID:%d,所属用户:%d", oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId, userId))
 			deleteCache := true
-			setNxKey := fmt.Sprintf("EDB_INFO_REPLACE:%d-%d", oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId)
+			setNxKey := fmt.Sprintf("EDB_INFO_REPLACE:%d-%d-%d", oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId, userId)
 			defer func() {
 				if deleteCache {
 					utils.Rc.Delete(setNxKey)
@@ -48,27 +49,27 @@ func DealReplaceEdbCache() {
 			}
 
 			// 替换相关性图表配置
-			_, err = data_manage.ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo)
+			_, err = data_manage.ReplaceMultipleGraphConfigChartEdb(oldEdbInfo, newEdbInfo, userId)
 			if err != nil {
 				err = fmt.Errorf("替换相关性图表配置失败,errmsg:%s", err.Error())
 				return
 			}
 			// 替换拟合方程指标
-			_, err = data_manage.ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo)
+			_, err = data_manage.ReplaceEdbInfoInLineEquationMultipleGraphConfig(oldEdbInfo, newEdbInfo, userId)
 			if err != nil {
 				err = fmt.Errorf("替换拟合方程指标失败,errmsg:%s", err.Error())
 				return
 			}
 
 			// 替换表格中的指标
-			err = ReplaceEdbInExcel(oldEdbInfo, newEdbInfo)
+			err = ReplaceEdbInExcel(oldEdbInfo, newEdbInfo, userId)
 			if err != nil {
 				err = fmt.Errorf("替换表格中的指标失败,errmsg:%s", err.Error())
 				return
 			}
 
 			//替换逻辑图中的指标
-			err = sandbox.ReplaceEdbInSandbox(oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId)
+			err = sandbox.ReplaceEdbInSandbox(oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId, userId)
 			if err != nil {
 				err = fmt.Errorf("替换逻辑图中的指标失败,errmsg:%s", err.Error())
 				return
@@ -81,14 +82,14 @@ func DealReplaceEdbCache() {
 }
 
 // ReplaceEdbInExcel 替换表格中的指标
-func ReplaceEdbInExcel(oldEdbInfo, newEdbInfo *data_manage.EdbInfo) (err error) {
+func ReplaceEdbInExcel(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, userId int) (err error) {
 	defer func() {
 		if err != nil {
 			go alarm_msg.SendAlarmMsg("替换表格中的指标失败提醒,errMsg:"+err.Error(), 3)
 		}
 	}()
 	//查询和指标相关的时间序列表格和混合表格
-	mappingList, err := excelModel.GetExcelEdbMappingByEdbInfoIdAndSource(oldEdbInfo.EdbInfoId, []int{utils.TIME_TABLE, utils.MIXED_TABLE})
+	mappingList, err := excelModel.GetUserExcelEdbMappingByEdbInfoIdAndSource(userId, oldEdbInfo.EdbInfoId, []int{utils.TIME_TABLE, utils.MIXED_TABLE})
 	if err != nil {
 		err = fmt.Errorf("查询和指标相关的表格失败,错误:%s", err.Error())
 		return

+ 3 - 3
services/sandbox/sandbox.go

@@ -895,7 +895,7 @@ func GetSandBoxEdbIdsByContent(content string) (edbInfoIds []int, err error) {
 	}
 	return
 }
-func ReplaceEdbInSandbox(oldEdbInfoId, newEdbInfoId int) (err error) {
+func ReplaceEdbInSandbox(oldEdbInfoId, newEdbInfoId, userId int) (err error) {
 	updateTotal := 0
 	logMsg := ""
 	//分页处理沙盘表
@@ -908,7 +908,7 @@ func ReplaceEdbInSandbox(oldEdbInfoId, newEdbInfoId int) (err error) {
 		}
 	}()
 	//查询沙盘总数
-	total, err := sandbox.GetSandboxListCountByCondition("", []interface{}{})
+	total, err := sandbox.GetSandboxListCountByCondition(" AND sys_user_id = ? ", []interface{}{userId})
 	if err != nil {
 		err = fmt.Errorf("查询沙盘总数失败 Err:%s", err)
 		return
@@ -922,7 +922,7 @@ func ReplaceEdbInSandbox(oldEdbInfoId, newEdbInfoId int) (err error) {
 	//查询沙盘列表
 	for i := 0; i < totalPage; i += 1 {
 		startSize := i * 100
-		list, e := sandbox.GetSandboxListByCondition("", []interface{}{}, startSize, 100)
+		list, e := sandbox.GetSandboxListByCondition(" AND sys_user_id = ? ", []interface{}{userId}, startSize, 100)
 		if e != nil {
 			err = fmt.Errorf("查询沙盘列表失败 Err:%s", e)
 			return