From 509f2b5d3ee9208ea6b86aae5d29194c654d67f5 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期三, 06 八月 2025 16:59:33 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/ApiFlexJob

---
 FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs |   67 +++++++++++++++++++++++++++++++++
 1 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs b/FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs
new file mode 100644
index 0000000..b83b5a3
--- /dev/null
+++ b/FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs
@@ -0,0 +1,67 @@
+锘縰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;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.User.Application
+{
+    /// <summary>
+    /// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鑿滃崟璇︽儏
+    /// </summary>
+    public class GetCurrentLogierMenuQueryHandler(
+            IRepository<Menu> repMenu,
+            IRepository<RoleMenu> repRoleMenu,
+            IRepository<UserInfoRole> repUserInfoRole
+        ) : IRequestHandler<GetCurrentLogierMenuQuery, GetMenuQueryResult>
+    {
+        private readonly IRepository<Menu> repMenu = repMenu;
+        private readonly IRepository<RoleMenu> repRoleMenu = repRoleMenu;
+        private readonly IRepository<UserInfoRole> repUserInfoRole = repUserInfoRole;
+
+        /// <inheritdoc/>
+        public async Task<GetMenuQueryResult> Handle(GetCurrentLogierMenuQuery request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var model = await repMenu.AsQueryable().AsNoTracking()
+                .Where(it => it.Id == request.Id)
+                .ProjectToType<GetMenuQueryResult>()
+                .FirstOrDefaultAsync(cancellationToken);
+            if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ヨ彍鍗�");
+            var items = await (from m in repMenu.AsQueryable().AsNoTracking()
+                               join rm in repRoleMenu.AsQueryable().AsNoTracking() on m.Id equals rm.MenuId
+                               join ur in repUserInfoRole.AsQueryable().AsNoTracking() on rm.RoleId equals ur.RoleId
+                               where m.ParentId == request.Id && ur.UserInfoId == logier.UserInfoId && !m.IsDisabled
+                               && (m.Type == EnumMenuType.Button || m.Type == EnumMenuType.Field)
+                               select m).ProjectToType<GetMenuQueryResultItem>().ToListAsync(cancellationToken);
+            model.Groups = items.GroupBy(it => it.Group ?? "default")
+                .Select(it => new GetMenuQueryResultGroup
+                {
+                    Group = it.Key,
+                    ButtonLocations = it
+                        .Where(l => l.Type == EnumMenuType.Button)
+                        .GroupBy(l => l.Location ?? "default")
+                        .Select(l => new GetMenuQueryResultButtonLocation
+                        {
+                            Location = l.Key,
+                            Buttons = l
+                                .ToList()
+                                .Adapt<List<GetMenuQueryResultButton>>()
+                        })
+                        .ToList(),
+                    Fields = it
+                        .Where(f => f.Type == EnumMenuType.Field)
+                        .ToList()
+                        .Adapt<List<GetMenuQueryResultField>>()
+                })
+                .ToList();
+            return model;
+        }
+    }
+}

--
Gitblit v1.9.1