sunpengfei
2025-08-08 32288af3e5f12bc48d8360114c872fde5d9ff4a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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;
        }
    }
}