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.UserServer.Application { /// /// 企业查询处理器 /// public class EnterprisesQueryHandler( IRepository rep, IRepository repEnterpriseAuth, IRepository repDictionaryData, IRepository repTaskInfo ) : 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.EnterpriseName.Contains(request.Keywords) || it.LegalPerson.Contains(request.Keywords) || it.Contacts.Contains(request.Keywords)); } if (request.IsConfigured.HasValue) { q = q.Where(it => (it.IsCheckedBankCard && it.ElectronSignSettings.Any() && it.SmsAccess.HasValue) == request.IsConfigured); } var s = (from e in q 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 = e.EnterpriseName, LegalPerson = e.LegalPerson, SocietyCreditCode = e.SocietyCreditCode, Contacts = e.Contacts, ContactPhoneNumber = e.ContactPhoneNumber, ProvinceContent = pgi.Content, CityContent = cgi.Content, IndustryTypeContent = igi.Content, IsReal = e.IsReal, IsConfigured = e.IsCheckedBankCard && e.ElectronSignSettings.Any() && 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() .Where(it => it.EnterpriseId == model.Id) .Select(it => it.UserName) .FirstOrDefaultAsync(cancellationToken); model.TaskCount = await repTaskInfo.AsQueryable().AsNoTracking() .Where(it => it.EnterpriseId == request.Id && it.ReleaseStatus == EnumTaskReleaseStatus.InProcess) .CountAsync(); return model; } /// /// 查询企业电子签配置 /// /// /// /// public async Task Handle(GetEnterpriseElectronSignSettingQuery request, CancellationToken cancellationToken) { var model = await rep.AsQueryable().AsNoTracking() .Where(it => it.Id == request.Id) .Select(it => new GetEnterpriseElectronSignSettingQueryResult { Id = it.Id, ElectronSignAccesses = it.ElectronSignSettings.Select(s => s.ElectronSignAccess).ToList() }) .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; } } }