package selfContract import ( "fmt" "github.com/shopspring/decimal" "go.mongodb.org/mongo-driver/bson" "wss-pool/internal/data" ) func GetNewPrice(contractCode string) []data.MongoTick { filter := bson.M{"channel": fmt.Sprintf("market.%s.kline.1min", contractCode)} tableName := data.GetContractKLineTableName("1min") pagedData, _ := data.MgoLimitFind(tableName, filter, int64(1)) return pagedData } func GetNewPriceAll(contractCode, period string) []data.MongoTick { filter := bson.M{"channel": fmt.Sprintf("market.%s.kline.%s", contractCode, period)} tableName := data.GetContractKLineTableName(period) pagedData, _ := data.MgoLimitFind(tableName, filter, int64(1)) return pagedData } func GetTimeNewPrice(contractCode string, from, to int64, period string) (decimal.Decimal, decimal.Decimal, decimal.Decimal, decimal.Decimal, decimal.Decimal, decimal.Decimal) { filter := bson.M{"channel": fmt.Sprintf("market.%s.kline.%s", contractCode, period), "code": bson.M{"$gte": from, "$lte": to}} tableName := data.GetContractKLineTableName(period) pagedData, _ := data.MgoLimitFind(tableName, filter, int64(0)) var low, high, vol, amount, count, tradeTurnover decimal.Decimal for key, v := range pagedData { lows, _ := decimal.NewFromString(v.Low) highs, _ := decimal.NewFromString(v.High) vols, _ := decimal.NewFromString(v.Vol) amounts, _ := decimal.NewFromString(v.Amount) counts, _ := decimal.NewFromString(v.Count.(string)) tradeTurnovers, _ := decimal.NewFromString(v.TradeTurnover) if key == 0 { low = lows high = highs vol = vols amount = amounts count = counts tradeTurnover = tradeTurnovers continue } vol = vol.Add(vols) amount = vol.Add(amounts) count = vol.Add(counts) tradeTurnover = tradeTurnovers.Add(tradeTurnover) if low.GreaterThan(lows) { low = lows } if high.LessThan(highs) { high = highs } } return low, high, vol, amount, count, tradeTurnover }