ExQueryAppService.cs 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Data.Entity;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using System.Web.Mvc;
  8. using Abp.Auditing;
  9. using Abp.Domain.Repositories;
  10. using IwbZero.Authorization.Base;
  11. using IwbZero.Authorization.Base.Users;
  12. using IwbZero.ToolCommon.StringModel;
  13. using WeEngine.Statistic;
  14. using WeOnlineApp.Configuration;
  15. using WeOnlineApp.TrainingCamp;
  16. namespace WeOnlineApp.BaseSystem.ExQuery
  17. {
  18. [AllowAnonymous, DisableAuditing]
  19. public class ExQueryAppService : IwbAppServiceBase, IExQueryAppService
  20. {
  21. public ExQueryAppService(IRepository<UserLoginAttempt, long> userLoginRepository, IRepository<CampPlayUserInfo> cpuRepository, IRepository<CampInfo, string> campRepository, IRepository<CampPlayInfo, string> campPlayRepository)
  22. {
  23. _userLoginRepository = userLoginRepository;
  24. _cpuRepository = cpuRepository;
  25. _campRepository = campRepository;
  26. _campPlayRepository = campPlayRepository;
  27. }
  28. protected IRepository<UserLoginAttempt, long> _userLoginRepository { get; }
  29. protected IRepository<CampInfo, string> _campRepository { get; }
  30. protected IRepository<CampPlayInfo, string> _campPlayRepository { get; }
  31. protected IRepository<CampPlayUserInfo> _cpuRepository { get; }
  32. public async Task<StatisticDto> Statistic()
  33. {
  34. var date = DateTime.Now.AddHours(-2);
  35. var today = DateTime.Today;
  36. StatisticUserDto statisticUser = new StatisticUserDto
  37. {
  38. TotalLogin = await _userLoginRepository.CountAsync(a => a.Result == IwbLoginResultType.Success),
  39. TodayLogin = await _userLoginRepository.CountAsync(a => a.Result == IwbLoginResultType.Success && a.CreationTime >= today),
  40. Online = await _userLoginRepository.CountAsync(a => a.Result == IwbLoginResultType.Success && a.CreationTime >= date),
  41. Playing = await _cpuRepository.CountAsync(a => a.PlayerState == CampPlayUserStateDefinition.Run)
  42. };
  43. statisticUser.Online = statisticUser.Online < statisticUser.Playing ? statisticUser.Playing : statisticUser.Online;
  44. StatisticCampDto statisticCamp = new StatisticCampDto()
  45. {
  46. CampCount = await _campRepository.CountAsync(a => a.CampState == CampStateDefinition.Active),
  47. PlayCount = await _campPlayRepository.CountAsync(a => a.PlayState == CampPlayStateDefinition.Run || a.PlayState == CampPlayStateDefinition.End || a.PlayState == CampPlayStateDefinition.OverTime),
  48. PlayerTotalCount = await _cpuRepository.CountAsync(a => a.PlayerState == CampPlayUserStateDefinition.Run || a.PlayerState == CampPlayUserStateDefinition.End || a.PlayerState == CampPlayUserStateDefinition.Exit),
  49. TodayPlayCount = await _campPlayRepository.CountAsync(a => (a.PlayState == CampPlayStateDefinition.Run || a.PlayState == CampPlayStateDefinition.End || a.PlayState == CampPlayStateDefinition.OverTime) && a.CreationTime >= today),
  50. TodayPlayerTotalCount = await _cpuRepository.CountAsync(a => (a.PlayerState == CampPlayUserStateDefinition.Run || a.PlayerState == CampPlayUserStateDefinition.End || a.PlayerState == CampPlayUserStateDefinition.Exit) && a.CreationTime >= today),
  51. };
  52. List<PlayingCampDto> playingCamps = await _campPlayRepository.GetAll().Where(a => a.PlayState == CampPlayStateDefinition.Run).Select(a => new PlayingCampDto()
  53. {
  54. No = a.Id,
  55. Name = a.Name,
  56. }).ToListAsync();
  57. StatisticDto statistic = new StatisticDto()
  58. {
  59. UserInfo = statisticUser,
  60. CampInfo = statisticCamp,
  61. PlayingInfo = playingCamps.Select(MapPlayingCampDto).ToList(),
  62. };
  63. return statistic;
  64. }
  65. private readonly string WebRootUrl = ConfigurationManager.AppSettings["WebRootUrl"]?.Ew("/") ?? "Http://ShVber.com:5028/";
  66. private PlayingCampDto MapPlayingCampDto(PlayingCampDto dto)
  67. {
  68. dto.Url = $"{WebRootUrl}Play/display/{dto.No}";
  69. return dto;
  70. }
  71. }
  72. }