ExQueryAppService.cs 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 WeApp.Configuration;
  14. using WeApp.TrainingCamp;
  15. using WeEngine.Statistic;
  16. namespace WeApp.BaseSystem.ExQuery
  17. {
  18. [AllowAnonymous, DisableAuditing]
  19. public class ExQueryAppService : IwbAppServiceBase, IExQueryAppService
  20. {
  21. public ExQueryAppService(IRepository<UserLoginAttempt, long> userLoginRepository, IRepository<CampInfo, string> campRepository, IRepository<CampGroupInfo, string> campGroupRepository)
  22. {
  23. _userLoginRepository = userLoginRepository;
  24. _campRepository = campRepository;
  25. _campGroupRepository = campGroupRepository;
  26. }
  27. protected IRepository<UserLoginAttempt, long> _userLoginRepository { get; }
  28. protected IRepository<CampInfo, string> _campRepository { get; }
  29. protected IRepository<CampGroupInfo, string> _campGroupRepository { get; }
  30. public async Task<StatisticDto> Statistic()
  31. {
  32. var date = DateTime.Now.AddHours(-2);
  33. var today = DateTime.Today;
  34. StatisticUserDto statisticUser = new StatisticUserDto
  35. {
  36. TotalLogin = await _userLoginRepository.CountAsync(a => a.Result == IwbLoginResultType.Success),
  37. TodayLogin = await _userLoginRepository.CountAsync(a => a.Result == IwbLoginResultType.Success && a.CreationTime >= today),
  38. Online = await _userLoginRepository.CountAsync(a => a.Result == IwbLoginResultType.Success && a.CreationTime >= date),
  39. Playing = await _campGroupRepository.CountAsync(a => a.CampGroupState != CampGroupStateDefinition.New && a.CampGroupState != CampGroupStateDefinition.End && a.CampGroupState != CampGroupStateDefinition.Error)
  40. };
  41. statisticUser.Online = statisticUser.Online < statisticUser.Playing ? statisticUser.Playing : statisticUser.Online;
  42. statisticUser.TodayLogin = statisticUser.TodayLogin < statisticUser.Online ? statisticUser.Online : statisticUser.TodayLogin;
  43. StatisticCampDto statisticCamp = new StatisticCampDto()
  44. {
  45. CampCount = await _campRepository.CountAsync(a => a.CampState != CampStateDefinition.New),
  46. PlayCount = await _campGroupRepository.CountAsync(a => a.CampGroupState != CampGroupStateDefinition.New),
  47. //PlayerTotalCount =
  48. TodayPlayCount = await _campGroupRepository.CountAsync(a => (a.CampGroupState != CampGroupStateDefinition.New) && a.CreationTime >= today),
  49. //TodayPlayerTotalCount =
  50. };
  51. statisticCamp.PlayerTotalCount = statisticCamp.PlayCount * 5;
  52. statisticCamp.TodayPlayerTotalCount = statisticCamp.TodayPlayCount * 5;
  53. List<PlayingCampDto> playingCamps = await _campGroupRepository.GetAllIncluding(a => a.CampInfo).Where(a =>
  54. a.CampInfo != null && (a.CampInfo.CampState == CampStateDefinition.Audit || a.CampInfo.CampState == CampStateDefinition.Run) && a.CampGroupState != CampGroupStateDefinition.End &&
  55. a.CampGroupState != CampGroupStateDefinition.Error).Select(a => new PlayingCampDto()
  56. {
  57. No = a.Id,
  58. Name = a.CampInfo.Name + " - " + a.Name,
  59. }).ToListAsync();
  60. StatisticDto statistic = new StatisticDto()
  61. {
  62. UserInfo = statisticUser,
  63. CampInfo = statisticCamp,
  64. PlayingInfo = playingCamps.Select(MapPlayingCampDto).ToList(),
  65. };
  66. return statistic;
  67. }
  68. private readonly string WebRootUrl = ConfigurationManager.AppSettings["WebRootUrl"]?.Ew("/") ?? "Http://ShVber.com:5027/";
  69. private PlayingCampDto MapPlayingCampDto(PlayingCampDto dto)
  70. {
  71. dto.Url = $"{WebRootUrl}Exercise/display/{dto.No}";
  72. return dto;
  73. }
  74. }
  75. }