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