From b288e7effa0edc09baad6089433a38b2b29b29db Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期一, 08 九月 2025 15:33:03 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Entities/CommonEntity.cs                                                   |   39 ---
 FlexJobApi.Core/Entities/CommonServer/Resource.cs                                          |    5 
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskUserCollect.cs                            |    3 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs                      |    5 
 FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs                                  |    3 
 FlexJobApi.Core/Entities/UserServer/Users/User.cs                                          |    2 
 FlexJobApi.Core/Entities/UserServer/Users/UserAuth.cs                                      |    2 
 FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobDetail.cs                       |    2 
 FlexJobApi.Core/Entities/UserServer/UserResumes/UserPhoto.cs                               |    3 
 FlexJobApi.Core/FlexJobApi.Core.xml                                                        |   39 +--
 FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryData.cs                       |    2 
 FlexJobApi.Core/Entities/UserServer/Powers/UserRole.cs                                     |    3 
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoCredentialLimit.cs                    |    2 
 FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs  |   48 ++++
 FlexJobApi.Core/Entities/UserServer/ElectronSigns/EnterpriseElectronSignSetting.cs         |    3 
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmit.cs                         |    5 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseAuth.cs                          |    3 
 FlexJobApi.Core/Entities/UserServer/Powers/Role.cs                                         |    3 
 FlexJobApi.EntityFramework.Core/Startup.cs                                                 |    2 
 FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryCategory.cs                   |    5 
 FlexJobApi.Core/Models/CommonServer/SyncDatabases/Commands/SyncDatabaseCommand.cs          |   17 +
 FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml                |   18 +
 FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobTrigger.cs                      |    2 
 FlexJobApi.CommonServer.Application/SyncDatabases/Commands/SyncDatabaseCommandHandler.cs   |  152 +++++++++++++++
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs             |    3 
 FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplate.cs                      |    3 
 FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs                 |   82 ++++----
 FlexJobApi.Core/Entities/UserServer/Powers/RoleMenu.cs                                     |    3 
 FlexJobApi.Core/Entities/UserServer/Users/UserManageIndustrialPark.cs                      |    5 
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs                               |    2 
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs                                   |    2 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseUserCollect.cs                   |    5 
 FlexJobApi.Core/Entities/CommonServer/CodeUrl.cs                                           |    5 
 FlexJobApi.Core/Entities/UserServer/Powers/Menu.cs                                         |    2 
 FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs                              |    2 
 FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplateValue.cs                 |    3 
 FlexJobApi.Core/Entities/UserServer/Enterprises/Department.cs                              |    2 
 FlexJobApi.Web.Entry/appsettings.json                                                      |    8 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseCost.cs                          |    3 
 FlexJobApi.Core/Entities/UserServer/UserResumes/UserDepartment.cs                          |    5 
 FlexJobApi.Database.Migrations/REDEME.MD                                                   |    2 
 FlexJobApi.Core/Enums/Common/EnumResourceController.cs                                     |    5 
 FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetIdentityBackOcrCommand.cs         |    0 
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmitFile.cs                     |    5 
 FlexJobApi.Core/Entities/UserServer/UserResumes/UserCredential.cs                          |    2 
 FlexJobApi.EntityFramework.Core/DbContexts/SyncTargetDbContext.cs                          |   38 +++
 FlexJobApi.Core/Entities/UserServer/Powers/RoleResource.cs                                 |    3 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrder.cs     |    3 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs              |    3 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrderFile.cs |    3 
 FlexJobApi.Core/Entities/UserServer/ElectronSigns/ElectronSignSetting.cs                   |    3 
 FlexJobApi.Core/Entities/UserServer/UserResumes/UserExpectJob.cs                           |    2 
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoBenefit.cs                            |    2 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs                        |    6 
 FlexJobApi.Core/DbContextLocators/SyncTargetDbContextLocator.cs                            |   16 +
 55 files changed, 439 insertions(+), 157 deletions(-)

diff --git a/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml b/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
index d3a4a15..0d50fbc 100644
--- a/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
+++ b/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
@@ -311,5 +311,23 @@
         <member name="M:FlexJobApi.UserServer.Application.GetResourcesQueryHandler.Handle(FlexJobApi.Core.GetResourcesQuery,System.Threading.CancellationToken)">
             <inheritdoc/>
         </member>
+        <member name="T:FlexJobApi.Core.SyncDatabaseCommandHandler">
+            <summary>
+            鍚屾鏁版嵁搴�
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.Core.SyncDatabaseCommandHandler.#ctor">
+            <summary>
+            鍚屾鏁版嵁搴�
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.Core.SyncDatabaseCommandHandler.Handle(FlexJobApi.Core.SyncDatabaseCommand,System.Threading.CancellationToken)">
+            <summary>
+            鍚屾鏁版嵁搴�
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
     </members>
 </doc>
