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 { private static List mapRecordRankings; private static object locker = new object();//防止服务端响应慢,多次加载 private int top = int.Parse(ConfigHelp.Top); public MapRecordRankingHander() { Init(); } private void Init() { var randomUser = WebService.GetMapRouteRandomUser(new RandomRankingUserRequestVM() { top = top }); mapRecordRankings = WebService.GetRecordFileFromServer(randomUser.Select(n => n.RankingId).ToList()); } /// /// 获取虚拟人物数据 /// /// public List GetVirtualUserData() { List msgModels = new List(); if (mapRecordRankings != null && mapRecordRankings.Count > 0) { for (int i = 0; i < mapRecordRankings.Count; i++) { try { var item = mapRecordRankings[i]; TargetData targetData = item.GetCurrentTargetData(); List prop = new List() { Math.Round(targetData._Speed, 2).ToString(), targetData._Power.ToString(), targetData._Cadence.ToString() }; msgModels.Add(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 = targetData._Distance, ShowVirtual = true, CommandType = 1, IsVirtual = true, Speed = targetData._Speed }); } catch (Exception e) { Log.Error("加载虚拟人物错误:" + e.Message); } } } return msgModels; } /// /// 删除已经骑行完的人,添加新的人物进去 /// public void RemoveEndAndAddNewVirtualUser() { lock (locker) { var end = mapRecordRankings.FindAll(n => n.End); if (end.Count == mapRecordRankings.Count) { Init(); } if (end.Count > 0) { mapRecordRankings.RemoveAll(n => n.End); var randomUser = WebService.GetMapRouteRandomUser(new RandomRankingUserRequestVM() { top = int.Parse(ConfigHelp.Top) - end.Count, ids = mapRecordRankings.Select(n => n.UserId.ToString()).ToList() }); var addRankings = WebService.GetRecordFileFromServer(randomUser.Select(n => n.RankingId).ToList()); mapRecordRankings.AddRange(addRankings); } } } } }