fix 就餐人员列表恢复

This commit is contained in:
2024-11-22 15:33:16 +08:00
parent 405acce916
commit ab8781a6d9

View File

@@ -28,44 +28,42 @@ public class GainfoMealService : IGainfoMealService
public async Task<Pagination<GainfoMealResponse>> GetPageAsync(GainfoMealPageRequest request) public async Task<Pagination<GainfoMealResponse>> GetPageAsync(GainfoMealPageRequest request)
{ {
var factory = _currentUser.GetStringTenantId(); var factory = _currentUser.GetStringTenantId();
var page = await _dbContext.Queryable<GainfoEntity>().AS(request.IsLeave ? "GainfoLeave" : "Gainfo") var page = await _dbContext.Queryable<UserBalanceEntity>()
.LeftJoin<DepartmentEntity>((x, dept) => dept.No == x.DepartmentNo) .LeftJoin<GainfoEntity>((meal, gainfo) => meal.UserCode == gainfo.Code)
.LeftJoin<MealSupplementRecordEntity>((x, dept, ms) => ms.Code == x.Code) .LeftJoin<GainfoLeaveEntity>((meal, gainfo, gainfoLeave) => meal.UserCode == gainfoLeave.Code)
.Where(x => x.Factory == factory) .LeftJoin<DepartmentEntity>((meal, gainfo, gainfoLeave, dept1) => dept1.No == gainfo.DepartmentNo)
.WhereIF(request.Search.IsPresent(), x => x.Code == request.Search || x.Name == request.Search) .LeftJoin<DepartmentEntity>((meal, gainfo, gainfoLeave, dept1, dept2) => dept2.No == gainfoLeave.DepartmentNo)
.WhereIF(request.IsLeave && request.SearchDateTimePeriod.HasValue(), x => x.ResignationDate >= request.SearchDateTimePeriod.Start && .WhereIF(request.Search.IsPresent(), (meal, gainfo, gainfoLeave, dept1, dept2) => meal.UserCode == request.Search
x.ResignationDate <= request.SearchDateTimePeriod.End) || gainfo.Name == request.Search
.WhereIF(request.SearchDateTimePeriod.HasValue(), (x, dept, ms) => ms.Date >= request.SearchDateTimePeriod.Start && ms.Date <= request.SearchDateTimePeriod.End) || gainfoLeave.Name == request.Search)
.GroupBy((x, dept, ms) => new { UserCode = x.Code, UserName = x.Name, UserNo = x.No, DepartmentName = dept.Name }) .Where((meal, gainfo, gainfoLeave) => gainfo.Factory == factory || gainfoLeave.Factory == factory)
.Select((x, dept, ms) => new GainfoMealResponse .WhereIF(request.IsLeave, (meal, gainfo, gainfoLeave) => SqlFunc.Subqueryable<GainfoLeaveEntity>().Where(x => x.Code == meal.UserCode).Any())
.WhereIF(request.IsLeave && request.SearchDateTimePeriod.HasValue(), (meal, gainfo, gainfoLeave) => gainfoLeave.ResignationDate >= request.SearchDateTimePeriod.Start && gainfoLeave.ResignationDate <= request.SearchDateTimePeriod.End)
.Select((meal, gainfo, gainfoLeave, dept1, dept2) => new GainfoMealResponse
{ {
UserCode = x.Code, CurrentBalance = meal.Balance,
UserName = x.Name, UserCode = meal.UserCode,
UserNo = x.No, UserName = SqlFunc.IsNull(gainfo.Name, gainfoLeave.Name),
DepartmentName = dept.Name, UserNo = SqlFunc.IsNull(gainfo.No, gainfoLeave.No),
Status = request.IsLeave ? GainfoStatusEnumType.Leave : GainfoStatusEnumType.Working, DepartmentName = SqlFunc.IsNull(dept1.Name, dept2.Name),
CurrentMealSupplementAmount = SqlFunc.AggregateSum(ms.Amount), Status = SqlFunc.IsNullOrEmpty(gainfo.No) ? GainfoStatusEnumType.Leave : GainfoStatusEnumType.Working
//CurrentBalance = SqlFunc.AggregateSum(b.Amount)
}) })
.ToPageListAsync(request); .ToPageListAsync(request);
var userCodes = page.Data.Select(x => x.UserCode).ToList(); var userCodes = page.Data.Select(x => x.UserCode).ToList();
var summary = await _dbContext.Queryable<MealSupplementRecordEntity>()
var data = await _dbContext.Queryable<BalanceRecordEntity>().Where(x => x.Status == BalanceRecordStatusEnumType.Valid && x.Source != BalanceRecordSourceEnumType.EMealVoucher) .Where(x => userCodes.Contains(x.Code))
.Where(x => userCodes.Contains(x.UserCode)) .WhereIF(request.SearchDateTimePeriod.HasValue(), x => x.Date >= request.SearchDateTimePeriod.Start && x.Date <= request.SearchDateTimePeriod.End)
.GroupBy(x => x.UserCode) .GroupBy(x => x.Code)
.Select(x => new { x.UserCode, Balance = SqlFunc.AggregateSum(x.Amount) }).ToListAsync(); .Select(x => new
foreach (var item in page.Data)
{
var d1 = data.FirstOrDefault(x => x.UserCode == item.UserCode);
if (d1 != null)
{ {
item.CurrentBalance = d1.Balance; x.Code,
} Amount = SqlFunc.AggregateSum(x.Amount)
} })
.ToListAsync();
page.Data.ForEach(x => { x.CurrentMealSupplementAmount = summary.FirstOrDefault(item => item.Code == x.UserCode)?.Amount ?? 0; });
return page; return page;
} }