|
@@ -1,9 +1,11 @@
|
|
|
package data_manage
|
|
|
|
|
|
import (
|
|
|
+ sql2 "database/sql"
|
|
|
"eta/eta_task/global"
|
|
|
"eta/eta_task/utils"
|
|
|
"fmt"
|
|
|
+ "gorm.io/gorm"
|
|
|
"time"
|
|
|
"unsafe"
|
|
|
)
|
|
@@ -24,6 +26,16 @@ type TradePositionTop struct {
|
|
|
Rank int //排名
|
|
|
}
|
|
|
|
|
|
+func (m *TradePositionTop) AfterFind(db *gorm.DB) (err error) {
|
|
|
+ m.DataTime = utils.GormDateStrToDateStr(m.DataTime)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func (m *TradePositionTop) ConvertTimeStr() {
|
|
|
+ m.DataTime = utils.GormDateStrToDateStr(m.DataTime)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
type TradePositionDalianTop struct {
|
|
|
TradePositionTop
|
|
|
}
|
|
@@ -223,14 +235,14 @@ func GetTradePositionTopByExchangeDataTimeTypeClassify(exchange string, dataTime
|
|
|
func MultiInsertTradeBaseDataToTop(exchange string, startDate, endDate string) (err error) {
|
|
|
o := global.DbMap[utils.DbNameIndex]
|
|
|
now := time.Now().Format(utils.FormatDateTime)
|
|
|
- sql1 := "INSERT INTO trade_position_" + exchange + "_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,`rank`,create_time,modify_time) " +
|
|
|
- "SELECT classify_name,classify_type,buy_short_name,buy_value,buy_change,data_time,1,0,`rank`,?,? FROM base_from_trade_" + exchange + "_index where `rank` <50 and buy_short_name !='' and buy_short_name !=' ' and data_time between ? and ?"
|
|
|
+ sql1 := "INSERT INTO trade_position_" + exchange + "_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time) " +
|
|
|
+ "SELECT classify_name,classify_type,buy_short_name,buy_value,buy_change,data_time,1,0,rank,?,? FROM base_from_trade_" + exchange + "_index where rank <50 and buy_short_name !='' and buy_short_name !=' ' and data_time between ? and ?"
|
|
|
err = o.Exec(sql1, now, now, startDate, endDate).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
- sql2 := "INSERT INTO trade_position_" + exchange + "_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,`rank`,create_time,modify_time) " +
|
|
|
- "SELECT classify_name,classify_type,sold_short_name,sold_value,sold_change,data_time,2,0,`rank`,?,? FROM base_from_trade_" + exchange + "_index where `rank` <50 and sold_short_name !='' and sold_short_name !=' ' and data_time between ? and ?"
|
|
|
+ sql2 := "INSERT INTO trade_position_" + exchange + "_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time) " +
|
|
|
+ "SELECT classify_name,classify_type,sold_short_name,sold_value,sold_change,data_time,2,0,rank,?,? FROM base_from_trade_" + exchange + "_index where rank <50 and sold_short_name !='' and sold_short_name !=' ' and data_time between ? and ?"
|
|
|
err = o.Exec(sql2, now, now, startDate, endDate).Error
|
|
|
return
|
|
|
}
|
|
@@ -238,14 +250,14 @@ func MultiInsertTradeBaseDataToTop(exchange string, startDate, endDate string) (
|
|
|
func MultiInsertTradeBaseDataToTopByClassify(exchange string, startDate, endDate string, classifyNames, classifyTypes []string) (err error) {
|
|
|
o := global.DbMap[utils.DbNameIndex]
|
|
|
now := time.Now().Format(utils.FormatDateTime)
|
|
|
- sql1 := "INSERT INTO trade_position_" + exchange + "_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,`rank`,create_time,modify_time)" +
|
|
|
- "SELECT classify_name,classify_type,buy_short_name,buy_value,buy_change,data_time,1,0,`rank`,?,? FROM base_from_trade_" + exchange + "_index where `rank` <50 and buy_short_name !='' and buy_short_name !=' ' and data_time between ? and ? and classify_name in (" + utils.GetOrmInReplace(len(classifyNames)) + ") and classify_type in (" + utils.GetOrmInReplace(len(classifyTypes)) + ")"
|
|
|
+ sql1 := "INSERT INTO trade_position_" + exchange + "_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)" +
|
|
|
+ "SELECT classify_name,classify_type,buy_short_name,buy_value,buy_change,data_time,1,0,rank,?,? FROM base_from_trade_" + exchange + "_index where rank <50 and buy_short_name !='' and buy_short_name !=' ' and data_time between ? and ? and classify_name in (" + utils.GetOrmInReplace(len(classifyNames)) + ") and classify_type in (" + utils.GetOrmInReplace(len(classifyTypes)) + ")"
|
|
|
err = o.Exec(sql1, now, now, startDate, endDate, classifyNames, classifyTypes).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
- sql2 := "INSERT INTO trade_position_" + exchange + "_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,`rank`,create_time,modify_time)" +
|
|
|
- "SELECT classify_name,classify_type,sold_short_name,sold_value,sold_change,data_time,2,0,`rank`,?,? FROM base_from_trade_" + exchange + "_index where `rank` <50 and sold_short_name !='' and sold_short_name !=' ' and data_time between ? and ? and classify_name in (" + utils.GetOrmInReplace(len(classifyNames)) + ") and classify_type in (" + utils.GetOrmInReplace(len(classifyTypes)) + ")"
|
|
|
+ sql2 := "INSERT INTO trade_position_" + exchange + "_top(classify_name,classify_type,deal_short_name,deal_value,deal_change,data_time,deal_type,source_type,rank,create_time,modify_time)" +
|
|
|
+ "SELECT classify_name,classify_type,sold_short_name,sold_value,sold_change,data_time,2,0,rank,?,? FROM base_from_trade_" + exchange + "_index where rank <50 and sold_short_name !='' and sold_short_name !=' ' and data_time between ? and ? and classify_name in (" + utils.GetOrmInReplace(len(classifyNames)) + ") and classify_type in (" + utils.GetOrmInReplace(len(classifyTypes)) + ")"
|
|
|
err = o.Exec(sql2, now, now, startDate, endDate, classifyNames, classifyTypes).Error
|
|
|
return
|
|
|
}
|
|
@@ -273,17 +285,15 @@ type BaseFromTradeClassify struct {
|
|
|
// GetAllBaseFromTradeClassify 获取所有的交易所分类列表
|
|
|
func GetAllBaseFromTradeClassify() (list []*BaseFromTradeClassify, err error) {
|
|
|
sql := `SELECT * FROM base_from_trade_classify `
|
|
|
-
|
|
|
o := global.DbMap[utils.DbNameIndex]
|
|
|
err = o.Raw(sql).Find(&list).Error
|
|
|
-
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// Update 更新
|
|
|
func (m *BaseFromTradeClassify) Update(cols []string) (err error) {
|
|
|
o := global.DbMap[utils.DbNameIndex]
|
|
|
- err = o.Select(cols).Updates(m).Error
|
|
|
+ err = o.Select(cols).Updates(m).Error
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -351,15 +361,48 @@ func MultiUpdatePositionTopChangeVal(exchange string, updates []UpdateChangeVal)
|
|
|
|
|
|
func GetTradePositionOriginClassifyCountByExchangeDataTime(exchange string, startDate, endDate string) (count int64, err error) {
|
|
|
o := global.DbMap[utils.DbNameIndex]
|
|
|
- sql := "SELECT COUNT(DISTINCT classify_name, classify_type) FROM base_from_trade_" + exchange + "_index where `rank` <50 and (buy_short_name !='' or sold_short_name !='' ) and (buy_short_name !=' ' or sold_short_name !=' ' ) and data_time >= ? and data_time <= ?"
|
|
|
- err = o.Raw(sql, startDate, endDate).Scan(&count).Error
|
|
|
+ var pars []interface{}
|
|
|
+ var sql string
|
|
|
+ if utils.DbDriverName == utils.DbDriverByDm {
|
|
|
+ // DM不支持COUNT(DISTINCT column1, column2)这种写法
|
|
|
+ sql = `SELECT COUNT(*)
|
|
|
+ FROM (
|
|
|
+ SELECT DISTINCT classify_name, classify_type
|
|
|
+ FROM base_from_trade_ine_index
|
|
|
+ WHERE rank < 50
|
|
|
+ AND (buy_short_name != '' OR sold_short_name != '')
|
|
|
+ AND (buy_short_name != ' ' OR sold_short_name != ' ')
|
|
|
+ AND data_time >= ?
|
|
|
+ AND data_time <= ?
|
|
|
+ )`
|
|
|
+ pars = append(pars, startDate, endDate)
|
|
|
+ } else {
|
|
|
+ sql = "SELECT COUNT(DISTINCT classify_name, classify_type) FROM base_from_trade_" + exchange + "_index where rank <50 and (buy_short_name !='' or sold_short_name !='' ) and (buy_short_name !=' ' or sold_short_name !=' ' ) and data_time >= ? and data_time <= ?"
|
|
|
+ pars = append(pars, startDate, endDate)
|
|
|
+ }
|
|
|
+ err = o.Raw(sql, pars...).Scan(&count).Error
|
|
|
return
|
|
|
}
|
|
|
|
|
|
func GetTradePositionTopClassifyCountByExchangeDataTime(exchange string, startDate, endDate string) (count int64, err error) {
|
|
|
o := global.DbMap[utils.DbNameIndex]
|
|
|
- sql := "SELECT COUNT(DISTINCT classify_name, classify_type) FROM trade_position_" + exchange + "_top where data_time >= ? and data_time <= ? and deal_type in (1,2) "
|
|
|
- err = o.Raw(sql, startDate, endDate).Scan(&count).Error
|
|
|
+ var pars []interface{}
|
|
|
+ var sql string
|
|
|
+ if utils.DbDriverName == utils.DbDriverByDm {
|
|
|
+ sql = `SELECT COUNT(*)
|
|
|
+ FROM (
|
|
|
+ SELECT DISTINCT classify_name, classify_type
|
|
|
+ FROM trade_position_ine_top
|
|
|
+ WHERE data_time >= ?
|
|
|
+ AND data_time <= ?
|
|
|
+ AND deal_type IN (1, 2)
|
|
|
+ )`
|
|
|
+ pars = append(pars, startDate, endDate)
|
|
|
+ } else {
|
|
|
+ sql = "SELECT COUNT(DISTINCT classify_name, classify_type) FROM trade_position_" + exchange + "_top where data_time >= ? and data_time <= ? and deal_type in (1,2) "
|
|
|
+ pars = append(pars, startDate, endDate)
|
|
|
+ }
|
|
|
+ err = o.Raw(sql, pars...).Scan(&count).Error
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -370,7 +413,7 @@ type TradePositionClassifyInfo struct {
|
|
|
|
|
|
func GetTradePositionOriginClassifyByExchangeDataTime(exchange string, startDate, endDate string) (list []TradePositionClassifyInfo, err error) {
|
|
|
o := global.DbMap[utils.DbNameIndex]
|
|
|
- sql := "SELECT DISTINCT classify_name, classify_type FROM base_from_trade_" + exchange + "_index where `rank` <50 and (buy_short_name !='' or sold_short_name !='' ) and (buy_short_name !=' ' or sold_short_name !=' ' ) and data_time >= ? and data_time <= ?"
|
|
|
+ sql := "SELECT DISTINCT classify_name, classify_type FROM base_from_trade_" + exchange + "_index where rank <50 and (buy_short_name !='' or sold_short_name !='' ) and (buy_short_name !=' ' or sold_short_name !=' ' ) and data_time >= ? and data_time <= ?"
|
|
|
err = o.Raw(sql, startDate, endDate).Find(&list).Error
|
|
|
return
|
|
|
}
|
|
@@ -396,15 +439,22 @@ type GetFirstBaseFromTradeIndeDate struct {
|
|
|
|
|
|
func GetFirstBaseFromTradeIndexByDate(exchange string) (item *GetFirstBaseFromTradeIndeDate, err error) {
|
|
|
o := global.DbMap[utils.DbNameIndex]
|
|
|
- sql := "SELECT * FROM base_from_trade_" + exchange + "_index where `rank` < 50 order by data_time asc"
|
|
|
+ sql := "SELECT * FROM base_from_trade_" + exchange + "_index where rank < 50 order by data_time asc"
|
|
|
err = o.Raw(sql).First(&item).Error
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 获取持仓分析的最新数据
|
|
|
-func GetTradePositionTopLastedDataTime(exchange string) (data_time time.Time, err error) {
|
|
|
+func GetTradePositionTopLastedDataTime(exchange string) (dataTime time.Time, err error) {
|
|
|
o := global.DbMap[utils.DbNameIndex]
|
|
|
sql := "SELECT max(data_time) FROM trade_position_" + exchange + "_top"
|
|
|
- err = o.Raw(sql).Scan(&data_time).Error
|
|
|
+ var timeNull sql2.NullTime
|
|
|
+ err = o.Raw(sql).Scan(&timeNull).Error
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if timeNull.Valid {
|
|
|
+ dataTime = timeNull.Time
|
|
|
+ }
|
|
|
return
|
|
|
}
|