void filter_NotifyOrderData(string data) { if (string.IsNullOrEmpty(data)) { return; } //_catchDataStatus = true;//有数据的时候就设置为得到数据状态 _currentBrowser.LastCatchDataTime = DateTime.Now; List <TradeDepthsEntity> diff = new List <TradeDepthsEntity>(); try { //var order = JsonConvert.DeserializeObject<BTMOrder>(data); var trade = JsonConvert.DeserializeObject <tradeInfo>(data); SetUpdateLabel?.Invoke(trade); if (!trade.tradeDepths.Any()) { LogPrint?.Invoke("没有抓取到数据"); } if (_lastdata != null) { diff = trade.tradeDepths.Except(_lastdata, Equality <TradeDepthsEntity> .CreateComparer(p => p.id)) .ToList(); } else { diff = trade.tradeDepths.ToList(); } _lastdata = trade.tradeDepths; NotifyOrderData?.Invoke(diff, trade); } catch (Exception e) { LogPrint?.Invoke(string.Format("{0}-{1}", "filter_NotifyOrderData", e.Message)); LoggerFactory.GetLog().Error("filter_NotifyOrderData 出错!", e); } }
void filter_NotifyOrderData(string data) { //_catchDataStatus = true;//有数据的时候就设置为得到数据状态 _currentBrowser.LastCatchDataTime = DateTime.Now; SetUpdateLabel?.Invoke(DateTime.Now); try { //var order = JsonConvert.DeserializeObject<BTMOrder>(data); //var order = JsonConvert.DeserializeObject(data); var entity = JsonConvert.DeserializeObject <Btc9Entity>(data); OrderEntity order = new OrderEntity() { max = entity.cmark.max_price, min = entity.cmark.min_price, sum = entity.cmark.H24_done_money, volume = entity.cmark.H24_done_num, data = data, sourcesite = "btc9" }; List <OrderDetailEntity> list = new List <OrderDetailEntity>(); foreach (var d in entity.ctrade) { OrderDetailEntity item = new OrderDetailEntity(); item.price = d.price; item.amount = d.amount; item.money = d.money; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 item.time = startTime.AddSeconds(d.add_time); item.type = d.type.Contains("red"); item.sourcesite = "btc9"; list.Add(item); } if (_lastdata == null) //下面代码是在一定程度上解决数据重复的问题. { _lastdata = list.FirstOrDefault(i => i.time == list.Max(a => a.time)); } else { var _index = list.FindIndex( i => i.time == _lastdata.time && i.price == _lastdata.price && i.type == _lastdata.type && i.amount == _lastdata.amount); if (_index == 0) { return; } else if (_index >= 1) { list.RemoveRange(_index, list.Count - _index); } _lastdata = _lastdata = list.FirstOrDefault(i => i.time == list.Max(a => a.time)); } NotifyOrderData?.Invoke(Prefix, order, list); } catch (Exception e) { LoggerFactory.GetLog().Error("filter_NotifyOrderData 出错!", e); } }
void filter_NotifyOrderData(string data) { //_catchDataStatus = true;//有数据的时候就设置为得到数据状态 _currentBrowser.LastCatchDataTime = DateTime.Now; SetUpdateLabel?.Invoke(DateTime.Now); try { //var order = JsonConvert.DeserializeObject<BTMOrder>(data); var order = JsonConvert.DeserializeObject <OrderEntity>(data); order.sourcesite = "jubi"; order.data = JsonConvert.SerializeObject(order.d); List <OrderDetailEntity> list = new List <OrderDetailEntity>(); foreach (var d in order.d) { OrderDetailEntity item = new OrderDetailEntity(); double p, am; double.TryParse(d[1], out p); item.price = p; double.TryParse(d[2], out am); item.amount = am; item.money = p * am; DateTime dt; DateTime.TryParse(d[4] + " " + d[0], out dt); item.time = dt; item.type = d[3] == "buy"; item.sourcesite = "jubi"; list.Add(item); } //var groupList= list.GroupBy(i => new {i.type, i.time}).Select(i => i).ToList(); //list.Clear(); //foreach (var orderDetailEntities in groupList)///分组合并同时间大资金分批的问题. //{ // OrderDetailEntity item = new OrderDetailEntity(); // item.amount = orderDetailEntities.Sum(i => i.amount); // item.money = orderDetailEntities.Sum(i => i.money); // item.time = orderDetailEntities.Key.time; // item.price = item.type // ? orderDetailEntities.Min(i => i.price) // : orderDetailEntities.Max(i => i.price); // item.type = orderDetailEntities.Key.type; // list.Add(item); //} if (_lastdata == null)//下面代码是在一定程度上解决数据重复的问题. { _lastdata = list.FirstOrDefault(i => i.time == list.Max(a => a.time)); } else { var _index = list.FindIndex( i => i.time == _lastdata.time && i.price == _lastdata.price && i.type == _lastdata.type && i.amount == _lastdata.amount); if (_index == 0) { return; } else if (_index >= 1) { list.RemoveRange(_index, list.Count - _index); } _lastdata = _lastdata = list.FirstOrDefault(i => i.time == list.Max(a => a.time)); } NotifyOrderData?.Invoke(Prefix, order, list); } catch (Exception e) { LoggerFactory.GetLog().Error("filter_NotifyOrderData 出错!", e); } }