using System; using System.Collections.Generic; using System.Configuration; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; using System.Web.Mvc; using Abp.Auditing; using Abp.Domain.Repositories; using IwbZero.Authorization.Base; using IwbZero.Authorization.Base.Users; using IwbZero.ToolCommon.StringModel; using WeEngine.Statistic; using WeOnlineApp.Configuration; using WeOnlineApp.TrainingCamp; namespace WeOnlineApp.BaseSystem.ExQuery { [AllowAnonymous, DisableAuditing] public class ExQueryAppService : IwbAppServiceBase, IExQueryAppService { public ExQueryAppService(IRepository userLoginRepository, IRepository cpuRepository, IRepository campRepository, IRepository campPlayRepository) { _userLoginRepository = userLoginRepository; _cpuRepository = cpuRepository; _campRepository = campRepository; _campPlayRepository = campPlayRepository; } protected IRepository _userLoginRepository { get; } protected IRepository _campRepository { get; } protected IRepository _campPlayRepository { get; } protected IRepository _cpuRepository { get; } public async Task Statistic() { var date = DateTime.Now.AddHours(-2); var today = DateTime.Today; StatisticUserDto statisticUser = new StatisticUserDto { TotalLogin = await _userLoginRepository.CountAsync(a => a.Result == IwbLoginResultType.Success), TodayLogin = await _userLoginRepository.CountAsync(a => a.Result == IwbLoginResultType.Success && a.CreationTime >= today), Online = await _userLoginRepository.CountAsync(a => a.Result == IwbLoginResultType.Success && a.CreationTime >= date), Playing = await _cpuRepository.CountAsync(a => a.PlayerState == CampPlayUserStateDefinition.Run) }; statisticUser.Online = statisticUser.Online < statisticUser.Playing ? statisticUser.Playing : statisticUser.Online; StatisticCampDto statisticCamp = new StatisticCampDto() { CampCount = await _campRepository.CountAsync(a => a.CampState == CampStateDefinition.Active), PlayCount = await _campPlayRepository.CountAsync(a => a.PlayState == CampPlayStateDefinition.Run || a.PlayState == CampPlayStateDefinition.End || a.PlayState == CampPlayStateDefinition.OverTime), PlayerTotalCount = await _cpuRepository.CountAsync(a => a.PlayerState == CampPlayUserStateDefinition.Run || a.PlayerState == CampPlayUserStateDefinition.End || a.PlayerState == CampPlayUserStateDefinition.Exit), TodayPlayCount = await _campPlayRepository.CountAsync(a => (a.PlayState == CampPlayStateDefinition.Run || a.PlayState == CampPlayStateDefinition.End || a.PlayState == CampPlayStateDefinition.OverTime) && a.CreationTime >= today), TodayPlayerTotalCount = await _cpuRepository.CountAsync(a => (a.PlayerState == CampPlayUserStateDefinition.Run || a.PlayerState == CampPlayUserStateDefinition.End || a.PlayerState == CampPlayUserStateDefinition.Exit) && a.CreationTime >= today), }; List playingCamps = await _campPlayRepository.GetAll().Where(a => a.PlayState == CampPlayStateDefinition.Run).Select(a => new PlayingCampDto() { No = a.Id, Name = a.Name, }).ToListAsync(); StatisticDto statistic = new StatisticDto() { UserInfo = statisticUser, CampInfo = statisticCamp, PlayingInfo = playingCamps.Select(MapPlayingCampDto).ToList(), }; return statistic; } private readonly string WebRootUrl = ConfigurationManager.AppSettings["WebRootUrl"]?.Ew("/") ?? "Http://ShVber.com:5028/"; private PlayingCampDto MapPlayingCampDto(PlayingCampDto dto) { dto.Url = $"{WebRootUrl}Play/display/{dto.No}"; return dto; } } }