fix 优化档案查询
This commit is contained in:
@@ -70,10 +70,6 @@ public class GainfoService : IGainfoService
|
||||
var where = LinqExpressionExtensions.False<GainfoEntity>();
|
||||
var factories = _currentUser.GetUserClaim("tenants").Split(",").ToList();
|
||||
|
||||
var role = _currentUser.GetRole();
|
||||
var jinkoCode = _currentUser.GetUserClaim("jinko-code") ?? string.Empty;
|
||||
var isAll = role is "admin" or "tenant-admin";
|
||||
|
||||
if (request.DepartmentSelections.Any())
|
||||
{
|
||||
foreach (var item in request.DepartmentSelections)
|
||||
@@ -91,6 +87,20 @@ public class GainfoService : IGainfoService
|
||||
where = where.Or(gainfo => factories.Contains(gainfo.Factory));
|
||||
}
|
||||
|
||||
if (request.SearchType.HasValue)
|
||||
{
|
||||
GainfoUserTypeEnumType userTypeEnumType = request.SearchType switch
|
||||
{
|
||||
GainfoSearchEnumType.Internal => GainfoUserTypeEnumType.Normal,
|
||||
GainfoSearchEnumType.Outsource => GainfoUserTypeEnumType.Outsource,
|
||||
GainfoSearchEnumType.BusinessTrip => throw new ArgumentNullException(request.SearchType?.ToString()),
|
||||
GainfoSearchEnumType.External => GainfoUserTypeEnumType.External,
|
||||
null => throw new ArgumentOutOfRangeException(request.SearchType?.ToString()),
|
||||
_ => throw new ArgumentOutOfRangeException(request.SearchType?.ToString())
|
||||
};
|
||||
where = where.And(x => x.Type == userTypeEnumType);
|
||||
}
|
||||
|
||||
|
||||
if (request.IsSearchAll)
|
||||
{
|
||||
@@ -122,19 +132,12 @@ public class GainfoService : IGainfoService
|
||||
CardTypeName = type.Display
|
||||
}, true)
|
||||
: _gainfoStore.Queryable(request.Status)
|
||||
.WhereIF(request.SearchType != GainfoSearchEnumType.BusinessTrip && request.DepartmentSelections?.Any() == true, where)
|
||||
.LeftJoin<DepartmentEntity>((gainfo, department) => gainfo.DepartmentNo == department.No)
|
||||
.LeftJoin<BasicTypeEntity>((gainfo, department, type) => type.Code == SqlFunc.ToString(gainfo.CardType) && type.Type == "timeperiod")
|
||||
.WhereIF(request.SearchType != GainfoSearchEnumType.BusinessTrip && request.DepartmentSelections?.Any() == false, gainfo => factories.Contains(gainfo.Factory))
|
||||
.WhereIF(request.SearchType == GainfoSearchEnumType.Internal, gainfo => SqlFunc.Subqueryable<OutsourceEntity>().Where(p => p.Code == gainfo.Code).NotAny())
|
||||
.WhereIF(request.SearchType == GainfoSearchEnumType.Outsource, gainfo =>
|
||||
SqlFunc.Subqueryable<OutsourceEntity>()
|
||||
.Where(p => p.Code == gainfo.Code)
|
||||
.WhereIF(!isAll, p => p.SapCode == jinkoCode)
|
||||
.Any()
|
||||
)
|
||||
.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.SearchType.HasValue == false, gainfo => SqlFunc.Subqueryable<BusinessTripEntity>()
|
||||
.Where(p => p.Code == gainfo.Code && factories.Contains(p.Destination) && SqlFunc.DateIsSame(p.BeginDate, today))
|
||||
.Any())
|
||||
.WhereIF(request.SearchType.HasValue, where)
|
||||
.WhereIF(request.Search.IsPresent(), gainfo =>
|
||||
gainfo.Name.Contains(request.Search)
|
||||
|| gainfo.Code == request.Search
|
||||
|
||||
Reference in New Issue
Block a user