diff --git a/CnGalWebSite/CnGalWebSite.APIServer/Controllers/StoreInfoAPIController.cs b/CnGalWebSite/CnGalWebSite.APIServer/Controllers/StoreInfoAPIController.cs index 5a95a00035..770d4a8fdd 100644 --- a/CnGalWebSite/CnGalWebSite.APIServer/Controllers/StoreInfoAPIController.cs +++ b/CnGalWebSite/CnGalWebSite.APIServer/Controllers/StoreInfoAPIController.cs @@ -102,14 +102,13 @@ public async Task>> GetAllGameStoreInfo() /// [AllowAnonymous] [HttpGet] - public async Task> GetGameRevenueInfo([FromQuery] int year, [FromQuery] int page = 0, [FromQuery] int max = 20) + public async Task> GetGameRevenueInfo([FromQuery] int year, [FromQuery] int page = 0, [FromQuery] int max = 20, [FromQuery] int order = 0) { var games = await _storeInfoRepository.GetAll().AsNoTracking() .Include(s => s.Entry).ThenInclude(s => s.EntryStaffFromEntryNavigation).ThenInclude(s => s.ToEntryNavigation) .Where(s => s.PriceNow != null && s.PriceNow > 0 && s.Revenue != null && s.Revenue > 0 && s.EstimationOwnersMax != null && s.EstimationOwnersMax > 0 /*&& s.EstimationOwnersMin != null && s.EstimationOwnersMin > 0*/) .Where(s => s.Entry != null && s.Entry.PubulishTime != null && (year == 0 || s.Entry.PubulishTime.Value.Year == year)) .Where(s => s.State == StoreState.OnSale && s.PriceNow != null && s.Entry.IsHidden == false && string.IsNullOrWhiteSpace(s.Entry.Name) == false) - .OrderByDescending(s => s.Revenue) .ToListAsync(); games = games.DistinctBy(s => s.Link).ToList(); @@ -126,7 +125,7 @@ public async Task> GetGameRevenueInfo([Fr var price = item.Min(s => s.OriginalPrice); double? score = 0; - foreach(var info in item) + foreach (var info in item) { score += info.EvaluationCount * info.RecommendationRate; } @@ -141,6 +140,7 @@ public async Task> GetGameRevenueInfo([Fr var gameList = groupGames + .OrderByDescending(s => ((GameRevenueInfoOrderType)order == GameRevenueInfoOrderType.Revenue) ? s.Revenue : ((s.EstimationOwnersMax + s.EstimationOwnersMin) / 2 ?? 0)) .Skip(page * max) .Take(max) .ToList(); @@ -171,6 +171,7 @@ public async Task> GetGameRevenueInfo([Fr TotalPages = (games.Count + max - 1) / max }; } + [Authorize(Roles = "Admin")] [HttpPost] public async Task> List(QueryParameterModel model) diff --git a/CnGalWebSite/CnGalWebSite.DataModel/ViewModel/Stores/GameRevenueInfoViewModel.cs b/CnGalWebSite/CnGalWebSite.DataModel/ViewModel/Stores/GameRevenueInfoViewModel.cs index ee2e884bf4..d5cc0bedff 100644 --- a/CnGalWebSite/CnGalWebSite.DataModel/ViewModel/Stores/GameRevenueInfoViewModel.cs +++ b/CnGalWebSite/CnGalWebSite.DataModel/ViewModel/Stores/GameRevenueInfoViewModel.cs @@ -11,6 +11,7 @@ public class GameRevenueInfoCacheModel public int Max { get; set; } public int Page { get; set; } public int Year { get; set; } + public GameRevenueInfoOrderType Order { get; set; } } public class GameRevenueInfoViewModel @@ -61,4 +62,10 @@ public class GameRevenueInfoCardModel public DateTime? PublishTime { get; set; } } + + public enum GameRevenueInfoOrderType + { + Revenue, + Owner + } } diff --git a/CnGalWebSite/CnGalWebSite.Shared.MasaComponent/PC/Entries/Revenues/ScreenCard.razor b/CnGalWebSite/CnGalWebSite.Shared.MasaComponent/PC/Entries/Revenues/ScreenCard.razor index 2a26d35117..345a9e5741 100644 --- a/CnGalWebSite/CnGalWebSite.Shared.MasaComponent/PC/Entries/Revenues/ScreenCard.razor +++ b/CnGalWebSite/CnGalWebSite.Shared.MasaComponent/PC/Entries/Revenues/ScreenCard.razor @@ -17,10 +17,20 @@ 欢迎同好们一起参与到资料站编辑中
- ● 销量数据源采用 GamalyticTapTap ,收入是乘以原价获得的。所以肯定不准,图一乐就好 + ● 销量数据源采用 (Gamalytic + VG Insights) / 2 + TapTap ,收入是乘以原价获得的。所以肯定不准,图一乐就好
+ + + + + + + 全部 @@ -39,7 +49,11 @@ [Parameter] public int Year { get; set; } [Parameter] + public GameRevenueInfoOrderType Order { get; set; } + [Parameter] public EventCallback YearChanged { get; set; } + [Parameter] + public EventCallback OrderChanged { get; set; } public async Task ValueChanged(StringNumber year) @@ -50,4 +64,9 @@ } await YearChanged.InvokeAsync(year.ToInt32()); } + + public async Task OrderValueChanged(GameRevenueInfoOrderType order) + { + await OrderChanged.InvokeAsync(order); + } } diff --git a/CnGalWebSite/CnGalWebSite.Shared/Pages/Normal/Entries/Revenues.razor b/CnGalWebSite/CnGalWebSite.Shared/Pages/Normal/Entries/Revenues.razor index 9b6d663174..11a22c1c0f 100644 --- a/CnGalWebSite/CnGalWebSite.Shared/Pages/Normal/Entries/Revenues.razor +++ b/CnGalWebSite/CnGalWebSite.Shared/Pages/Normal/Entries/Revenues.razor @@ -13,7 +13,7 @@
- +
@if (isReady == false) { @@ -50,6 +50,8 @@ public int Page { get; set; } [SupplyParameterFromQuery] public int Year { get; set; } + [SupplyParameterFromQuery] + public int Order { get; set; } GameRevenueInfoViewModel Model = new(); @@ -81,9 +83,10 @@ _dataCacheService.GameRevenueInfoCache.Page = Page; _dataCacheService.GameRevenueInfoCache.Max = Max; _dataCacheService.GameRevenueInfoCache.Year = Year; + _dataCacheService.GameRevenueInfoCache.Order = (GameRevenueInfoOrderType)Order; } - Model = await _pageModelCatche.GetCache($"api/storeinfo/GetGameRevenueInfo?page={_dataCacheService.GameRevenueInfoCache.Page - 1}&max={_dataCacheService.GameRevenueInfoCache.Max}&year={_dataCacheService.GameRevenueInfoCache.Year}"); + Model = await _pageModelCatche.GetCache($"api/storeinfo/GetGameRevenueInfo?page={_dataCacheService.GameRevenueInfoCache.Page - 1}&max={_dataCacheService.GameRevenueInfoCache.Max}&year={_dataCacheService.GameRevenueInfoCache.Year}&order={(int)_dataCacheService.GameRevenueInfoCache.Order}"); isReady = true; StateHasChanged(); @@ -109,17 +112,23 @@ _dataCacheService.GameRevenueInfoCache.Page = Page; _dataCacheService.GameRevenueInfoCache.Max = Max; _dataCacheService.GameRevenueInfoCache.Year = Year; + _dataCacheService.GameRevenueInfoCache.Order = (GameRevenueInfoOrderType)Order; await Refresh(); } public void YearChanged(int year) { - NavigationManager.NavigateTo($"/revenues?page={1}&max={_dataCacheService.GameRevenueInfoCache.Max}&year={year}"); + NavigationManager.NavigateTo($"/revenues?page={1}&max={_dataCacheService.GameRevenueInfoCache.Max}&year={year}&order={(int)_dataCacheService.GameRevenueInfoCache.Order}"); + } + + public void OrderChanged(GameRevenueInfoOrderType order) + { + NavigationManager.NavigateTo($"/revenues?page={1}&max={_dataCacheService.GameRevenueInfoCache.Max}&year={_dataCacheService.GameRevenueInfoCache.Year}&order={(int)order}"); } private void OnPageClick(int pageIndex) { - NavigationManager.NavigateTo($"/revenues?page={pageIndex}&max={_dataCacheService.GameRevenueInfoCache.Max}&year={_dataCacheService.GameRevenueInfoCache.Year}"); + NavigationManager.NavigateTo($"/revenues?page={pageIndex}&max={_dataCacheService.GameRevenueInfoCache.Max}&year={_dataCacheService.GameRevenueInfoCache.Year}&order={(int)_dataCacheService.GameRevenueInfoCache.Order}"); } public void Dispose()