hsun 1 сар өмнө
parent
commit
edefe63189

+ 87 - 7
models/data_manage/chart_classify.go

@@ -134,7 +134,32 @@ type DeleteChartClassifyReq struct {
 }
 
 func GetChartInfoCountByClassifyId(classifyId int) (count int, err error) {
-	sqlStr := ` SELECT COUNT(1) AS count FROM chart_info AS a
+	var pars []interface{}
+	var sqlStr string
+
+	if utils.DbDriverName == utils.DbDriverByDm {
+		sqlStr = `WITH RECURSIVE chart_classify_cte (chart_classify_id, parent_id) AS (
+				SELECT chart_classify_id, parent_id
+				FROM chart_classify
+				WHERE parent_id = ?
+				UNION ALL
+				SELECT c.chart_classify_id, c.parent_id
+				FROM chart_classify c
+				INNER JOIN chart_classify_cte ct ON c.parent_id = ct.chart_classify_id
+			)
+			SELECT COUNT(1) AS count
+			FROM chart_info a
+			WHERE a.chart_classify_id IN (
+				SELECT chart_classify_id
+				FROM chart_classify_cte
+				UNION
+				SELECT chart_classify_id
+				FROM chart_classify
+				WHERE chart_classify_id = ?
+			)`
+		pars = append(pars, classifyId, classifyId)
+	} else {
+		sqlStr = ` SELECT COUNT(1) AS count FROM chart_info AS a
 				WHERE a.chart_classify_id IN(
 				SELECT t.chart_classify_id FROM 
 				(
@@ -146,10 +171,11 @@ func GetChartInfoCountByClassifyId(classifyId int) (count int, err error) {
 				UNION SELECT * FROM chart_classify WHERE chart_classify_id = @pid
 				)AS t
 				) `
+		pars = append(pars, classifyId)
+	}
 
 	var totalNull sql.NullInt64
-	err = global.DbMap[utils.DbNameIndex].Raw(sqlStr, classifyId).Scan(&totalNull).Error
-
+	err = global.DbMap[utils.DbNameIndex].Raw(sqlStr, pars...).Scan(&totalNull).Error
 	if !totalNull.Valid {
 		count = 0
 	} else {
@@ -159,7 +185,31 @@ func GetChartInfoCountByClassifyId(classifyId int) (count int, err error) {
 }
 
 func DeleteChartClassify(classifyId int) (err error) {
-	sql := ` DELETE FROM chart_classify
+	var pars []interface{}
+	var strSql string
+
+	if utils.DbDriverName == utils.DbDriverByDm {
+		strSql = `WITH RECURSIVE chart_classify_cte (chart_classify_id, parent_id) AS (
+				SELECT chart_classify_id, parent_id
+				FROM chart_classify
+				WHERE parent_id = ?
+				UNION ALL
+				SELECT c.chart_classify_id, c.parent_id
+				FROM chart_classify c
+				INNER JOIN chart_classify_cte ct ON c.parent_id = ct.chart_classify_id
+			)
+			DELETE FROM chart_classify
+			WHERE chart_classify_id IN (
+				SELECT chart_classify_id
+				FROM chart_classify_cte
+				UNION
+				SELECT chart_classify_id
+				FROM chart_classify
+				WHERE chart_classify_id = ?
+			)`
+		pars = append(pars, classifyId, classifyId)
+	} else {
+		strSql = ` DELETE FROM chart_classify
 				WHERE chart_classify_id IN(
 				SELECT t.chart_classify_id FROM
 				(
@@ -171,7 +221,10 @@ func DeleteChartClassify(classifyId int) (err error) {
 				UNION SELECT * FROM chart_classify WHERE chart_classify_id = @pid
 				)AS t
 				) `
-	err = global.DbMap[utils.DbNameIndex].Exec(sql, classifyId).Error
+		pars = append(pars, classifyId)
+	}
+
+	err = global.DbMap[utils.DbNameIndex].Exec(strSql, pars...).Error
 	return
 }
 
@@ -250,7 +303,32 @@ type ChartClassifyDeleteCheckReq struct {
 }
 
 func GetChartClassifyCountByClassifyId(chartClassifyId int) (count int, err error) {
-	sql := ` SELECT COUNT(1) AS count FROM (
+	var strSql string
+	var pars []interface{}
+
+	if utils.DbDriverName == utils.DbDriverByDm {
+		strSql = `WITH RECURSIVE chart_classify_cte (chart_classify_id, parent_id) AS (
+				SELECT chart_classify_id, parent_id
+				FROM chart_classify
+				WHERE parent_id = ?
+				UNION ALL
+				SELECT c.chart_classify_id, c.parent_id
+				FROM chart_classify c
+				INNER JOIN chart_classify_cte ct ON c.parent_id = ct.chart_classify_id
+			)
+			SELECT COUNT(1) AS count
+			FROM (
+				SELECT chart_classify_id
+				FROM chart_classify_cte
+				UNION
+				SELECT chart_classify_id
+				FROM chart_classify
+				WHERE chart_classify_id = ?
+			) AS t
+			WHERE t.chart_classify_id <> ?`
+		pars = append(pars, chartClassifyId, chartClassifyId, chartClassifyId)
+	} else {
+		strSql = ` SELECT COUNT(1) AS count FROM (
 			SELECT rd.*
 			FROM (SELECT * FROM chart_classify WHERE parent_id IS NOT NULL) rd,
 				 (SELECT @pid := ?) pd 
@@ -259,7 +337,9 @@ func GetChartClassifyCountByClassifyId(chartClassifyId int) (count int, err erro
 			UNION SELECT * FROM chart_classify WHERE chart_classify_id = @pid
 			)AS t
 			WHERE t.chart_classify_id<>? `
-	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartClassifyId, chartClassifyId).Scan(&count).Error
+		pars = append(pars, chartClassifyId, chartClassifyId)
+	}
+	err = global.DbMap[utils.DbNameIndex].Raw(strSql, pars...).Scan(&count).Error
 	return
 }