package a import ( "log" "os" "strings" "time" "git.apinb.com/dataset/stock/internal/impl" "git.apinb.com/dataset/stock/internal/models" ) func GetStockIndicator() { end := time.Now().Format("20060102") for _, code := range GetStockCodes() { var start string = "20230101" var last models.StockIndicator err := impl.DBService.Where("ts_code=?", code).Order("trade_date DESC").First(&last).Error if err == nil { start = last.TradeDate.Format("20060102") } params := map[string]string{ "ts_code": code, "start_date": start, "end_date": end, } if start == end { continue } fields := strings.Split("ts_code,trade_date,close,turnover_rate,turnover_rate_f,volume_ratio,pe,pe_ttm,pb,ps,ps_ttm,dv_ratio,dv_ttm,total_share,float_share,free_share,total_mv,circ_mv", ",") reply, err := TushareClient.DailyBasic(params, fields) if err != nil { log.Println("ERROR", "GetStockIndicator", err, "PARAMS", params) return } for _, item := range reply.Data.Items { var cnt int64 impl.DBService.Model(&models.StockIndicator{}).Where("ts_code=? and trade_date=?", item[0].(string), item[1].(string)).Count(&cnt) os.Exit(1) if cnt == 0 { t, err := time.Parse("20060102", item[1].(string)) if err != nil { continue } impl.DBService.Create(&models.StockIndicator{ TsCode: item[0].(string), TradeDate: t, Close: Any2Float(item[2]), TurnoverRate: Any2Float(item[3]), TurnoverRateF: Any2Float(item[4]), VolumeRatio: Any2Float(item[5]), Pe: Any2Float(item[6]), PeTtm: Any2Float(item[7]), Pb: Any2Float(item[8]), Ps: Any2Float(item[9]), PsTtm: Any2Float(item[10]), DvRatio: Any2Float(item[11]), DvTtm: Any2Float(item[12]), TotalShare: Any2Float(item[13]), FloatShare: Any2Float(item[14]), FreeShare: Any2Float(item[15]), TotalMv: Any2Float(item[16]), CircMv: Any2Float(item[17]), }) } } } }