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
|
{
|
/// <summary>
|
/// 企业查询处理器
|
/// </summary>
|
public class EnterprisesQueryHandler(
|
IRepository<Enterprise> rep,
|
IRepository<EnterpriseAuth> repEnterpriseAuth,
|
IRepository<DictionaryData> repDictionaryData
|
) :
|
IRequestHandler<GetEnterprisesQuery, PagedListQueryResult<GetEnterprisesQueryResultItem>>,
|
IRequestHandler<GetEnterpriseQuery, GetEnterpriseQueryResult>,
|
IRequestHandler<GetEnterpriseElectronSignSettingQuery, GetEnterpriseElectronSignSettingQueryResult>,
|
IRequestHandler<GetEnterpriseSmsSettingQuery, GetEnterpriseSmsSettingQueryResult>
|
{
|
private readonly IRepository<Enterprise> rep = rep;
|
private readonly IRepository<EnterpriseAuth> repEnterpriseAuth = repEnterpriseAuth;
|
|
/// <summary>
|
/// 查询企业信息分页列表数据
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<PagedListQueryResult<GetEnterprisesQueryResultItem>> 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 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.RealAccess.HasValue && e.SmsAccess.HasValue
|
});
|
return request.PageModel.GetPagedListAsync(s, cancellationToken: cancellationToken);
|
}
|
|
/// <summary>
|
/// 查询企业详情
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetEnterpriseQueryResult> Handle(GetEnterpriseQuery request, CancellationToken cancellationToken)
|
{
|
var model = await rep.AsQueryable().AsNoTracking()
|
.Where(it => it.Id == request.Id)
|
.ProjectToType<GetEnterpriseQueryResult>()
|
.FirstOrDefaultAsync(cancellationToken);
|
if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该企业");
|
model.UserName = await rep.Change<User>().AsQueryable().AsNoTracking()
|
.Where(it => it.EnterpriseId == model.Id)
|
.Select(it => it.UserName)
|
.FirstOrDefaultAsync(cancellationToken);
|
return model;
|
}
|
|
/// <summary>
|
/// 查询企业电子签配置
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetEnterpriseElectronSignSettingQueryResult> Handle(GetEnterpriseElectronSignSettingQuery request, CancellationToken cancellationToken)
|
{
|
var model = await rep.AsQueryable().AsNoTracking()
|
.Where(it => it.Id == request.Id)
|
.ProjectToType<GetEnterpriseElectronSignSettingQueryResult>()
|
.FirstOrDefaultAsync(cancellationToken);
|
if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该企业");
|
return model;
|
}
|
|
/// <summary>
|
/// 查询企业短信配置
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetEnterpriseSmsSettingQueryResult> Handle(GetEnterpriseSmsSettingQuery request, CancellationToken cancellationToken)
|
{
|
var model = await rep.AsQueryable().AsNoTracking()
|
.Where(it => it.Id == request.Id)
|
.ProjectToType<GetEnterpriseSmsSettingQueryResult>()
|
.FirstOrDefaultAsync(cancellationToken);
|
if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该企业");
|
return model;
|
}
|
}
|
}
|