Browse Source

Merge branch 'bug/3157'

# Conflicts:
#	services/data/edb_info.go
Roc 1 năm trước cách đây
mục cha
commit
c58d1d24c8
3 tập tin đã thay đổi với 136 bổ sung332 xóa
  1. 1 1
      controllers/data_manage/edb_info.go
  2. 116 66
      models/data_manage/edb_info.go
  3. 19 265
      services/data/edb_info.go

+ 1 - 1
controllers/data_manage/edb_info.go

@@ -3242,7 +3242,7 @@ func (this *ChartInfoController) EdbInfoReplace() {
 
 	sysAdminId := sysUser.AdminId
 	//replaceChartTotal, replaceCalculateTotal, err := data.EdbInfoReplace(oldEdbInfo, newEdbInfo, sysAdminId, sysUser.RealName)
-	_, _, err = data_manage.EdbInfoReplaceV2(oldEdbInfo, newEdbInfo, sysAdminId, sysUser.RealName)
+	_, _, err = data.EdbInfoReplace(oldEdbInfo, newEdbInfo, sysAdminId, sysUser.RealName)
 	//msgContent := ``
 	isFail := false
 	var errmsg string

+ 116 - 66
models/data_manage/edb_info.go

@@ -998,28 +998,28 @@ func EdbInfoReplace(oldEdbInfo, newEdbInfo *EdbInfo, sysAdminId int, sysAdminRea
 }
 
 // EdbInfoReplaceV2 替换指标v2版本(更换时间:2022年01月05日15:33:42)
-func EdbInfoReplaceV2(oldEdbInfo, newEdbInfo *EdbInfo, sysAdminId int, sysAdminRealName string) (replaceChartTotal, replaceCalculateTotal int, err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println("ERR:", err.Error())
-		}
-	}()
-	mappingList, replaceChartTotal, replaceCalculateTotal, err := replaceChartEdb(oldEdbInfo, newEdbInfo)
-	if err != nil {
-		return
-	}
-	err = replaceRelationEdbInfo(mappingList, oldEdbInfo, newEdbInfo, sysAdminId, sysAdminRealName)
-	return
-}
+//func EdbInfoReplaceV2(oldEdbInfo, newEdbInfo *EdbInfo, sysAdminId int, sysAdminRealName string) (mappingList,replaceChartTotal, replaceCalculateTotal int, err error) {
+//	defer func() {
+//		if err != nil {
+//			fmt.Println("ERR:", err.Error())
+//		}
+//	}()
+//
+//	// 替换关联表中的source_edb_info_id
+//	mappingList, replaceChartTotal, replaceCalculateTotal, err := replaceChartEdb(oldEdbInfo, newEdbInfo)
+//	if err != nil {
+//		return
+//	}
+//	err = replaceRelationEdbInfo(mappingList, oldEdbInfo, newEdbInfo, sysAdminId, sysAdminRealName)
+//	return
+//}
 
 // ReplaceChartEdb 替换图表中的指标
