using OnlineUserPool.Api; using OnlineUserPool.Model; using OnlineUserPool.Unility; using Serilog; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OnlineUserPool.Hander { public class MapRecordRankingHander : IHandle { private static List mapRecordRankings = new List(); private static object locker = new object();//防止服务端响应慢,多次加载 //private int top = ConfigHelp.Top; public MapRecordRankingHander() { Init(); } private void Init() { if (ConfigHelp.Top > 0) { var records = WebService.GetMapRouteRandomRecord(ConfigHelp.Top, null); var pageSize = 10; var pageCount = (int)Math.Ceiling(records.Count / (double)pageSize); for (int i = 0; i < pageCount; i++) { mapRecordRankings.AddRange(WebService.GetRecordFileFromServer(records.Skip(i * pageSize).Take(pageSize).Select(n => n.Id).ToList())); } } } /// /// 获取虚拟人物数据 /// /// public List GetVirtualUserData() { List msgModels = new List(); if(ConfigHelp.ShowVirtualUser == false) { return msgModels; } if (mapRecordRankings != null) { for (int i = 0; i < mapRecordRankings.Count; i++) { try { var item = mapRecordRankings[i]; item.CurrentIndex++; TargetData targetData = item.GetCurrentTargetData(); //List prop = new List() //{ // Math.Round(targetData._Speed, 2).ToString(), // targetData._Power.ToString(), // targetData._Cadence.ToString() //}; var weightKg = 0.0D; if(targetData._Power >= 0) { weightKg = Math.Round(targetData._Power / item.Weight, 2); } var info = new MsgModel() { exit = item.End, IsCompleted = item.End, MemberId = item.UserId,//虚拟的人Id变为负数 Point = new double[] { Math.Round(targetData._Lat, 6), Math.Round(targetData._Lon, 6) }, //Prop = string.Join(',', prop), RouteId = item.RouteId, EndDistance = Math.Round(targetData._Distance, 6), //ShowVirtual = true, CommandType = 1, //IsVirtual = true, Speed = targetData._Speed, WeightKg = weightKg, PreDistance = item.GetPreDistance() }; msgModels.Add(info); } catch (Exception e) { Log.Error("加载虚拟人物错误:" + e.Message + "\r\n" + e.StackTrace); } } } return msgModels; } /// /// 删除已经骑行完的人,添加新的人物进去 /// public void RemoveEndAndAddNewVirtualUser(int customerCount) { lock (locker) { mapRecordRankings.RemoveAll(n => n.End); //var virutalEndCount = mapRecordRankings.Count(d => d.UserId < 0 && d.End); var routeIds = mapRecordRankings.Select(n => n.RouteId).Distinct().ToList(); var top = ConfigHelp.Top; if(customerCount > 9) { top = 0; } if(top - mapRecordRankings.Count(d=>d.UserId<0) > 0) { var count = top - mapRecordRankings.Count(d => d.UserId < 0); var randomUser = WebService.GetMapRouteRandomRecord(count, routeIds); //var str = "参数:" + (ConfigHelp.Top - virutalEndCount) + "," + string.Join(",",routeIds) + "\r\n"; //str += "服务端返回:" + Newtonsoft.Json.JsonConvert.SerializeObject(randomUser) +"\r\n"; //Log.Information(str); var addRankings = WebService.GetRecordFileFromServer(randomUser.Select(n => n.Id).ToList()); mapRecordRankings.AddRange(addRankings); } } } } }