Browse Source

fix:指标、图表收藏分类名称不允许重复

Roc 2 months ago
parent
commit
524ff933b6

+ 32 - 31
controllers/data_manage/collect_chart_classify.go

@@ -178,22 +178,22 @@ func (this *ChartCollectClassifyController) Add() {
 	}
 	classifyOb := new(data_manage.ChartCollectClassify)
 
-	// 校验分类名称
-	//{
-	//	cond := fmt.Sprintf(" AND %s = ? AND %s = ?", classifyOb.Cols().ParentId, classifyOb.Cols().ClassifyName)
-	//	pars := make([]interface{}, 0)
-	//	pars = append(pars, req.ParentId, req.ClassifyName)
-	//	count, e := classifyOb.GetCountByCondition(cond, pars)
-	//	if e != nil {
-	//		br.Msg = "操作失败"
-	//		br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
-	//		return
-	//	}
-	//	if count > 0 {
-	//		br.Msg = "分类名称已存在"
-	//		return
-	//	}
-	//}
+	//校验分类名称
+	{
+		cond := fmt.Sprintf(" AND %s = ? AND %s = ? AND %s = ? ", classifyOb.Cols().ParentId, classifyOb.Cols().ClassifyName, classifyOb.Cols().SysUserId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.ParentId, req.ClassifyName, this.SysUser.AdminId)
+		count, e := classifyOb.GetCountByCondition(cond, pars)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
+			return
+		}
+		if count > 0 {
+			br.Msg = "分类名称已存在"
+			return
+		}
+	}
 
 	// 层级路径
 	var levelPath string
@@ -300,21 +300,22 @@ func (this *ChartCollectClassifyController) Edit() {
 	}
 
 	// 校验分类名称
-	//{
-	//	cond := fmt.Sprintf(" AND %s <> ? AND %s = ?", classifyOb.Cols().PrimaryId, classifyOb.Cols().ClassifyName)
-	//	pars := make([]interface{}, 0)
-	//	pars = append(pars, req.ClassifyId, req.ClassifyName)
-	//	count, e := classifyOb.GetCountByCondition(cond, pars)
-	//	if e != nil {
-	//		br.Msg = "操作失败"
-	//		br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
-	//		return
-	//	}
-	//	if count > 0 {
-	//		br.Msg = "分类名称已存在"
-	//		return
-	//	}
-	//}
+	{
+		cond := fmt.Sprintf(" AND %s != ?  AND %s = ? AND %s = ? AND %s = ? ", classifyOb.Cols().PrimaryId, classifyOb.Cols().ParentId, classifyOb.Cols().ClassifyName, classifyOb.Cols().SysUserId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, classifyItem.ChartCollectClassifyId, classifyItem.ParentId, req.ClassifyName, this.SysUser.AdminId)
+		count, e := classifyOb.GetCountByCondition(cond, pars)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
+			return
+		}
+		if count > 0 {
+			br.Msg = "分类名称已存在"
+			return
+		}
+	}
+
 	classifyItem.ClassifyName = req.ClassifyName
 	classifyItem.ModifyTime = time.Now().Local()
 	updateCols := []string{classifyOb.Cols().ClassifyName, classifyOb.Cols().ModifyTime}

+ 31 - 30
controllers/data_manage/collect_edb_classify.go

@@ -180,21 +180,21 @@ func (this *EdbCollectClassifyController) Add() {
 	classifyOb := new(data_manage.EdbCollectClassify)
 
 	// 校验分类名称
-	//{
-	//	cond := fmt.Sprintf(" AND %s = ? AND %s = ?", classifyOb.Cols().ParentId, classifyOb.Cols().ClassifyName)
-	//	pars := make([]interface{}, 0)
-	//	pars = append(pars, req.ParentId, req.ClassifyName)
-	//	count, e := classifyOb.GetCountByCondition(cond, pars)
-	//	if e != nil {
-	//		br.Msg = "操作失败"
-	//		br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
-	//		return
-	//	}
-	//	if count > 0 {
-	//		br.Msg = "分类名称已存在"
-	//		return
-	//	}
-	//}
+	{
+		cond := fmt.Sprintf(" AND %s = ? AND %s = ? AND %s = ? ", classifyOb.Cols().ParentId, classifyOb.Cols().ClassifyName, classifyOb.Cols().SysUserId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.ParentId, req.ClassifyName, this.SysUser.AdminId)
+		count, e := classifyOb.GetCountByCondition(cond, pars)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
+			return
+		}
+		if count > 0 {
+			br.Msg = "分类名称已存在"
+			return
+		}
+	}
 
 	// 层级路径
 	var levelPath string
@@ -301,21 +301,22 @@ func (this *EdbCollectClassifyController) Edit() {
 	}
 
 	// 校验分类名称
