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);