73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
package a
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
|
|
"git.apinb.com/bsm-sdk/core/utils"
|
|
"git.apinb.com/dataset/stock/internal/impl"
|
|
"git.apinb.com/dataset/stock/internal/models"
|
|
)
|
|
|
|
func GetStockDaily() {
|
|
end := time.Now().Format("20060102")
|
|
for _, code := range GetStockCodes() {
|
|
var start string = "20230101"
|
|
var last models.StockDaily
|
|
err := impl.DBService.Where("ts_code=?", code).Order("trade_date DESC").First(&last).Error
|
|
if err == nil {
|
|
start = utils.Int2String(last.TradeDate)
|
|
}
|
|
params := map[string]string{
|
|
"ts_code": code,
|
|
"start_date": start,
|
|
"end_date": end,
|
|
}
|
|
|
|
if start == end {
|
|
continue
|
|
}
|
|
|
|
fields := []string{}
|
|
reply, err := TushareClient.Daily(params, fields)
|
|
if err != nil {
|
|
log.Println("ERROR", "GetStockDaily", err)
|
|
return
|
|
}
|
|
|
|
records := make([]*models.StockDaily, 0)
|
|
for _, item := range reply.Data.Items {
|
|
t := utils.String2Int(item[1].(string))
|
|
if t == 0 {
|
|
continue
|
|
}
|
|
|
|
var cnt int64
|
|
impl.DBService.Model(&models.StockDaily{}).Where("ts_code=? and trade_date=?", item[0].(string), t).Count(&cnt)
|
|
if cnt == 0 {
|
|
records = append(records, &models.StockDaily{
|
|
TsCode: item[0].(string),
|
|
TradeDate: t,
|
|
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),
|
|
})
|
|
}
|
|
}
|
|
|
|
if len(records) > 0 {
|
|
impl.DBService.CreateInBatches(records, 100)
|
|
}
|
|
|
|
time.Sleep(200 * time.Microsecond)
|
|
|
|
}
|
|
|
|
}
|