-	//{
-	//	cond := fmt.Sprintf(" AND %s <> ? AND %s = ?", classifyOb.Cols().PrimaryId, classifyOb.Cols().ClassifyName)
-	//	pars := make([]interface{}, 0)
-	//	pars = append(pars, req.ClassifyId, req.ClassifyName)
-	//	count, e := classifyOb.GetCountByCondition(cond, pars)
-	//	if e != nil {
-	//		br.Msg = "操作失败"
-	//		br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
-	//		return
-	//	}
-	//	if count > 0 {
-	//		br.Msg = "分类名称已存在"
-	//		return
-	//	}
-	//}
+	{
+		cond := fmt.Sprintf(" AND %s != ?  AND %s = ? AND %s = ? AND %s = ? ", classifyOb.Cols().PrimaryId, classifyOb.Cols().ParentId, classifyOb.Cols().ClassifyName, classifyOb.Cols().SysUserId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, classifyItem.EdbCollectClassifyId, classifyItem.ParentId, req.ClassifyName, this.SysUser.AdminId)
+		count, e := classifyOb.GetCountByCondition(cond, pars)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = fmt.Sprintf("获取分类名称重复数失败, %v", e)
+			return
+		}
+		if count > 0 {
+			br.Msg = "分类名称已存在"
+			return
+		}
+	}
+
 	classifyItem.ClassifyName = req.ClassifyName
 	classifyItem.ModifyTime = time.Now().Local()
 	updateCols := []string{classifyOb.Cols().ClassifyName, classifyOb.Cols().ModifyTime}

+ 24 - 5
models/data_manage/edb_classify.go

@@ -47,13 +47,26 @@ type AddEdbClassifyReq struct {
 // @author: Roc
 // @datetime 2024-04-17 14:12:22
 // @param classifyName string
+// @param notClassifyId int 忽略的分类id
 // @param parentId int
 // @param classifyType uint8
 // @return count int
 // @return err error
-func GetEdbClassifyCount(classifyName string, parentId, sysUserId int, classifyType uint8) (count int, err error) {
-	sql := `SELECT COUNT(1) AS count FROM edb_classify WHERE parent_id=? AND classify_name=? AND classify_type = ? AND sys_user_id = ?  `
-	err = global.DmSQL["data"].Raw(sql, parentId, classifyName, classifyType, sysUserId).Scan(&count).Error
+func GetEdbClassifyCount(classifyName string, notClassifyId, parentId, sysUserId int, classifyType uint8) (count int, err error) {
+	sql := `SELECT COUNT(1) AS count FROM edb_classify WHERE parent_id=? AND classify_name=? AND classify_type = ? `
+	pars := make([]interface{}, 0)
+	pars = append(pars, parentId, classifyName, classifyType)
+	if classifyType != utils.EdbClassifyTypeBase {
+		sql += " AND sys_user_id = ?"
+		pars = append(pars, sysUserId)
+	}
+
+	if notClassifyId > 0 {
+		sql += " AND classify_id != ?"
+		pars = append(pars, notClassifyId)
+	}
+
+	err = global.DmSQL["data"].Raw(sql, pars...).Scan(&count).Error
 
 	return
 }
@@ -68,8 +81,14 @@ func GetEdbClassifyCount(classifyName string, parentId, sysUserId int, classifyT
 // @return count int
 // @return err error
 func GetEdbClassifyEnCount(classifyNameEn string, parentId, sysUserId int, classifyType uint8) (count int, err error) {
-	sql := `SELECT COUNT(1) AS count FROM edb_classify WHERE parent_id=? AND classify_name_en = ? AND classify_type = ? AND sys_user_id = ? `
-	err = global.DmSQL["data"].Raw(sql, parentId, classifyNameEn, classifyType, sysUserId).Scan(&count).Error
+	sql := `SELECT COUNT(1) AS count FROM edb_classify WHERE parent_id=? AND classify_name_en = ? AND classify_type = ? `
+	pars := make([]interface{}, 0)
+	pars = append(pars, parentId, classifyNameEn, classifyType)
+	if classifyType != utils.EdbClassifyTypeBase {
+		sql += " AND sys_user_id = ?"
+		pars = append(pars, sysUserId)
+	}
+	err = global.DmSQL["data"].Raw(sql, pars...).Scan(&count).Error
 
 	return
 }

+ 12 - 12
services/data/edb_classify.go

@@ -303,7 +303,7 @@ func AddEdbClassify(classifyName string, parentId, level int, classifyType uint8
 		case utils.EnLangVersion:
 			count, err = data_manage.GetEdbClassifyEnCount(classifyName, parentId, sysUserId, classifyType)
 		default:
-			count, err = data_manage.GetEdbClassifyCount(classifyName, parentId, sysUserId, classifyType)
+			count, err = data_manage.GetEdbClassifyCount(classifyName, 0, parentId, sysUserId, classifyType)
 		}
 		if err != nil {
 			errMsg = `判断名称是否已存在失败`
@@ -481,17 +481,17 @@ func EditEdbClassify(classifyId int, classifyName, lang string, sysUser *system.
 		}
 
 		//// 判断名称是否已存在
-		//count, tmpErr := data_manage.GetEdbClassifyCount(classifyName, item.ParentId, sysUser.AdminId, item.ClassifyType)
-		//if tmpErr != nil {
-		//	err = tmpErr
-		//	errMsg = "判断名称是否已存在失败"
-		//	return
-		//}
-		//if count > 0 {
-		//	errMsg = "分类名称已存在,请重新输入"
-		//	err = errors.New(errMsg)
-		//	return
-		//}
+		count, tmpErr := data_manage.GetEdbClassifyCount(classifyName, item.ClassifyId, item.ParentId, sysUser.AdminId, item.ClassifyType)
+		if tmpErr != nil {
+			err = tmpErr
+			errMsg = "判断名称是否已存在失败"
+			return
+		}
+		if count > 0 {
+			errMsg = "分类名称已存在,请重新输入"
+			err = errors.New(errMsg)
+			return
+		}
 
 		// 旧完整路径
 		oldClassifyNamePath = item.ClassifyNamePath