From 1d2e9595487a774cd93697630774ff135ca6c11a Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 28 八月 2025 14:54:13 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/ElectronSignCallbackCommand.cs             |   31 
 FlexJobApi.Core/Models/ElectronSignServer/Contracts/SendContractInput.cs                            |   90 +
 FlexJobApi.Database.Migrations/Migrations/20250828055909_UpdateEnterpriseEmployee0828.Designer.cs   | 3074 ++++++++++++++++++++++++++++++++++++++++
 FlexJobApi.Core/Models/UserServer/Enterprises/Commands/SaveEnterpriseCostCommand.cs                 |   55 
 FlexJobApi.Core/Enums/Users/EnumEnterpriseCostType.cs                                               |   23 
 FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs                   |    5 
 FlexJobApi.Core/Models/ElectronSignServer/ContractTemplates/EnumElectronSignContractStatus.cs       |   51 
 FlexJobApi.Database.Migrations/Migrations/20250828055909_UpdateEnterpriseEmployee0828.cs            |  107 +
 FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs |  154 +
 FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/PersonalUserElectronSignCommand.cs   |   38 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs                               |   10 
 FlexJobApi.Core/Enums/Users/EnumEnterpriseCostStatus.cs                                             |   23 
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseCost.cs                                   |   49 
 FlexJobApi.UserServer.Application/Enterprises/Commands/EnterpriseCostCommandHandler.cs              |  113 +
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs                       |   10 
 FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/CheckContractTemplateCommand.cs            |    0 
 FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/EnterpriseUserElectronSignCommand.cs |   38 
 FlexJobApi.Core/FlexJobApi.Core.xml                                                                 |  320 ++++
 FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs                                                   |   39 
 FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml                             |   39 
 FlexJobApi.Database.Migrations/REDEME.MD                                                            |    2 
 FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs       |  178 +
 FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs                          |   83 +
 23 files changed, 4,463 insertions(+), 69 deletions(-)

diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseCost.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseCost.cs
new file mode 100644
index 0000000..88ab954
--- /dev/null
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseCost.cs
@@ -0,0 +1,49 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 浼佷笟鐢ㄩ噺鏄庣粏
+    /// </summary>
+    public class EnterpriseCost : CommonEntity
+    {
+        /// <summary>
+        /// 浼佷笟Id
+        /// </summary>
+        public Guid EnterpriseId { get; set; }
+
+        /// <summary>
+        /// 浼佷笟
+        /// </summary>
+        public Enterprise Enterprise { get; set; }
+
+        /// <summary>
+        /// 鐢ㄩ噺绫诲瀷
+        /// </summary>
+        public EnumEnterpriseCostType Type { get; set; }
+
+        /// <summary>
+        /// 鐏靛伐鍚堝悓Id
+        /// </summary>
+        public Guid? EnterpriseEmployeeContractId { get; set; }
+
+        /// <summary>
+        /// 鐏靛伐鍚堝悓
+        /// </summary>
+        public EnterpriseEmployeeContract EnterpriseEmployeeContract { get; set; }
+
+        /// <summary>
+        /// 鎵h垂鐘舵��
+        /// </summary>
+        public EnumEnterpriseCostStatus? Status { get; set; }
+
+        /// <summary>
+        /// 璐圭敤
+        /// </summary>
+        public decimal? Amount { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs
index 8b71619..87fc21a 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployee.cs
@@ -102,6 +102,11 @@
         public DateTime? UserSignContractTime { get; set; }
 
         /// <summary>
+        /// 鐏靛伐绛剧害澶辫触娑堟伅
+        /// </summary>
+        public string UserSignContractErrorMessage { get; set; }
+
+        /// <summary>
         /// 浼佷笟绛剧害鐘舵��
         /// </summary>
         public EnumTaskUserSignContractStatus? EnterpriseSignContractStatus { get; set; }
@@ -112,6 +117,11 @@
         public DateTime? EnterpriseSignContractTime { get; set; }
 
         /// <summary>
+        /// 浼佷笟绛剧害澶辫触娑堟伅
+        /// </summary>
+        public string EnterpriseSignContractErrorMessage { get; set; }
+
+        /// <summary>
         /// 鍚堝悓缂栧彿
         /// </summary>
         public string ContractCode { get; set; }
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs
index 9cc5aa2..d852fa6 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseEmployeeContract.cs
@@ -37,6 +37,11 @@
         public DateTime? UserSignContractTime { get; set; }
 
         /// <summary>
+        /// 鐏靛伐绛剧害澶辫触娑堟伅
+        /// </summary>
+        public string UserSignContractErrorMessage { get; set; }
+
+        /// <summary>
         /// 浼佷笟绛剧害鐘舵��
         /// </summary>
         public EnumTaskUserSignContractStatus? EnterpriseSignContractStatus { get; set; }
@@ -47,6 +52,11 @@
         public DateTime? EnterpriseSignContractTime { get; set; }
 
         /// <summary>
+        /// 浼佷笟绛剧害澶辫触娑堟伅
+        /// </summary>
+        public string EnterpriseSignContractErrorMessage { get; set; }
+
+        /// <summary>
         /// 鍚堝悓缂栧彿
         /// </summary>
         public string ContractCode { get; set; }
diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseCostStatus.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseCostStatus.cs
new file mode 100644
index 0000000..a642e5a
--- /dev/null
+++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseCostStatus.cs
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 浼佷笟鐢ㄩ噺鎵h垂鐘舵��
+    /// </summary>
+    public enum EnumEnterpriseCostStatus
+    {
+        /// <summary>
+        /// 鎵h垂鎴愬姛
+        /// </summary>
+        Success = 10,
+        /// <summary>
+        /// 鎵h垂澶辫触
+        /// </summary>
+        Fail = 20
+    }
+}
diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseCostType.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseCostType.cs
new file mode 100644
index 0000000..1e96143
--- /dev/null
+++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseCostType.cs
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 浼佷笟鐢ㄩ噺绫诲瀷
+    /// </summary>
+    public enum EnumEnterpriseCostType
+    {
+        /// <summary>
+        /// 鐭俊
+        /// </summary>
+        SMS = 10,
+        /// <summary>
+        /// 鐢靛瓙绛�
+        /// </summary>
+        ElectronSign = 20
+    }
+}
diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index 1460102..ce47de3 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/FlexJobApi.Core/FlexJobApi.Core.xml
@@ -1659,6 +1659,46 @@
             绗笁鏂瑰疄鍚嶉�氶亾璐﹀彿
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.EnterpriseCost">
+            <summary>
+            浼佷笟鐢ㄩ噺鏄庣粏
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseCost.EnterpriseId">
+            <summary>
+            浼佷笟Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseCost.Enterprise">
+            <summary>
+            浼佷笟
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseCost.Type">
+            <summary>
+            鐢ㄩ噺绫诲瀷
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseCost.EnterpriseEmployeeContractId">
+            <summary>
+            鐏靛伐鍚堝悓Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseCost.EnterpriseEmployeeContract">
+            <summary>
+            鐏靛伐鍚堝悓
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseCost.Status">
+            <summary>
+            鎵h垂鐘舵��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseCost.Amount">
+            <summary>
+            璐圭敤
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.EnterpriseEmployee">
             <summary>
             鐏靛伐
@@ -1745,6 +1785,11 @@
             鐏靛伐绛剧害鏃堕棿
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.EnterpriseEmployee.UserSignContractErrorMessage">
+            <summary>
+            鐏靛伐绛剧害澶辫触娑堟伅
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.EnterpriseEmployee.EnterpriseSignContractStatus">
             <summary>
             浼佷笟绛剧害鐘舵��
@@ -1753,6 +1798,11 @@
         <member name="P:FlexJobApi.Core.EnterpriseEmployee.EnterpriseSignContractTime">
             <summary>
             浼佷笟绛剧害鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseEmployee.EnterpriseSignContractErrorMessage">
+            <summary>
+            浼佷笟绛剧害澶辫触娑堟伅
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.EnterpriseEmployee.ContractCode">
@@ -1805,6 +1855,11 @@
             鐏靛伐绛剧害鏃堕棿
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.EnterpriseEmployeeContract.UserSignContractErrorMessage">
+            <summary>
+            鐏靛伐绛剧害澶辫触娑堟伅
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.EnterpriseEmployeeContract.EnterpriseSignContractStatus">
             <summary>
             浼佷笟绛剧害鐘舵��
@@ -1813,6 +1868,11 @@
         <member name="P:FlexJobApi.Core.EnterpriseEmployeeContract.EnterpriseSignContractTime">
             <summary>
             浼佷笟绛剧害鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseEmployeeContract.EnterpriseSignContractErrorMessage">
+            <summary>
+            浼佷笟绛剧害澶辫触娑堟伅
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.EnterpriseEmployeeContract.ContractCode">
@@ -3402,6 +3462,36 @@
             鏀粯瀹濅俊浠荤
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.EnumEnterpriseCostStatus">
+            <summary>
+            浼佷笟鐢ㄩ噺鎵h垂鐘舵��
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseCostStatus.Success">
+            <summary>
+            鎵h垂鎴愬姛
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseCostStatus.Fail">
+            <summary>
+            鎵h垂澶辫触
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.EnumEnterpriseCostType">
+            <summary>
+            浼佷笟鐢ㄩ噺绫诲瀷
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseCostType.SMS">
+            <summary>
+            鐭俊
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseCostType.ElectronSign">
+            <summary>
+            鐢靛瓙绛�
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.EnumEnterpriseRealMethod">
             <summary>
             浼佷笟瀹炲悕鏂瑰紡
@@ -4853,6 +4943,61 @@
             鍝嶅簲绫诲瀷鍏ㄥ悕
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInput">
+            <summary>
+            鍙戣捣绛剧害
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInput.OutContractId">
+            <summary>
+            澶栭儴鍚堝悓Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInput.TemplateId">
+            <summary>
+            妯℃澘Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInput.Title">
+            <summary>
+            鏍囬
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInput.OutUserId">
+            <summary>
+            鍙戣捣浜�/褰撳墠绛剧讲浜虹殑澶栭儴浼佷笟/鐢ㄦ埛Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInput.Values">
+            <summary>
+            鍙戣捣浜�/褰撳墠绛剧讲浜烘墍闇�鍙橀噺
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInput.UserCount">
+            <summary>
+            绛剧害鎬讳汉鏁�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInputValue.Name">
+            <summary>
+            鍙橀噺鍚�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractInputValue.Value">
+            <summary>
+            鍊�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractOutput.SignContractShortUrl">
+            <summary>
+            绛剧讲鍚堝悓鐭摼鎺�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Contracts.SendContractOutput.SignContractLongUrl">
+            <summary>
+            绛剧讲鍚堝悓闀块摼鎺�
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.CreateOrUpdateContractTemplateInput">
             <summary>
             鍒涘缓鎴栨洿鏂板悎鍚屾ā鏉�
