From a59e5d99a77fcb152e6fe49df78f69cb5fd6c5a0 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 19 八月 2025 15:58:10 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.CommonServer.Application/LogRecords/Queries/GetTraceIdLogQueryHandler.cs | 81 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 81 insertions(+), 0 deletions(-) diff --git a/FlexJobApi.CommonServer.Application/LogRecords/Queries/GetTraceIdLogQueryHandler.cs b/FlexJobApi.CommonServer.Application/LogRecords/Queries/GetTraceIdLogQueryHandler.cs new file mode 100644 index 0000000..3c629e7 --- /dev/null +++ b/FlexJobApi.CommonServer.Application/LogRecords/Queries/GetTraceIdLogQueryHandler.cs @@ -0,0 +1,81 @@ +锘縰sing FlexJobApi.Core; +using FlexJobApi.Core.Entities.Common; +using Furion.DatabaseAccessor; +using Furion.LinqBuilder; +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.CommonServer.Application +{ + /// <summary> + /// 璺熻釜Id鏃ュ織鏌ヨ + /// </summary> + public class GetTraceIdLogQueryHandler( + IRepository<ResourceLog, LogDbContextLocator> repResourceLog, + IRepository<ExceptionLog, LogDbContextLocator> repExceptionLog, + IRepository<DbAuditLog, LogDbContextLocator> repDbAuditLog, + IRepository<User> repUser + ) : + IRequestHandler<GetTraceIdLogQuery, GetTraceIdLogQueryResult> + { + private readonly IRepository<ResourceLog, LogDbContextLocator> repResourceLog = repResourceLog; + private readonly IRepository<ExceptionLog, LogDbContextLocator> repExceptionLog = repExceptionLog; + private readonly IRepository<DbAuditLog, LogDbContextLocator> repDbAuditLog = repDbAuditLog; + private readonly IRepository<User> repUser = repUser; + + /// <summary> + /// 璺熻釜Id鏃ュ織鏌ヨ + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<GetTraceIdLogQueryResult> Handle(GetTraceIdLogQuery request, CancellationToken cancellationToken) + { + var result = new GetTraceIdLogQueryResult(); + result.ResourceLogs = await repResourceLog.AsQueryable().AsNoTracking() + .Where(it => it.TraceId == request.TraceId) + .ProjectToType<GetResourceLogsQueryResultItem>() + .ToListAsync(); + result.ExceptionLogs = await repExceptionLog.AsQueryable().AsNoTracking() + .Where(it => it.TraceId == request.TraceId) + .ProjectToType<GetExceptionLogsQueryResultItem>() + .ToListAsync(); + result.DbAuditLogs = await repDbAuditLog.AsQueryable().AsNoTracking() + .Where(it => it.TraceId == request.TraceId) + .ProjectToType<GetDbAuditLogsQueryResultItem>() + .ToListAsync(); + var userIds = result.ResourceLogs.DistinctSelect(it => it.CreatedUserId.HasValue, it => it.CreatedUserId) + .Union(result.ExceptionLogs.DistinctSelect(it => it.CreatedUserId.HasValue, it => it.CreatedUserId)) + .Union(result.DbAuditLogs.DistinctSelect(it => it.CreatedUserId.HasValue, it => it.CreatedUserId)); + if (userIds.IsNullOrEmpty()) + { + var users = await repUser.AsQueryable().AsNoTracking() + .Where(it => userIds.Contains(it.Id)) + .ProjectToType<GetResourceLogsQueryResultItemCreatedUser>() + .ToListAsync(); + foreach (var log in result.ResourceLogs) + { + if (log.CreatedUserId.HasValue) + log.CreatedUser = users.FirstOrDefault(it => it.Id == log.CreatedUserId); + } + foreach (var log in result.ExceptionLogs) + { + if (log.CreatedUserId.HasValue) + log.CreatedUser = users.FirstOrDefault(it => it.Id == log.CreatedUserId); + } + foreach (var log in result.DbAuditLogs) + { + if (log.CreatedUserId.HasValue) + log.CreatedUser = users.FirstOrDefault(it => it.Id == log.CreatedUserId); + } + } + return result; + } + } +} -- Gitblit v1.9.1