Browse Source

分类树查询修复

kobe6258 4 weeks ago
parent
commit
a08691b59e
3 changed files with 72 additions and 7 deletions
  1. 7 3
      controllers/hisugar_data.go
  2. 12 4
      models/data_manage/base_from_hisugar.go
  3. 53 0
      utils/sql.go

+ 7 - 3
controllers/hisugar_data.go

@@ -674,12 +674,14 @@ func (this *TradeCommonController) HisugarExporthisugarList() {
 	}
 	if req.IsSelectedAll {
 		if len(req.IndexCode) > 0 {
-			condition += ` AND index_code NOT IN (` + utils.GetOrmInReplace(len(req.IndexCode)) + `)`
+			//condition += ` AND index_code NOT IN (` + utils.GetOrmInReplace(len(req.IndexCode)) + `)`
+			condition += ` AND index_code NOT IN ? `
 			pars = append(pars, req.IndexCode)
 		}
 	} else {
 		if len(req.IndexCode) > 0 {
-			condition += ` AND index_code IN (` + utils.GetOrmInReplace(len(req.IndexCode)) + `)`
+			//condition += ` AND index_code IN (` + utils.GetOrmInReplace(len(req.IndexCode)) + `)`
+			condition += ` AND index_code IN ?`
 			pars = append(pars, req.IndexCode)
 		}
 	}
@@ -691,7 +693,9 @@ func (this *TradeCommonController) HisugarExporthisugarList() {
 			return
 		}
 		if classifyIds != "" {
-			condition += ` AND classify_id IN (` + classifyIds + `)`
+			//condition += ` AND classify_id IN (` + classifyIds + `)`
+			condition += ` AND classify_id IN ?`
+			pars = append(pars, classifyIds)
 		}
 	}
 	frequencies, err := data_manage.GetHisugarFrequencyByCondition(condition, pars)

+ 12 - 4
models/data_manage/base_from_hisugar.go

@@ -3,6 +3,7 @@ package data_manage
 import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"time"
 )
@@ -220,7 +221,9 @@ func GetHisugarIndexByConditionAndFrequency(condition, frequency string, pars []
 	}
 	sql += ` AND frequency=?`
 	sql += ` ORDER BY sort ASC, base_from_hisugar_index_id ASC`
-	err = o.Raw(sql, pars, frequency).Find(&items).Error
+	pars = append(pars, frequency)
+	//err = o.Raw(sql, pars, frequency).Find(&items).Error
+	err = o.Raw(sql, pars...).Find(&items).Error
 	return
 }
 
@@ -299,7 +302,8 @@ func GetHisugarDataDataTimeByIndexId(indexIdList []int) (items []string, err err
 		return
 	}
 	o := global.DbMap[utils.DbNameIndex]
-	sql := ` SELECT DISTINCT data_time FROM base_from_hisugar_data WHERE base_from_hisugar_index_id IN (` + utils.GetOrmInReplace(len(indexIdList)) + `) ORDER BY data_time DESC`
+	//sql := ` SELECT DISTINCT data_time FROM base_from_hisugar_data WHERE base_from_hisugar_index_id IN (` + utils.GetOrmInReplace(len(indexIdList)) + `) ORDER BY data_time DESC`
+	sql := ` SELECT DISTINCT data_time FROM base_from_hisugar_data WHERE base_from_hisugar_index_id IN ? ORDER BY data_time DESC`
 	err = o.Raw(sql, indexIdList).Find(&items).Error
 	return
 }
@@ -382,7 +386,9 @@ func GetHisugarIndexInfoPage(condition string, pars []interface{}, size int, pag
 		sql += condition
 	}
 	sql += ` ORDER BY base_from_hisugar_index_id asc LIMIT ?,?`
-	err = o.Raw(sql, pars, size, pageSize).Find(&items).Error
+	pars = append(pars, size, pageSize)
+	//err = o.Raw(sql, pars, size, pageSize).Find(&items).Error
+	err = o.Raw(sql, pars...).Find(&items).Error
 	return
 
 }
@@ -390,7 +396,9 @@ func GetHisugarIndexInfoPage(condition string, pars []interface{}, size int, pag
 // 获取所有分类
 func GetHisugarClassifyById(classifyId int) (ClassifyIds string, err error) {
 	o := global.DbMap[utils.DbNameIndex]
-	sql := ` SELECT GROUP_CONCAT(base_from_hisugar_classify_id) AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?`
+	sql := fmt.Sprintf("SELECT %s AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?", utils.GroupUnitFunc(utils.DbDriverName, "base_from_hisugar_classify_id", ",", ""))
+	//sql := ` SELECT GROUP_CONCAT(base_from_hisugar_classify_id) AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?`
+	//sql := ` SELECT AS classify_ids FROM base_from_hisugar_classify WHERE base_from_hisugar_classify_id=? OR parent_id=?`
 	err = o.Raw(sql, classifyId, classifyId).Scan(&ClassifyIds).Error
 	return
 }

+ 53 - 0
utils/sql.go

@@ -0,0 +1,53 @@
+package utils
+
+import (
+	"errors"
+	"fmt"
+)
+
+type Driver string
+
+const (
+	DM    Driver = "dm"
+	MySql Driver = "mysql"
+)
+
+var supportDriverMap = map[string]Driver{
+	"mysql": MySql,
+	"dm":    DM,
+}
+
+func GroupUnitFunc(driver string, column, delimiter, tableAlia string) (sqlStr string) {
+	dbDriver, _ := getDriverInstance(driver)
+	if delimiter == "" {
+		delimiter = ","
+	}
+	if column == "" {
+		column = "[UNKNOWN COLUMN]"
+	}
+	if tableAlia != "" {
+		column = fmt.Sprintf("%s.%s", tableAlia, column)
+	}
+	switch dbDriver {
+	case MySql:
+		sqlStr = fmt.Sprintf("GROUP_CONCAT(%s SEPARATOR '%s')", column, delimiter)
+	case DM:
+		sqlStr = fmt.Sprintf("LISTAGG(%s, '%s') WITHIN GROUP (ORDER BY %s)", column, delimiter, column)
+	default:
+		sqlStr = fmt.Sprintf("GROUP_CONCAT(%s SEPARATOR '%s')", column, delimiter) // 默认使用 MySQL 的语法
+	}
+	return sqlStr
+}
+
+func getDriverInstance(driver string) (dbDriver Driver, err error) {
+	if driver == "" {
+		dbDriver = supportDriverMap[DbDriverName]
+	}
+	if currentDriver, ok := supportDriverMap[driver]; !ok {
+		err = errors.New("不支持的数据库驱动类型")
+		return
+	} else {
+		dbDriver = currentDriver
+	}
+	return
+}