-func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (mappingList []*EdbInfoCalculateMapping, replaceChartTotal, replaceCalculateTotal int, err error) {
-	return replaceChartEdb(oldEdbInfo, newEdbInfo)
-}
-
-// replaceChartEdb 替换图表中的指标
-func replaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (mappingList []*EdbInfoCalculateMapping, replaceChartTotal, replaceCalculateTotal int, err error) {
+func ReplaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (relationEdbInfoIdList []int, replaceChartTotal, replaceCalculateTotal int, err error) {
 	var errmsg string
+	relationEdbInfoIdList = make([]int, 0) // 关联的指标id
+	logMsg := ``                           // 记录替换的日志
+
 	o := orm.NewOrmUsingDB("data")
 	to, err := o.Begin()
 	if err != nil {
@@ -1030,6 +1030,9 @@ func replaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (mappingList []*EdbInfoCal
 			_ = to.Rollback()
 		} else {
 			_ = to.Commit()
+			if logMsg != `` {
+				utils.FileLog.Info(fmt.Sprintf("替换指标记录,旧的指标id:%d,新的指标id:%d;%s", oldEdbInfo.EdbInfoId, newEdbInfo.EdbInfoId, logMsg))
+			}
 		}
 		if errmsg != "" {
 			fmt.Println("errmsg:" + errmsg)
@@ -1040,68 +1043,115 @@ func replaceChartEdb(oldEdbInfo, newEdbInfo *EdbInfo) (mappingList []*EdbInfoCal
 		}
 	}()
 	//替换图表
-	chartEdbMappingList := make([]*ChartEdbInfoMapping, 0)
-	csql := `SELECT * FROM chart_edb_mapping WHERE edb_info_id=?`
-	_, err = to.Raw(csql, oldEdbInfo.EdbInfoId).QueryRows(&chartEdbMappingList)
-	if err != nil {
-		errmsg = "获取指标关联图表信息失败:Err:" + err.Error()
-		return
-	}
-	replaceChartTotal = len(chartEdbMappingList)
-
-	for _, mv := range chartEdbMappingList {
-		//获取图表所有指标信息
-		chartEdbList := make([]*ChartEdbInfoMapping, 0)
-		csql := `SELECT * FROM chart_edb_mapping WHERE chart_info_id=?`
-		_, err = to.Raw(csql, mv.ChartInfoId).QueryRows(&chartEdbList)
+	{
+		chartEdbMappingList := make([]*ChartEdbInfoMapping, 0)
+		csql := `SELECT * FROM chart_edb_mapping WHERE edb_info_id=?`
+		_, err = to.Raw(csql, oldEdbInfo.EdbInfoId).QueryRows(&chartEdbMappingList)
 		if err != nil {
-			errmsg = "获取图表所有指标信息失败:Err:" + err.Error()
+			errmsg = "获取指标关联图表信息失败:Err:" + err.Error()
 			return
 		}
-		var minData, maxData float64
-		minData = newEdbInfo.MinValue
-		maxData = newEdbInfo.MaxValue
-
-		for _, cv := range chartEdbList {
-			if mv.IsAxis == cv.IsAxis {
-				if minData > cv.MinData {
-					minData = cv.MinData
+		replaceChartTotal = len(chartEdbMappingList)
+
+		if len(chartEdbMappingList) > 0 {
+			chartInfoIdList := make([]string, 0)
+			for _, mv := range chartEdbMappingList {
+				//获取图表所有指标信息
+				chartEdbList := make([]*ChartEdbInfoMapping, 0)
+				csql := `SELECT * FROM chart_edb_mapping WHERE chart_info_id=?`
+				_, err = to.Raw(csql, mv.ChartInfoId).QueryRows(&chartEdbList)
+				if err != nil {
+					errmsg = "获取图表所有指标信息失败:Err:" + err.Error()
+					return
 				}
-				if maxData < cv.MaxData {
-					maxData = cv.MaxData
+				var minData, maxData float64
+				minData = newEdbInfo.MinValue
+				maxData = newEdbInfo.MaxValue
+
+				for _, cv := range chartEdbList {
+					if mv.IsAxis == cv.IsAxis {
+						if minData > cv.MinData {
+							minData = cv.MinData
+						}
+						if maxData < cv.MaxData {
+							maxData = cv.MaxData
+						}
+					}
+				}
+				//修改图表关联指标
+				rsql := ` UPDATE chart_edb_mapping SET edb_info_id=?,max_data=?,min_data=?,modify_time=NOW() WHERE chart_edb_mapping_id=? `
+				_, err = to.Raw(rsql, newEdbInfo.EdbInfoId, maxData, minData, mv.ChartEdbMappingId).Exec()
+				if err != nil {
+					errmsg = "更新图库指标信息失败:Err:" + err.Error()
+					return
 				}
+
+				chartInfoIdList = append(chartInfoIdList, fmt.Sprint(mv.ChartInfoId))
 			}
+			logMsg += `涉及到的图表id:` + strings.Join(chartInfoIdList, ",") + ";"
 		}
-		//修改图表关联指标
-		rsql := ` UPDATE chart_edb_mapping SET edb_info_id=?,max_data=?,min_data=?,modify_time=NOW() WHERE chart_edb_mapping_id=? `
-		_, err = to.Raw(rsql, newEdbInfo.EdbInfoId, maxData, minData, mv.ChartEdbMappingId).Exec()
+	}
+
+	//替换计算指标
+	{
+		//获取所有包含的计算指标
+		mappingList := make([]*EdbInfoCalculateMapping, 0)
+		msql := ` SELECT * FROM edb_info_calculate_mapping WHERE from_edb_info_id=?  GROUP BY edb_info_id `
+		_, err = to.Raw(msql, oldEdbInfo.EdbInfoId).QueryRows(&mappingList)
 		if err != nil {
-			errmsg = "更新图库指标信息失败:Err:" + err.Error()
+			errmsg = "获取计算指标关联基础指标信息失败:Err:" + err.Error()
 			return
 		}
+		replaceCalculateTotal = len(mappingList)
+		//计算指标
+		if len(mappingList) > 0 {
+			edbInfoIdList := make([]string, 0)
+			for _, mv := range mappingList {
+				//如果即将替换的指标与当前指标id一致,那么就退出当前循环,进入下一循环
+				if mv.EdbInfoId == newEdbInfo.EdbInfoId {
+					continue
+				}
+				//替换原指标
+				msql := `UPDATE edb_info_calculate_mapping SET from_edb_info_id=?,from_edb_code=?,from_edb_name=?,from_source=?,from_source_name=? WHERE edb_info_calculate_mapping_id=? `
+				_, err = to.Raw(msql, newEdbInfo.EdbInfoId, newEdbInfo.EdbCode, newEdbInfo.EdbName, newEdbInfo.Source, newEdbInfo.SourceName, mv.EdbInfoCalculateMappingId).Exec()
+				if err != nil {
+					return
+				}
+				relationEdbInfoIdList = append(relationEdbInfoIdList, mv.EdbInfoId)
+
+				edbInfoIdList = append(edbInfoIdList, fmt.Sprint(mv.EdbInfoId))
+			}
+			logMsg += `涉及到的指标id:` + strings.Join(edbInfoIdList, ",") + ";"
+		}
 	}
-	//替换计算指标
-	//获取所有包含的计算指标
-	mappingList = make([]*EdbInfoCalculateMapping, 0)
-	msql := ` SELECT * FROM edb_info_calculate_mapping WHERE from_edb_info_id=?  GROUP BY edb_info_id `
-	_, err = to.Raw(msql, oldEdbInfo.EdbInfoId).QueryRows(&mappingList)
-	if err != nil {
-		errmsg = "获取计算指标关联基础指标信息失败:Err:" + err.Error()
-		return
-	}
-	replaceCalculateTotal = len(mappingList)
-	//计算指标
-	for _, mv := range mappingList {
-		//如果即将替换的指标与当前指标id一致,那么就退出当前循环,进入下一循环
-		if mv.EdbInfoId == newEdbInfo.EdbInfoId {
-			continue
+
+	// 替换预测指标中的来源指标
+	{
+		//获取所有包含的计算指标
+		predictEdbConfList := make([]*PredictEdbConf, 0)
+		msql := ` SELECT * FROM predict_edb_conf WHERE source_edb_info_id=?  GROUP BY predict_edb_info_id `
+		_, err = to.Raw(msql, oldEdbInfo.EdbInfoId).QueryRows(&predictEdbConfList)
+		if err != nil {
+			errmsg = "获取关联的预测指标信息失败:Err:" + err.Error()
+			return
 		}
-		//替换原指标
-		msql := `UPDATE edb_info_calculate_mapping SET from_edb_info_id=?,from_edb_code=?,from_edb_name=?,from_source=?,from_source_name=? WHERE edb_info_calculate_mapping_id=? `
-		_, err = to.Raw(msql, newEdbInfo.EdbInfoId, newEdbInfo.EdbCode, newEdbInfo.EdbName, newEdbInfo.Source, newEdbInfo.SourceName, mv.EdbInfoCalculateMappingId).Exec()
+		replaceCalculateTotal += len(predictEdbConfList)
+
+		//替换预测指标的来源指标
+		msql = `UPDATE predict_edb_conf SET source_edb_info_id=? WHERE source_edb_info_id=? `
+		_, err = to.Raw(msql, newEdbInfo.EdbInfoId, oldEdbInfo.EdbInfoId).Exec()
 		if err != nil {
 			return
 		}
+
+		if len(predictEdbConfList) > 0 {
+			edbInfoIdList := make([]string, 0)
+			for _, v := range predictEdbConfList {
+				relationEdbInfoIdList = append(relationEdbInfoIdList, v.PredictEdbInfoId)
+				edbInfoIdList = append(edbInfoIdList, fmt.Sprint(v.PredictEdbInfoId))
+			}
+			logMsg += `涉及到的预测指标id:` + strings.Join(edbInfoIdList, ",") + ";"
+		}
 	}
 
 	return

+ 19 - 265
services/data/edb_info.go

@@ -1167,271 +1167,6 @@ func RefreshManualData(edbCode string) {
 	return
 }
 
-// EdbInfoReplace 替换指标v2版本(更换时间:2022年01月05日15:33:42)
-func EdbInfoReplace(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, sysAdminId int, sysAdminRealName string) (replaceChartTotal, replaceCalculateTotal int, err error) {
-	defer func() {
-		if err != nil {
-			fmt.Println("ERR:", err.Error())
-		}
-	}()
-	mappingList, replaceChartTotal, replaceCalculateTotal, err := data_manage.ReplaceChartEdb(oldEdbInfo, newEdbInfo)
-	if err != nil {
-		return
-	}
-	//更新指标
-	err = replaceRelationEdbInfo(mappingList, oldEdbInfo, newEdbInfo, sysAdminId, sysAdminRealName)
-	return
-}
-
-// replaceRelationEdbInfo 刷新指标
-func replaceRelationEdbInfo(mappingList []*data_manage.EdbInfoCalculateMapping, oldEdbInfo, newEdbInfo *data_manage.EdbInfo, sysAdminId int, sysAdminRealName string) (err error) {
-	errmsg := ``
-	defer func() {
-		if errmsg != "" {
-			fmt.Println("errmsg:" + errmsg)
-		}
-		if err != nil && errmsg != "" {
-			go alarm_msg.SendAlarmMsg("替换关联指标失败提醒,errmsg:"+errmsg, 3)
-			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"替换指标失败提醒", "errmsg:"+errmsg, utils.EmailSendToUsers)
-		}
-	}()
-	//获取计算指标关联指标
-	allMappingList := make([]*data_manage.EdbInfoCalculateMapping, 0)
-	allMapping := make(map[int]int)
-	tmpMapping := make(map[int]int)
-	for _, v := range mappingList {
-		if _, ok := allMapping[v.EdbInfoId]; !ok {
-			allMappingList = append(allMappingList, v)
-		}
-		newList, _ := data_manage.GetAllCalculateV2(v.EdbInfoId, newEdbInfo.EdbInfoId, tmpMapping)
-		for _, nv := range newList {
-			if _, ok := allMapping[v.EdbInfoId]; !ok {
-				allMappingList = append(allMappingList, nv)
-			}
-			allMapping[v.EdbInfoId] = v.EdbInfoId
-		}
-		allMapping[v.EdbInfoId] = v.EdbInfoId
-	}
-	for mk, mv := range allMappingList { //原指标关联的所有计算指标
-		fmt.Println("mk/mv", mk, mv)
-		//重新计算计算指标
-		{
-			edbInfo, tmpErr := data_manage.GetEdbInfoById(mv.EdbInfoId) //计算指标
-			err = tmpErr
-			if err != nil {
-				if err.Error() == utils.ErrNoRow() {
-					errmsg = "计算指标已被删除"
-				} else {
-					errmsg = "获取计算指标失败:err:" + err.Error()
-				}
-				return
-			}
-
-			fromEdbInfoList, tmpErr := data_manage.GetEdbInfoCalculateDetail(mv.EdbInfoId, edbInfo.Source)
-			err = tmpErr
-			if err != nil {
-				errmsg = "获取计算指标失败:err:" + err.Error()
-				return
-			}
-			if len(fromEdbInfoList) <= 0 {
-				errmsg = "计算指标所依赖指标不存在"
-				err = fmt.Errorf("计算指标所依赖指标不存在")
-				return
-			}
-			fromEdbInfoItem := fromEdbInfoList[0]
-			if fromEdbInfoItem == nil {
-				return
-			}
-			fromEdbInfo, tmpErr := data_manage.GetEdbInfoById(fromEdbInfoItem.FromEdbInfoId)
-			err = tmpErr
-			if err != nil {
-				errmsg = "获取计算指标 来源指标失败:err:" + err.Error()
-				return
-			}
-			edbCode := edbInfo.EdbCode
-			//uniqueCode := edbInfo.UniqueCode
-			sourName := edbInfo.SourceName
-			source := edbInfo.Source
-			edbInfoId := edbInfo.EdbInfoId
-
-			req := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
-				AdminId:          sysAdminId,
-				AdminName:        sysAdminRealName,
-				EdbInfoId:        edbInfoId,
-				EdbName:          edbInfo.EdbName,
-				Frequency:        edbInfo.Frequency,
-				Unit:             edbInfo.Unit,
-				ClassifyId:       edbInfo.ClassifyId,
-				Formula:          edbInfo.CalculateFormula, //N数值移动平均计算、环比值、环差值
-				FromEdbInfoId:    fromEdbInfoList[0].FromEdbInfoId,
-				Source:           edbInfo.Source,
-				MoveType:         edbInfo.MoveType,
-				MoveFrequency:    edbInfo.MoveFrequency,
-				CalculateFormula: edbInfo.CalculateFormula,
-				EdbInfoIdArr:     nil,
-			}
-
-			if source == utils.DATA_SOURCE_CALCULATE_ZJPJ {
-				edbInfoIdArr := make([]data_manage.EdbInfoFromTag, 0)
-				//A指标
-				aFromEdbInfoId := fromEdbInfoList[0].FromEdbInfoId
-				//找出需要替换的指标
-				{
-					for _, v := range fromEdbInfoList {
-						if v.FromTag == "A" {
-							if v.FromEdbInfoId == oldEdbInfo.EdbInfoId {
-								aFromEdbInfoId = newEdbInfo.EdbInfoId
-							} else {
-								aFromEdbInfoId = fromEdbInfoList[0].FromEdbInfoId
-							}
-						}
-						if v.FromTag == "B" {
-							if v.FromEdbInfoId == oldEdbInfo.EdbInfoId {
-								edbInfoIdArr = append(edbInfoIdArr, data_manage.EdbInfoFromTag{
-									EdbInfoId: newEdbInfo.EdbInfoId,
-									FromTag:   v.FromTag,
-								})
-							} else {
-								edbInfoIdArr = append(edbInfoIdArr, data_manage.EdbInfoFromTag{
-									EdbInfoId: v.FromEdbInfoId,
-									FromTag:   v.FromTag,
-								})
-							}
-						}
-					}
-				}
-
-				req.FromEdbInfoId = aFromEdbInfoId
-				req.EdbInfoIdArr = edbInfoIdArr
-
-				sourName = "直接拼接"
-				if len(req.EdbInfoIdArr) != 1 {
-					errmsg = "请传入拼接日期之后的指标"
-					err = fmt.Errorf("请传入拼接日期之后的指标")
-					return
-				}
-
-				secondEdbInfoReq := req.EdbInfoIdArr[0]
-				secondEdbInfo, tmpErr := data_manage.GetEdbInfoById(secondEdbInfoReq.EdbInfoId)
-				err = tmpErr
-				if err != nil {
-					errmsg = "获取拼接日期之后的指标信息失败:Err:" + err.Error()
-					err = fmt.Errorf("获取拼接日期之后的指标信息失败:Err:" + err.Error())
-					return
-				}
-
-				if fromEdbInfo.EdbInfoId == secondEdbInfo.EdbInfoId {
-					errmsg = "两个指标不允许为同一个"
-					err = fmt.Errorf("两个指标不允许为同一个")
-					return
-				}
-			} else if source == utils.DATA_SOURCE_CALCULATE_LJZTBPJ { //累计值同比拼接
-				edbInfoIdArr := make([]data_manage.EdbInfoFromTag, 0)
-				//A指标
-				aFromEdbInfoId := fromEdbInfoList[0].FromEdbInfoId
-				// 找出需要替换的指标
-				{
-					for _, v := range fromEdbInfoList {
-						if v.FromTag == "A" {
-							if v.FromEdbInfoId == oldEdbInfo.EdbInfoId {
-								aFromEdbInfoId = newEdbInfo.EdbInfoId
-							} else {
-								aFromEdbInfoId = fromEdbInfoList[0].FromEdbInfoId
-							}
-						}
-						if v.FromTag == "B" {
-							if v.FromEdbInfoId == oldEdbInfo.EdbInfoId {
-								edbInfoIdArr = append(edbInfoIdArr, data_manage.EdbInfoFromTag{
-									EdbInfoId: newEdbInfo.EdbInfoId,
-									FromTag:   v.FromTag,
-								})
-							} else {
-								edbInfoIdArr = append(edbInfoIdArr, data_manage.EdbInfoFromTag{
-									EdbInfoId: v.FromEdbInfoId,
-									FromTag:   v.FromTag,
-								})
-							}
-						}
-					}
-				}
-
-				req.FromEdbInfoId = aFromEdbInfoId
-				req.EdbInfoIdArr = edbInfoIdArr
-
-				sourName = "累计值同比拼接"
-
-				if fromEdbInfo.Frequency != "月度" {
-					errmsg = "累计值同比拼接,待拼接指标只能筛选月度指标"
-					err = fmt.Errorf("累计值同比拼接,待拼接指标只能筛选月度指标")
-					return
-				}
-				if len(req.EdbInfoIdArr) != 1 {
-					errmsg = "请传入同比值指标"
-					err = fmt.Errorf("请传入同比值指标")
-					return
-				}
-
-				secondEdbInfoReq := req.EdbInfoIdArr[0]
-				tbzEdbInfo, tmpErr := data_manage.GetEdbInfoById(secondEdbInfoReq.EdbInfoId)
-				err = tmpErr
-				if err != nil {
-					errmsg = "获取同比值指标信息失败:Err:" + err.Error()
-					err = fmt.Errorf("获取同比值指标信息失败:Err:" + err.Error())
-					return
-				}
-				if tbzEdbInfo.Source != utils.DATA_SOURCE_CALCULATE_TBZ {
-					errmsg = "指标必须是传入同比值指标类型"
-					err = fmt.Errorf("指标必须是传入同比值指标类型")
-					return
-				}
-				if tbzEdbInfo.Frequency != "月度" {
-					errmsg = "同比值指标只能筛选月度指标"
-					err = fmt.Errorf("同比值指标只能筛选月度指标")
-					return
-				}
-
-				if fromEdbInfo.EdbInfoId == tbzEdbInfo.EdbInfoId {
-					errmsg = "两个指标不允许为同一个"
-					err = fmt.Errorf("两个指标不允许为同一个")
-					return
-				}
-			} else {
-				errmsg = "无效计算方式,source:" + strconv.Itoa(source)
-				err = fmt.Errorf("无效计算方式,source:" + strconv.Itoa(source))
-				return
-			}
-
-			// 调用指标库去更新
-			reqJson, tmpErr := json.Marshal(req)
-			if tmpErr == nil {
-				respItem, tmpErr := EditEdbCalculateData(string(reqJson))
-				if err != nil {
-					err = tmpErr
-					return
-				}
-				if respItem.Ret != 200 {
-					err = errors.New("修改失败")
-					return
-				}
-			} else {
-				err = tmpErr
-			}
-
-			maxAndMinItem, tmpErr := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
-			err = tmpErr
-			if err != nil && err.Error() != utils.ErrNoRow() {
-				errmsg = "生成" + sourName + "失败,GetEdbInfoMaxAndMinInfo Err:" + err.Error()
-				err = fmt.Errorf("生成" + sourName + "失败,GetEdbInfoMaxAndMinInfo Err:" + err.Error())
-				return
-			}
-			if maxAndMinItem != nil {
-				err = data_manage.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
-			}
-		}
-	}
-	return
-}
-
 // 获取频度的英文版
 func GetFrequencyEn(frequency string) (frequencyEn string) {
 	switch frequency {
@@ -3084,6 +2819,25 @@ func GetEdbChartAdminList(source int) (list []int, err error) {
 	return
 }
 
+// EdbInfoReplace 替换指标v2版本(更换时间:2022年01月05日15:33:42)
+func EdbInfoReplace(oldEdbInfo, newEdbInfo *data_manage.EdbInfo, sysAdminId int, sysAdminRealName string) (replaceChartTotal, replaceCalculateTotal int, err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("ERR:", err.Error())
+		}
+	}()
+
+	// 替换关联表中的source_edb_info_id
+	relationEdbInfoIdList, replaceChartTotal, replaceCalculateTotal, err := data_manage.ReplaceChartEdb(oldEdbInfo, newEdbInfo)
+	if err != nil {
+		return
+	}
+
+	// 更新所有的关联指标
+	err, _ = EdbInfoRefreshAllFromBaseV3(relationEdbInfoIdList, true, true)
+	return
+}
+
 // GetEdbMenuTreeRecursive 递归指标库菜单树
 func GetEdbMenuTreeRecursive(list []*data_manage.EdbClassifyItems, parentId int) []*data_manage.EdbChartClassify {
 	res := make([]*data_manage.EdbChartClassify, 0)