From 5c45bc53e2c18e45130c21048df4af4896455c6d Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 12 九月 2025 15:58:48 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs |  114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 109 insertions(+), 5 deletions(-)

diff --git a/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs b/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs
index 62f87f6..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,15 +25,19 @@
     /// 鍚屾鐢ㄦ埛鍛戒护澶勭悊鍣�
     /// </summary>
     public class SyncUserCommandHandler(
+            IMediator mediator,
             IRepository<User> repUser,
             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>
@@ -39,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);
@@ -52,19 +85,87 @@
                 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()
                     .Include(it => it.UserRoles)
@@ -97,6 +198,9 @@
                 await repUser.InsertAsync(user);
             else
                 await repUser.UpdateAsync(user);
+
+
+
             return user.Id;
         }
 

--
Gitblit v1.9.1