ok
This commit is contained in:
107
schema/scopes.go
Normal file
107
schema/scopes.go
Normal file
@@ -0,0 +1,107 @@
|
||||
package schema
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
// ScopeTsCode 按 ts_code 精确过滤;空字符串则不加条件。
|
||||
func ScopeTsCode(tsCode string) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
if tsCode == "" {
|
||||
return db
|
||||
}
|
||||
return db.Where("ts_code = ?", tsCode)
|
||||
}
|
||||
}
|
||||
|
||||
// ScopeTsCodes 按 ts_code IN (...);nil 或空切片不加条件。
|
||||
func ScopeTsCodes(tsCodes []string) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
if len(tsCodes) == 0 {
|
||||
return db
|
||||
}
|
||||
return db.Where("ts_code IN ?", tsCodes)
|
||||
}
|
||||
}
|
||||
|
||||
// ScopeTradeDateEQ 按 trade_date 等于;0 表示不加条件。
|
||||
func ScopeTradeDateEQ(tradeDate int) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
if tradeDate == 0 {
|
||||
return db
|
||||
}
|
||||
return db.Where("trade_date = ?", tradeDate)
|
||||
}
|
||||
}
|
||||
|
||||
// ScopeTradeDateBetween trade_date 区间 [start,end];仅传一侧时做单边约束;均为 0 不加条件。
|
||||
func ScopeTradeDateBetween(start, end int) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
switch {
|
||||
case start > 0 && end > 0:
|
||||
return db.Where("trade_date BETWEEN ? AND ?", start, end)
|
||||
case start > 0:
|
||||
return db.Where("trade_date >= ?", start)
|
||||
case end > 0:
|
||||
return db.Where("trade_date <= ?", end)
|
||||
default:
|
||||
return db
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ScopeStockDailyTsDate 日线:ts_code + 交易日(任一为空则该项不限制)。
|
||||
func ScopeStockDailyTsDate(tsCode string, tradeDate int) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
return db.Scopes(ScopeTsCode(tsCode), ScopeTradeDateEQ(tradeDate))
|
||||
}
|
||||
}
|
||||
|
||||
// ScopeStockIndicatorTsDate 指标表:ts_code + trade_date。
|
||||
func ScopeStockIndicatorTsDate(tsCode string, tradeDate int) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
return db.Scopes(ScopeTsCode(tsCode), ScopeTradeDateEQ(tradeDate))
|
||||
}
|
||||
}
|
||||
|
||||
// ScopeFinaTsPeriod 财务指标:ts_code + period(与 uniqueIndex un_fi_code_date 一致);period 为 0 时不限制 period。
|
||||
func ScopeFinaTsPeriod(tsCode string, period int) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
db = db.Scopes(ScopeTsCode(tsCode))
|
||||
if period != 0 {
|
||||
db = db.Where("period = ?", period)
|
||||
}
|
||||
return db
|
||||
}
|
||||
}
|
||||
|
||||
// ScopeBlocksIndexCode 板块 code。
|
||||
func ScopeBlocksIndexCode(code string) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
if code == "" {
|
||||
return db
|
||||
}
|
||||
return db.Where("code = ?", code)
|
||||
}
|
||||
}
|
||||
|
||||
// ScopeBlocksMemberPair 板块 ti_code + 成分 stock_code。
|
||||
func ScopeBlocksMemberPair(tiCode, stockCode string) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
if tiCode != "" {
|
||||
db = db.Where("ti_code = ?", tiCode)
|
||||
}
|
||||
if stockCode != "" {
|
||||
db = db.Where("stock_code = ?", stockCode)
|
||||
}
|
||||
return db
|
||||
}
|
||||
}
|
||||
|
||||
// ScopeMoneyTotalCode 资金流 code。
|
||||
func ScopeMoneyTotalCode(code string) func(*gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
if code == "" {
|
||||
return db
|
||||
}
|
||||
return db.Where("code = ?", code)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user