From 224ddf1be582c49ff59ac78832be228a665a5ce2 Mon Sep 17 00:00:00 2001 From: cheche <717840555@qq.com> Date: Thu, 7 Mar 2024 09:33:13 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E9=A4=90=E9=A5=AE=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Order/Controllers/BalancesController.cs | 20 ++++ .../Order/Request/AverageDailyRequest.cs | 8 ++ .../Order/Request/SpendingDetailRequest.cs | 8 ++ .../Order/Response/AverageDailyResponse.cs | 25 +++++ .../Order/Response/SpendingDetailResponse.cs | 20 +++- .../Order/Services/IBalanceService.cs | 2 + .../Services/Implements/BalanceService.cs | 97 +++++++++++++++++-- 7 files changed, 168 insertions(+), 12 deletions(-) create mode 100644 Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs create mode 100644 Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs create mode 100644 Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs index a94dc314..b8ab1e83 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs @@ -147,6 +147,26 @@ public class BalancesController : ControllerBase return await _balanceService.GetConsumeNumberAsync(); } + /// + /// 消费人数详情 + /// + /// + [HttpGet("spendingDetails")] + public async Task> GetSpendingDetailsAsync([FromQuery]SpendingDetailRequest request) + { + return await _balanceService.GetSpendingDetailsAsync(request); + } + + /// + /// 日消费均额 + /// + /// + /// + [HttpGet("averageDaily")] + public async Task> AverageDailyAsync([FromQuery] AverageDailyRequest request) + { + return await _balanceService.AverageDailyAsync(request); + } /// /// 获取消费机详情 diff --git a/Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs b/Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs new file mode 100644 index 00000000..01a91d70 --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Request/AverageDailyRequest.cs @@ -0,0 +1,8 @@ +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.Canteen.Order.Request +{ + public class AverageDailyRequest : PageDto + { + } +} diff --git a/Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs b/Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs new file mode 100644 index 00000000..fcdcff5f --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Request/SpendingDetailRequest.cs @@ -0,0 +1,8 @@ +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.Canteen.Order.Request +{ + public class SpendingDetailRequest:PageDto + { + } +} diff --git a/Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs b/Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs new file mode 100644 index 00000000..92541825 --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Response/AverageDailyResponse.cs @@ -0,0 +1,25 @@ +namespace Dlhis.Canteen.Order.Response +{ + public class AverageDailyResponse + { + /// + /// 档案号/QRCode + /// + public string UserNo { get; set; } + + /// + /// 姓名 + /// + public string Name { get; set; } + + /// + /// 学工号 + /// + public string UserCode { get; set; } + + /// + /// 日消费均额 + /// + public int AverageAmount { get; set; } + } +} diff --git a/Src/Dlhis.Canteen/Order/Response/SpendingDetailResponse.cs b/Src/Dlhis.Canteen/Order/Response/SpendingDetailResponse.cs index ad309eb9..8ad95ac5 100644 --- a/Src/Dlhis.Canteen/Order/Response/SpendingDetailResponse.cs +++ b/Src/Dlhis.Canteen/Order/Response/SpendingDetailResponse.cs @@ -5,9 +5,9 @@ namespace Dlhis.Canteen.Order.Response public class SpendingDetailResponse { /// - /// 档案号 + /// 档案号/QRCode /// - public string No { get; set; } + public string UserNo { get; set; } /// /// 姓名 @@ -17,8 +17,22 @@ namespace Dlhis.Canteen.Order.Response /// /// 学工号 /// - public string Code { get; set; } + public string UserCode { get; set; } + /// + /// 部门号 + /// + public string DepartmentNo { get; set; } + + /// + /// 成本中心 + /// + public string CostId { get; set; } + + /// + /// 消费者所在基地 + /// + public string OriginTenantId { get; set; } } } diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs index 73c3497a..8302795d 100644 --- a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs @@ -27,7 +27,9 @@ public interface IBalanceService : IScopeDependency Task GetConsumeNumberAsync(); + Task> GetSpendingDetailsAsync(SpendingDetailRequest request); + Task> AverageDailyAsync(AverageDailyRequest request); Task> GetConsumeDeviceAsync(GetConsumeDeviceRequest request); diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index 94370d33..dcfc0ab5 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -12,6 +12,7 @@ using Kurisu.Core.DataAccess.Entity; using Kurisu.Core.User.Abstractions; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; +using Mapster; using Microsoft.AspNetCore.Mvc; using SqlSugar; @@ -565,7 +566,7 @@ public class BalanceService : IBalanceService .Where(x =>x.Status == CanteenBusinessPlaceStatusEnumType.Opened) .ToListAsync(); - var time = DateTime.Now.ToString("yyyy-MM-dd"); + //所有消费数据 var bs = await _dbContext.Queryable() .Where(x => x.Type == BalanceRecordTypeEnumType.Out) @@ -573,13 +574,8 @@ public class BalanceService : IBalanceService //可消费人数 var consumerable = bs.Select(x => x.UserCode).Distinct().Count(); - //当日消费数据 - var monthbs = bs - .Where(x => x.CostDateTime.ToString("yyyy-MM-dd") == time); - //当日消费额 - var monthlySpending = monthbs.Sum(x => x.Amount); - //当日消费人数 - var monthlyCount = monthbs.Select(x => x.UserCode).Distinct().Count(); + var dailyNumber = SameDay(bs,""); + //消费走势 var months = await GetConsumptionTrendsAsync(ConsumptionTrendEnumType.Month); @@ -591,15 +587,98 @@ public class BalanceService : IBalanceService OffNumber = offCount.Count, PlaceNumber = places.Count, ConsumerableNumber = consumerable, - DailyNumber = monthlyCount != 0 ? Math.Abs((int)Math.Ceiling(monthlySpending / monthlyCount)) : 0, + DailyNumber = dailyNumber, Days = days, Months = months }; return res; } + /// + /// 获取单日消费数据 + /// + /// + /// + /// + private int SameDay(List bs,string userCode) + { + var time = DateTime.Now.ToString("yyyy-MM-dd"); + var b = userCode.IsEmpty(); + //当日消费数据 + var monthbs = bs + .Where(x => x.CostDateTime.ToString("yyyy-MM-dd") == time) + .WhereIF(!userCode.IsEmpty(),x => x.UserCode == userCode); + //当日消费额 + var monthlySpending = monthbs.Sum(x => x.Amount); + //当日消费人数 + var monthlyCount = monthbs.Select(x => x.UserCode).Distinct().Count(); + var dailyNumber = monthlyCount != 0 ? Math.Abs((int)Math.Ceiling(monthlySpending / monthlyCount)) : 0; + return dailyNumber; + } + public async Task> GetSpendingDetailsAsync(SpendingDetailRequest request) + { + var brs = await _dbContext + .Queryable() + .Where(x => x.Type == BalanceRecordTypeEnumType.Out) + .ToListAsync(); + var codes = brs.Select(x => x.UserCode).ToList().Distinct().ToList(); + var lst = new List(); + foreach (var code in codes) + { + var br = brs.Where(x => x.UserCode == code).FirstOrDefault(); + var res = br.Adapt(); + lst.Add(res); + } + + // 分页操作 + var startIndex = (request.PageIndex - 1) * request.PageSize; + var pagedData = lst.Skip(startIndex).Take(request.PageSize).ToList(); + + var pagination = new Pagination + { + PageIndex = request.PageIndex, + PageSize = request.PageSize, + Total = lst.Count, // 使用原始列表的总数进行分页 + Data = pagedData + }; + + return pagination; + } + + public async Task> AverageDailyAsync(AverageDailyRequest request) + { + //所有消费数据 + var brs = await _dbContext.Queryable() + .Where(x => x.Type == BalanceRecordTypeEnumType.Out) + .ToListAsync(); + var codes = brs.Select(x => x.UserCode).ToList().Distinct().ToList(); + + var lst = new List(); + foreach (var code in codes) + { + var br = brs.Where(x => x.UserCode == code).FirstOrDefault(); + var res = br.Adapt(); + var dailyNumber = SameDay(brs,code); + res.AverageAmount = dailyNumber; + lst.Add(res); + } + + // 分页操作 + var startIndex = (request.PageIndex - 1) * request.PageSize; + var pagedData = lst.Skip(startIndex).Take(request.PageSize).ToList(); + + var pagination = new Pagination + { + PageIndex = request.PageIndex, + PageSize = request.PageSize, + Total = lst.Count, // 使用原始列表的总数进行分页 + Data = pagedData + }; + + return pagination; + } public async Task> GetConsumeDeviceAsync(GetConsumeDeviceRequest request) {