88 lines
3.7 KiB
C#
88 lines
3.7 KiB
C#
using Dlhis.Canteen.Order.Request;
|
|
using Dlhis.Canteen.Order.Response;
|
|
using Dlhis.Entity.Canteen.Entities;
|
|
using Dlhis.Entity.Canteen.Enums;
|
|
using Kurisu.AspNetCore.CustomClass;
|
|
using Kurisu.AspNetCore.DataAccess.Dto;
|
|
using Kurisu.AspNetCore.DataAccess.Extensions;
|
|
using Kurisu.AspNetCore.DataAccess.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<BalanceRecordAnalysisSummaryResponse> BalanceRecordAnalysisAsync(BalanceRecordAnalysisRequest request)
|
|
{
|
|
var list = await _dbContext.Queryable<BalanceRecordEntity>()
|
|
.WhereIF(request.SearchDateTimePeriod.HasValue(),
|
|
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 sum = list.Sum(x => Math.Abs(x.Amount));
|
|
|
|
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()
|
|
};
|
|
}).OrderByDescending(x => x.Date).ToPage(request);
|
|
|
|
return new BalanceRecordAnalysisSummaryResponse
|
|
{
|
|
Amount = sum,
|
|
Pagination = page
|
|
};
|
|
}
|
|
|
|
|
|
public async Task<Pagination<BalanceRecordAnalysisByCostResponse>> BalanceRecordAnalysisByCostIdAsync()
|
|
{
|
|
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()
|
|
};
|
|
}).OrderByDescending(x => x.Date);
|
|
|
|
return null;
|
|
}
|
|
} |