sunpengfei
2025-08-20 a9ee8bf270eb8a3315808b24b41417be4b1a8a9a
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
128
129
130
131
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,
            IRepository<TaskInfo> repTaskInfo
        ) :
        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.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.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);
            model.TaskCount = await repTaskInfo.AsQueryable().AsNoTracking()
                .Where(it => it.EnterpriseId == request.Id && it.ReleaseStatus == EnumTaskReleaseStatus.InProcess)
                .CountAsync();
            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;
        }
    }
}