From 4673b08e704474d4fa93c8f19eaa5a1df5726d22 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Tue, 13 Aug 2024 10:32:27 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E9=A4=90=E6=AC=A1=E5=B0=B1=E9=A4=90?= =?UTF-8?q?=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/BalanceSummaryController.cs | 9 ++++ .../Order/Dto/ShiftSummaryDto.cs | 9 ++++ .../BalanceRecordAnalysisByShiftRequest.cs | 29 +++++++++++++ .../BalanceRecordAnalysisShiftResponse.cs | 20 +++++++++ .../Order/Services/IBalanceSummaryService.cs | 5 ++- .../Implements/BalanceSummaryService.cs | 42 ++++++++++++++++++- .../Menu/Controllers/MenusController.cs | 1 + 7 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 Src/Dlhis.Canteen/Order/Dto/ShiftSummaryDto.cs create mode 100644 Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisByShiftRequest.cs create mode 100644 Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisShiftResponse.cs diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalanceSummaryController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalanceSummaryController.cs index 96e3cc09..4326f250 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/BalanceSummaryController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/BalanceSummaryController.cs @@ -41,4 +41,13 @@ public class BalanceSummaryController : ControllerBase { return await _balanceSummaryService.BalanceRecordAnalysisByCostIdAsync(); } + + /// + /// 用餐分析(餐次) + /// + [HttpGet("analysis/shift")] + public async Task BalanceRecordAnalysisByShiftAsync([FromQuery] BalanceRecordAnalysisByShiftRequest request) + { + return await _balanceSummaryService.BalanceRecordAnalysisByShiftAsync(request); + } } \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Dto/ShiftSummaryDto.cs b/Src/Dlhis.Canteen/Order/Dto/ShiftSummaryDto.cs new file mode 100644 index 00000000..5dfa4954 --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Dto/ShiftSummaryDto.cs @@ -0,0 +1,9 @@ +using Dlhis.Entity.Canteen.Enums; + +namespace Dlhis.Canteen.Order.Dto; + +public class ShiftSummaryDto +{ + public ShiftEnumType? Shift { get; set; } + public T Value { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisByShiftRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisByShiftRequest.cs new file mode 100644 index 00000000..65f99310 --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisByShiftRequest.cs @@ -0,0 +1,29 @@ +using System.ComponentModel.DataAnnotations; +using Kurisu.AspNetCore.CustomClass; +using Kurisu.AspNetCore.DataAccess.Dto; + +namespace Dlhis.Canteen.Order.Request; + +public class BalanceRecordAnalysisByShiftRequest : PageDto, IValidatableObject +{ + /// + /// 营业点 + /// + public List BusinessPlaceCodes { get; set; } + + /// + /// + /// + public DateTimePeriod SearchDateTimePeriod { get; set; } + + /// + public IEnumerable Validate(ValidationContext validationContext) + { + if (SearchDateTimePeriod is { End: not null }) + { + SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1); + } + + yield break; + } +} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisShiftResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisShiftResponse.cs new file mode 100644 index 00000000..5598845f --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisShiftResponse.cs @@ -0,0 +1,20 @@ +using Dlhis.Canteen.Order.Dto; +using Kurisu.AspNetCore.DataAccess.Dto; +using Kurisu.AspNetCore.Utils.Converters; +using Newtonsoft.Json; + +namespace Dlhis.Canteen.Order.Response; + +public class BalanceRecordAnalysisShiftResponse +{ + public decimal Amount { get; set; } + public Pagination Pagination { get; set; } +} + +public class BalanceRecordAnalysisShiftPageResponse +{ + [JsonConverter(typeof(ToDateJsonConverter))] + public DateTime Date { get; set; } + + public List> Shifts { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceSummaryService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceSummaryService.cs index 113be8c6..79707980 100644 --- a/Src/Dlhis.Canteen/Order/Services/IBalanceSummaryService.cs +++ b/Src/Dlhis.Canteen/Order/Services/IBalanceSummaryService.cs @@ -9,4 +9,7 @@ public interface IBalanceSummaryService : IScopeDependency Task BalanceRecordAnalysisAsync(BalanceRecordAnalysisRequest request); Task> BalanceRecordAnalysisByCostIdAsync(); -} + + + Task BalanceRecordAnalysisByShiftAsync(BalanceRecordAnalysisByShiftRequest request); +} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceSummaryService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceSummaryService.cs index 8db7ff01..cb79225a 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceSummaryService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceSummaryService.cs @@ -1,4 +1,6 @@ -using Dlhis.Canteen.Order.Request; +using System.Reflection; +using Dlhis.Canteen.Order.Dto; +using Dlhis.Canteen.Order.Request; using Dlhis.Canteen.Order.Response; using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; @@ -6,6 +8,7 @@ using Kurisu.AspNetCore.CustomClass; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; +using SqlSugar; namespace Dlhis.Canteen.Order.Services.Implements; @@ -85,4 +88,41 @@ public class BalanceSummaryService : IBalanceSummaryService return null; } + + + public async Task BalanceRecordAnalysisByShiftAsync(BalanceRecordAnalysisByShiftRequest request) + { + var queryable = _dbContext.Queryable() + .Where(x => x.Status == BalanceRecordStatusEnumType.Valid && x.Type == BalanceRecordTypeEnumType.Out) + .WhereIF(request.SearchDateTimePeriod.HasValue(), x => x.CostDate >= request.SearchDateTimePeriod.Start && x.CostDate <= request.SearchDateTimePeriod.End) + .WhereIF(request.BusinessPlaceCodes?.Any() == true, x => request.BusinessPlaceCodes.Contains(x.BusinessPlaceCode.Value)); + + var amount = await queryable.SumAsync(x => x.Amount); + + var count = typeof(ShiftEnumType).GetFields(BindingFlags.Public | BindingFlags.Static).Length; + + var result = await queryable.GroupBy(x => new { x.CostDate, x.ShiftType }) + .Select(x => new { x.CostDate, x.ShiftType, Amount = SqlFunc.AggregateSum(SqlFunc.Abs(x.Amount)) }) + .ToPageListAsync(request.PageIndex, count * request.PageSize); + + return new BalanceRecordAnalysisShiftResponse + { + Amount = amount, + Pagination = new Pagination + { + PageIndex = request.PageIndex, + PageSize = request.PageSize, + Total = result.Count, + Data = result.GroupBy(x => x.CostDate).Select(x => new BalanceRecordAnalysisShiftPageResponse + { + Date = x.Key, + Shifts = x.Select(item => new ShiftSummaryDto + { + Shift = item.ShiftType, + Value = item.Amount + }).ToList() + }).ToList() + } + }; + } } \ No newline at end of file diff --git a/Src/Dlhis.Sys/Menu/Controllers/MenusController.cs b/Src/Dlhis.Sys/Menu/Controllers/MenusController.cs index 63203c04..0f32e9ea 100644 --- a/Src/Dlhis.Sys/Menu/Controllers/MenusController.cs +++ b/Src/Dlhis.Sys/Menu/Controllers/MenusController.cs @@ -102,6 +102,7 @@ public class MenusController : ControllerBase /// [Authorize(Roles = "admin")] [HttpPost("reset")] + [Transactional] public async Task ResetAsync(List request) { await _menuService.ResetAsync(request);