소스 검색

递归分类查找

xyxie 2 달 전
부모
커밋
320f6170ea
4개의 변경된 파일322개의 추가작업 그리고 65개의 파일을 삭제
  1. 93 16
      models/ai_predict_model/ai_predict_model_classify.go
  2. 66 15
      models/ai_summary/ai_summary_classify.go
  3. 97 19
      models/data_manage/edb_classify.go
  4. 66 15
      models/sandbox/sandbox_classify.go

+ 93 - 16
models/ai_predict_model/ai_predict_model_classify.go

@@ -303,26 +303,76 @@ func UpdateAiPredictModelClassifyChildByParentClassifyId(classifyIds []int, root
 // GetAiPredictModelIndexCountByClassifyId 获取目录下(包含子目录)的指标数量
 func GetAiPredictModelIndexCountByClassifyId(classifyId int) (count int, err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := `SELECT COUNT(1) AS count FROM ai_predict_model_index AS a
-				WHERE a.classify_id IN(
-				SELECT t.ai_predict_model_classify_id FROM 
-				(
-				SELECT rd.*
-				FROM (SELECT * FROM ai_predict_model_classify WHERE parent_id IS NOT NULL) rd,
-					 (SELECT @pid := ?) pd 
-				WHERE FIND_IN_SET(parent_id, @pid) > 0 
-				  AND @pid := CONCAT(@pid, ',', ai_predict_model_classify_id) 
-				UNION SELECT * FROM ai_predict_model_classify WHERE ai_predict_model_classify_id = @pid
-				)AS t
+	var pars []interface{}
+	var sql string
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE ai_predict_model_classify_cte (ai_predict_model_classify_id, parent_id) AS (
+			SELECT ai_predict_model_classify_id, parent_id
+			FROM ai_predict_model_classify
+			WHERE parent_id = ?
+			UNION ALL
+			SELECT c.ai_predict_model_classify_id, c.parent_id
+			FROM ai_predict_model_classify c
+			INNER JOIN ai_predict_model_classify_cte ct ON c.parent_id = ct.ai_predict_model_classify_id
+		)
+		SELECT COUNT(1) AS count
+		FROM ai_predict_model_index a
+			WHERE a.ai_predict_model_classify_id IN (
+				SELECT ai_predict_model_classify_id
+				FROM ai_predict_model_classify_cte
+				UNION
+				SELECT ai_predict_model_classify_id
+				FROM ai_predict_model_classify
+				WHERE ai_predict_model_classify_id = ?
 			)`
-	err = o.Raw(sql, classifyId).Scan(&count).Error
+		pars = append(pars, classifyId, classifyId, classifyId)
+	}else{
+		sql = `SELECT COUNT(1) AS count FROM ai_predict_model_index AS a
+			WHERE a.classify_id IN(
+			SELECT t.ai_predict_model_classify_id FROM 
+			(
+			SELECT rd.*
+			FROM (SELECT * FROM ai_predict_model_classify WHERE parent_id IS NOT NULL) rd,
+				(SELECT @pid := ?) pd 
+			WHERE FIND_IN_SET(parent_id, @pid) > 0 
+			AND @pid := CONCAT(@pid, ',', ai_predict_model_classify_id) 
+			UNION SELECT * FROM ai_predict_model_classify WHERE ai_predict_model_classify_id = @pid
+			)AS t
+		)`
+		pars = append(pars, classifyId)
+	}
+	err = o.Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 // GetAiPredictModelClassifyCountByClassifyId 获取目录下子目录数量
 func GetAiPredictModelClassifyCountByClassifyId(chartClassifyId int) (count int, err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := `SELECT COUNT(1) AS count FROM (
+	var pars []interface{}
+	var sql string
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE ai_predict_model_classify_cte (ai_predict_model_classify_id, parent_id) AS (
+			SELECT ai_predict_model_classify_id, parent_id
+			FROM ai_predict_model_classify
+			WHERE parent_id = ?
+			UNION ALL
+			SELECT c.ai_predict_model_classify_id, c.parent_id
+			FROM ai_predict_model_classify c
+			INNER JOIN ai_predict_model_classify_cte ct ON c.parent_id = ct.ai_predict_model_classify_id
+		)
+		SELECT COUNT(1) AS count
+		FROM (
+			SELECT ai_predict_model_classify_id
+			FROM ai_predict_model_classify_cte
+			UNION
+			SELECT ai_predict_model_classify_id
+			FROM ai_predict_model_classify
+			WHERE ai_predict_model_classify_id = ?
+		) AS t
+		WHERE t.ai_predict_model_classify_id <> ?`
+	pars = append(pars, chartClassifyId, chartClassifyId, chartClassifyId)
+	}else{
+		sql = `SELECT COUNT(1) AS count FROM (
 			SELECT rd.*
 			FROM (SELECT * FROM ai_predict_model_classify WHERE parent_id IS NOT NULL) rd,
 				 (SELECT @pid := ?) pd 
@@ -331,14 +381,39 @@ func GetAiPredictModelClassifyCountByClassifyId(chartClassifyId int) (count int,
 			UNION SELECT * FROM ai_predict_model_classify WHERE ai_predict_model_classify_id = @pid
 			)AS t
 			WHERE t.ai_predict_model_classify_id <> ?`
-	err = o.Raw(sql, chartClassifyId, chartClassifyId).Scan(&count).Error
+		pars = append(pars, chartClassifyId, chartClassifyId)
+	}
+	err = o.Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 // RemoveAiPredictModelClassify 删除分类及子分类
 func RemoveAiPredictModelClassify(classifyId int) (err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := `DELETE FROM ai_predict_model_classify
+	var pars []interface{}
+	var sql string
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE ai_predict_model_classify_cte (ai_predict_model_classify_id, parent_id) AS (
+				SELECT ai_predict_model_classify_id, parent_id
+				FROM ai_predict_model_classify
+				WHERE parent_id = ?
+				UNION ALL
+				SELECT c.ai_predict_model_classify_id, c.parent_id
+				FROM ai_predict_model_classify c
+				INNER JOIN ai_predict_model_classify_cte ct ON c.parent_id = ct.ai_predict_model_classify_id
+			)
+			DELETE FROM ai_predict_model_classify
+			WHERE ai_predict_model_classify_id IN (
+				SELECT ai_predict_model_classify_id
+				FROM ai_predict_model_classify_cte
+				UNION
+				SELECT ai_predict_model_classify_id
+				FROM ai_predict_model_classify
+				WHERE ai_predict_model_classify_id = ?
+			)`
+		pars = append(pars, classifyId, classifyId)
+	}else{
+		sql = `DELETE FROM ai_predict_model_classify
 				WHERE ai_predict_model_classify_id IN(
 				SELECT t.ai_predict_model_classify_id FROM
 				(
@@ -350,7 +425,9 @@ func RemoveAiPredictModelClassify(classifyId int) (err error) {
 				UNION SELECT * FROM ai_predict_model_classify WHERE ai_predict_model_classify_id = @pid
 				)AS t
 			)`
-	err = o.Exec(sql, classifyId).Error
+		pars = append(pars, classifyId)
+	}
+	err = o.Exec(sql, pars...).Error
 	return
 }
 

