Преглед изворни кода

Merge branch 'dm' of http://8.136.199.33:3000/eta_server/eta_api into dm

kobe6258 пре 1 месец
родитељ
комит
273c8e784d

+ 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
 }
 

+ 22 - 3
models/data_manage/edb_data_gz.go

@@ -4,7 +4,7 @@ import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
+	"gorm.io/gorm"
 )
 
 type GzData struct {
@@ -23,6 +23,7 @@ func GetEdbDataGzMaxOrMinDate(edbCode string) (minDate, maxDate string, err erro
 	}
 	minDate = maxAndMinDate.MinDate.Format(utils.FormatDate)
 	maxDate = maxAndMinDate.MaxDate.Format(utils.FormatDate)
+
 	return
 }
 
@@ -38,11 +39,29 @@ type GzIndexView struct {
 	Value                            float64 `description:"数据"`
 }
 
+// AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
+func (m *GzIndexView) AfterFind(db *gorm.DB) (err error) {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+
+	return
+}
+func (m *GzIndexView) ConvDateTimeStr() {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+
+	return
+}
+
 // GetBaseInfoFromShByIndexCode 获取指标信息
 func GetBaseInfoFromGzByIndexCode(indexCode string) (item *GzIndexView, err error) {
-	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM base_from_trade_guangzhou_index WHERE index_code=? `
 	sql = fmt.Sprintf(sql)
-	err = o.Raw(sql, indexCode).QueryRow(&item)
+	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).First(&item).Error
+	if err != nil {
+		return
+	}
+	item.ConvDateTimeStr()
+
 	return
 }

+ 20 - 0
models/data_manage/edb_data_hisugar.go

@@ -4,6 +4,7 @@ import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"fmt"
+	"gorm.io/gorm"
 )
 
 type HisugarData struct {
@@ -38,6 +39,20 @@ type BaseFromHisugarIndexItem struct {
 	ModifyTime         string // 修改时间
 }
 
+// AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
+func (m *BaseFromHisugarIndexItem) AfterFind(db *gorm.DB) (err error) {
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+
+	return
+}
+func (m *BaseFromHisugarIndexItem) ConvDateTimeStr() {
+	m.CreateTime = utils.GormDateStrToDateTimeStr(m.CreateTime)
+	m.ModifyTime = utils.GormDateStrToDateTimeStr(m.ModifyTime)
+
+	return
+}
+
 // GetBaseInfoFromHisugarByIndexCode 获取指标信息
 func GetBaseInfoFromHisugarByIndexCode(indexCode string) (item *BaseFromHisugarIndexItem, err error) {
 	//o := orm.NewOrmUsingDB("data")
@@ -45,5 +60,10 @@ func GetBaseInfoFromHisugarByIndexCode(indexCode string) (item *BaseFromHisugarI
 	sql = fmt.Sprintf(sql)
 	//err = o.Raw(sql, indexCode).QueryRow(&item)
 	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).First(&item).Error
+	if err != nil {
+		return
+	}
+	item.ConvDateTimeStr()
+
 	return
 }

+ 20 - 0
models/data_manage/edb_data_icpi.go

@@ -4,6 +4,7 @@ import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"fmt"
+	"gorm.io/gorm"
 )
 
 type IcpiData struct {
@@ -37,6 +38,20 @@ type IcpiIndexView struct {
 	Value                            float64 `description:"数据"`
 }
 
+// AfterFind 在该模型上设置钩子函数,把日期转成正确的string,所以查询函数只能用Find函数,First或者Scan是不会触发该函数的来获取数据
+func (m *IcpiIndexView) AfterFind(db *gorm.DB) (err error) {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+
+	return
+}
+func (m *IcpiIndexView) ConvDateTimeStr() {
+	m.StartDate = utils.GormDateStrToDateStr(m.StartDate)
+	m.EndDate = utils.GormDateStrToDateStr(m.EndDate)
+
+	return
+}
+
 // GetBaseInfoFromShByIndexCode 获取指标信息
 func GetBaseInfoFromIcpiByIndexCode(indexCode string) (item *IcpiIndexView, err error) {
 	//o := orm.NewOrmUsingDB("data")
@@ -44,5 +59,10 @@ func GetBaseInfoFromIcpiByIndexCode(indexCode string) (item *IcpiIndexView, err
 	sql = fmt.Sprintf(sql)
 	//err = o.Raw(sql, indexCode).QueryRow(&item)
 	err = global.DbMap[utils.DbNameIndex].Raw(sql, indexCode).First(&item).Error
+	if err != nil {
+		return
+	}
+	item.ConvDateTimeStr()
+
 	return
 }