This commit is contained in:
2024-08-14 16:35:22 +08:00
parent d26cee1166
commit 7b9bd95e1e

View File

@@ -78,30 +78,43 @@ public class GainfoService : IGainfoService
var today = DateTime.Today; var today = DateTime.Today;
var query = _gainfoStore.Queryable(request.Status) ISugarQueryable<GainfoPageResponse> queryable = request.IsSearchAll
.WhereIF(!request.IsSearchAll && request.SearchType != GainfoSearchEnumType.BusinessTrip && request.DepartmentSelections?.Any() == true, where) ? _gainfoStore.Queryable(request.Status)
.WhereIF(request.IsSearchAll && request.DepartmentSelections?.Any() == true, where) .WhereIF(request.DepartmentSelections?.Any() == true, where)
.LeftJoin<DepartmentEntity>((gainfo, department) => gainfo.DepartmentNo == department.No) .WhereIF(request.DepartmentSelections?.Any() == false, gainfo => factories.Contains(gainfo.Factory))
.LeftJoin<BasicTypeEntity>((gainfo, department, type) => type.Code == SqlFunc.ToString(gainfo.CardType) && type.Type == "timeperiod") .LeftJoin<DepartmentEntity>((gainfo, department) => gainfo.DepartmentNo == department.No)
.WhereIF(request.IsSearchAll && request.DepartmentSelections?.Any() == false, gainfo => factories.Contains(gainfo.Factory)) .LeftJoin<BasicTypeEntity>((gainfo, department, type) => type.Code == SqlFunc.ToString(gainfo.CardType) && type.Type == "timeperiod")
.WhereIF(request.IsSearchAll, gainfo => .WhereIF(request.Search.IsPresent(), gainfo =>
SqlFunc.Subqueryable<BusinessTripEntity>().Where(p => p.Code == gainfo.Code && factories.Contains(p.Destination) && SqlFunc.DateIsSame(p.BeginDate, today)).Any()) gainfo.Name.Contains(request.Search)
.WhereIF(!request.IsSearchAll && request.SearchType != GainfoSearchEnumType.BusinessTrip && request.DepartmentSelections?.Any() == false, gainfo => factories.Contains(gainfo.Factory)) || gainfo.Code == request.Search
.WhereIF(!request.IsSearchAll && request.SearchType == GainfoSearchEnumType.Internal, gainfo => SqlFunc.Subqueryable<OutsourceEntity>().Where(p => p.Code == gainfo.Code).NotAny()) || gainfo.IdNo == request.Search)
.WhereIF(!request.IsSearchAll && request.SearchType == GainfoSearchEnumType.Outsource, gainfo => SqlFunc.Subqueryable<OutsourceEntity>().Where(p => p.Code == gainfo.Code).Any()) .Select((gainfo, department, type) => new GainfoPageResponse
.WhereIF(!request.IsSearchAll && request.SearchType == GainfoSearchEnumType.BusinessTrip, gainfo => {
SqlFunc.Subqueryable<BusinessTripEntity>().Where(p => p.Code == gainfo.Code && factories.Contains(p.Destination) && SqlFunc.DateIsSame(p.BeginDate, today)).Any()) DepartmentName = department.Name,
.WhereIF(request.Search.IsPresent(), gainfo => CardType = gainfo.CardType,
gainfo.Name.Contains(request.Search) CardTypeName = type.Display
|| gainfo.Code == request.Search }, true)
|| gainfo.IdNo == request.Search) : _gainfoStore.Queryable(request.Status)
.Select((gainfo, department, type) => new GainfoPageResponse .WhereIF(request.SearchType != GainfoSearchEnumType.BusinessTrip && request.DepartmentSelections?.Any() == true, where)
{ .LeftJoin<DepartmentEntity>((gainfo, department) => gainfo.DepartmentNo == department.No)
DepartmentName = department.Name, .LeftJoin<BasicTypeEntity>((gainfo, department, type) => type.Code == SqlFunc.ToString(gainfo.CardType) && type.Type == "timeperiod")
CardType = gainfo.CardType, .WhereIF(request.SearchType != GainfoSearchEnumType.BusinessTrip && request.DepartmentSelections?.Any() == false, gainfo => factories.Contains(gainfo.Factory))
CardTypeName = type.Display .WhereIF(request.SearchType == GainfoSearchEnumType.Internal, gainfo => SqlFunc.Subqueryable<OutsourceEntity>().Where(p => p.Code == gainfo.Code).NotAny())
}, true); .WhereIF(request.SearchType == GainfoSearchEnumType.Outsource, gainfo => SqlFunc.Subqueryable<OutsourceEntity>().Where(p => p.Code == gainfo.Code).Any() && today >= gainfo.EntryDate && today <= gainfo.ResignationDate)
var page = await query.ToPageListAsync(request); .WhereIF(request.SearchType == GainfoSearchEnumType.BusinessTrip, gainfo =>
SqlFunc.Subqueryable<BusinessTripEntity>().Where(p => p.Code == gainfo.Code && factories.Contains(p.Destination) && SqlFunc.DateIsSame(p.BeginDate, today)).Any())
.WhereIF(request.Search.IsPresent(), gainfo =>
gainfo.Name.Contains(request.Search)
|| gainfo.Code == request.Search
|| gainfo.IdNo == request.Search)
.Select((gainfo, department, type) => new GainfoPageResponse
{
DepartmentName = department.Name,
CardType = gainfo.CardType,
CardTypeName = type.Display
}, true);
var page = await queryable.ToPageListAsync(request);
//外包人员部门号处理 //外包人员部门号处理
if (request.SearchType == GainfoSearchEnumType.Outsource) if (request.SearchType == GainfoSearchEnumType.Outsource)