@@ -4931,6 +5076,46 @@
         <member name="P:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.DeleteContractTemplateInput.Ids">
             <summary>
             Id
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus">
+            <summary>
+            鐢靛瓙绛�-鍚堝悓鐘舵�侊紙1寰呭垱寤� 2宸插垱寤� 3宸插彂閫侊紝姝e湪绛剧讲涓� 4鎷掔粷绛剧讲,宸插彇娑� 5宸插畬鎴� 9宸茶繃鏈� 99鍚堝悓妫�娴嬫棤鏁堬級
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.WaitCreate">
+            <summary>
+            寰呭垱寤�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Created">
+            <summary>
+            宸插垱寤�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Signing">
+            <summary>
+            宸插彂閫侊紝姝e湪绛剧讲涓�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Cancelled">
+            <summary>
+            鎷掔粷绛剧讲,宸插彇娑�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Completed">
+            <summary>
+            宸插畬鎴�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Expired">
+            <summary>
+            宸茶繃鏈�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Invalid">
+            <summary>
+            鍚堝悓妫�娴嬫棤鏁�
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractSupplier">
@@ -5301,16 +5486,6 @@
         <member name="P:FlexJobApi.Core.Models.ElectronSignServer.Users.RegOrUpdateUserInput.CertAccount">
             <summary>
             涓婁笂绛捐瘉涔﹁处鍙凤紙閫夊~锛�
-            </summary>
-        </member>
-        <member name="T:FlexJobApi.Core.CheckContractTemplateCommand">
-            <summary>
-            鏍¢獙鍚堝悓妯℃槸鍚﹀彲鐢�
-            </summary>
-        </member>
-        <member name="P:FlexJobApi.Core.CheckContractTemplateCommand.Id">
-            <summary>
-            鍚堝悓妯℃澘Id
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.CheckReceiveTaskCommand">
@@ -7352,6 +7527,16 @@
             鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鑿滃崟
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.CheckContractTemplateCommand">
+            <summary>
+            鏍¢獙鍚堝悓妯℃槸鍚﹀彲鐢�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.CheckContractTemplateCommand.Id">
+            <summary>
+            鍚堝悓妯℃澘Id
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.CheckElectronSignAccessEnabledsCommand">
             <summary>
             鏍¢獙鐢靛瓙绛鹃�氶亾鏄惁鍚敤
@@ -7400,6 +7585,31 @@
         <member name="P:FlexJobApi.Core.ElectronSignCallbackCommand.Data">
             <summary>
             鍥炰紶鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.ElectronSignCallbackCommandContractSignModel.UserType">
+            <summary>
+            鐢ㄦ埛绫诲瀷锛�10浼佷笟 20涓汉锛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.ElectronSignCallbackCommandContractSignModel.OutUserId">
+            <summary>
+            澶栭儴浼佷笟/鐢ㄦ埛Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.ElectronSignCallbackCommandContractSignModel.OutContractId">
+            <summary>
+            澶栭儴鍚堝悓Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.ElectronSignCallbackCommandContractSignModel.Status">
+            <summary>
+            鐘舵�侊紙1寰呭垱寤� 2宸插垱寤� 3宸插彂閫侊紝姝e湪绛剧讲涓� 4鎷掔粷绛剧讲,宸插彇娑� 5宸插畬鎴� 9宸茶繃鏈� 99鍚堝悓妫�娴嬫棤鏁堬級
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.ElectronSignCallbackCommandContractSignModel.ContactUrl">
+            <summary>
+            鍚堝悓鏂囦欢鍦板潃
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.PersonalUserFaceRealCommand">
@@ -8174,6 +8384,31 @@
             韬唤璇佸浗寰介潰
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.EnterpriseUserElectronSignCommand">
+            <summary>
+            浼佷笟鐢ㄦ埛绛剧害
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseUserElectronSignCommand.Id">
+            <summary>
+            鐏靛伐Id
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.EnterpriseUserElectronSignCommandResult">
+            <summary>
+            浼佷笟鐢ㄦ埛绛剧害-缁撴灉
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseUserElectronSignCommandResult.SignContractShortUrl">
+            <summary>
+            绛剧讲鍚堝悓鐭摼鎺�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseUserElectronSignCommandResult.SignContractLongUrl">
+            <summary>
+            绛剧讲鍚堝悓闀块摼鎺�
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.ImportEnterpriseEmployeesCommand">
             <summary>
             瀵煎叆鐏靛伐淇℃伅
@@ -8267,6 +8502,31 @@
         <member name="P:FlexJobApi.Core.InviteElectronSignCommand.ContractTemplateId">
             <summary>
             鍚堝悓妯℃澘Id
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.PersonalUserElectronSignCommand">
+            <summary>
+            涓汉鐢ㄦ埛绛剧害
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.PersonalUserElectronSignCommand.Id">
+            <summary>
+            鐏靛伐Id
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.PersonalUserElectronSignCommandResult">
+            <summary>
+            涓汉鐢ㄦ埛绛剧害-缁撴灉
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.PersonalUserElectronSignCommandResult.SignContractShortUrl">
+            <summary>
+            绛剧讲鍚堝悓鐭摼鎺�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.PersonalUserElectronSignCommandResult.SignContractLongUrl">
+            <summary>
+            绛剧讲鍚堝悓闀块摼鎺�
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.GetEnterpriseEmployeeQuery">
@@ -8671,6 +8931,46 @@
             瀵嗙爜
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.SaveEnterpriseCostCommand">
+            <summary>
+            淇濆瓨浼佷笟璐圭敤
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveEnterpriseCostCommand.EnterpriseId">
+            <summary>
+            浼佷笟Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveEnterpriseCostCommand.Type">
+            <summary>
+            鐢ㄩ噺绫诲瀷
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveEnterpriseCostCommand.ContractTemplateId">
+            <summary>
+            鍚堝悓妯℃澘Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveEnterpriseCostCommand.EnterpriseEmployeeContractId">
+            <summary>
+            鐏靛伐鍚堝悓Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveEnterpriseCostCommand.Status">
+            <summary>
+            鎵h垂鐘舵��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveEnterpriseCostCommandElectronSignSetting.SignCost">
+            <summary>
+            绛剧害璐圭敤
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveEnterpriseCostCommandElectronSignSetting.MergeSignCost">
+            <summary>
+            涓�鍙d环
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.SetEnterpriseElectronSignSettingCommand">
             <summary>
             璁剧疆浼佷笟鐢靛瓙绛鹃厤缃�
