fix 查询优化
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user