fix 查询优化

This commit is contained in:
2024-11-19 14:12:19 +08:00
parent 7934ef5845
commit c371e2a8e5

View File

@@ -32,28 +32,26 @@ public class GainfoMealService : IGainfoMealService
return await _dbContext.Queryable<GainfoEntity>().AS(request.IsLeave ? "GainfoLeave" : "Gainfo")
.LeftJoin<DepartmentEntity>((x, dept) => dept.No == x.DepartmentNo)
.LeftJoin<MealSupplementRecordEntity>((x, dept, ms) => ms.Code == x.Code)
.LeftJoin<BalanceRecordEntity>((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<MealSupplementRecordEntity>()
.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<BalanceRecordEntity>()
.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);
}