using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.User.Application { /// /// 企业查询处理器 /// public class EnterprisesQueryHandler( IRepository rep, IRepository repEnterpriseAuth, IRepository repDictionaryData ) : IRequestHandler>, IRequestHandler, IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; private readonly IRepository repEnterpriseAuth = repEnterpriseAuth; /// /// 查询企业信息分页列表数据 /// /// /// /// public Task> Handle(GetEnterprisesQuery request, CancellationToken cancellationToken) { var q = rep.AsQueryable().AsNoTracking(); if (request.Keywords.IsNotNull()) { q = q.Where(it => it.EnterpriseAuth.EnterpriseName.Contains(request.Keywords) || it.EnterpriseAuth.LegalPerson.Contains(request.Keywords) || it.Contacts.Contains(request.Keywords)); } if (request.IsConfigured.HasValue) { q = q.Where(it => (it.IsCheckedBankCard && it.RealAccess.HasValue && it.SmsAccess.HasValue) == request.IsConfigured); } var s = (from e in q join a in repEnterpriseAuth.AsQueryable().AsNoTracking() on e.EnterpriseAuthId equals a.Id join p in repDictionaryData.AsQueryable().AsNoTracking() on e.ProvinceCode equals p.Code into pg from pgi in pg.DefaultIfEmpty() join c in repDictionaryData.AsQueryable().AsNoTracking() on e.CityCode equals c.Code into cg from cgi in cg.DefaultIfEmpty() join i in repDictionaryData.AsQueryable().AsNoTracking() on e.IndustryTypeCode equals i.Code into ig from igi in ig.DefaultIfEmpty() select new GetEnterprisesQueryResultItem { Id = e.Id, EnterpriseName = a.EnterpriseName, LegalPerson = a.LegalPerson, SocietyCreditCode = a.SocietyCreditCode, Contacts = e.Contacts, ContactPhoneNumber = e.ContactPhoneNumber, ProvinceContent = pgi.Content, CityContent = cgi.Content, IndustryTypeContent = igi.Content, IsReal = a.IsReal, IsConfigured = e.IsCheckedBankCard && e.RealAccess.HasValue && e.SmsAccess.HasValue }); return request.PageModel.GetPagedListAsync(s, cancellationToken: cancellationToken); } /// /// 查询企业详情 /// /// /// /// public async Task Handle(GetEnterpriseQuery request, CancellationToken cancellationToken) { var model = await rep.AsQueryable().AsNoTracking() .Where(it => it.Id == request.Id) .ProjectToType() .FirstOrDefaultAsync(cancellationToken); if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该企业"); model.UserName = await rep.Change().AsQueryable().AsNoTracking() .Include(it => it.UserAuth) .Where(it => it.EnterpriseId == model.Id) .Select(it => it.UserAuth.UserName) .FirstOrDefaultAsync(cancellationToken); return model; } /// /// 查询企业电子签配置 /// /// /// /// public async Task Handle(GetEnterpriseElectronSignSettingQuery request, CancellationToken cancellationToken) { var model = await rep.AsQueryable().AsNoTracking() .Where(it => it.Id == request.Id) .ProjectToType() .FirstOrDefaultAsync(cancellationToken); if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该企业"); return model; } /// /// 查询企业短信配置 /// /// /// /// public async Task Handle(GetEnterpriseSmsSettingQuery request, CancellationToken cancellationToken) { var model = await rep.AsQueryable().AsNoTracking() .Where(it => it.Id == request.Id) .ProjectToType() .FirstOrDefaultAsync(cancellationToken); if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该企业"); return model; } } }