From c108924b578a76c3152cbc569d3995d35130a505 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 21 八月 2025 18:57:55 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Models/ElectronSignServer/PersonalUserReals/RealEnterpriseInputByCertAccountInput.cs |  143 +++++++++++++++++++++++
 FlexJobApi.Core/FlexJobApi.Core.xml                                                                  |  115 +++++++++++++++++++
 FlexJobApi.Core/Models/ElectronSignServer/Common/ElectronSignServerResult.cs                         |    1 
 FlexJobApi.Core/Models/UserServer/Users/Commands/SyncEnterpriseUserCommand.cs                        |   12 ++
 FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs                           |   58 +++++++-
 5 files changed, 318 insertions(+), 11 deletions(-)

diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index d936be7..0a9ebb5 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/FlexJobApi.Core/FlexJobApi.Core.xml
@@ -4918,6 +4918,111 @@
             涓汉
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput">
+            <summary>
+            鏍规嵁璇佷功璐﹀彿浼佷笟瀹炲悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.CustomerId">
+            <summary>
+            瀹㈡埛Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.CertAccount">
+            <summary>
+            涓婁笂绛捐瘉涔﹁处鍙凤紙閫夊~锛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.OutUserId">
+            <summary>
+            澶栭儴浼佷笟Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.Proxy">
+            <summary>
+            鏄惁濮旀墭缁忓姙浜�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.RealMethod">
+            <summary>
+            娉曚汉/缁忓姙浜哄疄鍚嶈璇佹柟寮忥紙10涓汉鎵嬫満鍙蜂笁瑕佺礌 20閾惰鍗″瑕佺礌 30鍒疯劯璁よ瘉锛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.EnterpriseName">
+            <summary>
+            浼佷笟鍏ㄧО
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.SocietyCreditCode">
+            <summary>
+            缁熶竴绀句細淇$敤浠g爜
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.LicenseUrl">
+            <summary>
+            钀ヤ笟鎵х収鏂囦欢鍦板潃
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.LegalPerson">
+            <summary>
+            娉曚汉濮撳悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.Name">
+            <summary>
+            娉曚汉鎴栫粡鍔炰汉濮撳悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.Identity">
+            <summary>
+            娉曚汉鎴栫粡鍔炰汉韬唤璇佸彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.IdentityImgUrl">
+            <summary>
+            韬唤璇佷汉鍍忛潰Url
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.IdentityBackImgUrl">
+            <summary>
+            韬唤璇佸浗寰介潰Url
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.BankCard">
+            <summary>
+            娉曚汉鎴栫粡鍔炰汉閾惰鍗″彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.BankCardImgUrl">
+            <summary>
+            閾惰鍗$収鐗�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.Mobile">
+            <summary>
+            娉曚汉鎴栫粡鍔炰汉鎵嬫満鍙�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountInput.ProxyPowerAttorneyUrl">
+            <summary>
+            浼佷笟鎺堟潈涔�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountOutput.Id">
+            <summary>
+            璁よ瘉娴佹按鍙�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountOutput.Status">
+            <summary>
+            鐘舵�侊紙0鏈疄鍚� 10鏍¢獙涓� 99瀹炲悕澶辫触 100宸插疄鍚嶏級
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealEnterpriseInputByCertAccountOutput.CertAccount">
+            <summary>
+            涓婁笂绛捐瘉涔﹁处鍙凤紙閫夊~锛�
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals.RealPersonalInput">
             <summary>
             涓汉鐢ㄦ埛瀹炲悕
@@ -10595,6 +10700,16 @@
             娉曚汉鎴栫粡鍔炰汉瀹炲悕鏂瑰紡
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterpriseAuth.LegalPerson">
+            <summary>
+            娉曚汉濮撳悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterpriseAuth.LegalIdentity">
+            <summary>
+            娉曚汉韬唤璇佸彿
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.SyncEnterpriseUserCommandEnterpriseAuth.Name">
             <summary>
             娉曚汉鎴栫粡鍔炰汉濮撳悕
diff --git a/FlexJobApi.Core/Models/ElectronSignServer/Common/ElectronSignServerResult.cs b/FlexJobApi.Core/Models/ElectronSignServer/Common/ElectronSignServerResult.cs
index 6af3a64..2f34fa1 100644
--- a/FlexJobApi.Core/Models/ElectronSignServer/Common/ElectronSignServerResult.cs
+++ b/FlexJobApi.Core/Models/ElectronSignServer/Common/ElectronSignServerResult.cs
@@ -19,5 +19,6 @@
     {
         public string Code { get; set; }
         public string Message { get; set; }
+        public object Data { get; set; }
     }
 }
