diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoMealService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoMealService.cs index 949a555a..4b0351b8 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoMealService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoMealService.cs @@ -32,28 +32,26 @@ public class GainfoMealService : IGainfoMealService return await _dbContext.Queryable().AS(request.IsLeave ? "GainfoLeave" : "Gainfo") .LeftJoin((x, dept) => dept.No == x.DepartmentNo) + .LeftJoin((x, dept, ms) => ms.Code == x.Code) + .LeftJoin((x, dept, ms, b) => b.UserCode == x.Code) .WhereIF(request.Search.IsPresent(), x => x.Code == request.Search || x.Name == request.Search) .WhereIF(request.IsLeave && request.SearchDateTimePeriod.HasValue(), x => x.ResignationDate >= request.SearchDateTimePeriod.Start && x.ResignationDate <= request.SearchDateTimePeriod.End) - .Select((x, dept) => new GainfoMealResponse + .Where((x, dept, ms) => factories.Contains(ms.Factory)) + .WhereIF(request.SearchDateTimePeriod.HasValue(), (x, dept, ms) => ms.Date >= request.SearchDateTimePeriod.Start && ms.Date <= request.SearchDateTimePeriod.End) + .Where((x, dept, ms, b) => factories.Contains(b.TenantId)) + .Where((x, dept, ms, b) => b.Status == BalanceRecordStatusEnumType.Valid) + .Where((x, dept, ms, b) => b.Source != BalanceRecordSourceEnumType.EMealVoucher) + .GroupBy((x, dept, ms, b) => new { UserCode = x.Code, UserName = x.Name, UserNo = x.No, DepartmentName = dept.Name }) + .Select((x, dept, ms, b) => new GainfoMealResponse { UserCode = x.Code, UserName = x.Name, UserNo = x.No, DepartmentName = dept.Name, - Status = request.IsLeave - ? GainfoStatusEnumType.Leave - : GainfoStatusEnumType.Working, - CurrentMealSupplementAmount = SqlFunc.Subqueryable() - .Where(p => p.Code == x.Code) - .Where(p => factories.Contains(p.Factory)) - .WhereIF(request.SearchDateTimePeriod.HasValue(), p => p.Date >= request.SearchDateTimePeriod.Start && p.Date <= request.SearchDateTimePeriod.End) - .Sum(p => p.Amount), - CurrentBalance = SqlFunc.Subqueryable() - .Where(p => factories.Contains(p.TenantId)) - .Where(p => p.UserCode == x.Code && p.Status == BalanceRecordStatusEnumType.Valid && p.IsDeleted == false) - .Where(p => p.Source != BalanceRecordSourceEnumType.EMealVoucher) - .Sum(p => p.Amount) + Status = request.IsLeave ? GainfoStatusEnumType.Leave : GainfoStatusEnumType.Working, + CurrentMealSupplementAmount = SqlFunc.AggregateSum(ms.Amount), + CurrentBalance = SqlFunc.AggregateSum(b.Amount) }) .ToPageListAsync(request); }