diff --git a/FlexJobApi.Core/Models/ElectronSignServer/ContractTemplates/EnumElectronSignContractStatus.cs b/FlexJobApi.Core/Models/ElectronSignServer/ContractTemplates/EnumElectronSignContractStatus.cs
new file mode 100644
index 0000000..15e3413
--- /dev/null
+++ b/FlexJobApi.Core/Models/ElectronSignServer/ContractTemplates/EnumElectronSignContractStatus.cs
@@ -0,0 +1,51 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates
+{
+    /// <summary>
+    /// 鐢靛瓙绛�-鍚堝悓鐘舵�侊紙1寰呭垱寤� 2宸插垱寤� 3宸插彂閫侊紝姝e湪绛剧讲涓� 4鎷掔粷绛剧讲,宸插彇娑� 5宸插畬鎴� 9宸茶繃鏈� 99鍚堝悓妫�娴嬫棤鏁堬級
+    /// </summary>
+    public enum EnumElectronSignContractStatus
+    {
+        /// <summary>
+        /// 寰呭垱寤�
+        /// </summary>
+        [Description("寰呭垱寤�")]
+        WaitCreate = 1,
+        /// <summary>
+        /// 宸插垱寤�
+        /// </summary>
+        [Description("宸插垱寤�")]
+        Created = 2,
+        /// <summary>
+        /// 宸插彂閫侊紝姝e湪绛剧讲涓�
+        /// </summary>
+        [Description("宸插彂閫侊紝姝e湪绛剧讲涓�")]
+        Signing = 3,
+        /// <summary>
+        /// 鎷掔粷绛剧讲,宸插彇娑�
+        /// </summary>
+        [Description("鎷掔粷绛剧讲,宸插彇娑�")]
+        Cancelled = 4,
+        /// <summary>
+        /// 宸插畬鎴�
+        /// </summary>
+        [Description("宸插畬鎴�")]
+        Completed = 5,
+        /// <summary>
+        /// 宸茶繃鏈�
+        /// </summary>
+        [Description("宸茶繃鏈�")]
+        Expired = 9,
+        /// <summary>
+        /// 鍚堝悓妫�娴嬫棤鏁�
+        /// </summary>
+        [Description("鍚堝悓妫�娴嬫棤鏁�")]
+        Invalid = 99
+    }
+}
diff --git a/FlexJobApi.Core/Models/ElectronSignServer/Contracts/SendContractInput.cs b/FlexJobApi.Core/Models/ElectronSignServer/Contracts/SendContractInput.cs
new file mode 100644
index 0000000..345a865
--- /dev/null
+++ b/FlexJobApi.Core/Models/ElectronSignServer/Contracts/SendContractInput.cs
@@ -0,0 +1,90 @@
+锘縰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.Contracts
+{
+    /// <summary>
+    /// 鍙戣捣绛剧害
+    /// </summary>
+    [Resource([EnumResourceController.ElectronSignServerElectronSign], Method = EnumResourceMethod.Post, Route = "/api/ElectronSign/SendContract")]
+    public class SendContractInput
+    {
+        public SendContractInput()
+        {
+            Values = new List<SendContractInputValue>();
+        }
+
+        /// <summary>
+        /// 澶栭儴鍚堝悓Id
+        /// </summary>
+        [DisplayName("澶栭儴鍚堝悓Id")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string OutContractId { get; set; }
+
+        /// <summary>
+        /// 妯℃澘Id
+        /// </summary>
+        [DisplayName("妯℃澘Id")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public Guid TemplateId { get; set; }
+
+        /// <summary>
+        /// 鏍囬
+        /// </summary>
+        [DisplayName("鏍囬")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 鍙戣捣浜�/褰撳墠绛剧讲浜虹殑澶栭儴浼佷笟/鐢ㄦ埛Id
+        /// </summary>
+        [DisplayName("鍙戣捣浜�/褰撳墠绛剧讲浜虹殑澶栭儴浼佷笟/鐢ㄦ埛Id")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public string OutUserId { get; set; }
+
+        /// <summary>
+        /// 鍙戣捣浜�/褰撳墠绛剧讲浜烘墍闇�鍙橀噺
+        /// </summary>
+        [DisplayName("鍙戣捣浜�/褰撳墠绛剧讲浜烘墍闇�鍙橀噺")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public List<SendContractInputValue> Values { get; set; }
+
+        /// <summary>
+        /// 绛剧害鎬讳汉鏁�
+        /// </summary>
+        [DisplayName("绛剧害鎬讳汉鏁�")]
+        [Required(ErrorMessage = "{0}涓嶈兘涓虹┖")]
+        public int UserCount { get; set; }
+    }
+
+    public class SendContractInputValue
+    {
+        /// <summary>
+        /// 鍙橀噺鍚�
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鍊�
+        /// </summary>
+        public string Value { get; set; }
+    }
+
+    public class SendContractOutput
+    {
+        /// <summary>
+        /// 绛剧讲鍚堝悓鐭摼鎺�
+        /// </summary>
+        public string SignContractShortUrl { get; set; }
+
+        /// <summary>
+        /// 绛剧讲鍚堝悓闀块摼鎺�
+        /// </summary>
+        public string SignContractLongUrl { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/ElectronSignServer/ContractTemplates/CheckContractTemplateCommand.cs b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/CheckContractTemplateCommand.cs
similarity index 100%
rename from FlexJobApi.Core/Models/ElectronSignServer/ContractTemplates/CheckContractTemplateCommand.cs
rename to FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/CheckContractTemplateCommand.cs
diff --git a/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/ElectronSignCallbackCommand.cs b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/ElectronSignCallbackCommand.cs
index bd47ffc..ca7efeb 100644
--- a/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/ElectronSignCallbackCommand.cs
+++ b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/ElectronSignCallbackCommand.cs
@@ -1,4 +1,5 @@
-锘縰sing FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals;
+锘縰sing FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates;
+using FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals;
 using MediatR;
 using System;
 using System.Collections.Generic;
@@ -56,4 +57,32 @@
         public Guid OutUserId { get; set; }
         public EnumElectronSignRealStatus Status { get; set; }
     }
+
+    public class ElectronSignCallbackCommandContractSignModel
+    {
+        /// <summary>
+        /// 鐢ㄦ埛绫诲瀷锛�10浼佷笟 20涓汉锛�
+        /// </summary>
+        public EnumElectronSignUserType UserType { get; set; }
+
+        /// <summary>
+        /// 澶栭儴浼佷笟/鐢ㄦ埛Id
+        /// </summary>
+        public string OutUserId { get; set; }
+
+        /// <summary>
+        /// 澶栭儴鍚堝悓Id
+        /// </summary>
+        public string OutContractId { get; set; }
+
+        /// <summary>
+        /// 鐘舵�侊紙1寰呭垱寤� 2宸插垱寤� 3宸插彂閫侊紝姝e湪绛剧讲涓� 4鎷掔粷绛剧讲,宸插彇娑� 5宸插畬鎴� 9宸茶繃鏈� 99鍚堝悓妫�娴嬫棤鏁堬級
+        /// </summary>
+        public EnumElectronSignContractStatus Status { get; set; }
+
+        /// <summary>
+        /// 鍚堝悓鏂囦欢鍦板潃
+        /// </summary>
+        public string ContactUrl { get; set; }
+    }
 }
diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/EnterpriseUserElectronSignCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/EnterpriseUserElectronSignCommand.cs
new file mode 100644
index 0000000..89dad05
--- /dev/null
+++ b/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/EnterpriseUserElectronSignCommand.cs
@@ -0,0 +1,38 @@
+锘縰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.UserServerEnterpriseEmployee])]
+    public class EnterpriseUserElectronSignCommand : IRequest<EnterpriseUserElectronSignCommandResult>
+    {
+        /// <summary>
+        /// 鐏靛伐Id
+        /// </summary>
+        public Guid Id { get; set; }
+    }
+
+
+    /// <summary>
+    /// 浼佷笟鐢ㄦ埛绛剧害-缁撴灉
+    /// </summary>
+    public class EnterpriseUserElectronSignCommandResult
+    {
+        /// <summary>
+        /// 绛剧讲鍚堝悓鐭摼鎺�
+        /// </summary>
+        public string SignContractShortUrl { get; set; }
+
+        /// <summary>
+        /// 绛剧讲鍚堝悓闀块摼鎺�
+        /// </summary>
+        public string SignContractLongUrl { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/PersonalUserElectronSignCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/PersonalUserElectronSignCommand.cs
new file mode 100644
index 0000000..96a3ae8
--- /dev/null
+++ b/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/PersonalUserElectronSignCommand.cs
@@ -0,0 +1,38 @@
+锘縰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.UserServerEnterpriseEmployee])]
+    public class PersonalUserElectronSignCommand : IRequest<PersonalUserElectronSignCommandResult>
+    {
+        /// <summary>
+        /// 鐏靛伐Id
+        /// </summary>
+        public Guid Id { get; set; }
+    }
+
+
+    /// <summary>
+    /// 涓汉鐢ㄦ埛绛剧害-缁撴灉
+    /// </summary>
+    public class PersonalUserElectronSignCommandResult
+    {
+        /// <summary>
+        /// 绛剧讲鍚堝悓鐭摼鎺�
+        /// </summary>
+        public string SignContractShortUrl { get; set; }
+
+        /// <summary>
+        /// 绛剧讲鍚堝悓闀块摼鎺�
+        /// </summary>
+        public string SignContractLongUrl { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/UserServer/Enterprises/Commands/SaveEnterpriseCostCommand.cs b/FlexJobApi.Core/Models/UserServer/Enterprises/Commands/SaveEnterpriseCostCommand.cs
new file mode 100644
index 0000000..ca01b6c
--- /dev/null
+++ b/FlexJobApi.Core/Models/UserServer/Enterprises/Commands/SaveEnterpriseCostCommand.cs
@@ -0,0 +1,55 @@
+锘縰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.UserServerEnterprise])]
+    public class SaveEnterpriseCostCommand : IRequest<Guid>
+    {
+        /// <summary>
+        /// 浼佷笟Id
+        /// </summary>
+        public Guid EnterpriseId { get; set; }
+
+        /// <summary>
+        /// 鐢ㄩ噺绫诲瀷
+        /// </summary>
+        public EnumEnterpriseCostType Type { get; set; }
+
+        /// <summary>
+        /// 鍚堝悓妯℃澘Id
+        /// </summary>
+        public Guid? ContractTemplateId { get; set; }
+
+        /// <summary>
+        /// 鐏靛伐鍚堝悓Id
+        /// </summary>
+        public Guid? EnterpriseEmployeeContractId { get; set; }
+
+        /// <summary>
+        /// 鎵h垂鐘舵��
+        /// </summary>
+        public EnumEnterpriseCostStatus? Status { get; set; }
+    }
+
+    public class SaveEnterpriseCostCommandElectronSignSetting
+    {
+
+        /// <summary>
+        /// 绛剧害璐圭敤
+        /// </summary>
+        public decimal? SignCost { get; set; }
+
+        /// <summary>
+        /// 涓�鍙d环
+        /// </summary>
+        public decimal? MergeSignCost { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs b/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs
index dfd7289..f6ce177 100644
--- a/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs
+++ b/FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs
@@ -54,14 +54,14 @@
             }
             result.Model = new BaiduOcrBusinessLicenseResultModel
             {
-                EnterpriseName = result.WordsResult["鍗曚綅鍚嶇О"].Words,
-                SocietyCreditCode = result.WordsResult["绀句細淇$敤浠g爜"].Words,
-                LegalPerson = result.WordsResult["娉曚汉"].Words,
-                EnterpriseType = result.WordsResult["绫诲瀷"].Words,
-                RegisteredCapital = result.WordsResult["娉ㄥ唽璧勬湰"].Words,
-                EstablishmentDate = result.WordsResult["鎴愮珛鏃ユ湡"].Words,
-                Address = result.WordsResult["鍦板潃"].Words,
-                MainBusiness = result.WordsResult["缁忚惀鑼冨洿"].Words,
+                EnterpriseName = result.WordsResult.GetWords("鍗曚綅鍚嶇О"),
+                SocietyCreditCode = result.WordsResult.GetWords("绀句細淇$敤浠g爜"),
+                LegalPerson = result.WordsResult.GetWords("娉曚汉"),
+                EnterpriseType = result.WordsResult.GetWords("绫诲瀷"),
+                RegisteredCapital = result.WordsResult.GetWords("娉ㄥ唽璧勬湰"),
+                EstablishmentDate = result.WordsResult.GetWords("鎴愮珛鏃ユ湡"),
+                Address = result.WordsResult.GetWords("鍦板潃"),
+                MainBusiness = result.WordsResult.GetWords("缁忚惀鑼冨洿"),
             };
             return result;
         }
@@ -99,12 +99,12 @@
 
             result.Model = new BaiduOcrIdentityFrontResultModel
             {
-                Address = result.WordsResult["浣忓潃"].Words,
-                Identity = result.WordsResult["鍏皯韬唤鍙风爜"].Words,
-                BirthdayText = result.WordsResult["鍑虹敓"].Words,
-                Name = result.WordsResult["濮撳悕"].Words,
-                GenderText = result.WordsResult["鎬у埆"].Words,
-                Nation = result.WordsResult["姘戞棌"].Words,
+                Address = result.WordsResult.GetWords("浣忓潃"),
+                Identity = result.WordsResult.GetWords("鍏皯韬唤鍙风爜"),
+                BirthdayText = result.WordsResult.GetWords("鍑虹敓"),
+                Name = result.WordsResult.GetWords("濮撳悕"),
+                GenderText = result.WordsResult.GetWords("鎬у埆"),
+                Nation = result.WordsResult.GetWords("姘戞棌"),
             };
             return result;
         }
@@ -142,11 +142,16 @@
 
             result.Model = new BaiduOcrIdentityBackResultModel
             {
-                ExpiryDateText = result.WordsResult["澶辨晥鏃ユ湡"].Words,
-                IssueAuthority = result.WordsResult["绛惧彂鏈哄叧"].Words,
-                IssueDateText = result.WordsResult["绛惧彂鏃ユ湡"].Words,
+                ExpiryDateText = result.WordsResult.GetWords("澶辨晥鏃ユ湡"),
+                IssueAuthority = result.WordsResult.GetWords("绛惧彂鏈哄叧"),
+                IssueDateText = result.WordsResult.GetWords("绛惧彂鏃ユ湡"),
             };
             return result;
         }