diff --git a/FlexJobApi.Core/Models/ElectronSignServer/PersonalUserReals/RealEnterpriseInputByCertAccountInput.cs b/FlexJobApi.Core/Models/ElectronSignServer/PersonalUserReals/RealEnterpriseInputByCertAccountInput.cs
new file mode 100644
index 0000000..5b25f32
--- /dev/null
+++ b/FlexJobApi.Core/Models/ElectronSignServer/PersonalUserReals/RealEnterpriseInputByCertAccountInput.cs
@@ -0,0 +1,143 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals
+{
+    /// <summary>
+    /// 鏍规嵁璇佷功璐﹀彿浼佷笟瀹炲悕
+    /// </summary>
+    [Resource([EnumResourceController.ElectronSignServerElectronSign], Method = EnumResourceMethod.Post, Route = "/api/ElectronSign/RealEnterpriseByCertAccount")]
+    public class RealEnterpriseInputByCertAccountInput
+    {
+        /// <summary>
+        /// 瀹㈡埛Id
+        /// </summary>
+        public Guid CustomerId { get; set; }
+
+        /// <summary>
+        /// 涓婁笂绛捐瘉涔﹁处鍙凤紙閫夊~锛�
+        /// </summary>
+        [DisplayName("涓婁笂绛捐瘉涔﹁处鍙�")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string CertAccount { get; set; }
+
+        /// <summary>
+        /// 澶栭儴浼佷笟Id
+        /// </summary>
+        [DisplayName("澶栭儴浼佷笟Id")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string OutUserId { get; set; }
+
+        /// <summary>
+        /// 鏄惁濮旀墭缁忓姙浜�
+        /// </summary>
+        public bool Proxy { get; set; }
+
+        /// <summary>
+        /// 娉曚汉/缁忓姙浜哄疄鍚嶈璇佹柟寮忥紙10涓汉鎵嬫満鍙蜂笁瑕佺礌 20閾惰鍗″瑕佺礌 30鍒疯劯璁よ瘉锛�
+        /// </summary>
+        [DisplayName("娉曚汉/缁忓姙浜哄疄鍚嶈璇佹柟寮�")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public EnumElectronSignPersonalRealMethod RealMethod { get; set; }
+
+        /// <summary>
+        /// 浼佷笟鍏ㄧО
+        /// </summary>
+        [DisplayName("浼佷笟鍏ㄧО")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string EnterpriseName { get; set; }
+
+        /// <summary>
+        /// 缁熶竴绀句細淇$敤浠g爜
+        /// </summary>
+        [DisplayName("缁熶竴绀句細淇$敤浠g爜")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string SocietyCreditCode { get; set; }
+
+        /// <summary>
+        /// 钀ヤ笟鎵х収鏂囦欢鍦板潃
+        /// </summary>
+        [DisplayName("钀ヤ笟鎵х収")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string LicenseUrl { get; set; }
+
+        /// <summary>
+        /// 娉曚汉濮撳悕
+        /// </summary>
+        [DisplayName("娉曚汉濮撳悕")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string LegalPerson { get; set; }
+
+        /// <summary>
+        /// 娉曚汉鎴栫粡鍔炰汉濮撳悕
+        /// </summary>
+        [DisplayName("娉曚汉鎴栫粡鍔炰汉濮撳悕")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 娉曚汉鎴栫粡鍔炰汉韬唤璇佸彿
+        /// </summary>
+        [DisplayName("娉曚汉鎴栫粡鍔炰汉韬唤璇佸彿")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string Identity { get; set; }
+
+        /// <summary>
+        /// 韬唤璇佷汉鍍忛潰Url
+        /// </summary>
+        [DisplayName("韬唤璇佷汉鍍忛潰Url")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string IdentityImgUrl { get; set; }
+
+        /// <summary>
+        /// 韬唤璇佸浗寰介潰Url
+        /// </summary>
+        [DisplayName("韬唤璇佸浗寰介潰Url")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string IdentityBackImgUrl { get; set; }
+
+        /// <summary>
+        /// 娉曚汉鎴栫粡鍔炰汉閾惰鍗″彿
+        /// </summary>
+        public string BankCard { get; set; }
+
+        /// <summary>
+        /// 閾惰鍗$収鐗�
+        /// </summary>
+        public string BankCardImgUrl { get; set; }
+
+        /// <summary>
+        /// 娉曚汉鎴栫粡鍔炰汉鎵嬫満鍙�
+        /// </summary>
+        [DisplayName("娉曚汉鎴栫粡鍔炰汉鎵嬫満鍙�")]
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// 浼佷笟鎺堟潈涔�
+        /// </summary>
+        public string ProxyPowerAttorneyUrl { get; set; }
+    }
+
+    public class RealEnterpriseInputByCertAccountOutput
+    {
+        /// <summary>
+        /// 璁よ瘉娴佹按鍙�
+        /// </summary>
+        public Guid Id { get; set; }
+
+        /// <summary>
+        /// 鐘舵�侊紙0鏈疄鍚� 10鏍¢獙涓� 99瀹炲悕澶辫触 100宸插疄鍚嶏級
+        /// </summary>
+        public EnumElectronSignRealStatus Status { get; set; }
+
+        /// <summary>
+        /// 涓婁笂绛捐瘉涔﹁处鍙凤紙閫夊~锛�
+        /// </summary>
+        public string CertAccount { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/UserServer/Users/Commands/SyncEnterpriseUserCommand.cs b/FlexJobApi.Core/Models/UserServer/Users/Commands/SyncEnterpriseUserCommand.cs
index 1d341eb..7e1fc6a 100644
--- a/FlexJobApi.Core/Models/UserServer/Users/Commands/SyncEnterpriseUserCommand.cs
+++ b/FlexJobApi.Core/Models/UserServer/Users/Commands/SyncEnterpriseUserCommand.cs
@@ -200,6 +200,18 @@
         public EnumPersonalRealMethod? PersonalRealMethod { get; set; }
 
         /// <summary>
+        /// 娉曚汉濮撳悕
+        /// </summary>
+        [MaxLength(32)]
+        public string LegalPerson { get; set; }
+
+        /// <summary>
+        /// 娉曚汉韬唤璇佸彿
+        /// </summary>
+        [MaxLength(18)]
+        public string LegalIdentity { get; set; }
+
+        /// <summary>
         /// 娉曚汉鎴栫粡鍔炰汉濮撳悕
         /// </summary>
         [MaxLength(32)]
diff --git a/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs b/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs
index 0e33dde..06e9887 100644
--- a/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/Users/Commands/SyncUserCommandHandler.cs
@@ -2,8 +2,10 @@
 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;
@@ -49,10 +51,6 @@
             {
                 enterprise = new Enterprise();
             }
-            if (enterprise.EnterpriseAuth == null)
-            {
-                enterprise.EnterpriseAuth = new EnterpriseAuth();
-            }
             request.Enterprise.Adapt(enterprise);
             enterprise.LicenseImage = GetOssUrl(enterprise.LicenseImage, request.Enterprise.LicenseImage);
             if (enterprise.LicenseImage.IsNotNull() && enterprise.EnterpriseType.IsNull())
@@ -60,8 +58,17 @@
                 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)
+            {
+                enterprise.EnterpriseAuth = new EnterpriseAuth();
             }
             enterprise.EnterpriseAuth.EnterpriseName = enterprise.EnterpriseName;
             enterprise.EnterpriseAuth.SocietyCreditCode = enterprise.SocietyCreditCode;
@@ -72,6 +79,11 @@
             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
@@ -80,7 +92,7 @@
                     UserType = EnumElectronSignUserType.Personal,
                     EnterpriseName = enterprise.EnterpriseName,
                     SocietyCreditCode = enterprise.SocietyCreditCode,
-                    Name = enterprise.EnterpriseAuth.Name,
+                    Name = enterprise.EnterpriseAuth.Name ?? enterprise.Contacts,
                     Identity = enterprise.EnterpriseAuth.Identity,
                     Mobile = enterprise.EnterpriseAuth.PhoneNumber,
                     CertAccount = enterprise.EnterpriseAuth.CertAccount
@@ -88,7 +100,7 @@
 
                 if (resultRegOrUpdateUser?.Success == true)
                 {
-                    enterprise!.EnterpriseAuth!.ElectronSignEnterpriseId = resultRegOrUpdateUser.Result;
+                    enterprise.EnterpriseAuth.ElectronSignEnterpriseId = resultRegOrUpdateUser.Result;
                 }
                 else
                 {
@@ -96,10 +108,34 @@
                 }
             }
 
-            if (enterprise.Id == Guid.Empty)
-                await repEnterprise.InsertAsync(enterprise);
-            else
-                await repEnterprise.UpdateAsync(enterprise);
+            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)

--
Gitblit v1.9.1