sunpengfei
2025-08-18 ab92e760e8461f0a48b37786b0f5a78db744dca6
feat:开发
5个文件已修改
107 ■■■■■ 已修改文件
FlexJobApi.Core/Utils/JwtUtils/JwtHandler.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/ResourceUtils/ResourceActionFilter.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/JwtUtils/JwtHandler.cs
@@ -1,7 +1,18 @@
using Furion.Authorization;
using FlexJobApi.Core.Entities.Common;
using Furion;
using Furion.Authorization;
using Furion.DatabaseAccessor;
using Furion.DataEncryption;
using Furion.DistributedIDGenerator;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
namespace FlexJobApi.Core;
@@ -15,7 +26,52 @@
        {
            await AuthorizeHandleAsync(context);
        }
        else context.Fail();
        else
        {
            var resourceLog = new ResourceLog();
            resourceLog.CreatedTime = DateTimeOffset.Now;
            var stopwatch = Stopwatch.StartNew();
            var serviceScopeFactory = App.GetService<IServiceScopeFactory>();
            var serviceScope = serviceScopeFactory.CreateScope();
            var rep = serviceScope.ServiceProvider.GetRequiredService<IRepository<ResourceLog, LogDbContextLocator>>();
            resourceLog.Id = IDGen.NextID();
            resourceLog.TraceId = App.GetTraceId();
            resourceLog.Method = EnumUtils.GetEnum<EnumResourceMethod>(httpContext.Request.Method);
            resourceLog.Domain = $"{httpContext.Request.Scheme}://{httpContext.Request.Host}";
            resourceLog.Path = httpContext.Request.Path;
            resourceLog.ClientIpAddress = httpContext.GetRemoteIpAddressToIPv4();
            if (httpContext.Request.ContentType?.Contains("application/json") == true)
            {
                httpContext.Request.EnableBuffering(); // 允许多次读取
                var body = await new StreamReader(httpContext.Request.Body).ReadToEndAsync();
                httpContext.Request.Body.Position = 0; // 重置流位置
                resourceLog.Request = body;
            }
            else
            {
                resourceLog.Request = httpContext.Request.Query.ToJson();
            }
            resourceLog.RequestHeaders = httpContext.Request.Headers.ToJson();
            context.Fail();
            resourceLog.UpdatedTime = DateTimeOffset.Now;
            resourceLog.Response = new FriendlyResult<object>
            {
                TraceId = resourceLog.TraceId,
                Code = 401,
                Success = false,
                Timestamp = DateTime.Now.ToTimeStamp()
            }.ToJson();
            resourceLog.ResponseHeaders = httpContext.Response.Headers.ToJson();
            resourceLog.IsSuccess = false;
            stopwatch.Stop();
            resourceLog.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds;
            await rep.InsertNowAsync(resourceLog);
        }
    }
    /// <summary>
FlexJobApi.Core/Utils/ResourceUtils/ResourceActionFilter.cs
@@ -4,6 +4,7 @@
using Furion.DistributedIDGenerator;
using Furion.Schedule;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection;
@@ -48,7 +49,10 @@
            var actionContext = await next();
            resourceLog.UpdatedTime = DateTimeOffset.Now;
            resourceLog.Response = actionContext.Result.ToJson();
            if (actionContext.Result is JsonResult jsonResult)
            {
                resourceLog.Response = jsonResult.Value.ToJson();
            }
            resourceLog.ResponseHeaders = context.HttpContext.Response.Headers.ToJson();
            resourceLog.IsSuccess = actionContext.Exception == null;
FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
@@ -23,12 +23,14 @@
    /// 灵工命令处理器
    /// </summary>
    public class EnterpriseEmployeesCommandHandler(
            IRepository<EnterpriseEmployee> rep
            IRepository<EnterpriseEmployee> rep,
            IRepository<User> repUser
        ) :
        IRequestHandler<ImportEnterpriseEmployeesCommand, ImportEnterpriseEmployeesCommandResult>,
        IRequestHandler<EditEnterpriseEmployeeCommand, Guid>
    {
        private readonly IRepository<EnterpriseEmployee> rep = rep;
        private readonly IRepository<User> repUser = repUser;
        /// <summary>
        /// 导入灵工信息
@@ -44,6 +46,10 @@
            var identities = models.DistinctSelect(it => it.Identity);
            var enterpriseEmployees = await rep.AsQueryable()
                .Where(it => it.EnterpriseId == logier.EnterpriseId && identities.Contains(it.Identity))
                .ToListAsync();
            var userIds = enterpriseEmployees.DistinctSelect(it => it.UserId.HasValue, it => it.UserId!.Value);
            var users = await repUser.AsQueryable()
                .Where(it => userIds.Contains(it.Id))
                .ToListAsync();
            var successList = new List<ImportEnterpriseEmployeesCommandModel>();
            foreach (var model in models)
@@ -100,11 +106,26 @@
                    }
                    else
                    {
                        var canUpdate = true;
                        if (enterpriseEmployee.UserId.HasValue)
                        {
                            errors.Add("已报名无法修改信息");
                            var user = users.FirstOrDefault(it => it.Id == enterpriseEmployee.UserId.Value)!;
                            if (user.IsReal == true)
                            {
                                canUpdate = false;
                                errors.Add("已实名无法修改信息");
                            }
                            else
                            {
                                user.Name = model.Name;
                                user.ContactPhoneNumber = model.ContactPhoneNumber;
                                user.Gender = model.Gender;
                                user.Birthday = model.Birthday;
                                user.Age = model.Age;
                                await repUser.UpdateAsync(user);
                            }
                        }
                        else
                        if (canUpdate)
                        {
                            enterpriseEmployee.Name = model.Name;
                            enterpriseEmployee.ContactPhoneNumber = model.ContactPhoneNumber;
FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
@@ -692,7 +692,7 @@
            同步用户命令处理器
            </summary>
        </member>
        <member name="M:FlexJobApi.UserServer.Application.SyncUserCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise})">
        <member name="M:FlexJobApi.UserServer.Application.SyncUserCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Role})">
            <summary>
            同步用户命令处理器
            </summary>
FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs
@@ -65,9 +65,10 @@
                await repEnterprise.InsertAsync(enterprise);
            else
                await repEnterprise.UpdateAsync(enterprise);
            var user = await repUser.AsQueryable()
                    .Include(it => it.UserRoles)
                    .Where(it => it.Type == EnumUserType.Enterprise && it.UserName == request.UserName)
                    .Where(it => it.Type == EnumUserType.Enterprise && it.DataSource == request.DataSource && it.DataSourceId == request.DataSourceId)
                    .FirstOrDefaultAsync(cancellationToken);
            if (user == null)
            {
@@ -78,6 +79,10 @@
            {
                throw Oops.Oh(EnumErrorCodeType.s405, "账号");
            }
            var checkUserNameExist = await repUser.AsQueryable().AsNoTracking()
                .AnyAsync(it => it.Type == EnumUserType.Enterprise && it.UserName == request.UserName && it.Id != user.Id);
            if (checkUserNameExist) throw Oops.Oh(EnumErrorCodeType.s405, "账号");
            user.EnterpriseId = enterprise.Id;
            user.Level = 100;
            user.UserRoles = await repRole.AsQueryable().AsNoTracking()
@@ -106,7 +111,7 @@
            var user = await repUser.AsQueryable()
                .Include(it => it.UserRoles)
                .Include(it => it.UserManageIndustrialParks)
                .Where(it => it.Type == EnumUserType.Operation && it.UserName == request.UserName)
                .Where(it => it.Type == EnumUserType.Operation && it.DataSource == request.DataSource && it.DataSourceId == request.DataSourceId)
                .FirstOrDefaultAsync(cancellationToken);
            if (user == null)
            {
@@ -114,6 +119,9 @@
                user.Type = EnumUserType.Operation;
                user.Status = EnumUserStatus.Normal;
            }
            var checkUserNameExist = await repUser.AsQueryable().AsNoTracking()
                .AnyAsync(it => it.Type == EnumUserType.Operation && it.UserName == request.UserName && it.Id != user.Id);
            if (checkUserNameExist) throw Oops.Oh(EnumErrorCodeType.s405, "账号");
            request.Adapt(user);
            user.UserManageIndustrialParks = request.IndustrialParkIds.Select(it => new UserManageIndustrialPark
            {