+ 66 - 15
models/ai_summary/ai_summary_classify.go

@@ -160,19 +160,45 @@ type AiSummaryClassifyDeleteCheckReq struct {
 
 func GetAiSummaryInfoCountByClassifyId(classifyId int) (count int, err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := ` SELECT COUNT(1) AS count FROM ai_summary AS a
-				WHERE a.classify_id IN(
-				SELECT t.ai_summary_classify_id FROM 
-				(
-				SELECT rd.*
-				FROM (SELECT * FROM ai_summary_classify WHERE parent_id IS NOT NULL) rd,
-					 (SELECT @pid := ?) pd 
-				WHERE FIND_IN_SET(parent_id, @pid) > 0 
-				  AND @pid := CONCAT(@pid, ',', ai_summary_classify_id) 
-				UNION SELECT * FROM ai_summary_classify WHERE ai_summary_classify_id = @pid 
-				)AS t
-				) `
-	err = o.Raw(sql, classifyId).Scan(&count).Error
+	var pars []interface{}
+	var sql string
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE ai_summary_classify_cte (ai_summary_classify_id, parent_id) AS (
+				SELECT ai_summary_classify_id, parent_id
+				FROM ai_summary_classify
+				WHERE parent_id = ?
+				UNION ALL
+				SELECT c.ai_summary_classify_id, c.parent_id
+				FROM ai_summary_classify c
+				INNER JOIN ai_summary_classify_cte ct ON c.parent_id = ct.ai_summary_classify_id
+			)
+			SELECT COUNT(1) AS count
+			FROM ai_summary a
+			WHERE a.classify_id IN (
+				SELECT ai_summary_classify_id
+				FROM ai_summary_classify_cte
+				UNION
+				SELECT ai_summary_classify_id
+				FROM ai_summary_classify
+				WHERE ai_summary_classify_id = ?
+			)`
+		pars = append(pars, classifyId, classifyId)
+	}else{
+		sql = ` SELECT COUNT(1) AS count FROM ai_summary AS a
+		WHERE a.classify_id IN(
+		SELECT t.ai_summary_classify_id FROM 
+		(
+		SELECT rd.*
+		FROM (SELECT * FROM ai_summary_classify WHERE parent_id IS NOT NULL) rd,
+			 (SELECT @pid := ?) pd 
+		WHERE FIND_IN_SET(parent_id, @pid) > 0 
+		  AND @pid := CONCAT(@pid, ',', ai_summary_classify_id) 
+		UNION SELECT * FROM ai_summary_classify WHERE ai_summary_classify_id = @pid 
+		)AS t
+		) `
+		pars = append(pars, classifyId)
+	}
+	err = o.Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
@@ -183,7 +209,30 @@ type DeleteAiSummaryClassifyReq struct {
 
 func DeleteAiSummaryClassify(classifyId int) (err error) {
 	o := global.DbMap[utils.DbNameMaster]
-	sql := ` DELETE FROM ai_summary_classify
+	var sql string
+	var pars []interface{}
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE ai_summary_classify_cte (ai_summary_classify_id, parent_id) AS (
+			SELECT ai_summary_classify_id, parent_id
+			FROM ai_summary_classify
+			WHERE parent_id = ?
+			UNION ALL
+			SELECT c.ai_summary_classify_id, c.parent_id
+			FROM ai_summary_classify c
+			INNER JOIN ai_summary_classify_cte ct ON c.parent_id = ct.ai_summary_classify_id
+		)
+		DELETE FROM ai_summary_classify
+		WHERE chart_classify_id IN (
+			SELECT ai_summary_classify_id
+			FROM ai_summary_classify_cte
+			UNION
+			SELECT ai_summary_classify_id
+			FROM ai_summary_classify
+			WHERE ai_summary_classify_id = ?
+		)`
+	pars = append(pars, classifyId, classifyId)
+	}else{
+		sql = ` DELETE FROM ai_summary_classify
 				WHERE ai_summary_classify_id IN(
 				SELECT t.ai_summary_classify_id FROM
 				(
@@ -195,7 +244,9 @@ func DeleteAiSummaryClassify(classifyId int) (err error) {
 				UNION SELECT * FROM ai_summary_classify WHERE ai_summary_classify_id = @pid
 				)AS t
 				) `
-	err = o.Exec(sql, classifyId).Error
+		pars = append(pars, classifyId)
+	}
+	err = o.Exec(sql, pars...).Error
 	return
 }
 

+ 97 - 19
models/data_manage/edb_classify.go

@@ -143,26 +143,76 @@ type DeleteEdbClassifyReq struct {
 
 func GetEdbInfoCountByClassifyId(classifyId int) (count int, err error) {
 	//o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT COUNT(1) AS count FROM edb_info AS a
-				WHERE a.classify_id IN(
-				SELECT t.classify_id FROM 
-				(
-				SELECT rd.*
-				FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
-					 (SELECT @pid := ?) pd 
-				WHERE FIND_IN_SET(parent_id, @pid) > 0 
-				  AND @pid := CONCAT(@pid, ',', classify_id) 
-				UNION SELECT * FROM edb_classify WHERE classify_id = @pid
-				)AS t
-				) `
+	var sql string
+	var pars []interface{}
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE edb_classify_cte (classify_id, parent_id) AS (
+				SELECT classify_id, parent_id
+				FROM edb_classify
+				WHERE parent_id = ?
+				UNION ALL
+				SELECT c.classify_id, c.parent_id
+				FROM edb_classify c
+				INNER JOIN edb_classify_cte ct ON c.parent_id = ct.classify_id
+			)
+			SELECT COUNT(1) AS count
+			FROM edb_info a
+			WHERE a.classify_id IN (
+				SELECT classify_id
+				FROM edb_classify_cte
+				UNION
+				SELECT classify_id
+				FROM edb_classify
+				WHERE classify_id = ?
+			)`
+		pars = append(pars, classifyId, classifyId)
+	}else{
+		sql = ` SELECT COUNT(1) AS count FROM edb_info AS a
+		WHERE a.classify_id IN(
+		SELECT t.classify_id FROM 
+		(
+		SELECT rd.*
+		FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
+			 (SELECT @pid := ?) pd 
+		WHERE FIND_IN_SET(parent_id, @pid) > 0 
+		  AND @pid := CONCAT(@pid, ',', classify_id) 
+		UNION SELECT * FROM edb_classify WHERE classify_id = @pid
+		)AS t
+		) `
+		pars = append(pars, classifyId)
+	}
+	
 	//err = o.Raw(sql, classifyId).QueryRow(&count)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId).Scan(&count).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
 func DeleteEdbClassify(classifyId int) (err error) {
-	//o := orm.NewOrmUsingDB("data")
-	sql := ` DELETE FROM edb_classify
+	var pars []interface{}
+	var sql string
+
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE edb_classify_cte (classify_id, parent_id) AS (
+				SELECT classify_id, parent_id
+				FROM edb_classify
+				WHERE parent_id = ?
+				UNION ALL
+				SELECT c.classify_id, c.parent_id
+				FROM edb_classify c
+				INNER JOIN edb_classify_cte ct ON c.parent_id = ct.classify_id
+			)
+			DELETE FROM edb_classify
+			WHERE chart_classify_id IN (
+				SELECT classify_id
+				FROM edb_classify_cte
+				UNION
+				SELECT classify_id
+				FROM edb_classify
+				WHERE classify_id = ?
+			)`
+		pars = append(pars, classifyId, classifyId)
+	} else {
+		sql = ` DELETE FROM edb_classify
 				WHERE classify_id IN(
 				SELECT t.classify_id FROM
 				(
@@ -174,8 +224,9 @@ func DeleteEdbClassify(classifyId int) (err error) {
 				UNION SELECT * FROM edb_classify WHERE classify_id = @pid
 				)AS t
 				) `
-	//_, err = o.Raw(sql, classifyId).Exec()
-	err = global.DbMap[utils.DbNameIndex].Exec(sql, classifyId).Error
+		pars = append(pars, classifyId)
+	}
+	err = global.DbMap[utils.DbNameIndex].Exec(sql, pars...).Error
 	return
 }
 
@@ -343,7 +394,31 @@ type ClassifyDeleteCheckReq struct {
 
 func GetClassifyCountByClassifyId(classifyId int) (count int, err error) {
 	//o := orm.NewOrmUsingDB("data")
-	sql := ` SELECT COUNT(1) AS count FROM (
+	var sql string
+	var pars []interface{}
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE edb_classify_cte (classify_id, parent_id) AS (
+			SELECT classify_id, parent_id
+			FROM edb_classify
+			WHERE parent_id = ?
+			UNION ALL
+			SELECT c.classify_id, c.parent_id
+			FROM edb_classify c
+			INNER JOIN edb_classify_cte ct ON c.parent_id = ct.classify_id
+		)
+		SELECT COUNT(1) AS count
+		FROM (
+			SELECT classify_id
+			FROM edb_classify_cte
+			UNION
+			SELECT classify_id
+			FROM edb_classify
+			WHERE classify_id = ?
+		) AS t
+		WHERE t.classify_id <> ?`
+		pars = append(pars, classifyId, classifyId, classifyId)
+	}else{
+		sql = ` SELECT COUNT(1) AS count FROM (
 			SELECT rd.*
 			FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
 				 (SELECT @pid := ?) pd 
@@ -352,8 +427,11 @@ func GetClassifyCountByClassifyId(classifyId int) (count int, err error) {
 			UNION SELECT * FROM edb_classify WHERE classify_id = @pid
 			)AS t
 			WHERE t.classify_id<>? `
+		pars = append(pars, classifyId, classifyId)
+	}
+		
 	//err = o.Raw(sql, classifyId, classifyId).QueryRow(&count)
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, classifyId, classifyId).Scan(&count).Error
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, pars...).Scan(&count).Error
 	return
 }
 

+ 66 - 15
models/sandbox/sandbox_classify.go

@@ -126,7 +126,31 @@ type SandboxClassifyDeleteCheckReq struct {
 
 func GetSandboxInfoCountByClassifyId(classifyId int) (count int, err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := ` SELECT COUNT(1) AS count FROM sandbox AS a
+	var sql string
+	var pars []interface{}
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE sandbox_classify_cte (sandbox_classify_id, parent_id) AS (
+			SELECT sandbox_classify_id, parent_id
+			FROM sandbox_classify
+			WHERE parent_id = ?
+			UNION ALL
+			SELECT c.sandbox_classify_id, c.parent_id
+			FROM sandbox_classify c
+			INNER JOIN sandbox_classify_cte ct ON c.parent_id = ct.sandbox_classify_id
+		)
+		SELECT COUNT(1) AS count
+		FROM sandbox a
+		WHERE a.sandbox_classify_id IN (
+			SELECT sandbox_classify_id
+			FROM sandbox_classify_cte
+			UNION
+			SELECT sandbox_classify_id
+			FROM sandbox_classify
+			WHERE sandbox_classify_id = ?
+		)`
+		pars = append(pars, classifyId, classifyId)
+	}else{
+		sql = ` SELECT COUNT(1) AS count FROM sandbox AS a
 				WHERE a.sandbox_classify_id IN(
 				SELECT t.sandbox_classify_id FROM 
 				(
@@ -138,7 +162,9 @@ func GetSandboxInfoCountByClassifyId(classifyId int) (count int, err error) {
 				UNION SELECT * FROM sandbox_classify WHERE sandbox_classify_id = @pid 
 				)AS t
 				) AND a.is_delete = 0 `
-	err = o.Raw(sql, classifyId).Scan(&count).Error
+		pars = append(pars, classifyId)
+	}
+	err = o.Raw(sql, pars...).Scan(&count).Error
 	return
 }
 
@@ -154,19 +180,44 @@ type DeleteSandboxClassifyReq struct {
 
 func DeleteSandboxClassify(classifyId int) (err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := ` DELETE FROM sandbox_classify
-				WHERE sandbox_classify_id IN(
-				SELECT t.sandbox_classify_id FROM
-				(
-				SELECT rd.*
-				FROM (SELECT * FROM sandbox_classify WHERE parent_id IS NOT NULL) rd,
-				(SELECT @pid := ?) pd
-				WHERE FIND_IN_SET(parent_id, @pid) > 0
-				AND @pid := CONCAT(@pid, ',', sandbox_classify_id)
-				UNION SELECT * FROM sandbox_classify WHERE sandbox_classify_id = @pid
-				)AS t
-				) `
-	err = o.Exec(sql, classifyId).Error
+	var pars []interface{}
+	var sql string
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sql = `WITH RECURSIVE sandbox_classify_cte (sandbox_classify_id, parent_id) AS (
+			SELECT sandbox_classify_id, parent_id
+			FROM sandbox_classify
+			WHERE parent_id = ?
+			UNION ALL
+			SELECT c.sandbox_classify_id, c.parent_id
+			FROM sandbox_classify c
+			INNER JOIN sandbox_classify_cte ct ON c.parent_id = ct.sandbox_classify_id
+		)
+		DELETE FROM sandbox_classify
+		WHERE sandbox_classify_id IN (
+			SELECT sandbox_classify_id
+			FROM sandbox_classify_cte
+			UNION
+			SELECT sandbox_classify_id
+			FROM sandbox_classify
+			WHERE sandbox_classify_id = ?
+		)`
+	pars = append(pars, classifyId, classifyId)
+	}else{
+		sql = ` DELETE FROM sandbox_classify
+		WHERE sandbox_classify_id IN(
+		SELECT t.sandbox_classify_id FROM
+		(
+		SELECT rd.*
+		FROM (SELECT * FROM sandbox_classify WHERE parent_id IS NOT NULL) rd,
+		(SELECT @pid := ?) pd
+		WHERE FIND_IN_SET(parent_id, @pid) > 0
+		AND @pid := CONCAT(@pid, ',', sandbox_classify_id)
+		UNION SELECT * FROM sandbox_classify WHERE sandbox_classify_id = @pid
+		)AS t
+		) `
+		pars = append(pars, classifyId)
+	}
+	err = o.Exec(sql, pars...).Error
 	return
 }