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;
}
}
}