diff --git a/FlexJobApi.CommonServer.Application/SyncDatabases/Commands/SyncDatabaseCommandHandler.cs b/FlexJobApi.CommonServer.Application/SyncDatabases/Commands/SyncDatabaseCommandHandler.cs
new file mode 100644
index 0000000..baccac6
--- /dev/null
+++ b/FlexJobApi.CommonServer.Application/SyncDatabases/Commands/SyncDatabaseCommandHandler.cs
@@ -0,0 +1,152 @@
+锘縰sing Aop.Api.Domain;
+using EFCore.BulkExtensions;
+using Furion.DatabaseAccessor;
+using Furion.DatabaseAccessor.Extensions;
+using MediatR;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鍚屾鏁版嵁搴�
+    /// </summary>
+    public class SyncDatabaseCommandHandler() :
+        IRequestHandler<SyncDatabaseCommand, int>
+    {
+
+        /// <summary>
+        /// 鍚屾鏁版嵁搴�
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<int> Handle(SyncDatabaseCommand request, CancellationToken cancellationToken)
+        {
+            var count = 0;
+            count += await SyncData<DictionaryCategory>();
+            count += await SyncTreeData<DictionaryData>();
+            //count += await SyncData<ElectronSignSetting>();
+            //count += await SyncData<Enterprise>();
+            //count += await SyncData<EnterpriseAuth>();
+            //count += await SyncData<EnterpriseCost>();
+            //count += await SyncData<EnterpriseElectronSignSetting>();
+            //count += await SyncData<EnterpriseWallet>();
+            //count += await SyncData<EnterpriseWalletExpandindirectOrder>();
+            //count += await SyncData<EnterpriseWalletExpandindirectOrderFile>();
+            //count += await SyncData<User>();
+            //count += await SyncData<UserAuth>();
+            count += await SyncTreeData<Menu>();
+            count += await SyncData<Resource>();
+            count += await SyncData<Role>();
+            count += await SyncData<RoleMenu>();
+            count += await SyncData<RoleResource>();
+            //count += await SyncData<UserRole>();
+            //count += await SyncData<ContractTemplate>();
+            //count += await SyncData<ContractTemplateValue>();
+            return count;
+        }
+
+        private async Task<int> SyncData<TEntity>()
+            where TEntity : CommonEntity, new()
+        {
+            var count = 0;
+            var repTarget = Db.GetRepository<TEntity, SyncTargetDbContextLocator>();
+            var repSource = Db.GetRepository<TEntity, MasterDbContextLocator>();
+
+            var sources = await repSource.AsQueryable().AsNoTracking()
+                .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime)
+                .ToListAsync();
+            var targets = await repTarget.AsQueryable().AsNoTracking()
+                .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime)
+                .ToListAsync();
+
+            var adds = sources.Where(s => !targets.Any(t => s.Id == t.Id)).ToList();
+            if (adds.IsNotNull())
+            {
+                await repTarget.Context.BulkInsertAsync(adds);
+                count += adds.Count;
+            }
+
+            var updates = sources.Where(s => targets.Any(t => s.Id == t.Id)).ToList();
+            if (updates.IsNotNull())
+            {
+                await repTarget.Context.BulkUpdateAsync(updates);
+                count += updates.Count;
+            }
+
+            var deletes = targets.Where(s => sources.Any(t => s.Id == t.Id)).ToList();
+            if (deletes.IsNotNull())
+            {
+                await repTarget.Context.BulkUpdateAsync(deletes);
+                count += deletes.Count;
+            }
+
+            return count;
+        }
+
+        private async Task<int> SyncTreeData<TEntity>()
+            where TEntity : CommonEntity, ITreeData<TEntity>, new()
+        {
+            var count = 0;
+            var repTarget = Db.GetRepository<TEntity, SyncTargetDbContextLocator>();
+            var repSource = Db.GetRepository<TEntity, MasterDbContextLocator>();
+
+            var sourceData = await repSource.AsQueryable().AsNoTracking()
+                .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime)
+                .ToListAsync();
+            var targetData = await repTarget.AsQueryable().AsNoTracking()
+                .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime)
+                .ToListAsync();
+
+            var sources = new List<TEntity>();
+            var sourceParents = sourceData.Where(it => it.ParentId == null).ToList();
+            LoopTreeData(sources, sourceData, sourceParents);
+
+            var targets = new List<TEntity>();
+            var targetParents = targetData.Where(it => it.ParentId == null).ToList();
+            LoopTreeData(targets, targetData, targetParents);
+
+            var adds = sources.Where(s => !targets.Any(t => s.Id == t.Id)).ToList();
+            if (adds.IsNotNull())
+            {
+                await repTarget.Context.BulkInsertAsync(adds);
+                count += adds.Count;
+            }
+
+            var updates = sources.Where(s => targets.Any(t => s.Id == t.Id)).ToList();
+            if (updates.IsNotNull())
+            {
+                await repTarget.Context.BulkUpdateAsync(updates);
+                count += updates.Count;
+            }
+
+            var deletes = targets.Where(s => sources.Any(t => s.Id == t.Id)).ToList();
+            if (deletes.IsNotNull())
+            {
+                await repTarget.Context.BulkUpdateAsync(deletes);
+                count += deletes.Count;
+            }
+
+            return count;
+        }
+
+        private void LoopTreeData<TEntity>(List<TEntity> entities, List<TEntity> all, List<TEntity> parents)
+            where TEntity : CommonEntity, ITreeData<TEntity>, new()
+        {
+            if (parents.IsNotNull())
+            {
+                foreach (var parent in parents)
+                {
+                    entities.Add(parent);
+                    var children = all.Where(it => it.ParentId == parent.Id).ToList();
+                    LoopTreeData(entities, all, children);
+                }
+            }
+        }
+    }
+}
diff --git a/FlexJobApi.Core/DbContextLocators/SyncTargetDbContextLocator.cs b/FlexJobApi.Core/DbContextLocators/SyncTargetDbContextLocator.cs
new file mode 100644
index 0000000..50edb8b
--- /dev/null
+++ b/FlexJobApi.Core/DbContextLocators/SyncTargetDbContextLocator.cs
@@ -0,0 +1,16 @@
+锘縰sing Furion.DatabaseAccessor;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鍚屾鐩爣鏁版嵁搴撳畾浣嶅櫒
+    /// </summary>
+    public class SyncTargetDbContextLocator : IDbContextLocator
+    {
+    }
+}
diff --git a/FlexJobApi.Core/Entities/CommonEntity.cs b/FlexJobApi.Core/Entities/CommonEntity.cs
index 581872d..4506b19 100644
--- a/FlexJobApi.Core/Entities/CommonEntity.cs
+++ b/FlexJobApi.Core/Entities/CommonEntity.cs
@@ -9,41 +9,18 @@
 
 namespace FlexJobApi.Core
 {
-    public abstract class CommonEntity<TDbContextLocator1> : Entity<Guid, TDbContextLocator1>, IPrivateEntity
+    public abstract class CommonEntity<TDbContextLocator1, TDbContextLocator2> : CommonEntity, IPrivateEntity
         where TDbContextLocator1 : class, IDbContextLocator
+        where TDbContextLocator2 : class, IDbContextLocator
     {
-        /// <summary>
-        /// 鎺掑簭
-        /// </summary>
-        public virtual int Sort { get; set; }
-
-        /// <summary>
-        /// 璺熻釜Id
-        /// </summary>
-        public virtual string TraceId { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓鎿嶄綔浜�
-        /// </summary>
-        public virtual Guid? CreatedUserId { get; set; }
-
-        /// <summary>
-        /// 鍒涘缓浼佷笟Id
-        /// </summary>
-        public virtual Guid? CreatedEnterpriseId { get; set; }
-
-        /// <summary>
-        /// 鏈�鍚庢洿鏂版搷浣滀汉
-        /// </summary>
-        public virtual Guid? UpdatedUserId { get; set; }
-
-        /// <summary>
-        /// 鏄惁鍒犻櫎
-        /// </summary>
-        public virtual bool IsDeleted { get; set; }
     }
 
-    public abstract class CommonEntity : Entity<Guid>, IPrivateEntity
+    public abstract class CommonEntity<TDbContextLocator1> : CommonEntity, IPrivateEntity
+        where TDbContextLocator1 : class, IDbContextLocator
+    {
+    }
+
+    public abstract class CommonEntity : PrivateEntity<Guid>, IPrivateEntity
     {
         /// <summary>
         /// 涓婚敭Id
diff --git a/FlexJobApi.Core/Entities/CommonServer/CodeUrl.cs b/FlexJobApi.Core/Entities/CommonServer/CodeUrl.cs
index 4f706f0..c744c13 100644
--- a/FlexJobApi.Core/Entities/CommonServer/CodeUrl.cs
+++ b/FlexJobApi.Core/Entities/CommonServer/CodeUrl.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 缂栧彿鍦板潃
     /// </summary>
-    public class CodeUrl : CommonEntity
+    public class CodeUrl : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 鍦烘櫙
diff --git a/FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryCategory.cs b/FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryCategory.cs
index 2d3a1c1..0912521 100644
--- a/FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryCategory.cs
+++ b/FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryCategory.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,7 +11,7 @@
     /// <summary>
     /// 瀛楀吀绫诲埆
     /// </summary>
-    public class DictionaryCategory : CommonEntity
+    public class DictionaryCategory : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 缂栧彿
diff --git a/FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryData.cs b/FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryData.cs
index 13f5c64..acd11ff 100644
--- a/FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryData.cs
+++ b/FlexJobApi.Core/Entities/CommonServer/Dictionaries/DictionaryData.cs
@@ -13,7 +13,7 @@
     /// <summary>
     /// 瀛楀吀鏁版嵁
     /// </summary>
-    public class DictionaryData : CommonEntity, IEntityTypeBuilder<DictionaryData>, ITreeData<DictionaryData>, IIsDisabled, IDbAuditLogIgnore
+    public class DictionaryData : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>, IEntityTypeBuilder<DictionaryData>, ITreeData<DictionaryData>, IIsDisabled, IDbAuditLogIgnore
     {
         public DictionaryData()
         {
diff --git a/FlexJobApi.Core/Entities/CommonServer/Resource.cs b/FlexJobApi.Core/Entities/CommonServer/Resource.cs
index ce55b15..037c3cb 100644
--- a/FlexJobApi.Core/Entities/CommonServer/Resource.cs
+++ b/FlexJobApi.Core/Entities/CommonServer/Resource.cs
@@ -1,4 +1,5 @@
-锘縰sing Furion.FriendlyException;
+锘縰sing Furion.DatabaseAccessor;
+using Furion.FriendlyException;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
@@ -12,7 +13,7 @@
     /// <summary>
     /// 璧勬簮
     /// </summary>
-    public class Resource : CommonEntity, IDbAuditLogIgnore, IPhysicalDeletion
+    public class Resource : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>, IDbAuditLogIgnore, IPhysicalDeletion
     {
         /// <summary>
         /// 搴旂敤鍚嶇О
diff --git a/FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobDetail.cs b/FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobDetail.cs
index 1928cc2..51d2de6 100644
--- a/FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobDetail.cs
+++ b/FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobDetail.cs
@@ -10,7 +10,7 @@
     /// <summary>
     /// 瀹氭椂浠诲姟-浣滀笟璇︽儏
     /// </summary>
-    public class ScheduleJobDetail : CommonEntity, IDbAuditLogIgnore
+    public class ScheduleJobDetail : CommonEntity<MasterDbContextLocator>, IDbAuditLogIgnore
     {
         /// <summary>
         /// 浣滀笟Id
diff --git a/FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobTrigger.cs b/FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobTrigger.cs
index 1cf573b..bc469b0 100644
--- a/FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobTrigger.cs
+++ b/FlexJobApi.Core/Entities/CommonServer/Schedules/ScheduleJobTrigger.cs
@@ -11,7 +11,7 @@
     /// <summary>
     /// 瀹氭椂浠诲姟-浣滀笟瑙﹀彂鍣�
     /// </summary>
-    public class ScheduleJobTrigger : CommonEntity, IDbAuditLogIgnore
+    public class ScheduleJobTrigger : CommonEntity<MasterDbContextLocator>, IDbAuditLogIgnore
     {
         /// <summary>
         /// 浣滀笟瑙﹀彂鍣↖d
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs
index 7bde54c..9269de7 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs
@@ -14,7 +14,7 @@
     /// <summary>
     /// 浠诲姟淇℃伅
     /// </summary>
-    public class TaskInfo : CommonEntity, IEntityTypeBuilder<TaskInfo>
+    public class TaskInfo : CommonEntity<MasterDbContextLocator>, IEntityTypeBuilder<TaskInfo>
     {
         public TaskInfo()
         {
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoBenefit.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoBenefit.cs
index bac4fc8..b119843 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoBenefit.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoBenefit.cs
@@ -12,7 +12,7 @@
     /// <summary>
     /// 浠诲姟绂忓埄
     /// </summary>
-    public class TaskInfoBenefit : CommonEntity, IEntityTypeBuilder<TaskInfoBenefit>
+    public class TaskInfoBenefit : CommonEntity<MasterDbContextLocator>, IEntityTypeBuilder<TaskInfoBenefit>
     {
         /// <summary>
         /// 浠诲姟Id
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoCredentialLimit.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoCredentialLimit.cs
index 3bf4d7b..f36bd40 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoCredentialLimit.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoCredentialLimit.cs
@@ -10,7 +10,7 @@
 
 namespace FlexJobApi.Core
 {
-    public class TaskInfoCredentialLimit : CommonEntity, IEntityTypeBuilder<TaskInfoCredentialLimit>
+    public class TaskInfoCredentialLimit : CommonEntity<MasterDbContextLocator>, IEntityTypeBuilder<TaskInfoCredentialLimit>
     {
         /// <summary>
         /// 浠诲姟Id
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
index c2b64d0..0d8d0ec 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
@@ -12,7 +12,7 @@
     /// <summary>
     /// 浠诲姟浜哄憳淇℃伅
     /// </summary>
-    public class TaskInfoUser : CommonEntity, IEntityTypeBuilder<TaskInfoUser>
+    public class TaskInfoUser : CommonEntity<MasterDbContextLocator>, IEntityTypeBuilder<TaskInfoUser>
     {
         public TaskInfoUser()
         {
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmit.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmit.cs
index 36b2958..40d6bcf 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmit.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmit.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 浠诲姟浜哄憳鎻愪氦淇℃伅
     /// </summary>
-    public class TaskInfoUserSubmit : CommonEntity
+    public class TaskInfoUserSubmit : CommonEntity<MasterDbContextLocator>
     {
         public TaskInfoUserSubmit()
         {
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmitFile.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmitFile.cs
index 4a2d29c..a6c9918 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmitFile.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUserSubmitFile.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,7 +11,7 @@
     /// <summary>
     /// 浠诲姟浜哄憳鎻愪氦闄勪欢
     /// </summary>
-    public class TaskInfoUserSubmitFile : CommonEntity
+    public class TaskInfoUserSubmitFile : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 鎻愪氦Id
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskUserCollect.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskUserCollect.cs
index b036cea..4b2b7b5 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskUserCollect.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskUserCollect.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 鐢ㄦ埛浠诲姟鏀惰棌
     /// </summary>
-    public class TaskUserCollect : CommonEntity
+    public class TaskUserCollect : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 鐢ㄦ埛Id
diff --git a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplate.cs b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplate.cs
index 913ba3a..d1c2654 100644
--- a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplate.cs
+++ b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplate.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,7 +11,7 @@
     /// <summary>
     /// 鍚堝悓鍒剁増
     /// </summary>
-    public class ContractTemplate : CommonEntity, IIsDisabled
+    public class ContractTemplate : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>, IIsDisabled
     {
         public ContractTemplate()
         {
diff --git a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplateValue.cs b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplateValue.cs
index bb76c2b..ba32755 100644
--- a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplateValue.cs
+++ b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplateValue.cs
@@ -1,4 +1,5 @@
 锘縰sing FlexJobApi.Core.Enums.Users;
+using Furion.DatabaseAccessor;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -10,7 +11,7 @@
     /// <summary>
     /// 鍚堝悓妯℃澘鍙橀噺
     /// </summary>
-    public class ContractTemplateValue : CommonEntity, IPhysicalDeletion
+    public class ContractTemplateValue : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>, IPhysicalDeletion
     {
         /// <summary>
         /// 鍚堝悓妯℃澘Id
diff --git a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ElectronSignSetting.cs b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ElectronSignSetting.cs
index ac031a6..2f81e81 100644
--- a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ElectronSignSetting.cs
+++ b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ElectronSignSetting.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 鐢靛瓙绛鹃厤缃�
     /// </summary>
-    public class ElectronSignSetting : CommonEntity, IIsDisabled
+    public class ElectronSignSetting : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>, IIsDisabled
     {
         /// <summary>
         /// 閫氶亾
diff --git a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/EnterpriseElectronSignSetting.cs b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/EnterpriseElectronSignSetting.cs
index e09bf44..8b14728 100644
--- a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/EnterpriseElectronSignSetting.cs
+++ b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/EnterpriseElectronSignSetting.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 浼佷笟鐢靛瓙绛鹃厤缃�
     /// </summary>
-    public class EnterpriseElectronSignSetting : CommonEntity
+    public class EnterpriseElectronSignSetting : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 浼佷笟Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/Department.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/Department.cs
index 7a9fdcc..7721133 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/Department.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/Department.cs
@@ -13,7 +13,7 @@
     /// <summary>
     /// 閮ㄩ棬
     /// </summary>
-    public class Department : CommonEntity, IEntityTypeBuilder<Department>, IIsDisabled
+    public class Department : CommonEntity<MasterDbContextLocator>, IEntityTypeBuilder<Department>, IIsDisabled
     {
         public Department()
         {
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs
index be39061..c8a733d 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs
@@ -14,7 +14,7 @@
     /// <summary>
     /// 浼佷笟
     /// </summary>
-    public class Enterprise : CommonEntity, IEntityTypeBuilder<Enterprise>
+    public class Enterprise : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>, IEntityTypeBuilder<Enterprise>
     {
         public Enterprise()
         {
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseAuth.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseAuth.cs
index 5a17de2..0cc3daa 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseAuth.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseAuth.cs
@@ -1,4 +1,5 @@
 锘縰sing Mapster;
+using Furion.DatabaseAccessor;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
@@ -11,7 +12,7 @@
     /// <summary>
     /// 浼佷笟璁よ瘉
     /// </summary>
-    public class EnterpriseAuth : CommonEntity
+    public class EnterpriseAuth : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 浼佷笟淇℃伅
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseCost.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseCost.cs
index 88ab954..eb1e4c4 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseCost.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseCost.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 浼佷笟鐢ㄩ噺鏄庣粏
     /// </summary>
-    public class EnterpriseCost : CommonEntity
+    public class EnterpriseCost : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 浼佷笟Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs
index 87fc21a..5b763bb 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,7 +11,7 @@
     /// <summary>
     /// 鐏靛伐
     /// </summary>
-    public class EnterpriseEmployee : CommonEntity
+    public class EnterpriseEmployee : CommonEntity<MasterDbContextLocator>
     {
         public EnterpriseEmployee()
         {
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs
index bf992ac..f01f761 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 鐏靛伐鍚堝悓
     /// </summary>
-    public class EnterpriseEmployeeContract : CommonEntity
+    public class EnterpriseEmployeeContract : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 鐏靛伐Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseUserCollect.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseUserCollect.cs
index 311a309..e55c5ea 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseUserCollect.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseUserCollect.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 浼佷笟鏀惰棌鐢ㄦ埛
     /// </summary>
-    public class EnterpriseUserCollect : CommonEntity
+    public class EnterpriseUserCollect : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 浼佷笟Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs
index 48ec371..aaa535d 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs
@@ -1,4 +1,6 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -10,7 +12,7 @@
     /// <summary>
     /// 浼佷笟閽卞寘
     /// </summary>
-    public class EnterpriseWallet : CommonEntity
+    public class EnterpriseWallet : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 浼佷笟Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrder.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrder.cs
index f5b14db..034c3c9 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrder.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrder.cs
@@ -1,4 +1,5 @@
 锘縰sing Aop.Api.Domain;
+using Furion.DatabaseAccessor;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -11,7 +12,7 @@
     /// <summary>
     /// 浼佷笟閽卞寘-璧勯噾浜岀骇鍟嗘埛KYB浠h繘浠跺崟
     /// </summary>
-    public class EnterpriseWalletExpandindirectOrder : CommonEntity
+    public class EnterpriseWalletExpandindirectOrder : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         public EnterpriseWalletExpandindirectOrder()
         {
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrderFile.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrderFile.cs
index e6feaa3..be69e67 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrderFile.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletExpandindirectOrderFile.cs
@@ -1,4 +1,5 @@
 锘縰sing Aop.Api.Domain;
+using Furion.DatabaseAccessor;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -11,7 +12,7 @@
     /// <summary>
     /// 浼佷笟閽卞寘-璧勯噾浜岀骇鍟嗘埛KYB浠h繘浠跺崟-闄勪欢
     /// </summary>
-    public class EnterpriseWalletExpandindirectOrderFile : CommonEntity
+    public class EnterpriseWalletExpandindirectOrderFile : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 浠h繘浠跺崟Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs
index 5c56ca6..2eb09a6 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 浼佷笟閽卞寘浜ゆ槗璁板綍
     /// </summary>
-    public class EnterpriseWalletTransaction : CommonEntity
+    public class EnterpriseWalletTransaction : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 浼佷笟閽卞寘Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Powers/Menu.cs b/FlexJobApi.Core/Entities/UserServer/Powers/Menu.cs
index 6a5b7d1..90d4112 100644
--- a/FlexJobApi.Core/Entities/UserServer/Powers/Menu.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Powers/Menu.cs
@@ -13,7 +13,7 @@
     /// <summary>
     /// 鑿滃崟
     /// </summary>
-    public class Menu : CommonEntity, IEntityTypeBuilder<Menu>, ITreeData<Menu>, IIsDisabled
+    public class Menu : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>, IEntityTypeBuilder<Menu>, ITreeData<Menu>, IIsDisabled
     {
         public Menu()
         {
diff --git a/FlexJobApi.Core/Entities/UserServer/Powers/Role.cs b/FlexJobApi.Core/Entities/UserServer/Powers/Role.cs
index e1bee10..7fd6f3e 100644
--- a/FlexJobApi.Core/Entities/UserServer/Powers/Role.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Powers/Role.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,7 +11,7 @@
     /// <summary>
     /// 瑙掕壊
     /// </summary>
-    public class Role : CommonEntity, IIsDisabled
+    public class Role : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>, IIsDisabled
     {
         public Role()
         {
diff --git a/FlexJobApi.Core/Entities/UserServer/Powers/RoleMenu.cs b/FlexJobApi.Core/Entities/UserServer/Powers/RoleMenu.cs
index bfcaeb4..2df1b29 100644
--- a/FlexJobApi.Core/Entities/UserServer/Powers/RoleMenu.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Powers/RoleMenu.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 瑙掕壊鑿滃崟
     /// </summary>
-    public class RoleMenu : CommonEntity
+    public class RoleMenu : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 瑙掕壊Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Powers/RoleResource.cs b/FlexJobApi.Core/Entities/UserServer/Powers/RoleResource.cs
index d6713bd..c8b55ba 100644
--- a/FlexJobApi.Core/Entities/UserServer/Powers/RoleResource.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Powers/RoleResource.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 瑙掕壊璧勬簮
     /// </summary>
-    public class RoleResource : CommonEntity
+    public class RoleResource : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 瑙掕壊Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Powers/UserRole.cs b/FlexJobApi.Core/Entities/UserServer/Powers/UserRole.cs
index a821ac0..36bf6c0 100644
--- a/FlexJobApi.Core/Entities/UserServer/Powers/UserRole.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Powers/UserRole.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 鐢ㄦ埛淇℃伅瑙掕壊
     /// </summary>
-    public class UserRole : CommonEntity
+    public class UserRole : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅Id
diff --git a/FlexJobApi.Core/Entities/UserServer/UserResumes/UserCredential.cs b/FlexJobApi.Core/Entities/UserServer/UserResumes/UserCredential.cs
index 20759ec..751a2ac 100644
--- a/FlexJobApi.Core/Entities/UserServer/UserResumes/UserCredential.cs
+++ b/FlexJobApi.Core/Entities/UserServer/UserResumes/UserCredential.cs
@@ -13,7 +13,7 @@
     /// <summary>
     /// 鐢ㄦ埛淇℃伅璧勬牸璇佷功
     /// </summary>
-    public class UserCredential : CommonEntity, IEntityTypeBuilder<UserCredential>
+    public class UserCredential : CommonEntity<MasterDbContextLocator>, IEntityTypeBuilder<UserCredential>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅Id
diff --git a/FlexJobApi.Core/Entities/UserServer/UserResumes/UserDepartment.cs b/FlexJobApi.Core/Entities/UserServer/UserResumes/UserDepartment.cs
index 53783e0..e7a8e8f 100644
--- a/FlexJobApi.Core/Entities/UserServer/UserResumes/UserDepartment.cs
+++ b/FlexJobApi.Core/Entities/UserServer/UserResumes/UserDepartment.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 鐢ㄦ埛淇℃伅閮ㄩ棬
     /// </summary>
-    public class UserDepartment : CommonEntity
+    public class UserDepartment : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅Id
diff --git a/FlexJobApi.Core/Entities/UserServer/UserResumes/UserExpectJob.cs b/FlexJobApi.Core/Entities/UserServer/UserResumes/UserExpectJob.cs
index ef9a043..49fecd1 100644
--- a/FlexJobApi.Core/Entities/UserServer/UserResumes/UserExpectJob.cs
+++ b/FlexJobApi.Core/Entities/UserServer/UserResumes/UserExpectJob.cs
@@ -12,7 +12,7 @@
     /// <summary>
     /// 鐢ㄦ埛淇℃伅鏈熸湜宀椾綅
     /// </summary>
-    public class UserExpectJob : CommonEntity, IEntityTypeBuilder<UserExpectJob>
+    public class UserExpectJob : CommonEntity<MasterDbContextLocator>, IEntityTypeBuilder<UserExpectJob>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅Id
diff --git a/FlexJobApi.Core/Entities/UserServer/UserResumes/UserPhoto.cs b/FlexJobApi.Core/Entities/UserServer/UserResumes/UserPhoto.cs
index b540adc..53ca2cd 100644
--- a/FlexJobApi.Core/Entities/UserServer/UserResumes/UserPhoto.cs
+++ b/FlexJobApi.Core/Entities/UserServer/UserResumes/UserPhoto.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 鐢ㄦ埛淇℃伅鐢熸椿鐓�
     /// </summary>
-    public class UserPhoto : CommonEntity
+    public class UserPhoto : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Users/User.cs b/FlexJobApi.Core/Entities/UserServer/Users/User.cs
index c81c54a..e9dbddd 100644
--- a/FlexJobApi.Core/Entities/UserServer/Users/User.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Users/User.cs
@@ -13,7 +13,7 @@
     /// <summary>
     /// 鐢ㄦ埛淇℃伅
     /// </summary>
-    public class User : CommonEntity, IEntitySeedData<User>, IEntityTypeBuilder<User>
+    public class User : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>, IEntitySeedData<User>, IEntityTypeBuilder<User>
     {
         public User()
         {
diff --git a/FlexJobApi.Core/Entities/UserServer/Users/UserAuth.cs b/FlexJobApi.Core/Entities/UserServer/Users/UserAuth.cs
index 001a093..699c0f2 100644
--- a/FlexJobApi.Core/Entities/UserServer/Users/UserAuth.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Users/UserAuth.cs
@@ -14,7 +14,7 @@
     /// <summary>
     /// 鐢ㄦ埛璁よ瘉
     /// </summary>
-    public class UserAuth : CommonEntity
+    public class UserAuth : CommonEntity<MasterDbContextLocator, SyncTargetDbContextLocator>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅
diff --git a/FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs b/FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs
index 990ceb9..c39c838 100644
--- a/FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using Furion.DatabaseAccessor;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,7 +11,7 @@
     /// <summary>
     /// 鐢ㄦ埛閾惰鍗′俊鎭�
     /// </summary>
-    public class UserBankCard : CommonEntity
+    public class UserBankCard : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅Id
diff --git a/FlexJobApi.Core/Entities/UserServer/Users/UserManageIndustrialPark.cs b/FlexJobApi.Core/Entities/UserServer/Users/UserManageIndustrialPark.cs
index c4d1fb4..2c8fbb5 100644
--- a/FlexJobApi.Core/Entities/UserServer/Users/UserManageIndustrialPark.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Users/UserManageIndustrialPark.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Furion.DatabaseAccessor;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -9,7 +10,7 @@
     /// <summary>
     /// 鐢ㄦ埛杩愯惀鍥尯
     /// </summary>
-    public class UserManageIndustrialPark : CommonEntity
+    public class UserManageIndustrialPark : CommonEntity<MasterDbContextLocator>
     {
         /// <summary>
         /// 鐢ㄦ埛淇℃伅Id
diff --git a/FlexJobApi.Core/Enums/Common/EnumResourceController.cs b/FlexJobApi.Core/Enums/Common/EnumResourceController.cs
index 7d6350e..c767c46 100644
--- a/FlexJobApi.Core/Enums/Common/EnumResourceController.cs
+++ b/FlexJobApi.Core/Enums/Common/EnumResourceController.cs
@@ -52,6 +52,11 @@
         /// </summary>
         [ResourceController(EnumResourceService.CommonServer, "LogRecords")]
         CommonServerLogRecords,
+        /// <summary>
+        /// 鍚屾鏁版嵁搴�
+        /// </summary>
+        [ResourceController(EnumResourceService.CommonServer, "SyncDatabase")]
+        CommonServerSyncDatabase,
 
         /// <summary>
         /// 鐢ㄦ埛璁よ瘉
diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index 2b3884e..c774eb6 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/FlexJobApi.Core/FlexJobApi.Core.xml
@@ -14,34 +14,9 @@
             鏃ュ織鏁版嵁搴撳畾浣嶅櫒
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.CommonEntity`1.Sort">
+        <member name="T:FlexJobApi.Core.SyncTargetDbContextLocator">
             <summary>
-            鎺掑簭
-            </summary>
-        </member>
-        <member name="P:FlexJobApi.Core.CommonEntity`1.TraceId">
-            <summary>
-            璺熻釜Id
-            </summary>
-        </member>
-        <member name="P:FlexJobApi.Core.CommonEntity`1.CreatedUserId">
-            <summary>
-            鍒涘缓鎿嶄綔浜�
-            </summary>
-        </member>
-        <member name="P:FlexJobApi.Core.CommonEntity`1.CreatedEnterpriseId">
-            <summary>
-            鍒涘缓浼佷笟Id
-            </summary>
-        </member>
-        <member name="P:FlexJobApi.Core.CommonEntity`1.UpdatedUserId">
-            <summary>
-            鏈�鍚庢洿鏂版搷浣滀汉
-            </summary>
-        </member>
-        <member name="P:FlexJobApi.Core.CommonEntity`1.IsDeleted">
-            <summary>
-            鏄惁鍒犻櫎
+            鍚屾鐩爣鏁版嵁搴撳畾浣嶅櫒
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.CommonEntity.Id">
@@ -3542,6 +3517,11 @@
             鏃ュ織璁板綍
             </summary>
         </member>
+        <member name="F:FlexJobApi.Core.EnumResourceController.CommonServerSyncDatabase">
+            <summary>
+            鍚屾鏁版嵁搴�
+            </summary>
+        </member>
         <member name="F:FlexJobApi.Core.EnumResourceController.UserServerAuth">
             <summary>
             鐢ㄦ埛璁よ瘉
@@ -5805,6 +5785,11 @@
             鍝嶅簲绫诲瀷鍏ㄥ悕
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.SyncDatabaseCommand">
+            <summary>
+            鍚屾鏁版嵁搴�
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInput">
             <summary>
             鍙戣捣绛剧害
diff --git a/FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/c.cs b/FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetIdentityBackOcrCommand.cs
similarity index 100%
rename from FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/c.cs
rename to FlexJobApi.Core/Models/CommonServer/OcrUtils/Commands/GetIdentityBackOcrCommand.cs
diff --git a/FlexJobApi.Core/Models/CommonServer/SyncDatabases/Commands/SyncDatabaseCommand.cs b/FlexJobApi.Core/Models/CommonServer/SyncDatabases/Commands/SyncDatabaseCommand.cs
new file mode 100644
index 0000000..0d85cfa
--- /dev/null
+++ b/FlexJobApi.Core/Models/CommonServer/SyncDatabases/Commands/SyncDatabaseCommand.cs
@@ -0,0 +1,17 @@
+锘縰sing MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鍚屾鏁版嵁搴�
+    /// </summary>
+    [Resource([EnumResourceController.CommonServerSyncDatabase])]
+    public class SyncDatabaseCommand : IRequest<int>
+    {
+    }
+}
diff --git a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
index 9c2e419..c06c983 100644
--- a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
+++ b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
@@ -66,7 +66,7 @@
 
                     b.HasKey("Id");
 
-                    b.ToTable("CodeUrl");
+                    b.ToTable("CodeUrl", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.ContractTemplate", b =>
@@ -145,7 +145,7 @@
 
                     b.HasIndex("EnterpriseId");
 
-                    b.ToTable("ContractTemplate");
+                    b.ToTable("ContractTemplate", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.ContractTemplateValue", b =>
@@ -206,7 +206,7 @@
 
                     b.HasIndex("TemplateId");
 
-                    b.ToTable("ContractTemplateValue");
+                    b.ToTable("ContractTemplateValue", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.Department", b =>
@@ -264,7 +264,7 @@
 
                     b.HasIndex("ParentId");
 
-                    b.ToTable("Department");
+                    b.ToTable("Department", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.DictionaryCategory", b =>
@@ -315,7 +315,7 @@
 
                     b.HasKey("Id");
 
-                    b.ToTable("DictionaryCategory");
+                    b.ToTable("DictionaryCategory", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b =>
@@ -396,7 +396,7 @@
 
                     b.HasIndex("ParentId");
 
-                    b.ToTable("DictionaryData");
+                    b.ToTable("DictionaryData", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.ElectronSignSetting", b =>
@@ -446,7 +446,7 @@
 
                     b.HasKey("Id");
 
-                    b.ToTable("ElectronSignSetting");
+                    b.ToTable("ElectronSignSetting", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.Enterprise", b =>
@@ -574,7 +574,7 @@
 
                     b.HasIndex("ProvinceCode");
 
-                    b.ToTable("Enterprise");
+                    b.ToTable("Enterprise", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseAuth", b =>
@@ -673,7 +673,7 @@
 
                     b.HasKey("Id");
 
-                    b.ToTable("EnterpriseAuth");
+                    b.ToTable("EnterpriseAuth", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseCost", b =>
@@ -727,7 +727,7 @@
 
                     b.HasIndex("EnterpriseId");
 
-                    b.ToTable("EnterpriseCost");
+                    b.ToTable("EnterpriseCost", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseElectronSignSetting", b =>
@@ -770,7 +770,7 @@
 
                     b.HasIndex("EnterpriseId");
 
-                    b.ToTable("EnterpriseElectronSignSetting");
+                    b.ToTable("EnterpriseElectronSignSetting", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployee", b =>
@@ -870,7 +870,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("EnterpriseEmployee");
+                    b.ToTable("EnterpriseEmployee", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployeeContract", b =>
@@ -939,7 +939,7 @@
 
                     b.HasIndex("EnterpriseEmployeeId");
 
-                    b.ToTable("EnterpriseEmployeeContract");
+                    b.ToTable("EnterpriseEmployeeContract", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseUserCollect", b =>
@@ -996,7 +996,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("EnterpriseUserCollect");
+                    b.ToTable("EnterpriseUserCollect", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseWallet", b =>
@@ -1120,7 +1120,7 @@
 
                     b.HasIndex("EnterpriseId");
 
-                    b.ToTable("EnterpriseWallet");
+                    b.ToTable("EnterpriseWallet", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletExpandindirectOrder", b =>
@@ -1217,7 +1217,7 @@
 
                     b.HasIndex("WalletId");
 
-                    b.ToTable("EnterpriseWalletExpandindirectOrder");
+                    b.ToTable("EnterpriseWalletExpandindirectOrder", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletExpandindirectOrderFile", b =>
@@ -1263,7 +1263,7 @@
 
                     b.HasIndex("OrderId");
 
-                    b.ToTable("EnterpriseWalletExpandindirectOrderFile");
+                    b.ToTable("EnterpriseWalletExpandindirectOrderFile", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletTransaction", b =>
@@ -1389,7 +1389,7 @@
 
                     b.HasIndex("WalletId");
 
-                    b.ToTable("EnterpriseWalletTransaction");
+                    b.ToTable("EnterpriseWalletTransaction", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.Menu", b =>
@@ -1477,7 +1477,7 @@
 
                     b.HasIndex("ParentId");
 
-                    b.ToTable("Menu");
+                    b.ToTable("Menu", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.Resource", b =>
@@ -1577,7 +1577,7 @@
 
                     b.HasKey("Id");
 
-                    b.ToTable("Resource");
+                    b.ToTable("Resource", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.Role", b =>
@@ -1635,7 +1635,7 @@
 
                     b.HasKey("Id");
 
-                    b.ToTable("Role");
+                    b.ToTable("Role", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.RoleMenu", b =>
@@ -1680,7 +1680,7 @@
 
                     b.HasIndex("RoleId");
 
-                    b.ToTable("RoleMenu");
+                    b.ToTable("RoleMenu", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.RoleResource", b =>
@@ -1728,7 +1728,7 @@
 
                     b.HasIndex("RoleId");
 
-                    b.ToTable("RoleResource");
+                    b.ToTable("RoleResource", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.ScheduleJobDetail", b =>
@@ -1787,7 +1787,7 @@
 
                     b.HasKey("Id");
 
-                    b.ToTable("ScheduleJobDetail");
+                    b.ToTable("ScheduleJobDetail", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.ScheduleJobTrigger", b =>
@@ -1888,7 +1888,7 @@
 
                     b.HasKey("Id");
 
-                    b.ToTable("ScheduleJobTrigger");
+                    b.ToTable("ScheduleJobTrigger", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b =>
@@ -2038,7 +2038,7 @@
 
                     b.HasIndex("ProvinceCode");
 
-                    b.ToTable("TaskInfo");
+                    b.ToTable("TaskInfo", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.TaskInfoBenefit", b =>
@@ -2084,7 +2084,7 @@
 
                     b.HasIndex("TaskInfoId");
 
-                    b.ToTable("TaskInfoBenefit");
+                    b.ToTable("TaskInfoBenefit", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.TaskInfoCredentialLimit", b =>
@@ -2130,7 +2130,7 @@
 
                     b.HasIndex("TypeCode");
 
-                    b.ToTable("TaskInfoCredentialLimit");
+                    b.ToTable("TaskInfoCredentialLimit", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.TaskInfoUser", b =>
@@ -2226,7 +2226,7 @@
 
                     b.HasIndex("TaskInfoId");
 
-                    b.ToTable("TaskInfoUser");
+                    b.ToTable("TaskInfoUser", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmit", b =>
@@ -2275,7 +2275,7 @@
 
                     b.HasIndex("TaskInfoUserId");
 
-                    b.ToTable("TaskInfoUserSubmit");
+                    b.ToTable("TaskInfoUserSubmit", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmitFile", b =>
@@ -2319,7 +2319,7 @@
 
                     b.HasIndex("SubmitId");
 
-                    b.ToTable("TaskInfoUserSubmitFile");
+                    b.ToTable("TaskInfoUserSubmitFile", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.TaskUserCollect", b =>
@@ -2364,7 +2364,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("TaskUserCollect");
+                    b.ToTable("TaskUserCollect", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.User", b =>
@@ -2511,7 +2511,7 @@
 
                     b.HasIndex("ProvinceCode");
 
-                    b.ToTable("User");
+                    b.ToTable("User", (string)null);
 
                     b.HasData(
                         new
@@ -2612,7 +2612,7 @@
 
                     b.HasKey("Id");
 
-                    b.ToTable("UserAuth");
+                    b.ToTable("UserAuth", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.UserBankCard", b =>
@@ -2669,7 +2669,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("UserBankCard");
+                    b.ToTable("UserBankCard", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.UserCredential", b =>
@@ -2737,7 +2737,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("UserCredential");
+                    b.ToTable("UserCredential", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.UserDepartment", b =>
@@ -2782,7 +2782,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("UserDepartment");
+                    b.ToTable("UserDepartment", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.UserExpectJob", b =>
@@ -2828,7 +2828,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("UserExpectJob");
+                    b.ToTable("UserExpectJob", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.UserManageIndustrialPark", b =>
@@ -2871,7 +2871,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("UserManageIndustrialPark");
+                    b.ToTable("UserManageIndustrialPark", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.UserPhoto", b =>
@@ -2914,7 +2914,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("UserPhoto");
+                    b.ToTable("UserPhoto", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.UserRole", b =>
@@ -2959,7 +2959,7 @@
 
                     b.HasIndex("UserId");
 
-                    b.ToTable("UserRole");
+                    b.ToTable("UserRole", (string)null);
                 });
 
             modelBuilder.Entity("FlexJobApi.Core.ContractTemplate", b =>
diff --git a/FlexJobApi.Database.Migrations/REDEME.MD b/FlexJobApi.Database.Migrations/REDEME.MD
index f540d69..b452de4 100644
--- a/FlexJobApi.Database.Migrations/REDEME.MD
+++ b/FlexJobApi.Database.Migrations/REDEME.MD
@@ -1,7 +1,7 @@
 -------------------------------主数据库---------------------------------------
 
 新增迁移文件
-dotnet ef migrations add UpdateEnterpriseWallet0905005 -s "../FlexJobApi.Web.Entry" -c DefaultDbContext
+dotnet ef migrations add UpdateEnterpriseWallet0905008 -s "../FlexJobApi.Web.Entry" -c DefaultDbContext
 
 删除迁移文件
 dotnet ef migrations remove -s "../FlexJobApi.Web.Entry" -c DefaultDbContext
diff --git a/FlexJobApi.EntityFramework.Core/DbContexts/SyncTargetDbContext.cs b/FlexJobApi.EntityFramework.Core/DbContexts/SyncTargetDbContext.cs
new file mode 100644
index 0000000..7f1f954
--- /dev/null
+++ b/FlexJobApi.EntityFramework.Core/DbContexts/SyncTargetDbContext.cs
@@ -0,0 +1,38 @@
+锘縰sing FlexJobApi.Core;
+using Furion;
+using Furion.DatabaseAccessor;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Diagnostics;
+using Microsoft.Extensions.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.EntityFramework.Core
+{
+    /// <summary>
+    /// 浜哄姏璧勬簮鏁版嵁搴撲笂涓嬫枃
+    /// </summary>
+    [AppDbContext("SyncTarget", DbProvider.SqlServer)]
+    public class SyncTargetDbContext : AppDbContext<SyncTargetDbContext, SyncTargetDbContextLocator>
+    {
+        public SyncTargetDbContext(DbContextOptions<SyncTargetDbContext> options) : base(options)
+        {
+        }
+
+        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+        {
+            base.OnConfiguring(optionsBuilder);
+            optionsBuilder
+                .UseSqlServer(App.Configuration.GetConnectionString("SyncTarget"), options =>
+                {
+                    // 鎸囧畾鐩爣鏁版嵁搴撶増鏈负SQL Server 2014
+                    options.UseCompatibilityLevel(120); // 120瀵瑰簲SQL Server 2014
+                                                        // 鍙�夛細璁剧疆鎵归噺鎿嶄綔澶у皬锛堟寜闇�璋冩暣锛�
+                    options.MaxBatchSize(1000);
+                });
+        }
+    }
+}
diff --git a/FlexJobApi.EntityFramework.Core/Startup.cs b/FlexJobApi.EntityFramework.Core/Startup.cs
index 37a0190..92ef2aa 100644
--- a/FlexJobApi.EntityFramework.Core/Startup.cs
+++ b/FlexJobApi.EntityFramework.Core/Startup.cs
@@ -14,6 +14,8 @@
             options.AddDbPool<DefaultDbContext>();
             options.AddDbPool<LogDbContext, LogDbContextLocator>();
             options.AddDbPool<HumanResourcesDbContext, HumanResourcesDbContextLocator>();
+            options.AddDbPool<SyncTargetDbContext, SyncTargetDbContextLocator>();
         }, "FlexJobApi.Database.Migrations");
+
     }
 }
diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs
index 3c04111..7e268d6 100644
--- a/FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/ElectronSign/Commands/PersonalUserRealCommandHandler.cs
@@ -107,6 +107,30 @@
                 .FirstOrDefaultAsync();
             if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
             if (user.IsReal) throw Oops.Oh(EnumErrorCodeType.s510, "鐢ㄦ埛宸插疄鍚嶏紝璇峰嬁閲嶅鐢宠");
+            if (user.UserAuth == null)
+            {
+                user.UserAuth = new UserAuth();
+            }
+            if (user.UserAuth.ElectronSignUserId == null)
+            {
+                var resultRegOrUpdateUser = await new RegOrUpdateUserInput
+                {
+                    OutUserId = user.Id.ToString(),
+                    UserType = EnumElectronSignUserType.Personal,
+                    Name = request.Name,
+                    Identity = request.Identity,
+                    Mobile = request.PhoneNumber
+                }.SendHttpAsync<RegOrUpdateUserInput, ElectronSignServerResult<Guid?>>(EnumResourceHttpProvider.ElectronSignServerCustomer);
+
+                if (resultRegOrUpdateUser?.Success == true)
+                {
+                    user.UserAuth.ElectronSignUserId = resultRegOrUpdateUser.Result;
+                }
+                else
+                {
+                    throw Oops.Oh(EnumErrorCodeType.s510, resultRegOrUpdateUser?.Message ?? "娉ㄥ唽瀹炲悕璐﹀彿寮傚父");
+                }
+            }
             var result = await new RealPersonalInput
             {
                 OutUserId = user.Id.ToString(),
@@ -158,12 +182,26 @@
             {
                 user.UserAuth = new UserAuth();
             }
-            if (user.UserAuth.Name == request.Name
-                && user.UserAuth.Identity == request.Identity
-                && user.UserAuth.RealStatus == EnumPersonalUserRealStatus.Checking
-                && user.UserAuth.FaceRealUrl.IsNotNull())
-                return user.UserAuth.FaceRealUrl;
+            if (user.UserAuth.ElectronSignUserId == null)
+            {
+                var resultRegOrUpdateUser = await new RegOrUpdateUserInput
+                {
+                    OutUserId = user.Id.ToString(),
+                    UserType = EnumElectronSignUserType.Personal,
+                    Name = request.Name,
+                    Identity = request.Identity,
+                    Mobile = user.PhoneNumber
+                }.SendHttpAsync<RegOrUpdateUserInput, ElectronSignServerResult<Guid?>>(EnumResourceHttpProvider.ElectronSignServerCustomer);
 
+                if (resultRegOrUpdateUser?.Success == true)
+                {
+                    user.UserAuth.ElectronSignUserId = resultRegOrUpdateUser.Result;
+                }
+                else
+                {
+                    throw Oops.Oh(EnumErrorCodeType.s510, resultRegOrUpdateUser?.Message ?? "娉ㄥ唽瀹炲悕璐﹀彿寮傚父");
+                }
+            }
             var result = await new RealPersonalInput
             {
                 OutUserId = user.Id.ToString(),
diff --git a/FlexJobApi.Web.Entry/appsettings.json b/FlexJobApi.Web.Entry/appsettings.json
index 4defa19..7cbfda4 100644
--- a/FlexJobApi.Web.Entry/appsettings.json
+++ b/FlexJobApi.Web.Entry/appsettings.json
@@ -4,7 +4,13 @@
   "ConnectionStrings": {
     "FlexJobApi": "Server=120.26.58.240; Database=Dev_FlexJobApi; User=bole;Password=Bole1472589;Encrypt=false;",
     "FlexJobApiLog": "Server=120.26.58.240; Database=Dev_FlexJobApiLog; User=bole;Password=Bole1472589;Encrypt=false;",
-    "HumanResources": "Server=120.26.58.240; Database=Dev_12333; User=bole;Password=Bole1472589;Encrypt=false;"
+    "HumanResources": "Server=120.26.58.240; Database=Dev_12333; User=bole;Password=Bole1472589;Encrypt=false;",
+    "SyncTarget": "Server=rm-bp1mt744021h1s6dg4o.sqlserver.rds.aliyuncs.com,2333; Database=Pro_FlexJobApi; User=bole;Password=Blcs20@%27;Encrypt=false;"
+
+    //"FlexJobApi": "Server=rm-bp1mt744021h1s6dg4o.sqlserver.rds.aliyuncs.com,2333; Database=Pro_FlexJobApi; User=bole;Password=Blcs20@%27;Encrypt=false;",
+    //"FlexJobApiLog": "Server=rm-bp1mt744021h1s6dg4o.sqlserver.rds.aliyuncs.com,2333; Database=Pro_FlexJobApiLog; User=bole;Password=Blcs20@%27;Encrypt=false;",
+    //"HumanResources": "Server=rm-bp1mt744021h1s6dg4o.sqlserver.rds.aliyuncs.com,2333; Database=Pro_12333; User=bole;Password=Blcs20@%27;Encrypt=false;",
+    //"SyncTarget": "Server=rm-bp1mt744021h1s6dg4o.sqlserver.rds.aliyuncs.com,2333; Database=Pro_FlexJobApi; User=bole;Password=Blcs20@%27;Encrypt=false;"
   },
   "Consul": {
     "Address": "http://localhost:8500/",

--
Gitblit v1.9.1