Files
jinko.yikatong/Src/Dlhis.Canteen/Order/Services/Implements/BalanceSummaryService.cs
2024-04-22 15:11:27 +08:00

53 lines
2.1 KiB
C#

using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response;
using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Enums;
using Kurisu.Core.CustomClass;
using Kurisu.Core.DataAccess.Dto;
using Kurisu.Core.DataAccess.Extensions;
using Kurisu.SqlSugar.Services;
namespace Dlhis.Canteen.Order.Services.Implements;
public class BalanceSummaryService : IBalanceSummaryService
{
private readonly IDbContext _dbContext;
public BalanceSummaryService(IDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<Pagination<BalanceRecordAnalysisResponse>> BalanceRecordAnalysisAsync(BalanceRecordAnalysisRequest request)
{
var list = await _dbContext.Queryable<BalanceRecordEntity>()
.WhereIF(request.SearchDateTimePeriod?.Start.HasValue == true && request.SearchDateTimePeriod?.End.HasValue == true,
record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End)
.WhereIF(request.BusinessPlaceCode.HasValue, record => record.BusinessPlaceCode == request.BusinessPlaceCode)
.Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
.ToListAsync();
var shifts = Enum.GetValues<ShiftEnumType>().ToList();
var page = list.GroupBy(record => record.CostDate.Date).Select(grp =>
{
return new BalanceRecordAnalysisResponse
{
Date = DateOnly.FromDateTime(grp.Key),
Items = shifts.Select(shift =>
{
return new KeyValueDto<ShiftEnumType, int>
{
Key = shift,
Value = grp.Where(x => x.ShiftType == shift).Select(x => x.UserNo).Distinct().Count()
};
}).ToList(),
Total = grp.Where(x => x.CostDate == grp.Key).Select(x => x.UserNo).Distinct().Count()
};
})
.ToPage(request);
return page;
}
}