sunpengfei
2025-08-07 a7287db2ada9ef606db5fe81cc8b66e2da44d345
FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs
@@ -1,5 +1,9 @@
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;
@@ -11,9 +15,19 @@
    /// <summary>
    /// 企业查询处理器
    /// </summary>
    public class EnterprisesQueryHandler
        : IRequestHandler<GetEnterprisesQuery, PagedListQueryResult<GetEnterprisesQueryResultItem>>
    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>
@@ -22,22 +36,94 @@
        /// <returns></returns>
        public Task<PagedListQueryResult<GetEnterprisesQueryResultItem>> Handle(GetEnterprisesQuery request, CancellationToken cancellationToken)
        {
            return request.PageModel.GetPagedListAsync<Enterprise, GetEnterprisesQueryResultItem>(
                q =>
                {
                    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)
                    {
            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.ProvinceId equals p.Id into pg
                     from pgi in pg.DefaultIfEmpty()
                     join c in repDictionaryData.AsQueryable().AsNoTracking() on e.CityId equals c.Id into cg
                     from cgi in cg.DefaultIfEmpty()
                     join i in repDictionaryData.AsQueryable().AsNoTracking() on e.IndustryTypeId equals i.Id 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);
        }
                    }
                    return q;
                }, 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<UserInfo>().AsQueryable().AsNoTracking()
                 .Include(it => it.UserAuth)
                 .Where(it => it.EnterpriseId == model.Id)
                 .Select(it => it.UserAuth.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;
        }
    }
}