feat 餐次就餐分析
This commit is contained in:
@@ -41,4 +41,13 @@ public class BalanceSummaryController : ControllerBase
|
|||||||
{
|
{
|
||||||
return await _balanceSummaryService.BalanceRecordAnalysisByCostIdAsync();
|
return await _balanceSummaryService.BalanceRecordAnalysisByCostIdAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用餐分析(餐次)
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet("analysis/shift")]
|
||||||
|
public async Task<BalanceRecordAnalysisShiftResponse> BalanceRecordAnalysisByShiftAsync([FromQuery] BalanceRecordAnalysisByShiftRequest request)
|
||||||
|
{
|
||||||
|
return await _balanceSummaryService.BalanceRecordAnalysisByShiftAsync(request);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
9
Src/Dlhis.Canteen/Order/Dto/ShiftSummaryDto.cs
Normal file
9
Src/Dlhis.Canteen/Order/Dto/ShiftSummaryDto.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
using Dlhis.Entity.Canteen.Enums;
|
||||||
|
|
||||||
|
namespace Dlhis.Canteen.Order.Dto;
|
||||||
|
|
||||||
|
public class ShiftSummaryDto<T>
|
||||||
|
{
|
||||||
|
public ShiftEnumType? Shift { get; set; }
|
||||||
|
public T Value { get; set; }
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 营业点
|
||||||
|
/// </summary>
|
||||||
|
public List<Guid> BusinessPlaceCodes { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public DateTimePeriod SearchDateTimePeriod { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
||||||
|
{
|
||||||
|
if (SearchDateTimePeriod is { End: not null })
|
||||||
|
{
|
||||||
|
SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<BalanceRecordAnalysisShiftPageResponse> Pagination { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class BalanceRecordAnalysisShiftPageResponse
|
||||||
|
{
|
||||||
|
[JsonConverter(typeof(ToDateJsonConverter))]
|
||||||
|
public DateTime Date { get; set; }
|
||||||
|
|
||||||
|
public List<ShiftSummaryDto<decimal>> Shifts { get; set; }
|
||||||
|
}
|
||||||
@@ -9,4 +9,7 @@ public interface IBalanceSummaryService : IScopeDependency
|
|||||||
Task<BalanceRecordAnalysisSummaryResponse> BalanceRecordAnalysisAsync(BalanceRecordAnalysisRequest request);
|
Task<BalanceRecordAnalysisSummaryResponse> BalanceRecordAnalysisAsync(BalanceRecordAnalysisRequest request);
|
||||||
|
|
||||||
Task<Pagination<BalanceRecordAnalysisByCostResponse>> BalanceRecordAnalysisByCostIdAsync();
|
Task<Pagination<BalanceRecordAnalysisByCostResponse>> BalanceRecordAnalysisByCostIdAsync();
|
||||||
|
|
||||||
|
|
||||||
|
Task<BalanceRecordAnalysisShiftResponse> BalanceRecordAnalysisByShiftAsync(BalanceRecordAnalysisByShiftRequest request);
|
||||||
}
|
}
|
||||||
@@ -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.Canteen.Order.Response;
|
||||||
using Dlhis.Entity.Canteen.Entities;
|
using Dlhis.Entity.Canteen.Entities;
|
||||||
using Dlhis.Entity.Canteen.Enums;
|
using Dlhis.Entity.Canteen.Enums;
|
||||||
@@ -6,6 +8,7 @@ using Kurisu.AspNetCore.CustomClass;
|
|||||||
using Kurisu.AspNetCore.DataAccess.Dto;
|
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||||
using Kurisu.AspNetCore.DataAccess.Extensions;
|
using Kurisu.AspNetCore.DataAccess.Extensions;
|
||||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
namespace Dlhis.Canteen.Order.Services.Implements;
|
namespace Dlhis.Canteen.Order.Services.Implements;
|
||||||
|
|
||||||
@@ -85,4 +88,41 @@ public class BalanceSummaryService : IBalanceSummaryService
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<BalanceRecordAnalysisShiftResponse> BalanceRecordAnalysisByShiftAsync(BalanceRecordAnalysisByShiftRequest request)
|
||||||
|
{
|
||||||
|
var queryable = _dbContext.Queryable<BalanceRecordEntity>()
|
||||||
|
.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<BalanceRecordAnalysisShiftPageResponse>
|
||||||
|
{
|
||||||
|
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<decimal>
|
||||||
|
{
|
||||||
|
Shift = item.ShiftType,
|
||||||
|
Value = item.Amount
|
||||||
|
}).ToList()
|
||||||
|
}).ToList()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -102,6 +102,7 @@ public class MenusController : ControllerBase
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[Authorize(Roles = "admin")]
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPost("reset")]
|
[HttpPost("reset")]
|
||||||
|
[Transactional]
|
||||||
public async Task ResetAsync(List<SaveMenuRequest> request)
|
public async Task ResetAsync(List<SaveMenuRequest> request)
|
||||||
{
|
{
|
||||||
await _menuService.ResetAsync(request);
|
await _menuService.ResetAsync(request);
|
||||||
|
|||||||
Reference in New Issue
Block a user