Files
stock/internal/logic/a/daily.go

73 lines
1.6 KiB
Go
Raw Normal View History

2026-01-17 01:14:19 +08:00
package a
import (
"log"
"time"
2026-01-21 19:08:44 +08:00
"git.apinb.com/bsm-sdk/core/utils"
2026-01-17 01:14:19 +08:00
"git.apinb.com/dataset/stock/internal/impl"
"git.apinb.com/dataset/stock/internal/models"
)
func GetStockDaily() {
2026-01-19 17:57:18 +08:00
end := time.Now().Format("20060102")
2026-01-17 01:14:19 +08:00
for _, code := range GetStockCodes() {
2026-01-19 17:57:18 +08:00
var start string = "20230101"
var last models.StockDaily
err := impl.DBService.Where("ts_code=?", code).Order("trade_date DESC").First(&last).Error
2026-01-21 17:13:37 +08:00
if err == nil {
2026-01-21 19:08:44 +08:00
start = utils.Int2String(last.TradeDate)
2026-01-19 17:57:18 +08:00
}
2026-01-17 01:14:19 +08:00
params := map[string]string{
"ts_code": code,
2026-01-19 17:57:18 +08:00
"start_date": start,
"end_date": end,
2026-01-17 01:14:19 +08:00
}
2026-01-19 17:57:18 +08:00
if start == end {
2026-01-17 01:14:19 +08:00
continue
}
fields := []string{}
reply, err := TushareClient.Daily(params, fields)
if err != nil {
log.Println("ERROR", "GetStockDaily", err)
return
}
2026-01-21 19:08:44 +08:00
records := make([]*models.StockDaily, 0)
2026-01-17 01:14:19 +08:00
for _, item := range reply.Data.Items {
2026-01-21 19:08:44 +08:00
t := utils.String2Int(item[1].(string))
if t == 0 {
continue
}
2026-01-17 01:14:19 +08:00
var cnt int64
2026-01-21 19:08:44 +08:00
impl.DBService.Model(&models.StockDaily{}).Where("ts_code=? and trade_date=?", item[0].(string), t).Count(&cnt)
2026-01-17 01:14:19 +08:00
if cnt == 0 {
2026-01-21 19:08:44 +08:00
records = append(records, &models.StockDaily{
2026-01-17 01:14:19 +08:00
TsCode: item[0].(string),
2026-01-21 17:13:37 +08:00
TradeDate: t,
2026-01-17 01:14:19 +08:00
Open: item[2].(float64),
High: item[3].(float64),
Low: item[4].(float64),
Close: item[5].(float64),
PreClose: item[6].(float64),
Change: item[7].(float64),
PctChg: item[8].(float64),
Vol: item[9].(float64),
Amount: item[10].(float64),
})
}
}
2026-01-21 19:08:44 +08:00
if len(records) > 0 {
impl.DBService.CreateInBatches(records, 100)
}
2026-01-17 01:14:19 +08:00
time.Sleep(200 * time.Microsecond)
}
}