From 0e25fabc3a96cd35ca8824e841532c04389e006d Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 02 九月 2025 10:10:51 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs | 148 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 140 insertions(+), 8 deletions(-) diff --git a/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs b/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs index 7f4d91c..1f4906a 100644 --- a/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs @@ -1,9 +1,15 @@ 锘縰sing FlexJobApi.Core; +using FlexJobApi.Core.Models.ElectronSignServer.Common; +using FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals; +using FlexJobApi.Core.Models.ElectronSignServer.Users; +using Furion; using Furion.DatabaseAccessor; using Furion.DataEncryption; +using Furion.DistributedIDGenerator; using Furion.FriendlyException; using Mapster; using MediatR; +using Microsoft.AspNetCore.Components.Forms; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using System; @@ -19,14 +25,20 @@ /// 鍚屾鐢ㄦ埛鍛戒护澶勭悊鍣� /// </summary> public class SyncUserCommandHandler( + IMediator mediator, IRepository<User> repUser, - IRepository<Enterprise> repEnterprise + IRepository<Enterprise> repEnterprise, + IRepository<ElectronSignSetting> repElectronSignSetting, + IRepository<Role> repRole ) : IRequestHandler<SyncEnterpriseUserCommand, Guid>, IRequestHandler<SyncOperationUserCommand, Guid> { + private readonly IMediator mediator = mediator; private readonly IRepository<User> repUser = repUser; private readonly IRepository<Enterprise> repEnterprise = repEnterprise; + private readonly IRepository<ElectronSignSetting> repElectronSignSetting = repElectronSignSetting; + private readonly IRepository<Role> repRole = repRole; /// <summary> /// 鍚屾浼佷笟鐢ㄦ埛 @@ -37,11 +49,34 @@ public async Task<Guid> Handle(SyncEnterpriseUserCommand request, CancellationToken cancellationToken) { var enterprise = await repEnterprise.AsQueryable() + .Include(it => it.EnterpriseAuth) + .Include(it => it.ElectronSignSettings) .Where(it => it.SocietyCreditCode == request.Enterprise.SocietyCreditCode) .FirstOrDefaultAsync(cancellationToken); + + var add = false; if (enterprise == null) { + add = true; enterprise = new Enterprise(); + enterprise.Id = IDGen.NextID(); + if (request.Enterprise.ElectronSignAccesses.IsNotNull()) + { + request.Enterprise.ElectronSignAccesses = await repElectronSignSetting.AsQueryable().AsNoTracking() + .Where(it => request.Enterprise.ElectronSignAccesses.Contains(it.Access) && !it.IsDisabled) + .Select(it => it.Access) + .ToListAsync(); + } + enterprise.ElectronSignSettings = request.Enterprise.ElectronSignAccesses + .Select(it => new EnterpriseElectronSignSetting + { + ElectronSignAccess = it + }) + .ToList(); + } + if (request.Enterprise.EnterpriseAuth == null) + { + request.Enterprise.EnterpriseAuth = new SyncEnterpriseUserCommandEnterpriseAuth(); } request.Enterprise.Adapt(enterprise); enterprise.LicenseImage = GetOssUrl(enterprise.LicenseImage, request.Enterprise.LicenseImage); @@ -50,21 +85,91 @@ var result = await BaiduOcrUtils.OcrBusinessLicense(enterprise.LicenseImage); if (result?.Model != null) { - result.Model.Adapt(enterprise); + enterprise.EnterpriseType = result.Model.EnterpriseType; + enterprise.RegisteredCapital = result.Model.RegisteredCapital; + enterprise.EstablishmentDate = result.Model.EstablishmentDate; + enterprise.Address = result.Model.Address; + enterprise.MainBusiness = result.Model.MainBusiness; } } - if (enterprise.EnterpriseAuth != null) + + if (enterprise.EnterpriseAuth == null) + { + enterprise.EnterpriseAuth = new EnterpriseAuth(); + } + enterprise.EnterpriseAuth.EnterpriseName = enterprise.EnterpriseName; + enterprise.EnterpriseAuth.SocietyCreditCode = enterprise.SocietyCreditCode; + enterprise.EnterpriseAuth.LicenseImage = enterprise.LicenseImage; + enterprise.EnterpriseAuth.LegalPerson = enterprise.LegalPerson; + enterprise.EnterpriseAuth.LegalIdentity = enterprise.LegalIdentity; + if (request.Enterprise.EnterpriseAuth != null) { enterprise.EnterpriseAuth.IdentityImg = GetOssUrl(enterprise.EnterpriseAuth.IdentityImg, request.Enterprise.EnterpriseAuth.IdentityImg); enterprise.EnterpriseAuth.IdentityBackImg = GetOssUrl(enterprise.EnterpriseAuth.IdentityBackImg, request.Enterprise.EnterpriseAuth.IdentityBackImg); enterprise.EnterpriseAuth.BankCardImg = GetOssUrl(enterprise.EnterpriseAuth.BankCardImg, request.Enterprise.EnterpriseAuth.BankCardImg); } - if (enterprise.Id == Guid.Empty) - await repEnterprise.InsertAsync(enterprise); + + if (enterprise.EnterpriseAuth.ElectronSignEnterpriseId == null) + { + var resultRegOrUpdateUser = await new RegOrUpdateUserInput + { + OutUserId = enterprise.Id.ToString(), + UserType = EnumElectronSignUserType.Company, + EnterpriseName = enterprise.EnterpriseName, + SocietyCreditCode = enterprise.SocietyCreditCode, + Name = enterprise.EnterpriseAuth.Name ?? enterprise.Contacts, + Identity = enterprise.EnterpriseAuth.Identity, + Mobile = enterprise.EnterpriseAuth.PhoneNumber, + CertAccount = enterprise.EnterpriseAuth.CertAccount + }.SendHttpAsync<RegOrUpdateUserInput, ElectronSignServerResult<Guid?>>(EnumResourceHttpProvider.ElectronSignServerCustomer); + + if (resultRegOrUpdateUser?.Success == true) + { + enterprise.EnterpriseAuth.ElectronSignEnterpriseId = resultRegOrUpdateUser.Result; + } + else + { + throw Oops.Oh(EnumErrorCodeType.s510, resultRegOrUpdateUser?.Message ?? "娉ㄥ唽鐢靛瓙绛捐处鍙峰紓甯�"); + } + } + + if (enterprise.IsReal) + { + var resultReal = await new RealEnterpriseInputByCertAccountInput + { + CustomerId = App.GetConfig<Guid>("ElectronSignServer:AppId"), + OutUserId = enterprise.Id.ToString(), + EnterpriseName = enterprise.EnterpriseName, + SocietyCreditCode = enterprise.SocietyCreditCode, + Name = enterprise.EnterpriseAuth.Name ?? enterprise.Contacts, + Identity = enterprise.EnterpriseAuth.Identity, + Mobile = enterprise.EnterpriseAuth.PhoneNumber, + BankCard = enterprise.EnterpriseAuth.BankCard, + BankCardImgUrl = enterprise.EnterpriseAuth.BankCardImg, + LicenseUrl = enterprise.EnterpriseAuth.LicenseImage, + IdentityImgUrl = enterprise.EnterpriseAuth.IdentityImg, + IdentityBackImgUrl = enterprise.EnterpriseAuth.IdentityBackImg, + ProxyPowerAttorneyUrl = enterprise.EnterpriseAuth.ProxyPowerAttorneyUrl, + LegalPerson = enterprise.EnterpriseAuth.LegalPerson, + Proxy = enterprise.EnterpriseAuth.Proxy ?? false, + RealMethod = (EnumElectronSignPersonalRealMethod)enterprise.EnterpriseAuth.EnterpriseRealMethod!.Value, + CertAccount = enterprise.EnterpriseAuth.CertAccount + }.SendHttpAsync<RealEnterpriseInputByCertAccountInput, ElectronSignServerResult<RealEnterpriseInputByCertAccountOutput>>(EnumResourceHttpProvider.ElectronSignServerCustomer); + if (resultReal?.Success != true || resultReal?.Result.Status != EnumElectronSignRealStatus.Real) + { + throw Oops.Oh(EnumErrorCodeType.s510, resultReal?.Message ?? "璐﹀彿瀹炲悕寮傚父"); + } + enterprise.EnterpriseAuth.CertAccount = resultReal.Result.CertAccount; + } + + if (add) + await repEnterprise.InsertNowAsync(enterprise); else - await repEnterprise.UpdateAsync(enterprise); + await repEnterprise.UpdateNowAsync(enterprise); + var user = await repUser.AsQueryable() - .Where(it => it.Type == EnumUserType.Enterprise && it.UserName == request.UserName) + .Include(it => it.UserRoles) + .Where(it => it.Type == EnumUserType.Enterprise && it.DataSource == request.DataSource && it.DataSourceId == request.DataSourceId) .FirstOrDefaultAsync(cancellationToken); if (user == null) { @@ -75,12 +180,27 @@ { 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() + .Where(it => it.UserType == user.Type && it.MinLevel == 100) + .Select(it => new UserRole + { + RoleId = it.Id + }) + .ToListAsync(); request.Adapt(user); if (user.Id == Guid.Empty) await repUser.InsertAsync(user); else await repUser.UpdateAsync(user); + + + return user.Id; } @@ -93,8 +213,9 @@ public async Task<Guid> Handle(SyncOperationUserCommand request, CancellationToken cancellationToken) { 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) { @@ -102,11 +223,22 @@ 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 { IndustrialParkId = it }).ToList(); + user.Level = 100; + user.UserRoles = await repRole.AsQueryable().AsNoTracking() + .Where(it => it.UserType == user.Type && it.MinLevel == 100) + .Select(it => new UserRole + { + RoleId = it.Id + }) + .ToListAsync(); if (user.Id == Guid.Empty) await repUser.InsertAsync(user); else -- Gitblit v1.9.1