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