From 26824ab5f05816687e38d062f413b95220ae7518 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 22 八月 2025 10:08:04 +0800 Subject: [PATCH] fix:bug --- FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs | 100 +++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 91 insertions(+), 9 deletions(-) diff --git a/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs b/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs index 02ea6c3..06e9887 100644 --- a/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs @@ -1,6 +1,11 @@ 锘縰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; @@ -39,6 +44,7 @@ public async Task<Guid> Handle(SyncEnterpriseUserCommand request, CancellationToken cancellationToken) { var enterprise = await repEnterprise.AsQueryable() + .Include(it => it.EnterpriseAuth) .Where(it => it.SocietyCreditCode == request.Enterprise.SocietyCreditCode) .FirstOrDefaultAsync(cancellationToken); if (enterprise == null) @@ -52,22 +58,88 @@ 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.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); + 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; + 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); else await repEnterprise.UpdateAsync(enterprise); + + if (enterprise.EnterpriseAuth.ElectronSignEnterpriseId == null) + { + var resultRegOrUpdateUser = await new RegOrUpdateUserInput + { + OutUserId = enterprise.Id.ToString(), + UserType = EnumElectronSignUserType.Personal, + 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; + } + 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,10 +150,14 @@ { 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 <= user.Level) + .Where(it => it.UserType == user.Type && it.MinLevel == 100) .Select(it => new UserRole { RoleId = it.Id @@ -92,6 +168,9 @@ await repUser.InsertAsync(user); else await repUser.UpdateAsync(user); + + + return user.Id; } @@ -106,7 +185,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 +193,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 { @@ -121,7 +203,7 @@ }).ToList(); user.Level = 100; user.UserRoles = await repRole.AsQueryable().AsNoTracking() - .Where(it => it.UserType == user.Type && it.MinLevel <= user.Level) + .Where(it => it.UserType == user.Type && it.MinLevel == 100) .Select(it => new UserRole { RoleId = it.Id -- Gitblit v1.9.1