From a8b475881959d4a88d821951a615f03e7d0d1725 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 07 八月 2025 13:28:30 +0800
Subject: [PATCH] feat:字典优化

---
 FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs |  120 +++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 103 insertions(+), 17 deletions(-)

diff --git a/FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs b/FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs
index 70aa43d..fdece96 100644
--- a/FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs
+++ b/FlexJobApi.User.Application/Enterprises/Queries/EnterprisesQueryHandler.cs
@@ -1,5 +1,9 @@
 锘縰sing 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.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 = 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;
         }
     }
 }

--
Gitblit v1.9.1