Parcourir la source

fix:指标允许重名

Roc il y a 15 heures
Parent
commit
6eb8714858

+ 7 - 27
controllers/data_manage/chart_info.go

@@ -552,8 +552,6 @@ func (this *ChartInfoController) ChartInfoBaseEdit() {
 		return
 	}
 
-	var edbCondition string
-	var edbPars []interface{}
 	for _, v := range req.ChartEdbInfoList {
 		edbInfoId := v.EdbInfoId
 		edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
@@ -574,34 +572,16 @@ func (this *ChartInfoController) ChartInfoBaseEdit() {
 			return
 		}
 
-		//判断指标名称是否重复
+		// 根据指标名称和指标ID校验库中是否还存在其他同名指标
 		if v.EdbName != "" {
-			edbCondition = ""
-			edbPars = make([]interface{}, 0)
-
-			edbCondition += " AND edb_info_id<>? "
-			edbPars = append(edbPars, edbInfo.EdbInfoId)
-
-			switch this.Lang {
-			case utils.EnLangVersion:
-				edbCondition += " AND edb_name_en =? "
-			default:
-				edbCondition += " AND edb_name =? "
-			}
-
-			edbPars = append(edbPars, v.EdbName)
-
-			edbExist, err := data_manage.GetEdbInfoByCondition(edbCondition, edbPars)
+			existEdbName, err := data.CheckExistByEdbNameAndEdbInfoId(utils.EDB_INFO_TYPE, edbInfo.EdbInfoId, this.SysUser.AdminId, v.EdbName, this.Lang)
 			if err != nil {
-				if !utils.IsErrNoRow(err) {
-					br.Msg = "判断英文指标名称是否存在失败"
-					br.ErrMsg = "判断英文指标名称是否存在失败,Err:" + err.Error()
-					return
-				}
+				br.Msg = "判断指标名称是否存在失败"
+				br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
+				return
 			}
-
-			if err == nil && edbExist.EdbInfoId > 0 {
-				br.Msg = edbExist.EdbName + ":" + v.EdbName + "指标名称已存在"
+			if existEdbName {
+				br.Msg = v.EdbName + ":" + v.EdbName + "指标名称已存在"
 				br.ErrMsg = "指标名称已存在,请重新填写"
 				br.IsSendEmail = false
 				return

+ 10 - 37
controllers/data_manage/edb_info.go

@@ -916,27 +916,15 @@ func (this *EdbInfoController) EdbInfoEdit() {
 		return
 	}
 
-	//判断指标名称是否存在
-	var condition string
-	var pars []interface{}
-
-	condition += " AND edb_info_id<>? "
-	pars = append(pars, req.EdbInfoId)
-
-	//condition += " AND source=? "
-	//pars = append(pars, edbInfo.Source)
-
 	updateCols := make([]string, 0)
 	switch this.Lang {
 	case utils.EnLangVersion:
-		condition += " AND edb_name_en = ? "
 		edbInfo.EdbNameEn = req.EdbName
 		edbInfo.Frequency = req.Frequency
 		edbInfo.UnitEn = req.Unit
 		edbInfo.ClassifyId = req.ClassifyId
 		updateCols = append(updateCols, "EdbNameEn", "Frequency", "UnitEn", "ClassifyId")
 	default:
-		condition += " AND edb_name=? "
 		edbInfo.EdbName = req.EdbName
 		edbInfo.EdbNameSource = req.EdbName
 		edbInfo.Frequency = req.Frequency
@@ -944,16 +932,15 @@ func (this *EdbInfoController) EdbInfoEdit() {
 		edbInfo.ClassifyId = req.ClassifyId
 		updateCols = append(updateCols, "EdbName", "EdbNameSource", "Frequency", "Unit", "ClassifyId")
 	}
-	pars = append(pars, req.EdbName)
 
-	count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+	// 根据指标名称和指标ID校验库中是否还存在其他同名指标
+	existEdbName, err := data.CheckExistByEdbNameAndEdbInfoId(utils.EDB_INFO_TYPE, req.EdbInfoId, this.SysUser.AdminId, req.EdbName, this.Lang)
 	if err != nil {
 		br.Msg = "判断指标名称是否存在失败"
 		br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
 		return
 	}
-
-	if count > 0 {
+	if existEdbName {
 		br.Msg = "指标名称已存在,请重新填写"
 		br.ErrMsg = "指标名称已存在,请重新填写"
 		br.IsSendEmail = false
@@ -1197,44 +1184,30 @@ func (this *EdbInfoController) EdbInfoBaseEdit() {
 
 	if req.EdbName != "" {
 		//判断指标名称是否存在
-		var condition string
-		var pars []interface{}
-
-		condition += " AND edb_info_id<>? "
-		pars = append(pars, req.EdbInfoId)
-
-		/*condition += " AND source=? "
-		pars = append(pars, edbInfo.Source)*/
 
 		switch this.Lang {
 		case utils.EnLangVersion:
-			condition += " AND edb_name_en = ? "
 			edbInfo.EdbNameEn = req.EdbName
 			edbInfo.UnitEn = req.Unit
 			edbInfo.ModifyTime = time.Now()
 			updateCols = append(updateCols, "EdbNameEn", "UnitEn", "ModifyTime")
 		default:
-			condition += " AND edb_name = ? "
 			edbInfo.EdbName = req.EdbName
 			edbInfo.EdbNameSource = req.EdbName
 			edbInfo.Unit = req.Unit
 			edbInfo.ModifyTime = time.Now()
 			updateCols = append(updateCols, "EdbName", "EdbNameSource", "Unit", "ModifyTime")
 		}
-		pars = append(pars, req.EdbName)
 
-		edbExist, err := data_manage.GetEdbInfoByCondition(condition, pars)
+		existEdbName, err := data.CheckExistByEdbNameAndEdbInfoId(utils.EDB_INFO_TYPE, req.EdbInfoId, this.SysUser.AdminId, req.EdbName, this.Lang)
 		if err != nil {
-			if !utils.IsErrNoRow(err) {
-				br.Msg = "判断英文指标名称是否存在失败"
-				br.ErrMsg = "判断英文指标名称是否存在失败,Err:" + err.Error()
-				return
-			}
+			br.Msg = "判断指标名称是否存在失败"
+			br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
+			return
 		}
-
-		if err == nil && edbExist.EdbInfoId > 0 {
-			br.Msg = edbExist.EdbName + ":" + req.EdbName + "指标名称已存在"
-			br.ErrMsg = "英文指标名称已存在,请重新填写"
+		if existEdbName {
+			br.Msg = "指标名称已存在,请重新填写"
+			br.ErrMsg = "指标名称已存在,请重新填写"
 			br.IsSendEmail = false
 			return
 		}

+ 20 - 63
controllers/data_manage/edb_info_calculate.go

@@ -113,24 +113,20 @@ func (this *ChartInfoController) CalculateSave() {
 		req.EdbInfoIdArr = newEdbInfoIdArr
 	}
 
-	var condition string
-	var pars []interface{}
-	condition += " AND edb_name=? "
-	pars = append(pars, req.EdbName)
-
-	count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+	// 根据指标名称和指标ID校验库中是否还存在其他同名指标
+	existEdbName, err := data.CheckExistByEdbNameAndEdbInfoId(utils.EDB_INFO_TYPE, 0, this.SysUser.AdminId, req.EdbName, this.Lang)
 	if err != nil {
 		br.Msg = "判断指标名称是否存在失败"
 		br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
 		return
 	}
-
-	if count > 0 {
+	if existEdbName {
 		br.Msg = "指标名称已存在,请重新填写"
 		br.ErrMsg = "指标名称已存在,请重新填写"
 		br.IsSendEmail = false
 		return
 	}
+
 	//检验公式
 	var formulaStr string
 	var edbInfoIdBytes []string
@@ -419,22 +415,14 @@ func (this *ChartInfoController) CalculateEdit() {
 		req.EdbInfoIdArr = newEdbInfoIdArr
 	}
 
-	var condition string
-	var pars []interface{}
-	condition += " AND edb_name=? "
-	pars = append(pars, req.EdbName)
-
-	condition += " AND edb_info_id<>? "
-	pars = append(pars, req.EdbInfoId)
-
-	count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+	// 根据指标名称和指标ID校验库中是否还存在其他同名指标
+	existEdbName, err := data.CheckExistByEdbNameAndEdbInfoId(utils.EDB_INFO_TYPE, req.EdbInfoId, this.SysUser.AdminId, req.EdbName, this.Lang)
 	if err != nil {
 		br.Msg = "判断指标名称是否存在失败"
 		br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
 		return
 	}
-
-	if count > 0 {
+	if existEdbName {
 		br.Msg = "指标名称已存在,请重新填写"
 		br.ErrMsg = "指标名称已存在,请重新填写"
 		br.IsSendEmail = false
@@ -751,22 +739,14 @@ func (this *ChartInfoController) CalculateBatchEdit() {
 		return
 	}
 
-	var condition string
-	var pars []interface{}
-	condition += " AND edb_name=? "
-	pars = append(pars, req.EdbName)
-
-	condition += " AND edb_info_id<>? "
-	pars = append(pars, req.EdbInfoId)
-
-	count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+	// 根据指标名称和指标ID校验库中是否还存在其他同名指标
+	existEdbName, err := data.CheckExistByEdbNameAndEdbInfoId(utils.EDB_INFO_TYPE, req.EdbInfoId, this.SysUser.AdminId, req.EdbName, this.Lang)
 	if err != nil {
 		br.Msg = "判断指标名称是否存在失败"
 		br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
 		return
 	}
-
-	if count > 0 {
+	if existEdbName {
 		br.Msg = "指标名称已存在,请重新填写"
 		br.ErrMsg = "指标名称已存在,请重新填写"
 		br.IsSendEmail = false
@@ -1158,23 +1138,16 @@ func (this *ChartInfoController) AddPythonEdb() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-	// 判断指标名称是否重复
-	{
-		var condition string
-		var pars []interface{}
-		condition += " AND edb_name=? "
-		pars = append(pars, req.EdbName)
 
-		condition += " AND edb_info_id<>? "
-		pars = append(pars, req.EdbInfoId)
-
-		count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+	// 根据指标名称和指标ID校验库中是否还存在其他同名指标
+	{
+		existEdbName, err := data.CheckExistByEdbNameAndEdbInfoId(utils.EDB_INFO_TYPE, req.EdbInfoId, this.SysUser.AdminId, req.EdbName, this.Lang)
 		if err != nil {
 			br.Msg = "判断指标名称是否存在失败"
 			br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
 			return
 		}
-		if count > 0 {
+		if existEdbName {
 			br.Msg = "指标名称已存在,请重新填写"
 			br.ErrMsg = "指标名称已存在,请重新填写"
 			br.IsSendEmail = false
@@ -1262,23 +1235,15 @@ func (this *ChartInfoController) EditPythonEdb() {
 		return
 	}
 
-	// 判断指标名称是否重复
+	// 根据指标名称和指标ID校验库中是否还存在其他同名指标
 	{
-		var condition string
-		var pars []interface{}
-		condition += " AND edb_name=? "
-		pars = append(pars, req.EdbName)
-
-		condition += " AND edb_info_id<>? "
-		pars = append(pars, req.EdbInfoId)
-
-		count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+		existEdbName, err := data.CheckExistByEdbNameAndEdbInfoId(utils.EDB_INFO_TYPE, req.EdbInfoId, this.SysUser.AdminId, req.EdbName, this.Lang)
 		if err != nil {
 			br.Msg = "判断指标名称是否存在失败"
 			br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
 			return
 		}
-		if count > 0 {
+		if existEdbName {
 			br.Msg = "指标名称已存在,请重新填写"
 			br.ErrMsg = "指标名称已存在,请重新填写"
 			br.IsSendEmail = false
@@ -1467,23 +1432,15 @@ func (this *ChartInfoController) SaveAdjustEdbInfo() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-	// 判断指标名称是否重复
+	// 根据指标名称和指标ID校验库中是否还存在其他同名指标
 	{
-		var condition string
-		var pars []interface{}
-		condition += " AND edb_name=? "
-		pars = append(pars, req.EdbName)
-
-		condition += " AND edb_info_id<>? "
-		pars = append(pars, req.EdbInfoId)
-
-		count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+		existEdbName, err := data.CheckExistByEdbNameAndEdbInfoId(utils.EDB_INFO_TYPE, req.EdbInfoId, this.SysUser.AdminId, req.EdbName, this.Lang)
 		if err != nil {
 			br.Msg = "判断指标名称是否存在失败"
 			br.ErrMsg = "判断指标名称是否存在失败,Err:" + err.Error()
 			return
 		}
-		if count > 0 {
+		if existEdbName {
 			br.Msg = "指标名称已存在,请重新填写"
 			br.ErrMsg = "指标名称已存在,请重新填写"
 			br.IsSendEmail = false

+ 100 - 0
services/data/edb_info.go

@@ -2137,3 +2137,103 @@ func CheckEdbReferencedByOthers(edbInfoType int, edbInfoIdList, belongUserIdList
 	noReferenced = true
 	return
 }
+
+// CheckExistByEdbNameAndEdbInfoId
+// @Description: 根据指标名称和指标ID校验库中是否还存在其他同名指标
+// @author: Roc
+// @datetime 2024-04-18 15:01:44
+// @param edbInfoType int
+// @param edbInfoId int
+// @param edbName string
+// @param lang string
+// @return has bool
+// @return err error
+func CheckExistByEdbNameAndEdbInfoId(edbInfoType, edbInfoId, userId int, edbName, lang string) (has bool, err error) {
+	// 指标没有入库的情况
+	if edbInfoId == 0 {
+		return checkExistByEdbName(edbInfoType, userId, edbName, lang)
+	}
+
+	//指标已经入库的情况
+	return checkExistByEdbNameAndEdbInfoId(edbInfoType, userId, edbInfoId, edbName, lang)
+}
+
+// checkExistByEdbName
+// @Description: 根据指标名称校验该指标是否存在库中
+// @author: Roc
+// @datetime 2024-04-18 14:58:52
+// @param edbInfoType int
+// @param edbName string
+// @param lang string
+// @return has bool
+// @return err error
+func checkExistByEdbName(edbInfoType, userId int, edbName, lang string) (has bool, err error) {
+	var condition string
+	var pars []interface{}
+
+	condition += " AND edb_info_type=? AND sys_user_id=? "
+	pars = append(pars, edbInfoType, userId)
+
+	switch lang {
+	case utils.EnLangVersion:
+		condition += " AND edb_name_en = ? "
+	default:
+		condition += " AND edb_name=? "
+	}
+
+	pars = append(pars, edbName)
+
+	count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+	if err != nil {
+		return
+	}
+
+	if count > 0 {
+		has = true
+		return
+	}
+
+	return
+}
+
+// checkExistByEdbNameAndEdbInfoId
+// @Description: 根据指标名称和指标ID校验库中是否还存在其他同名指标
+// @author: Roc
+// @datetime 2024-04-18 15:00:19
+// @param edbInfoType int
+// @param edbInfoId int
+// @param edbName string
+// @param lang string
+// @return has bool
+// @return err error
+func checkExistByEdbNameAndEdbInfoId(edbInfoType, userId, edbInfoId int, edbName, lang string) (has bool, err error) {
+	var condition string
+	var pars []interface{}
+
+	condition += " AND edb_info_type=? AND sys_user_id=? "
+	pars = append(pars, edbInfoType, userId)
+
+	condition += " AND edb_info_id<>? "
+	pars = append(pars, edbInfoId)
+
+	switch lang {
+	case utils.EnLangVersion:
+		condition += " AND edb_name_en = ? "
+	default:
+		condition += " AND edb_name=? "
+	}
+
+	pars = append(pars, edbName)
+
+	count, err := data_manage.GetEdbInfoCountByCondition(condition, pars)
+	if err != nil {
+		return
+	}
+
+	if count > 0 {
+		has = true
+		return
+	}
+
+	return
+}