using DocumentFormat.OpenXml.Office2010.Excel; using DocumentFormat.OpenXml.Office2010.PowerPoint; using Hotline.Enterprise; using Hotline.Orders; using Hotline.Share.Dtos.Order; using Hotline.Share.Dtos.Users; using Hotline.Users; using SqlSugar; using XF.Domain.Authentications; using XF.Domain.Dependency; using XF.Domain.Repository; namespace Hotline.Application.Enterprise; public class EnterpriseApplication : IEnterpriseApplication, IScopeDependency { private readonly IRepository _enterpriseSpecialistRepository; private readonly IRepository _userRepository; private readonly IRepository _orderRepository; private readonly ISessionContext _sessionContext; public EnterpriseApplication( IRepository enterpriseSpecialistRepository, IRepository userRepository, IRepository orderRepository, ISessionContext sessionContext) { _enterpriseSpecialistRepository = enterpriseSpecialistRepository; _userRepository = userRepository; _orderRepository = orderRepository; _sessionContext = sessionContext; } public ISugarQueryable QueryUsersForSpecialist(UserPagedDto request) { return _userRepository.Queryable() .Includes(d=>d.Account) .Where(d => SqlFunc.Subqueryable().Where(x => x.Id == d.Id).NotAny()) .WhereIF(!string.IsNullOrEmpty(request.PhoneNo), d => d.PhoneNo == request.PhoneNo) .WhereIF(!string.IsNullOrEmpty(request.Name), d => d.Name == request.Name); } public async Task> QueryEnterpriseSpecialistOrdersAsync(QueryOrderDto dto, CancellationToken cancellationToken) { var currentId = _sessionContext.RequiredUserId; var memberIds = await _enterpriseSpecialistRepository.Queryable() .Where(d => d.Id == currentId || d.ParentId == currentId) .Select(d => d.Id) .ToListAsync(cancellationToken); return _orderRepository.Queryable() .Where(d => memberIds.Contains(d.CreatorId)) .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Title.Contains(dto.No!)) .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!)) .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始 .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束 .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席 ; } }