+
+        public static string GetWords(this Dictionary<string, BaiduOcrResultWord> result, string name)
+        {
+            return result.ContainsKey(name) ? result[name].Words : null;
+        }
     }
 }
diff --git a/FlexJobApi.Database.Migrations/Migrations/20250828055909_UpdateEnterpriseEmployee0828.Designer.cs b/FlexJobApi.Database.Migrations/Migrations/20250828055909_UpdateEnterpriseEmployee0828.Designer.cs
new file mode 100644
index 0000000..6a6a7e5
--- /dev/null
+++ b/FlexJobApi.Database.Migrations/Migrations/20250828055909_UpdateEnterpriseEmployee0828.Designer.cs
@@ -0,0 +1,3074 @@
+锘�// <auto-generated />
+using System;
+using FlexJobApi.EntityFramework.Core;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace FlexJobApi.Database.Migrations.Migrations
+{
+    [DbContext(typeof(DefaultDbContext))]
+    [Migration("20250828055909_UpdateEnterpriseEmployee0828")]
+    partial class UpdateEnterpriseEmployee0828
+    {
+        /// <inheritdoc />
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "9.0.7")
+                .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+            modelBuilder.Entity("FlexJobApi.Core.ContractTemplate", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("Access")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Code")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<DateTime?>("CompletedTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("ElectronSignContractTemplateId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("File")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TemplateEditData")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TemplateId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TemplateJsonData")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("WxmpQrCode")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.ToTable("ContractTemplate");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.ContractTemplateValue", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("BindProperty")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Label")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Name")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Recorder")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("Required")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("TemplateId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("UserType")
+                        .HasColumnType("int");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TemplateId");
+
+                    b.ToTable("ContractTemplateValue");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Department", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("ParentId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Path")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.HasIndex("ParentId");
+
+                    b.ToTable("Department");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.DictionaryCategory", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("FieldNames")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("DictionaryCategory");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("CategoryId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Content")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Deep")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Field1")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Field2")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Field3")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Field4")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Field5")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid?>("ParentId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Path")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CategoryId");
+
+                    b.HasIndex("Code")
+                        .IsUnique();
+
+                    b.HasIndex("ParentId");
+
+                    b.ToTable("DictionaryData");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.ElectronSignSetting", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Access")
+                        .HasColumnType("int");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<decimal?>("MergeSignCost")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<decimal?>("RealVerifyCost")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<decimal?>("SignCost")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("ElectronSignSetting");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Enterprise", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Address")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("BankBranchName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("BankCard")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("BankName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("CityCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("ContactEmail")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ContactPhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<string>("Contacts")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("EnterpriseName")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("EnterpriseType")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("EstablishmentDate")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("IndustrialParkId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("IndustryTypeCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<bool>("IsCheckedBankCard")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsReal")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("LegalIdentity")
+                        .HasMaxLength(18)
+                        .HasColumnType("nvarchar(18)");
+
+                    b.Property<string>("LegalPerson")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("LicenseImage")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("MainBusiness")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int?>("PayAccess")
+                        .HasColumnType("int");
+
+                    b.Property<string>("ProvinceCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<int?>("RealAccess")
+                        .HasColumnType("int");
+
+                    b.Property<string>("RegisteredCapital")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int?>("SmsAccess")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("SmsCost")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<string>("SocietyCreditCode")
+                        .IsRequired()
+                        .HasMaxLength(18)
+                        .HasColumnType("nvarchar(18)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CityCode");
+
+                    b.HasIndex("IndustryTypeCode");
+
+                    b.HasIndex("ProvinceCode");
+
+                    b.ToTable("Enterprise");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseAuth", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("BankCard")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("BankCardImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("CertAccount")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("ElectronSignEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("EnterpriseName")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<int?>("EnterpriseRealMethod")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Identity")
+                        .HasMaxLength(18)
+                        .HasColumnType("nvarchar(18)");
+
+                    b.Property<string>("IdentityBackImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("IdentityImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("LegalIdentity")
+                        .HasMaxLength(18)
+                        .HasColumnType("nvarchar(18)");
+
+                    b.Property<string>("LegalPerson")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("LicenseImage")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Name")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<int?>("PersonalRealMethod")
+                        .HasColumnType("int");
+
+                    b.Property<string>("PhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<bool?>("Proxy")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("ProxyPowerAttorneyUrl")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("SocietyCreditCode")
+                        .IsRequired()
+                        .HasMaxLength(18)
+                        .HasColumnType("nvarchar(18)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("EnterpriseAuth");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseCost", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<decimal?>("Amount")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("EnterpriseEmployeeContractId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<int?>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EnterpriseEmployeeContractId");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.ToTable("EnterpriseCost");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseElectronSignSetting", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("ElectronSignAccess")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.ToTable("EnterpriseElectronSignSetting");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployee", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("Age")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("Birthday")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("ContactPhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<string>("ContractCode")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("ContractTemplateId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("ContractUrl")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("EnterpriseSignContractErrorMessage")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int?>("EnterpriseSignContractStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("EnterpriseSignContractTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int?>("Gender")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Identity")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("IdentityBackImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("IdentityImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("UserSignContractErrorMessage")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int?>("UserSignContractStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("UserSignContractTime")
+                        .HasColumnType("datetime2");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ContractTemplateId");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("EnterpriseEmployee");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployeeContract", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("ContractCode")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("ContractTemplateId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("ContractUrl")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseEmployeeId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("EnterpriseSignContractErrorMessage")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int?>("EnterpriseSignContractStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("EnterpriseSignContractTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("UserSignContractErrorMessage")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int?>("UserSignContractStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("UserSignContractTime")
+                        .HasColumnType("datetime2");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EnterpriseEmployeeId");
+
+                    b.ToTable("EnterpriseEmployeeContract");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseUserCollect", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTime?>("CollectedTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<DateTime?>("ContactedTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsCollected")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsContacted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("EnterpriseUserCollect");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Menu", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("ClientType")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Group")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Icon")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsCache")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Location")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<Guid?>("ParentId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Path")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Url")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("UserType")
+                        .HasColumnType("int");
+
+                    b.Property<int>("VisitLevel")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Width")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ParentId");
+
+                    b.ToTable("Menu");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Resource", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("ActionName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ActionSummary")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("AllowAnonymous")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("ApplicationName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ControllerName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ControllerSummary")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("DynamicAssemblyName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("FileUpload")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsExpired")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Method")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RequestTypeFullName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RequestTypeName")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ResponseTypeFullName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ResponseTypeName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Route")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("RouteArea")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ServiceName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Resource");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Role", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("ClientType")
+                        .HasColumnType("int");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("DataPower")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDisabled")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("MinLevel")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("UserType")
+                        .HasColumnType("int");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Role");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.RoleMenu", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid>("MenuId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("RoleId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("MenuId");
+
+                    b.HasIndex("RoleId");
+
+                    b.ToTable("RoleMenu");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.RoleResource", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("DataPower")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid>("ResourceId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("RoleId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ResourceId");
+
+                    b.HasIndex("RoleId");
+
+                    b.ToTable("RoleResource");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.ScheduleJobDetail", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("AssemblyName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("Concurrent")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("GroupName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IncludeAnnotations")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("JobId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("JobType")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Properties")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("ScheduleJobDetail");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.ScheduleJobTrigger", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Args")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("AssemblyName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<long>("ElapsedTime")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime?>("EndTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("JobId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime?>("LastRunTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<long>("MaxNumberOfErrors")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("MaxNumberOfRuns")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime?>("NextRunTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<long>("NumRetries")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("NumberOfErrors")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("NumberOfRuns")
+                        .HasColumnType("bigint");
+
+                    b.Property<bool>("ResetOnlyOnce")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Result")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("RetryTimeout")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("RunOnStart")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("StartNow")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("StartTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<long>("Status")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TriggerId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TriggerType")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("ScheduleJobTrigger");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("AddressDetail")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("AddressName")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("AgeMaxLimit")
+                        .HasColumnType("int");
+
+                    b.Property<int>("AgeMinLimit")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("BeginTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("BillingMethod")
+                        .HasColumnType("int");
+
+                    b.Property<int?>("CheckReceiveStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("CheckReceiveTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CityCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Code")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTime>("EndTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("GenderLimit")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("LastCheckReceiveTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<DateTime?>("LastSubmitTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<decimal?>("Latitude")
+                        .HasColumnType("decimal(18,6)");
+
+                    b.Property<decimal?>("Longitude")
+                        .HasColumnType("decimal(18,6)");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("ProvinceCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<int>("RecommendStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("RecommendTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("ReleaseStatus")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("ServiceFee")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<int>("SettlementCycle")
+                        .HasColumnType("int");
+
+                    b.Property<int?>("SettlementStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("SettlementTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CityCode");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.HasIndex("ProvinceCode");
+
+                    b.ToTable("TaskInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoBenefit", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("BenefitCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("TaskInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("BenefitCode");
+
+                    b.HasIndex("TaskInfoId");
+
+                    b.ToTable("TaskInfoBenefit");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoCredentialLimit", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("TaskInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TypeCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TaskInfoId");
+
+                    b.HasIndex("TypeCode");
+
+                    b.ToTable("TaskInfoCredentialLimit");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUser", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("ArrangeStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("ArrangeTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int?>("CheckReceiveStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("CheckReceiveTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseEmployeeId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("HireStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("HireTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("LastCheckReceiveTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<DateTime?>("LastSubmitTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("TaskInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EnterpriseEmployeeId");
+
+                    b.HasIndex("TaskInfoId");
+
+                    b.ToTable("TaskInfoUser");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmit", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("CheckReceiveStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("CheckReceiveTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTime>("Date")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("TaskInfoUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TaskInfoUserId");
+
+                    b.ToTable("TaskInfoUserSubmit");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmitFile", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("File")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("SubmitId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("SubmitId");
+
+                    b.ToTable("TaskInfoUserSubmitFile");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskUserCollect", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<Guid>("TaskInfoId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TaskInfoId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("TaskUserCollect");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.User", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("Age")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Avatar")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime?>("Birthday")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("CityCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("ContactPhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("DataSource")
+                        .HasColumnType("int");
+
+                    b.Property<Guid?>("DataSourceId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("EducationalBackgroundCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<Guid?>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("FreeTime")
+                        .HasColumnType("int");
+
+                    b.Property<int?>("Gender")
+                        .HasColumnType("int");
+
+                    b.Property<int?>("Height")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Identity")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsCheckPhoneNumber")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsReal")
+                        .HasColumnType("bit");
+
+                    b.Property<int?>("JobSeekingStatus")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Level")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("Password")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("PersonalIdentityCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("PhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<string>("ProvinceCode")
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<int?>("RealMethod")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("RealTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("Remark")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("UserName")
+                        .IsRequired()
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<int?>("Weight")
+                        .HasColumnType("int");
+
+                    b.Property<string>("WorkExperience")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("WorkSeniority")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("WxmpOpenId")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CityCode");
+
+                    b.HasIndex("EducationalBackgroundCode");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.HasIndex("PersonalIdentityCode");
+
+                    b.HasIndex("ProvinceCode");
+
+                    b.ToTable("User");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = new Guid("11111111-1111-1111-1111-111111111111"),
+                            CreatedTime = new DateTimeOffset(new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 8, 0, 0, 0)),
+                            IsCheckPhoneNumber = false,
+                            IsDeleted = false,
+                            IsReal = false,
+                            Level = 999,
+                            Name = "绠$悊鍛�",
+                            Password = "iEYggKrMhQ3ASUGLobra1w==:fn/DsMJUbD9FGpvBvR3moMpMPptdxzZlourPVhU479I=",
+                            Sort = 0,
+                            Status = 10,
+                            Type = 100,
+                            UserName = "system"
+                        });
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserAuth", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int?>("Age")
+                        .HasColumnType("int");
+
+                    b.Property<string>("BankCard")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("BankCardImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime?>("Birthday")
+                        .HasColumnType("datetime2");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("ElectronSignUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("FaceRealUrl")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int?>("Gender")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Identity")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("IdentityBackImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("IdentityImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("PhoneNumber")
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<int?>("RealAccess")
+                        .HasColumnType("int");
+
+                    b.Property<string>("RealFailMessage")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("RealStatus")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("UserAuth");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserBankCard", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Bank")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("PhoneNumber")
+                        .IsRequired()
+                        .HasMaxLength(11)
+                        .HasColumnType("nvarchar(11)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("UserBankCard");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserCredential", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("BackImg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Code")
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTime?>("EndDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("Img")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<bool>("IsForever")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("IssueUnit")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("StartDate")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("TypeCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TypeCode");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("UserCredential");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserDepartment", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("DepartmentId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DepartmentId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("UserDepartment");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserExpectJob", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("ExpectJobCode")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ExpectJobCode");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("UserExpectJob");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserManageIndustrialPark", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("IndustrialParkId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("UserManageIndustrialPark");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserPhoto", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("Img")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("UserPhoto");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserRole", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<Guid>("RoleId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("UserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("RoleId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("UserRole");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.ContractTemplate", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany("ContractTemplates")
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Enterprise");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.ContractTemplateValue", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.ContractTemplate", "Template")
+                        .WithMany("Values")
+                        .HasForeignKey("TemplateId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Template");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Department", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany("Departments")
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.Department", "Parent")
+                        .WithMany("Children")
+                        .HasForeignKey("ParentId");
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("Parent");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryCategory", "Category")
+                        .WithMany()
+                        .HasForeignKey("CategoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Parent")
+                        .WithMany("Children")
+                        .HasForeignKey("ParentId");
+
+                    b.Navigation("Category");
+
+                    b.Navigation("Parent");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Enterprise", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "City")
+                        .WithMany()
+                        .HasForeignKey("CityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "IndustryType")
+                        .WithMany()
+                        .HasForeignKey("IndustryTypeCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Province")
+                        .WithMany()
+                        .HasForeignKey("ProvinceCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.Navigation("City");
+
+                    b.Navigation("IndustryType");
+
+                    b.Navigation("Province");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseAuth", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithOne("EnterpriseAuth")
+                        .HasForeignKey("FlexJobApi.Core.EnterpriseAuth", "Id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Enterprise");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseCost", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.EnterpriseEmployeeContract", "EnterpriseEmployeeContract")
+                        .WithMany()
+                        .HasForeignKey("EnterpriseEmployeeContractId");
+
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany()
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("EnterpriseEmployeeContract");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseElectronSignSetting", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany("ElectronSignSettings")
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Enterprise");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployee", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.ContractTemplate", "ContractTemplate")
+                        .WithMany()
+                        .HasForeignKey("ContractTemplateId");
+
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany()
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany("EnterpriseEmployees")
+                        .HasForeignKey("UserId");
+
+                    b.Navigation("ContractTemplate");
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployeeContract", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.EnterpriseEmployee", "EnterpriseEmployee")
+                        .WithMany("Contracts")
+                        .HasForeignKey("EnterpriseEmployeeId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("EnterpriseEmployee");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseUserCollect", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany()
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany("EnterpriseUserCollects")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Menu", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Menu", "Parent")
+                        .WithMany("Children")
+                        .HasForeignKey("ParentId");
+
+                    b.Navigation("Parent");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.RoleMenu", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Menu", "Menu")
+                        .WithMany()
+                        .HasForeignKey("MenuId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.Role", "Role")
+                        .WithMany("RoleMenus")
+                        .HasForeignKey("RoleId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Menu");
+
+                    b.Navigation("Role");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.RoleResource", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Resource", "Resource")
+                        .WithMany()
+                        .HasForeignKey("ResourceId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.Role", "Role")
+                        .WithMany("RoleResources")
+                        .HasForeignKey("RoleId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Resource");
+
+                    b.Navigation("Role");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "City")
+                        .WithMany()
+                        .HasForeignKey("CityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany()
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Province")
+                        .WithMany()
+                        .HasForeignKey("ProvinceCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.Navigation("City");
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("Province");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoBenefit", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Benefit")
+                        .WithMany()
+                        .HasForeignKey("BenefitCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo")
+                        .WithMany("Benefits")
+                        .HasForeignKey("TaskInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Benefit");
+
+                    b.Navigation("TaskInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoCredentialLimit", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo")
+                        .WithMany("CredentialLimits")
+                        .HasForeignKey("TaskInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Type")
+                        .WithMany()
+                        .HasForeignKey("TypeCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.Navigation("TaskInfo");
+
+                    b.Navigation("Type");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUser", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.EnterpriseEmployee", "EnterpriseEmployee")
+                        .WithMany("TaskInfoUsers")
+                        .HasForeignKey("EnterpriseEmployeeId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo")
+                        .WithMany("TaskInfoUsers")
+                        .HasForeignKey("TaskInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("EnterpriseEmployee");
+
+                    b.Navigation("TaskInfo");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmit", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.TaskInfoUser", "TaskInfoUser")
+                        .WithMany("Submits")
+                        .HasForeignKey("TaskInfoUserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("TaskInfoUser");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmitFile", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.TaskInfoUserSubmit", "Submit")
+                        .WithMany("Files")
+                        .HasForeignKey("SubmitId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Submit");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskUserCollect", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo")
+                        .WithMany("TaskUserCollects")
+                        .HasForeignKey("TaskInfoId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany()
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("TaskInfo");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.User", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "City")
+                        .WithMany()
+                        .HasForeignKey("CityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "EducationalBackground")
+                        .WithMany()
+                        .HasForeignKey("EducationalBackgroundCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany("Users")
+                        .HasForeignKey("EnterpriseId");
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "PersonalIdentity")
+                        .WithMany()
+                        .HasForeignKey("PersonalIdentityCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Province")
+                        .WithMany()
+                        .HasForeignKey("ProvinceCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.Navigation("City");
+
+                    b.Navigation("EducationalBackground");
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("PersonalIdentity");
+
+                    b.Navigation("Province");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserAuth", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithOne("UserAuth")
+                        .HasForeignKey("FlexJobApi.Core.UserAuth", "Id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserBankCard", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany("BankCards")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserCredential", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "Type")
+                        .WithMany()
+                        .HasForeignKey("TypeCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany("UserCredentials")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Type");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserDepartment", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Department", "Department")
+                        .WithMany()
+                        .HasForeignKey("DepartmentId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany("UserDepartments")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Department");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserExpectJob", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.DictionaryData", "ExpectJob")
+                        .WithMany()
+                        .HasForeignKey("ExpectJobCode")
+                        .HasPrincipalKey("Code")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany("UserExpectJobs")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("ExpectJob");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserManageIndustrialPark", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany("UserManageIndustrialParks")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserPhoto", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany("Photos")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.UserRole", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.Role", "Role")
+                        .WithMany("UserRoles")
+                        .HasForeignKey("RoleId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("FlexJobApi.Core.User", "User")
+                        .WithMany("UserRoles")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Role");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.ContractTemplate", b =>
+                {
+                    b.Navigation("Values");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Department", b =>
+                {
+                    b.Navigation("Children");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b =>
+                {
+                    b.Navigation("Children");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Enterprise", b =>
+                {
+                    b.Navigation("ContractTemplates");
+
+                    b.Navigation("Departments");
+
+                    b.Navigation("ElectronSignSettings");
+
+                    b.Navigation("EnterpriseAuth");
+
+                    b.Navigation("Users");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployee", b =>
+                {
+                    b.Navigation("Contracts");
+
+                    b.Navigation("TaskInfoUsers");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Menu", b =>
+                {
+                    b.Navigation("Children");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.Role", b =>
+                {
+                    b.Navigation("RoleMenus");
+
+                    b.Navigation("RoleResources");
+
+                    b.Navigation("UserRoles");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b =>
+                {
+                    b.Navigation("Benefits");
+
+                    b.Navigation("CredentialLimits");
+
+                    b.Navigation("TaskInfoUsers");
+
+                    b.Navigation("TaskUserCollects");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUser", b =>
+                {
+                    b.Navigation("Submits");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmit", b =>
+                {
+                    b.Navigation("Files");
+                });
+
+            modelBuilder.Entity("FlexJobApi.Core.User", b =>
+                {
+                    b.Navigation("BankCards");
+
+                    b.Navigation("EnterpriseEmployees");
+
+                    b.Navigation("EnterpriseUserCollects");
+
+                    b.Navigation("Photos");
+
+                    b.Navigation("UserAuth");
+
+                    b.Navigation("UserCredentials");
+
+                    b.Navigation("UserDepartments");
+
+                    b.Navigation("UserExpectJobs");
+
+                    b.Navigation("UserManageIndustrialParks");
+
+                    b.Navigation("UserRoles");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/FlexJobApi.Database.Migrations/Migrations/20250828055909_UpdateEnterpriseEmployee0828.cs b/FlexJobApi.Database.Migrations/Migrations/20250828055909_UpdateEnterpriseEmployee0828.cs
new file mode 100644
index 0000000..eed7a08
--- /dev/null
+++ b/FlexJobApi.Database.Migrations/Migrations/20250828055909_UpdateEnterpriseEmployee0828.cs
@@ -0,0 +1,107 @@
+锘縰sing System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace FlexJobApi.Database.Migrations.Migrations
+{
+    /// <inheritdoc />
+    public partial class UpdateEnterpriseEmployee0828 : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AddColumn<string>(
+                name: "EnterpriseSignContractErrorMessage",
+                table: "EnterpriseEmployeeContract",
+                type: "nvarchar(max)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "UserSignContractErrorMessage",
+                table: "EnterpriseEmployeeContract",
+                type: "nvarchar(max)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "EnterpriseSignContractErrorMessage",
+                table: "EnterpriseEmployee",
+                type: "nvarchar(max)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "UserSignContractErrorMessage",
+                table: "EnterpriseEmployee",
+                type: "nvarchar(max)",
+                nullable: true);
+
+            migrationBuilder.CreateTable(
+                name: "EnterpriseCost",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
+                    EnterpriseId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
+                    Type = table.Column<int>(type: "int", nullable: false),
+                    EnterpriseEmployeeContractId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
+                    Status = table.Column<int>(type: "int", nullable: true),
+                    Amount = table.Column<decimal>(type: "decimal(18,2)", nullable: true),
+                    Sort = table.Column<int>(type: "int", nullable: false),
+                    TraceId = table.Column<string>(type: "nvarchar(max)", nullable: true),
+                    CreatedTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false),
+                    CreatedUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
+                    CreatedEnterpriseId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
+                    UpdatedTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
+                    UpdatedUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
+                    IsDeleted = table.Column<bool>(type: "bit", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_EnterpriseCost", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_EnterpriseCost_EnterpriseEmployeeContract_EnterpriseEmployeeContractId",
+                        column: x => x.EnterpriseEmployeeContractId,
+                        principalTable: "EnterpriseEmployeeContract",
+                        principalColumn: "Id");
+                    table.ForeignKey(
+                        name: "FK_EnterpriseCost_Enterprise_EnterpriseId",
+                        column: x => x.EnterpriseId,
+                        principalTable: "Enterprise",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_EnterpriseCost_EnterpriseEmployeeContractId",
+                table: "EnterpriseCost",
+                column: "EnterpriseEmployeeContractId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_EnterpriseCost_EnterpriseId",
+                table: "EnterpriseCost",
+                column: "EnterpriseId");
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "EnterpriseCost");
+
+            migrationBuilder.DropColumn(
+                name: "EnterpriseSignContractErrorMessage",
+                table: "EnterpriseEmployeeContract");
+
+            migrationBuilder.DropColumn(
+                name: "UserSignContractErrorMessage",
+                table: "EnterpriseEmployeeContract");
+
+            migrationBuilder.DropColumn(
+                name: "EnterpriseSignContractErrorMessage",
+                table: "EnterpriseEmployee");
+
+            migrationBuilder.DropColumn(
+                name: "UserSignContractErrorMessage",
+                table: "EnterpriseEmployee");
+        }
+    }
+}
diff --git a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
index eda1f43..9dc0207 100644
--- a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
+++ b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs
@@ -629,6 +629,60 @@
                     b.ToTable("EnterpriseAuth");
                 });
 
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseCost", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<decimal?>("Amount")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<Guid?>("CreatedEnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<DateTimeOffset>("CreatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("CreatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid?>("EnterpriseEmployeeContractId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<Guid>("EnterpriseId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.Property<bool>("IsDeleted")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int");
+
+                    b.Property<int?>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TraceId")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("Type")
+                        .HasColumnType("int");
+
+                    b.Property<DateTimeOffset?>("UpdatedTime")
+                        .HasColumnType("datetimeoffset");
+
+                    b.Property<Guid?>("UpdatedUserId")
+                        .HasColumnType("uniqueidentifier");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EnterpriseEmployeeContractId");
+
+                    b.HasIndex("EnterpriseId");
+
+                    b.ToTable("EnterpriseCost");
+                });
+
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseElectronSignSetting", b =>
                 {
                     b.Property<Guid>("Id")
@@ -709,6 +763,9 @@
                     b.Property<Guid>("EnterpriseId")
                         .HasColumnType("uniqueidentifier");
 
+                    b.Property<string>("EnterpriseSignContractErrorMessage")
+                        .HasColumnType("nvarchar(max)");
+
                     b.Property<int?>("EnterpriseSignContractStatus")
                         .HasColumnType("int");
 
@@ -748,6 +805,9 @@
 
                     b.Property<Guid?>("UserId")
                         .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("UserSignContractErrorMessage")
+                        .HasColumnType("nvarchar(max)");
 
                     b.Property<int?>("UserSignContractStatus")
                         .HasColumnType("int");
@@ -793,6 +853,9 @@
                     b.Property<Guid>("EnterpriseEmployeeId")
                         .HasColumnType("uniqueidentifier");
 
+                    b.Property<string>("EnterpriseSignContractErrorMessage")
+                        .HasColumnType("nvarchar(max)");
+
                     b.Property<int?>("EnterpriseSignContractStatus")
                         .HasColumnType("int");
 
@@ -813,6 +876,9 @@
 
                     b.Property<Guid?>("UpdatedUserId")
                         .HasColumnType("uniqueidentifier");
+
+                    b.Property<string>("UserSignContractErrorMessage")
+                        .HasColumnType("nvarchar(max)");
 
                     b.Property<int?>("UserSignContractStatus")
                         .HasColumnType("int");
@@ -2489,6 +2555,23 @@
                     b.Navigation("Enterprise");
                 });
 
+            modelBuilder.Entity("FlexJobApi.Core.EnterpriseCost", b =>
+                {
+                    b.HasOne("FlexJobApi.Core.EnterpriseEmployeeContract", "EnterpriseEmployeeContract")
+                        .WithMany()
+                        .HasForeignKey("EnterpriseEmployeeContractId");
+
+                    b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
+                        .WithMany()
+                        .HasForeignKey("EnterpriseId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Enterprise");
+
+                    b.Navigation("EnterpriseEmployeeContract");
+                });
+
             modelBuilder.Entity("FlexJobApi.Core.EnterpriseElectronSignSetting", b =>
                 {
                     b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise")
diff --git a/FlexJobApi.Database.Migrations/REDEME.MD b/FlexJobApi.Database.Migrations/REDEME.MD
index 4f17d90..1d0c34a 100644
--- a/FlexJobApi.Database.Migrations/REDEME.MD
+++ b/FlexJobApi.Database.Migrations/REDEME.MD
@@ -1,7 +1,7 @@
 -------------------------------主数据库---------------------------------------
 
 新增迁移文件
-dotnet ef migrations add UpdateEnterpriseEmployee0822 -s "../FlexJobApi.Web.Entry" -c DefaultDbContext
+dotnet ef migrations add UpdateEnterpriseEmployee0828 -s "../FlexJobApi.Web.Entry" -c DefaultDbContext
 
 删除迁移文件
 dotnet ef migrations remove -s "../FlexJobApi.Web.Entry" -c DefaultDbContext
diff --git a/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs
index cb49ad8..534de00 100644
--- a/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs
+++ b/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs
@@ -102,7 +102,10 @@
             if (entity.HireStatus == EnumTaskUserHireStatus.Pass)
             {
                 entity.HireTime = DateTime.Now;
-                entity.ArrangeStatus = EnumTaskUserArrangeStatus.Wait;
+                if (entity.EnterpriseEmployee.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Effect)
+                {
+                    entity.ArrangeStatus = EnumTaskUserArrangeStatus.Wait;
+                }
             }
             await rep.UpdateAsync(entity);
             return entity.Id;
diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs
index 495bd7a..77f062d 100644
--- a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs
@@ -1,4 +1,5 @@
-锘縰sing FlexJobApi.Core;
+锘縰sing Azure.Core;
+using FlexJobApi.Core;
 using Furion;
 using Furion.DatabaseAccessor;
 using Furion.FriendlyException;
@@ -16,11 +17,17 @@
     /// 鐢靛瓙绛惧洖浼�
     /// </summary>
     public class ElectronSignCallbackCommandHandler(
-            IRepository<User> repUser
+            IRepository<User> repUser,
+            IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract,
+            IRepository<EnterpriseEmployee> repEnterpriseEmployee,
+            IRepository<TaskInfoUser> repTaskInfoUser
         ) :
         IRequestHandler<ElectronSignCallbackCommand, bool>
     {
         private readonly IRepository<User> repUser = repUser;
+        private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract;
+        private readonly IRepository<EnterpriseEmployee> repEnterpriseEmployee = repEnterpriseEmployee;
+        private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser;
 
         /// <summary>
         /// 鐢靛瓙绛惧洖浼�
@@ -33,39 +40,146 @@
             var appId = App.GetConfig<Guid>("ElectronSignServer:AppId");
             if (appId != request.CustomerId)
                 throw Oops.Oh(EnumErrorCodeType.s400, "鏃犳晥鐨凙ppId");
-            if (request.Action == "UserSign")
+            switch (request.Action)
             {
-                var user = await repUser.AsQueryable()
-                    .Include(it => it.UserAuth)
-                    .Where(it => it.UserAuth.ElectronSignUserId == request.RelationId)
-                    .FirstOrDefaultAsync();
-                if (user == null)
-                    throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
-                if (request.Data is ElectronSignCallbackCommandUserSignModel data)
-                {
-                    if (user.Id != data.OutUserId)
-                        throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
-                    var enterpriseEmployees = request.Success
-                        ? await repUser.Change<EnterpriseEmployee>().AsQueryable()
-                            .Where(it => it.UserId == user.Id)
-                            .ToListAsync()
-                        : new List<EnterpriseEmployee>();
-                    PersonalUserRealCommandHandler.PersonalReal(
-                        request.Success == true
-                        ? EnumPersonalUserRealStatus.Real
-                        : EnumPersonalUserRealStatus.Fail,
-                        EnumUserRealMethod.Face,
-                        user,
-                        enterpriseEmployees,
-                        user.UserAuth.Name,
-                        user.UserAuth.Identity,
-                        user.UserAuth.IdentityImg,
-                        user.UserAuth.IdentityBackImg,
-                        faceRealUrl: user.UserAuth.FaceRealUrl);
-                    await repUser.UpdateAsync(user);
-                }
+                case "UserSign":
+                    await UserFaceReal(request);
+                    break;
+                case "ContractSign":
+                    await ContractSign(request);
+                    break;
+                default:
+                    break;
             }
             return true;
         }
+
+        private async Task ContractSign(ElectronSignCallbackCommand request)
+        {
+            if (request.Data is ElectronSignCallbackCommandContractSignModel data)
+            {
+                var contractId = data.OutContractId.ToGuid("鏃犳晥鐨勫悎鍚孖d")!.Value;
+                var contract = await repEnterpriseEmployeeContract.AsQueryable()
+                    .Where(it => it.Id == contractId)
+                    .FirstOrDefaultAsync();
+                if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓");
+                var entity = await repEnterpriseEmployee.AsQueryable()
+                    .Include(it => it.ContractTemplate)
+                    .Where(it => it.Id == contract.EnterpriseEmployeeId)
+                    .FirstOrDefaultAsync();
+                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐏靛伐");
+                if (entity.ContractTemplateId != contract.ContractTemplateId
+                    || entity.UserSignContractStatus != contract.UserSignContractStatus
+                    || entity.UserSignContractTime != contract.UserSignContractTime
+                    || entity.EnterpriseSignContractStatus != contract.EnterpriseSignContractStatus
+                    || entity.EnterpriseSignContractTime != contract.EnterpriseSignContractTime)
+                {
+                    throw Oops.Oh(EnumErrorCodeType.s510, "鍚堝悓宸插け鏁�");
+                }
+                if (entity.ContractTemplate.Access == EnumElectronSignAccess.BestSign)
+                {
+                    if (data.UserType == Core.Models.ElectronSignServer.PersonalUserReals.EnumElectronSignUserType.Personal)
+                    {
+                        if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Signing)
+                        {
+                            contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass;
+                            contract.UserSignContractTime = DateTime.Now;
+                        }
+                        else if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Cancelled)
+                        {
+                            contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Refuse;
+                            contract.UserSignContractErrorMessage = request.Message;
+                        }
+                    }
+                    else
+                    {
+                        if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Signing)
+                        {
+                            contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass;
+                            contract.EnterpriseSignContractTime = DateTime.Now;
+                        }
+                        else if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Cancelled)
+                        {
+                            contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Refuse;
+                            contract.EnterpriseSignContractErrorMessage = request.Message;
+                        }
+                    }
+                }
+                else if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Cancelled)
+                {
+                    contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Refuse;
+                    contract.UserSignContractErrorMessage = request.Message;
+                    contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Refuse;
+                    contract.EnterpriseSignContractErrorMessage = request.Message;
+                }
+                if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Completed)
+                {
+                    contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Effect;
+                    if (contract.UserSignContractTime == null)
+                    {
+                        contract.UserSignContractTime = DateTime.Now;
+                    }
+                    contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Effect;
+                    if (contract.EnterpriseSignContractTime == null)
+                    {
+                        contract.EnterpriseSignContractTime = DateTime.Now;
+                    }
+                    contract.ContractUrl = data.ContactUrl;
+                }
+                await repEnterpriseEmployeeContract.UpdateAsync(contract);
+
+                entity.UserSignContractStatus = contract.UserSignContractStatus;
+                entity.UserSignContractTime = contract.UserSignContractTime;
+                entity.EnterpriseSignContractStatus = contract.EnterpriseSignContractStatus;
+                entity.EnterpriseSignContractTime = contract.EnterpriseSignContractTime;
+                entity.ContractUrl = contract.ContractUrl;
+                await repEnterpriseEmployee.UpdateAsync(entity);
+
+                var taskUsers = await repTaskInfoUser.AsQueryable()
+                    .Where(it => it.EnterpriseEmployeeId == entity.Id && it.HireStatus == EnumTaskUserHireStatus.Pass && it.ArrangeStatus == null)
+                    .ToListAsync();
+                if (taskUsers.IsNotNull())
+                {
+                    foreach (var taskUser in taskUsers)
+                    {
+                        taskUser.ArrangeStatus = EnumTaskUserArrangeStatus.Wait;
+                    }
+                    await repTaskInfoUser.UpdateAsync(taskUsers);
+                }
+            }
+        }
+
+        private async Task UserFaceReal(ElectronSignCallbackCommand request)
+        {
+            var user = await repUser.AsQueryable()
+                .Include(it => it.UserAuth)
+                .Where(it => it.UserAuth.ElectronSignUserId == request.RelationId)
+                .FirstOrDefaultAsync();
+            if (user == null)
+                throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
+            if (request.Data is ElectronSignCallbackCommandUserSignModel data)
+            {
+                if (user.Id != data.OutUserId)
+                    throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
+                var enterpriseEmployees = request.Success
+                    ? await repUser.Change<EnterpriseEmployee>().AsQueryable()
+                        .Where(it => it.UserId == user.Id)
+                        .ToListAsync()
+                    : new List<EnterpriseEmployee>();
+                PersonalUserRealCommandHandler.PersonalReal(
+                    request.Success == true
+                    ? EnumPersonalUserRealStatus.Real
+                    : EnumPersonalUserRealStatus.Fail,
+                    EnumUserRealMethod.Face,
+                    user,
+                    enterpriseEmployees,
+                    user.UserAuth.Name,
+                    user.UserAuth.Identity,
+                    user.UserAuth.IdentityImg,
+                    user.UserAuth.IdentityBackImg,
+                    faceRealUrl: user.UserAuth.FaceRealUrl);
+                await repUser.UpdateAsync(user);
+            }
+        }
     }
 }
diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
index ba2e8dd..fe173ab 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
@@ -1,4 +1,8 @@
 锘縰sing FlexJobApi.Core;
+using FlexJobApi.Core.Models.ElectronSignServer.Common;
+using FlexJobApi.Core.Models.ElectronSignServer.Contracts;
+using FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals;
+using FlexJobApi.Core.Models.ElectronSignServer.Users;
 using Furion;
 using Furion.DatabaseAccessor;
 using Furion.DataValidation;
@@ -29,16 +33,26 @@
             IMediator mediator,
             IRepository<EnterpriseEmployee> rep,
             IRepository<User> repUser,
-            IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract
+            IRepository<Enterprise> repEnterprise,
+            IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract,
+            IRepository<ElectronSignSetting> repElectronSignSetting,
+            IRepository<ContractTemplate> repContractTemplate,
+            IRepository<EnterpriseCost> repEnterpriseCost
         ) :
         IRequestHandler<ImportEnterpriseEmployeesCommand, ImportEnterpriseEmployeesCommandResult>,
         IRequestHandler<EditEnterpriseEmployeeCommand, Guid>,
-        IRequestHandler<InviteElectronSignCommand, Guid>
+        IRequestHandler<InviteElectronSignCommand, Guid>,
+        IRequestHandler<PersonalUserElectronSignCommand, PersonalUserElectronSignCommandResult>,
+        IRequestHandler<EnterpriseUserElectronSignCommand, EnterpriseUserElectronSignCommandResult>
     {
         private readonly IMediator mediator = mediator;
         private readonly IRepository<EnterpriseEmployee> rep = rep;
         private readonly IRepository<User> repUser = repUser;
+        private readonly IRepository<Enterprise> repEnterprise = repEnterprise;
         private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract;
+        private readonly IRepository<ElectronSignSetting> repElectronSignSetting = repElectronSignSetting;
+        private readonly IRepository<ContractTemplate> repContractTemplate = repContractTemplate;
+        private readonly IRepository<EnterpriseCost> repEnterpriseCost = repEnterpriseCost;
 
         /// <summary>
         /// 瀵煎叆鐏靛伐淇℃伅
@@ -210,14 +224,14 @@
                 .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Id == request.Id)
                 .FirstOrDefaultAsync();
             if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐏靛伐");
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s400, "宸查個璇�");
             if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, "宸茬绾�");
             if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Effect) throw Oops.Oh(EnumErrorCodeType.s400, "宸茬敓鏁�");
-            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s400, "宸查個璇�");
             await mediator.Send(new CheckContractTemplateCommand
             {
-                Id = request.Id
+                Id = request.ContractTemplateId
             }, cancellationToken);
-            entity.ContractTemplateId = request.Id;
+            entity.ContractTemplateId = request.ContractTemplateId;
             entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Wait;
             entity.UserSignContractTime = null;
             entity.EnterpriseSignContractStatus = null;
@@ -231,8 +245,138 @@
                 UserSignContractStatus = entity.UserSignContractStatus,
             };
             await repEnterpriseEmployeeContract.InsertAsync(contract);
+            //await mediator.Send(new SaveEnterpriseCostCommand
+            //{
+            //    EnterpriseId = logier.EnterpriseId!.Value,
+            //    ContractTemplateId = request.ContractTemplateId,
+            //    EnterpriseEmployeeContractId = contract.Id,
+            //    Type = EnumEnterpriseCostType.ElectronSign
+            //});
             await rep.UpdateAsync(entity);
             return entity.Id;
         }
+
+        /// <summary>
+        /// 涓汉鐢ㄦ埛绛剧害
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<PersonalUserElectronSignCommandResult> Handle(PersonalUserElectronSignCommand request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var entity = await rep.AsQueryable()
+                .Include(it => it.ContractTemplate).ThenInclude(it => it.Values)
+                .Where(it => it.UserId == logier.Id && it.Id == request.Id)
+                .FirstOrDefaultAsync();
+            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s510, "鏈姤鍚嶈浼佷笟");
+            if (entity.UserSignContractStatus == null) throw Oops.Oh(EnumErrorCodeType.s510, "浼佷笟鏈彂璧风绾�");
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬绾�");
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Effect) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬敓鏁�");
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Refuse) throw Oops.Oh(EnumErrorCodeType.s510, "宸叉嫆绛�");
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬粓姝�");
+            var contract = await repEnterpriseEmployeeContract.AsQueryable()
+                .OrderByDescending(it => it.CreatedTime)
+                .Where(it => it.EnterpriseEmployeeId == request.Id)
+                .FirstOrDefaultAsync();
+            if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓");
+            var user = await repUser.AsQueryable().AsNoTracking()
+                .Include(it => it.UserAuth)
+                .Where(it => it.Id == logier.Id)
+                .FirstOrDefaultAsync();
+            if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
+            if (entity.ContractTemplate.Access == EnumElectronSignAccess.BestSign && !user.IsReal) throw Oops.Oh(EnumErrorCodeType.s510, "璇峰厛瀹炲悕");
+            var result = await new SendContractInput
+            {
+                OutContractId = contract.Id.ToString(),
+                TemplateId = entity.ContractTemplate.ElectronSignContractTemplateId!.Value,
+                Title = entity.ContractTemplate.Name,
+                OutUserId = logier.Id.ToString(),
+                Values = entity.ContractTemplate.Values
+                    .Where(it => it.UserType == EnumUserType.Personal)
+                    .Select(it =>
+                    {
+                        string? value = null;
+                        switch (it.BindProperty)
+                        {
+                            case "Name":
+                                value = user.UserAuth.Name;
+                                break;
+                            case "PhoneNumber":
+                                value = user.ContactPhoneNumber;
+                                break;
+                            case "Identity":
+                                value = user.UserAuth.Identity;
+                                break;
+                            default:
+                                break;
+                        }
+                        return new SendContractInputValue
+                        {
+                            Name = it.Name,
+                            Value = value
+                        };
+                    })
+                    .ToList(),
+                UserCount = 2
+            }.SendHttpAsync<SendContractInput, ElectronSignServerResult<SendContractOutput>>(EnumResourceHttpProvider.ElectronSignServerCustomer);
+            if (result?.Success != true)
+            {
+                throw Oops.Oh(EnumErrorCodeType.s510, result?.Message ?? "绛剧害澶辫触");
+            }
+            return result.Result.Adapt<PersonalUserElectronSignCommandResult>();
+        }
+
+        /// <summary>
+        /// 浼佷笟鐢ㄦ埛绛剧害
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<EnterpriseUserElectronSignCommandResult> Handle(EnterpriseUserElectronSignCommand request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var entity = await rep.AsQueryable()
+                .Include(it => it.ContractTemplate).ThenInclude(it => it.Values)
+                .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Id == request.Id)
+                .FirstOrDefaultAsync();
+            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s510, "鐏靛伐涓嶅瓨鍦�");
+            if (entity.UserSignContractStatus == null) throw Oops.Oh(EnumErrorCodeType.s510, "鏈個璇风绾�");
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "璇峰厛绛夊緟鐏靛伐绛剧害瀹屾垚");
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Effect) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬敓鏁�");
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Refuse) throw Oops.Oh(EnumErrorCodeType.s510, "宸叉嫆绛�");
+            if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬粓姝�");
+            var contract = await repEnterpriseEmployeeContract.AsQueryable()
+                .OrderByDescending(it => it.CreatedTime)
+                .Where(it => it.EnterpriseEmployeeId == request.Id)
+                .FirstOrDefaultAsync();
+            if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓");
+            var enterprise = await repEnterprise.AsQueryable().AsNoTracking()
+                .Include(it => it.EnterpriseAuth)
+                .Where(it => it.Id == logier.EnterpriseId)
+                .FirstOrDefaultAsync();
+            if (enterprise == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟");
+            if (entity.ContractTemplate.Access == EnumElectronSignAccess.BestSign && !enterprise.IsReal) throw Oops.Oh(EnumErrorCodeType.s510, "璇峰厛瀹炲悕");
+            var result = await new SendContractInput
+            {
+                OutContractId = contract.Id.ToString(),
+                TemplateId = entity.ContractTemplate.ElectronSignContractTemplateId!.Value,
+                Title = entity.ContractTemplate.Name,
+                OutUserId = logier.EnterpriseId.ToString(),
+                Values = entity.ContractTemplate.Values
+                    .Where(it => it.UserType == EnumUserType.Enterprise)
+                    .Select(it => new SendContractInputValue
+                    {
+                        Name = it.Name,
+                    })
+                    .ToList(),
+                UserCount = 2
+            }.SendHttpAsync<SendContractInput, ElectronSignServerResult<SendContractOutput>>(EnumResourceHttpProvider.ElectronSignServerCustomer);
+            if (result?.Success != true)
+            {
+                throw Oops.Oh(EnumErrorCodeType.s510, result?.Message ?? "绛剧害澶辫触");
+            }
+            return result.Result.Adapt<EnterpriseUserElectronSignCommandResult>();
+        }
     }
 }
diff --git a/FlexJobApi.UserServer.Application/Enterprises/Commands/EnterpriseCostCommandHandler.cs b/FlexJobApi.UserServer.Application/Enterprises/Commands/EnterpriseCostCommandHandler.cs
new file mode 100644
index 0000000..2113ed0
--- /dev/null
+++ b/FlexJobApi.UserServer.Application/Enterprises/Commands/EnterpriseCostCommandHandler.cs
@@ -0,0 +1,113 @@
+锘縰sing FlexJobApi.Core;
+using Furion.DatabaseAccessor;
+using Furion.FriendlyException;
+using MediatR;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.UserServer.Application
+{
+    /// <summary>
+    /// 浼佷笟璐圭敤鍛戒护澶勭悊鍣�
+    /// </summary>
+    public class EnterpriseCostCommandHandler(
+            IRepository<EnterpriseCost> repEnterpriseCost,
+            IRepository<Enterprise> repEnterprise,
+            IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract,
+            IRepository<ElectronSignSetting> repElectronSignSetting,
+            IRepository<ContractTemplate> repContractTemplate
+        ) :
+        IRequestHandler<SaveEnterpriseCostCommand, Guid>
+    {
+        private readonly IRepository<EnterpriseCost> repEnterpriseCost = repEnterpriseCost;
+        private readonly IRepository<Enterprise> repEnterprise = repEnterprise;
+        private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract;
+        private readonly IRepository<ElectronSignSetting> repElectronSignSetting = repElectronSignSetting;
+        private readonly IRepository<ContractTemplate> repContractTemplate = repContractTemplate;
+
+        /// <summary>
+        /// 淇濆瓨浼佷笟璐圭敤
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<Guid> Handle(SaveEnterpriseCostCommand request, CancellationToken cancellationToken)
+        {
+            var cost = await repEnterpriseCost.AsQueryable()
+                .Where(it =>
+                    it.EnterpriseId == request.EnterpriseId
+                    && it.Type == request.Type
+                    && it.EnterpriseEmployeeContractId == request.EnterpriseEmployeeContractId)
+                .FirstOrDefaultAsync();
+            var add = false;
+            if (cost == null)
+            {
+                cost = new EnterpriseCost
+                {
+                    EnterpriseId = request.EnterpriseId,
+                    Type = request.Type,
+                    EnterpriseEmployeeContractId = request.EnterpriseEmployeeContractId,
+                };
+                add = true;
+            }
+            else
+            {
+                cost.Status = request.Status;
+            }
+            if (cost.Amount == null)
+            {
+                if (request.Type == EnumEnterpriseCostType.ElectronSign && request.EnterpriseEmployeeContractId.HasValue)
+                {
+                    SaveEnterpriseCostCommandElectronSignSetting? setting = null;
+                    if (request.ContractTemplateId.HasValue)
+                    {
+                        setting = await (from ess in repElectronSignSetting.AsQueryable().AsNoTracking()
+                                         join ct in repContractTemplate.AsQueryable().AsNoTracking() on ess.Access equals ct.Access
+                                         where ct.Id == request.ContractTemplateId
+                                         select new SaveEnterpriseCostCommandElectronSignSetting
+                                         {
+                                             MergeSignCost = ess.MergeSignCost,
+                                             SignCost = ess.SignCost,
+                                         }).FirstOrDefaultAsync();
+                    }
+                    else
+                    {
+                        setting = await (from ess in repElectronSignSetting.AsQueryable().AsNoTracking()
+                                         join ct in repContractTemplate.AsQueryable().AsNoTracking() on ess.Access equals ct.Access
+                                         join eec in repEnterpriseEmployeeContract.AsQueryable().AsNoTracking() on ct.Id equals eec.ContractTemplateId
+                                         where eec.Id == request.EnterpriseEmployeeContractId
+                                         select new SaveEnterpriseCostCommandElectronSignSetting
+                                         {
+                                             MergeSignCost = ess.MergeSignCost,
+                                             SignCost = ess.SignCost,
+                                         }).FirstOrDefaultAsync();
+                    }
+                    if (setting == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐢靛瓙绛鹃厤缃�");
+                    cost.Amount = setting.MergeSignCost ?? setting.SignCost;
+                }
+                if (request.Type == EnumEnterpriseCostType.SMS)
+                {
+                    cost.Amount = await repEnterprise.AsQueryable().AsNoTracking()
+                        .Where(it => it.Id == request.EnterpriseId)
+                        .Select(it => it.SmsCost)
+                        .FirstOrDefaultAsync();
+                }
+            }
+            if (add)
+            {
+                await repEnterpriseCost.UpdateAsync(cost);
+            }
+            else
+            {
+                await repEnterpriseCost.InsertAsync(cost);
+            }
+            return cost.Id;
+        }
+    }
+}
diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
index 778cee4..783bc10 100644
--- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
+++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
@@ -201,7 +201,7 @@
             鐢靛瓙绛惧洖浼�
             </summary>
         </member>
-        <member name="M:FlexJobApi.UserServer.Application.ElectronSignCallbackCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User})">
+        <member name="M:FlexJobApi.UserServer.Application.ElectronSignCallbackCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser})">
             <summary>
             鐢靛瓙绛惧洖浼�
             </summary>
@@ -374,7 +374,7 @@
             鐏靛伐鍛戒护澶勭悊鍣�
             </summary>
         </member>
-        <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.#ctor(MediatR.IMediator,Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract})">
+        <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.#ctor(MediatR.IMediator,Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ElectronSignSetting},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseCost})">
             <summary>
             鐏靛伐鍛戒护澶勭悊鍣�
             </summary>
@@ -398,6 +398,22 @@
         <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.Handle(FlexJobApi.Core.InviteElectronSignCommand,System.Threading.CancellationToken)">
             <summary>
             閭�璇风伒宸ョ绾�
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.Handle(FlexJobApi.Core.PersonalUserElectronSignCommand,System.Threading.CancellationToken)">
+            <summary>
+            涓汉鐢ㄦ埛绛剧害
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.Handle(FlexJobApi.Core.EnterpriseUserElectronSignCommand,System.Threading.CancellationToken)">
+            <summary>
+            浼佷笟鐢ㄦ埛绛剧害
             </summary>
             <param name="request"></param>
             <param name="cancellationToken"></param>
@@ -479,6 +495,25 @@
             <param name="cancellationToken"></param>
             <returns></returns>
         </member>
+        <member name="T:FlexJobApi.UserServer.Application.EnterpriseCostCommandHandler">
+            <summary>
+            浼佷笟璐圭敤鍛戒护澶勭悊鍣�
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.UserServer.Application.EnterpriseCostCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseCost},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ElectronSignSetting},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate})">
+            <summary>
+            浼佷笟璐圭敤鍛戒护澶勭悊鍣�
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.UserServer.Application.EnterpriseCostCommandHandler.Handle(FlexJobApi.Core.SaveEnterpriseCostCommand,System.Threading.CancellationToken)">
+            <summary>
+            淇濆瓨浼佷笟璐圭敤
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+            <exception cref="T:System.NotImplementedException"></exception>
+        </member>
         <member name="T:FlexJobApi.UserServer.Application.EnterprisesQueryHandler">
             <summary>
             浼佷笟鏌ヨ澶勭悊鍣�

--
Gitblit v1.9.1