From 65c143397772e0c2458a243f4110863854478ddc Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期三, 20 八月 2025 15:58:19 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Entities/CommonEntity.cs | 18 FlexJobApi.Core/Enums/Users/EnumContractTemplateStatus.cs | 23 FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs | 6 FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/SetIsDisabledContractTemplateCommand.cs | 16 FlexJobApi.UserServer.Application/ElectronSign/Queries/ContractTemplateQueryHandler.cs | 301 +++ FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs | 100 + FlexJobApi.Core/Enums/Users/EnumContractTemplateValueType.cs | 28 FlexJobApi.Core/Enums/Users/EnumElectronSignAccess.cs | 24 FlexJobApi.Database.Migrations/Migrations/20250820052049_AddContractTemplate.Designer.cs | 2784 +++++++++++++++++++++++++++++++++ FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplateValue.cs | 55 FlexJobApi.Database.Migrations/Migrations/20250820052049_AddContractTemplate.cs | 101 + FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetEnterpriseContractTemplateLogsQuery.cs | 86 + FlexJobApi.Core/Utils/DbUtils/DbUtils.cs | 51 FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/SaveContractTemplateCommand.cs | 103 + FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetContractTemplateEnterprisesQuery.cs | 71 FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetContractTemplateQuery.cs | 113 + FlexJobApi.Core/FlexJobApi.Core.xml | 575 +++++++ FlexJobApi.EntityFramework.Core/DbContexts/LogDbContext.cs | 15 FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml | 68 FlexJobApi.Database.Migrations/REDEME.MD | 2 FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplate.cs | 77 FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetEnterpriseContractTemplatesQuery.cs | 115 + FlexJobApi.Core/Enums/Users/EnumContractTemplateValueRecorder.cs | 24 FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs | 153 + 24 files changed, 4,886 insertions(+), 23 deletions(-) diff --git a/FlexJobApi.Core/Entities/CommonEntity.cs b/FlexJobApi.Core/Entities/CommonEntity.cs index 1728392..581872d 100644 --- a/FlexJobApi.Core/Entities/CommonEntity.cs +++ b/FlexJobApi.Core/Entities/CommonEntity.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -45,6 +46,13 @@ public abstract class CommonEntity : Entity<Guid>, IPrivateEntity { /// <summary> + /// 涓婚敭Id + /// </summary> + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public override Guid Id { get; set; } + + /// <summary> /// 鎺掑簭 /// </summary> public virtual int Sort { get; set; } @@ -55,6 +63,11 @@ public virtual string TraceId { get; set; } /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public override DateTimeOffset CreatedTime { get; set; } + + /// <summary> /// 鍒涘缓鎿嶄綔浜� /// </summary> public virtual Guid? CreatedUserId { get; set; } @@ -65,6 +78,11 @@ public virtual Guid? CreatedEnterpriseId { get; set; } /// <summary> + /// 鏈�鍚庢洿鏂版椂闂� + /// </summary> + public override DateTimeOffset? UpdatedTime { get; set; } + + /// <summary> /// 鏈�鍚庢洿鏂版搷浣滀汉 /// </summary> public virtual Guid? UpdatedUserId { get; set; } diff --git a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplate.cs b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplate.cs new file mode 100644 index 0000000..e9cfce6 --- /dev/null +++ b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplate.cs @@ -0,0 +1,77 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鍚堝悓鍒剁増 + /// </summary> + public class ContractTemplate : CommonEntity, IIsDisabled + { + public ContractTemplate() + { + Values = []; + } + + /// <summary> + /// 浼佷笟Id + /// </summary> + public Guid EnterpriseId { get; set; } + + /// <summary> + /// 浼佷笟 + /// </summary> + public Enterprise Enterprise { get; set; } + + /// <summary> + /// 妯℃澘鍚嶇О + /// </summary> + [Required] + public string Name { get; set; } + + /// <summary> + /// 妯℃澘 + /// </summary> + [Required] + public string File { get; set; } + + /// <summary> + /// 涓氬姟缂栫爜 + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 閫氶亾 + /// </summary> + public EnumElectronSignAccess? Access { get; set; } + + /// <summary> + /// 妯℃澘Id + /// </summary> + public string TemplateId { get; set; } + + /// <summary> + /// 鍒剁増鐘舵�� + /// </summary> + public EnumContractTemplateStatus Status { get; set; } + + /// <summary> + /// 鍒剁増鏃堕棿 + /// </summary> + public DateTime? CompletedTime { get; set; } + + /// <summary> + /// 鏄惁宸茬鐢� + /// </summary> + public bool IsDisabled { get; set; } + + /// <summary> + /// 鍙橀噺 + /// </summary> + public List<ContractTemplateValue> Values { get; set; } + } +} diff --git a/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplateValue.cs b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplateValue.cs new file mode 100644 index 0000000..2223615 --- /dev/null +++ b/FlexJobApi.Core/Entities/UserServer/ElectronSigns/ContractTemplateValue.cs @@ -0,0 +1,55 @@ +锘縰sing FlexJobApi.Core.Enums.Users; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鍚堝悓妯℃澘鍙橀噺 + /// </summary> + public class ContractTemplateValue : CommonEntity, IPhysicalDeletion + { + /// <summary> + /// 鍚堝悓妯℃澘Id + /// </summary> + public Guid TemplateId { get; set; } + + /// <summary> + /// 鍚堝悓妯℃澘 + /// </summary> + public ContractTemplate Template { get; set; } + + /// <summary> + /// 鍙橀噺绫诲瀷 + /// </summary> + public EnumContractTemplateValueType Type { get; set; } + + /// <summary> + /// 鍐呭濉啓浜� + /// </summary> + public EnumContractTemplateValueRecorder Recorder { get; set; } + + /// <summary> + /// 鐢ㄦ埛绫诲瀷 + /// </summary> + public EnumUserType? UserType { get; set; } + + /// <summary> + /// 鍙橀噺鍚嶇О + /// </summary> + public string Label { get; set; } + + /// <summary> + /// 鍙橀噺浠g爜 + /// </summary> + public string Name { get; set; } + + /// <summary> + /// 鏄惁蹇呭~ + /// </summary> + public bool Required { get; set; } + } +} diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs index 05a5113..7fad3c1 100644 --- a/FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs +++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/Enterprise.cs @@ -20,6 +20,7 @@ { Users = []; Departments = []; + ContractTemplates = []; } /// <summary> @@ -206,6 +207,11 @@ /// </summary> public List<User> Users { get; set; } + /// <summary> + /// 鍚堝悓妯℃澘 + /// </summary> + public List<ContractTemplate> ContractTemplates { get; set; } + public void Configure(EntityTypeBuilder<Enterprise> entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder diff --git a/FlexJobApi.Core/Enums/Users/EnumContractTemplateStatus.cs b/FlexJobApi.Core/Enums/Users/EnumContractTemplateStatus.cs new file mode 100644 index 0000000..3fec685 --- /dev/null +++ b/FlexJobApi.Core/Enums/Users/EnumContractTemplateStatus.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 EnumContractTemplateStatus + { + /// <summary> + /// 寰呭埗鐗� + /// </summary> + Wait = 10, + /// <summary> + /// 宸插畬鎴� + /// </summary> + Completed = 20 + } +} diff --git a/FlexJobApi.Core/Enums/Users/EnumContractTemplateValueRecorder.cs b/FlexJobApi.Core/Enums/Users/EnumContractTemplateValueRecorder.cs new file mode 100644 index 0000000..6642c14 --- /dev/null +++ b/FlexJobApi.Core/Enums/Users/EnumContractTemplateValueRecorder.cs @@ -0,0 +1,24 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鍚堝悓妯℃澘鍙橀噺 + /// </summary> + public enum EnumContractTemplateValueRecorder + { + /// <summary> + /// 鍙戜欢浜� + /// </summary> + Creator = 10, + /// <summary> + /// 绛剧讲浜� + /// </summary> + Signer = 20, + } +} diff --git a/FlexJobApi.Core/Enums/Users/EnumContractTemplateValueType.cs b/FlexJobApi.Core/Enums/Users/EnumContractTemplateValueType.cs new file mode 100644 index 0000000..ad5dd17 --- /dev/null +++ b/FlexJobApi.Core/Enums/Users/EnumContractTemplateValueType.cs @@ -0,0 +1,28 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core.Enums.Users +{ + /// <summary> + /// 鍚堝悓妯℃澘鍙橀噺绫诲瀷 + /// </summary> + public enum EnumContractTemplateValueType + { + /// <summary> + /// 鏂囨湰 + /// </summary> + Text = 10, + /// <summary> + /// 绛剧讲 + /// </summary> + Sign = 20, + /// <summary> + /// 鏃ユ湡 + /// </summary> + Date = 30, + } +} diff --git a/FlexJobApi.Core/Enums/Users/EnumElectronSignAccess.cs b/FlexJobApi.Core/Enums/Users/EnumElectronSignAccess.cs new file mode 100644 index 0000000..dd00f6f --- /dev/null +++ b/FlexJobApi.Core/Enums/Users/EnumElectronSignAccess.cs @@ -0,0 +1,24 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鐢靛瓙绛� + /// </summary> + public enum EnumElectronSignAccess + { + /// <summary> + /// 涓婁笂绛� + /// </summary> + BestSign = 10, + /// <summary> + /// 鏀粯瀹濅俊浠荤 + /// </summary> + AlipaySign = 20 + } +} diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index 8c6841d..5235b06 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -44,6 +44,11 @@ 鏄惁鍒犻櫎 </summary> </member> + <member name="P:FlexJobApi.Core.CommonEntity.Id"> + <summary> + 涓婚敭Id + </summary> + </member> <member name="P:FlexJobApi.Core.CommonEntity.Sort"> <summary> 鎺掑簭 @@ -54,6 +59,11 @@ 璺熻釜Id </summary> </member> + <member name="P:FlexJobApi.Core.CommonEntity.CreatedTime"> + <summary> + 鍒涘缓鏃堕棿 + </summary> + </member> <member name="P:FlexJobApi.Core.CommonEntity.CreatedUserId"> <summary> 鍒涘缓鎿嶄綔浜� @@ -62,6 +72,11 @@ <member name="P:FlexJobApi.Core.CommonEntity.CreatedEnterpriseId"> <summary> 鍒涘缓浼佷笟Id + </summary> + </member> + <member name="P:FlexJobApi.Core.CommonEntity.UpdatedTime"> + <summary> + 鏈�鍚庢洿鏂版椂闂� </summary> </member> <member name="P:FlexJobApi.Core.CommonEntity.UpdatedUserId"> @@ -1139,6 +1154,111 @@ 鏄惁鍚敤 </summary> </member> + <member name="T:FlexJobApi.Core.ContractTemplate"> + <summary> + 鍚堝悓鍒剁増 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.EnterpriseId"> + <summary> + 浼佷笟Id + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.Enterprise"> + <summary> + 浼佷笟 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.Name"> + <summary> + 妯℃澘鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.File"> + <summary> + 妯℃澘 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.Code"> + <summary> + 涓氬姟缂栫爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.Access"> + <summary> + 閫氶亾 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.TemplateId"> + <summary> + 妯℃澘Id + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.Status"> + <summary> + 鍒剁増鐘舵�� + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.CompletedTime"> + <summary> + 鍒剁増鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.IsDisabled"> + <summary> + 鏄惁宸茬鐢� + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplate.Values"> + <summary> + 鍙橀噺 + </summary> + </member> + <member name="T:FlexJobApi.Core.ContractTemplateValue"> + <summary> + 鍚堝悓妯℃澘鍙橀噺 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplateValue.TemplateId"> + <summary> + 鍚堝悓妯℃澘Id + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplateValue.Template"> + <summary> + 鍚堝悓妯℃澘 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplateValue.Type"> + <summary> + 鍙橀噺绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplateValue.Recorder"> + <summary> + 鍐呭濉啓浜� + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplateValue.UserType"> + <summary> + 鐢ㄦ埛绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplateValue.Label"> + <summary> + 鍙橀噺鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplateValue.Name"> + <summary> + 鍙橀噺浠g爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContractTemplateValue.Required"> + <summary> + 鏄惁蹇呭~ + </summary> + </member> <member name="T:FlexJobApi.Core.Department"> <summary> 閮ㄩ棬 @@ -1367,6 +1487,11 @@ <member name="P:FlexJobApi.Core.Enterprise.Users"> <summary> 鐢ㄦ埛淇℃伅 + </summary> + </member> + <member name="P:FlexJobApi.Core.Enterprise.ContractTemplates"> + <summary> + 鍚堝悓妯℃澘 </summary> </member> <member name="T:FlexJobApi.Core.EnterpriseAuth"> @@ -2427,6 +2552,26 @@ 闃块噷浜慜SS </summary> </member> + <member name="T:FlexJobApi.Core.Enums.Users.EnumContractTemplateValueType"> + <summary> + 鍚堝悓妯℃澘鍙橀噺绫诲瀷 + </summary> + </member> + <member name="F:FlexJobApi.Core.Enums.Users.EnumContractTemplateValueType.Text"> + <summary> + 鏂囨湰 + </summary> + </member> + <member name="F:FlexJobApi.Core.Enums.Users.EnumContractTemplateValueType.Sign"> + <summary> + 绛剧讲 + </summary> + </member> + <member name="F:FlexJobApi.Core.Enums.Users.EnumContractTemplateValueType.Date"> + <summary> + 鏃ユ湡 + </summary> + </member> <member name="T:FlexJobApi.Core.EnumFileType"> <summary> 鏂囦欢绫诲瀷 @@ -3055,6 +3200,51 @@ <member name="F:FlexJobApi.Core.EnumClientType.Wxmp"> <summary> 寰俊灏忕▼搴� + </summary> + </member> + <member name="T:FlexJobApi.Core.EnumContractTemplateStatus"> + <summary> + 鍚堝悓鍒剁増鐘舵�� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumContractTemplateStatus.Wait"> + <summary> + 寰呭埗鐗� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumContractTemplateStatus.Completed"> + <summary> + 宸插畬鎴� + </summary> + </member> + <member name="T:FlexJobApi.Core.EnumContractTemplateValueRecorder"> + <summary> + 鍚堝悓妯℃澘鍙橀噺 + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumContractTemplateValueRecorder.Creator"> + <summary> + 鍙戜欢浜� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumContractTemplateValueRecorder.Signer"> + <summary> + 绛剧讲浜� + </summary> + </member> + <member name="T:FlexJobApi.Core.EnumElectronSignAccess"> + <summary> + 鐢靛瓙绛� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumElectronSignAccess.BestSign"> + <summary> + 涓婁笂绛� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumElectronSignAccess.AlipaySign"> + <summary> + 鏀粯瀹濅俊浠荤 </summary> </member> <member name="T:FlexJobApi.Core.EnumEnterpriseRealMethod"> @@ -6777,6 +6967,86 @@ 楠岃瘉鐮� </summary> </member> + <member name="T:FlexJobApi.Core.SaveContractTemplateCommand"> + <summary> + 淇濆瓨鍚堝悓妯℃澘 + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommand.EnterpriseId"> + <summary> + 浼佷笟Id锛堣繍钀ョ淇濆瓨鏃讹級 + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommand.Name"> + <summary> + 妯℃澘鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommand.File"> + <summary> + 妯℃澘 + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommand.Code"> + <summary> + 涓氬姟缂栫爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommand.Access"> + <summary> + 閫氶亾 + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommand.TemplateId"> + <summary> + 妯℃澘Id + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommand.Values"> + <summary> + 鍙橀噺 + </summary> + </member> + <member name="T:FlexJobApi.Core.SaveContractTemplateCommandValue"> + <summary> + 淇濆瓨鍚堝悓妯℃澘鍙橀噺 + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommandValue.Id"> + <summary> + Id + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommandValue.Type"> + <summary> + 鍙橀噺绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommandValue.Recorder"> + <summary> + 鍐呭濉啓浜� + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommandValue.UserType"> + <summary> + 鐢ㄦ埛绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommandValue.Label"> + <summary> + 鍙橀噺鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommandValue.Name"> + <summary> + 鍙橀噺浠g爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.SaveContractTemplateCommandValue.Required"> + <summary> + 鏄惁蹇呭~ + </summary> + </member> <member name="T:FlexJobApi.Core.SendPersonalUserIdentity3RealSmsCommand"> <summary> 鍙戦�佷釜浜轰笁瑕佺礌瀹炲悕鐭俊 @@ -6798,6 +7068,311 @@ 韬唤璇佸彿 </summary> </member> + <member name="T:FlexJobApi.Core.SetIsDisabledContractTemplateCommand"> + <summary> + 绂佺敤鍚堝悓妯℃澘 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetContractTemplateEnterprisesQuery"> + <summary> + 鏌ヨ杩愯惀绔崗璁鐞嗗垎椤靛垪琛ㄦ暟鎹� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateEnterprisesQuery.Keywords"> + <summary> + 鍏抽敭瀛� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateEnterprisesQuery.Status"> + <summary> + 鍒剁増鐘舵�� + </summary> + </member> + <member name="T:FlexJobApi.Core.GetContractTemplateEnterprisesQueryResult"> + <summary> + 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetContractTemplateEnterprisesQueryResultItem"> + <summary> + 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉-椤� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateEnterprisesQueryResultItem.Id"> + <summary> + 浼佷笟Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateEnterprisesQueryResultItem.EnterpriseName"> + <summary> + 浼佷笟鍏ㄧО + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateEnterprisesQueryResultItem.Contacts"> + <summary> + 鑱旂郴浜� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateEnterprisesQueryResultItem.ContactPhoneNumber"> + <summary> + 鑱旂郴鐢佃瘽 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateEnterprisesQueryResultItem.Total"> + <summary> + 鍚堝悓鏁� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateEnterprisesQueryResultItem.WaitCount"> + <summary> + 寰呭埗鐗� + </summary> + </member> + <member name="T:FlexJobApi.Core.GetContractTemplateQuery"> + <summary> + 鏌ヨ鍚堝悓妯℃澘璇︽儏 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQuery.Id"> + <summary> + 妯℃澘Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResult.EnterpriseId"> + <summary> + 浼佷笟Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResult.Name"> + <summary> + 妯℃澘鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResult.File"> + <summary> + 妯℃澘 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResult.Code"> + <summary> + 涓氬姟缂栫爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResult.Access"> + <summary> + 閫氶亾 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResult.TemplateId"> + <summary> + 妯℃澘Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResult.Values"> + <summary> + 鍙橀噺 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetContractTemplateQueryResultValue"> + <summary> + 鏌ヨ鍚堝悓妯℃澘鍙橀噺 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResultValue.Id"> + <summary> + Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResultValue.Type"> + <summary> + 鍙橀噺绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResultValue.Recorder"> + <summary> + 鍐呭濉啓浜� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResultValue.UserType"> + <summary> + 鐢ㄦ埛绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResultValue.Label"> + <summary> + 鍙橀噺鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResultValue.Name"> + <summary> + 鍙橀噺浠g爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetContractTemplateQueryResultValue.Required"> + <summary> + 鏄惁蹇呭~ + </summary> + </member> + <member name="T:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQuery"> + <summary> + 鏌ヨ浼佷笟鍚堝悓妯℃澘鏃ュ織鍒嗛〉鍒楄〃鏁版嵁 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQuery.Id"> + <summary> + 妯℃澘Id + </summary> + </member> + <member name="T:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResult"> + <summary> + 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResultItem"> + <summary> + 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉-椤� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResultItem.TraceId"> + <summary> + 璺熻釜Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResultItem.CreatedUserId"> + <summary> + 鎿嶄綔浜� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResultItem.CreatedUser"> + <summary> + 鎿嶄綔浜� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResultItem.CreatedTime"> + <summary> + 鎿嶄綔鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResultItem.Operate"> + <summary> + 鎿嶄綔 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResultItem.OldValues"> + <summary> + 鏃у�� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResultItem.NewValues"> + <summary> + 鏂板�� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplateLogsQueryResultItem.Content"> + <summary> + 鎿嶄綔鍐呭 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetEnterpriseContractTemplatesQuery"> + <summary> + 鏌ヨ浼佷笟鍚堝悓妯℃澘鍒嗛〉鍒楄〃鏁版嵁 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQuery.EnterpriseId"> + <summary> + 浼佷笟Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQuery.Keywords"> + <summary> + 鍏抽敭瀛� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQuery.Status"> + <summary> + 鍒剁増鐘舵�� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQuery.CreatedTimeBegin"> + <summary> + 瀹㈡埛涓婁紶鏃堕棿-璧峰 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQuery.CreatedTimeEnd"> + <summary> + 瀹㈡埛涓婁紶鏃堕棿-鎴 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQuery.CompletedTimeBegin"> + <summary> + 鍒剁増鏃堕棿-璧峰 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQuery.CompletedTimeEnd"> + <summary> + 鍒剁増鏃堕棿-鎴 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResult"> + <summary> + 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem"> + <summary> + 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉-椤� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.Id"> + <summary> + 妯℃澘Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.Name"> + <summary> + 妯℃澘鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.CreatedTime"> + <summary> + 瀹㈡埛涓婁紶鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.TemplateId"> + <summary> + 妯℃澘Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.Access"> + <summary> + 閫氶亾 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.Code"> + <summary> + 涓氬姟缂栫爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.File"> + <summary> + 妯℃澘 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.Status"> + <summary> + 鍒剁増鐘舵�� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.CompletedTime"> + <summary> + 鍒剁増鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetEnterpriseContractTemplatesQueryResultItem.Operator"> + <summary> + 鎿嶄綔浜� + </summary> + </member> <member name="T:FlexJobApi.Core.EditEnterpriseEmployeeCommand"> <summary> 缂栬緫鐏靛伐淇℃伅 diff --git a/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/SaveContractTemplateCommand.cs b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/SaveContractTemplateCommand.cs new file mode 100644 index 0000000..861be8a --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/SaveContractTemplateCommand.cs @@ -0,0 +1,103 @@ +锘縰sing FlexJobApi.Core.Enums.Users; +using Mapster; +using MediatR; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 淇濆瓨鍚堝悓妯℃澘 + /// </summary> + [Resource([EnumResourceController.UserServerElectronSign])] + public class SaveContractTemplateCommand : SaveDataCommand + { + public SaveContractTemplateCommand() + { + Values = []; + } + + /// <summary> + /// 浼佷笟Id锛堣繍钀ョ淇濆瓨鏃讹級 + /// </summary> + public Guid? EnterpriseId { get; set; } + + /// <summary> + /// 妯℃澘鍚嶇О + /// </summary> + [Required] + public string Name { get; set; } + + /// <summary> + /// 妯℃澘 + /// </summary> + [Required] + public string File { get; set; } + + /// <summary> + /// 涓氬姟缂栫爜 + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 閫氶亾 + /// </summary> + public EnumElectronSignAccess? Access { get; set; } + + /// <summary> + /// 妯℃澘Id + /// </summary> + public string TemplateId { get; set; } + + /// <summary> + /// 鍙橀噺 + /// </summary> + [AdaptIgnore] + public List<SaveContractTemplateCommandValue> Values { get; set; } + } + + /// <summary> + /// 淇濆瓨鍚堝悓妯℃澘鍙橀噺 + /// </summary> + public class SaveContractTemplateCommandValue + { + /// <summary> + /// Id + /// </summary> + public Guid? Id { get; set; } + + /// <summary> + /// 鍙橀噺绫诲瀷 + /// </summary> + public EnumContractTemplateValueType Type { get; set; } + + /// <summary> + /// 鍐呭濉啓浜� + /// </summary> + public EnumContractTemplateValueRecorder Recorder { get; set; } + + /// <summary> + /// 鐢ㄦ埛绫诲瀷 + /// </summary> + public EnumUserType? UserType { get; set; } + + /// <summary> + /// 鍙橀噺鍚嶇О + /// </summary> + public string Label { get; set; } + + /// <summary> + /// 鍙橀噺浠g爜 + /// </summary> + public string Name { get; set; } + + /// <summary> + /// 鏄惁蹇呭~ + /// </summary> + public bool Required { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/SetIsDisabledContractTemplateCommand.cs b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/SetIsDisabledContractTemplateCommand.cs new file mode 100644 index 0000000..4703a93 --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Commands/SetIsDisabledContractTemplateCommand.cs @@ -0,0 +1,16 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 绂佺敤鍚堝悓妯℃澘 + /// </summary> + [Resource([EnumResourceController.UserServerElectronSign])] + public class SetIsDisabledContractTemplateCommand : SetIsDisabledCommand + { + } +} diff --git a/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetContractTemplateEnterprisesQuery.cs b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetContractTemplateEnterprisesQuery.cs new file mode 100644 index 0000000..79d11f3 --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetContractTemplateEnterprisesQuery.cs @@ -0,0 +1,71 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鏌ヨ杩愯惀绔崗璁鐞嗗垎椤靛垪琛ㄦ暟鎹� + /// </summary> + [Resource([EnumResourceController.UserServerElectronSign])] + public class GetContractTemplateEnterprisesQuery : PagedListQuery<GetContractTemplateEnterprisesQueryResult, GetContractTemplateEnterprisesQueryResultItem> + { + /// <summary> + /// 鍏抽敭瀛� + /// </summary> + public string Keywords { get; set; } + + /// <summary> + /// 鍒剁増鐘舵�� + /// </summary> + public EnumContractTemplateStatus? Status { get; set; } + } + + /// <summary> + /// 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉 + /// </summary> + public class GetContractTemplateEnterprisesQueryResult : PagedListQueryResult<GetContractTemplateEnterprisesQueryResultItem> + { + + } + + /// <summary> + /// 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉-椤� + /// </summary> + public class GetContractTemplateEnterprisesQueryResultItem + { + /// <summary> + /// 浼佷笟Id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 浼佷笟鍏ㄧО + /// </summary> + public string EnterpriseName { get; set; } + + /// <summary> + /// 鑱旂郴浜� + /// </summary> + public string Contacts { get; set; } + + /// <summary> + /// 鑱旂郴鐢佃瘽 + /// </summary> + public string ContactPhoneNumber { get; set; } + + /// <summary> + /// 鍚堝悓鏁� + /// </summary> + public int Total { get; set; } + + /// <summary> + /// 寰呭埗鐗� + /// </summary> + public int WaitCount { get; set; } + } + +} diff --git a/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetContractTemplateQuery.cs b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetContractTemplateQuery.cs new file mode 100644 index 0000000..8651e1f --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetContractTemplateQuery.cs @@ -0,0 +1,113 @@ +锘縰sing FlexJobApi.Core.Enums.Users; +using Mapster; +using MediatR; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鏌ヨ鍚堝悓妯℃澘璇︽儏 + /// </summary> + [Resource([EnumResourceController.UserServerElectronSign])] + public class GetContractTemplateQuery : IRequest<GetContractTemplateQueryResult> + { + /// <summary> + /// 妯℃澘Id + /// </summary> + public Guid Id { get; set; } + } + + public class GetContractTemplateQueryResult + { + public GetContractTemplateQueryResult() + { + Values = []; + } + + /// <summary> + /// 妯℃澘Id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 浼佷笟Id + /// </summary> + public Guid EnterpriseId { get; set; } + + /// <summary> + /// 妯℃澘鍚嶇О + /// </summary> + public string Name { get; set; } + + /// <summary> + /// 妯℃澘 + /// </summary> + public string File { get; set; } + + /// <summary> + /// 涓氬姟缂栫爜 + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 閫氶亾 + /// </summary> + public EnumElectronSignAccess? Access { get; set; } + + /// <summary> + /// 妯℃澘Id + /// </summary> + public string TemplateId { get; set; } + + /// <summary> + /// 鍙橀噺 + /// </summary> + public List<GetContractTemplateQueryResultValue> Values { get; set; } + } + + /// <summary> + /// 鏌ヨ鍚堝悓妯℃澘鍙橀噺 + /// </summary> + public class GetContractTemplateQueryResultValue + { + /// <summary> + /// 鍙橀噺Id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 鍙橀噺绫诲瀷 + /// </summary> + public EnumContractTemplateValueType Type { get; set; } + + /// <summary> + /// 鍐呭濉啓浜� + /// </summary> + public EnumContractTemplateValueRecorder Recorder { get; set; } + + /// <summary> + /// 鐢ㄦ埛绫诲瀷 + /// </summary> + public EnumUserType? UserType { get; set; } + + /// <summary> + /// 鍙橀噺鍚嶇О + /// </summary> + public string Label { get; set; } + + /// <summary> + /// 鍙橀噺浠g爜 + /// </summary> + public string Name { get; set; } + + /// <summary> + /// 鏄惁蹇呭~ + /// </summary> + public bool Required { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetEnterpriseContractTemplateLogsQuery.cs b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetEnterpriseContractTemplateLogsQuery.cs new file mode 100644 index 0000000..cde2c0a --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetEnterpriseContractTemplateLogsQuery.cs @@ -0,0 +1,86 @@ +锘縰sing Mapster; +using Newtonsoft.Json; +using Swashbuckle.AspNetCore.Annotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鏌ヨ浼佷笟鍚堝悓妯℃澘鏃ュ織鍒嗛〉鍒楄〃鏁版嵁 + /// </summary> + [Resource([EnumResourceController.UserServerElectronSign])] + public class GetEnterpriseContractTemplateLogsQuery : PagedListQuery<GetEnterpriseContractTemplateLogsQueryResult, GetEnterpriseContractTemplateLogsQueryResultItem> + { + /// <summary> + /// 妯℃澘Id + /// </summary> + public Guid Id { get; set; } + } + + /// <summary> + /// 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉 + /// </summary> + public class GetEnterpriseContractTemplateLogsQueryResult : PagedListQueryResult<GetEnterpriseContractTemplateLogsQueryResultItem> + { + + } + + /// <summary> + /// 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉-椤� + /// </summary> + public class GetEnterpriseContractTemplateLogsQueryResultItem + { + public GetEnterpriseContractTemplateLogsQueryResultItem() + { + Content = []; + } + + /// <summary> + /// 璺熻釜Id + /// </summary> + public string TraceId { get; set; } + + /// <summary> + /// 鎿嶄綔浜� + /// </summary> + [JsonIgnore, SwaggerIgnore] + public Guid? CreatedUserId { get; set; } + + /// <summary> + /// 鎿嶄綔浜� + /// </summary> + public string CreatedUser { get; set; } + + /// <summary> + /// 鎿嶄綔鏃堕棿 + /// </summary> + public DateTimeOffset CreatedTime { get; set; } + + /// <summary> + /// 鎿嶄綔 + /// </summary> + public EnumDbAuditOperate Operate { get; set; } + + /// <summary> + /// 鏃у�� + /// </summary> + [JsonIgnore, SwaggerIgnore] + public string OldValues { get; set; } + + /// <summary> + /// 鏂板�� + /// </summary> + [JsonIgnore, SwaggerIgnore] + public string NewValues { get; set; } + + /// <summary> + /// 鎿嶄綔鍐呭 + /// </summary> + [AdaptIgnore] + public List<string> Content { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetEnterpriseContractTemplatesQuery.cs b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetEnterpriseContractTemplatesQuery.cs new file mode 100644 index 0000000..0af87f3 --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/ElectronSigns/Queries/GetEnterpriseContractTemplatesQuery.cs @@ -0,0 +1,115 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鏌ヨ浼佷笟鍚堝悓妯℃澘鍒嗛〉鍒楄〃鏁版嵁 + /// </summary> + [Resource([EnumResourceController.UserServerElectronSign])] + public class GetEnterpriseContractTemplatesQuery : PagedListQuery<GetEnterpriseContractTemplatesQueryResult, GetEnterpriseContractTemplatesQueryResultItem> + { + /// <summary> + /// 浼佷笟Id + /// </summary> + public Guid? EnterpriseId { get; set; } + + /// <summary> + /// 鍏抽敭瀛� + /// </summary> + public string Keywords { get; set; } + + /// <summary> + /// 鍒剁増鐘舵�� + /// </summary> + public EnumContractTemplateStatus? Status { get; set; } + + /// <summary> + /// 瀹㈡埛涓婁紶鏃堕棿-璧峰 + /// </summary> + public DateTime? CreatedTimeBegin { get; set; } + + /// <summary> + /// 瀹㈡埛涓婁紶鏃堕棿-鎴 + /// </summary> + public DateTime? CreatedTimeEnd { get; set; } + + /// <summary> + /// 鍒剁増鏃堕棿-璧峰 + /// </summary> + public DateTime? CompletedTimeBegin { get; set; } + + /// <summary> + /// 鍒剁増鏃堕棿-鎴 + /// </summary> + public DateTime? CompletedTimeEnd { get; set; } + } + + /// <summary> + /// 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉 + /// </summary> + public class GetEnterpriseContractTemplatesQueryResult : PagedListQueryResult<GetEnterpriseContractTemplatesQueryResultItem> + { + + } + + /// <summary> + /// 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛�-缁撴灉-椤� + /// </summary> + public class GetEnterpriseContractTemplatesQueryResultItem + { + /// <summary> + /// 妯℃澘Id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 妯℃澘鍚嶇О + /// </summary> + public string Name { get; set; } + + /// <summary> + /// 瀹㈡埛涓婁紶鏃堕棿 + /// </summary> + public DateTimeOffset CreatedTime { get; set; } + + /// <summary> + /// 妯℃澘Id + /// </summary> + public string TemplateId { get; set; } + + /// <summary> + /// 閫氶亾 + /// </summary> + public EnumElectronSignAccess? Access { get; set; } + + /// <summary> + /// 涓氬姟缂栫爜 + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 妯℃澘 + /// </summary> + public string File { get; set; } + + /// <summary> + /// 鍒剁増鐘舵�� + /// </summary> + public EnumContractTemplateStatus Status { get; set; } + + /// <summary> + /// 鍒剁増鏃堕棿 + /// </summary> + public DateTime? CompletedTime { get; set; } + + /// <summary> + /// 鎿嶄綔浜� + /// </summary> + public string Operator { get; set; } + } +} diff --git a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs index d06c426..156ecab 100644 --- a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs +++ b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs @@ -568,37 +568,44 @@ continue; } - Db.GetRepository<DbAuditLog, LogDbContextLocator>().InsertNow(new DbAuditLog + var log = new DbAuditLog { Id = IDGen.NextID(), TableName = entityType.Name, PrimaryKey = (Guid)entity.Property("Id").CurrentValue, - NewValues = entity.State == EntityState.Added || entity.State == EntityState.Modified - ? GetPropertyValuesAsJson(entity) - : null, - OldValues = entity.State == EntityState.Deleted || entity.State == EntityState.Modified - ? GetPropertyValuesAsJson(entity, entity.State == EntityState.Modified) - : null, - Operate = entity.State == EntityState.Added - ? EnumDbAuditOperate.Added - : entity.State == EntityState.Modified - ? EnumDbAuditOperate.Modified - : EnumDbAuditOperate.Deleted, TraceId = App.GetTraceId(), CreatedTime = DateTime.Now, CreatedUserId = logier?.Id, CreatedEnterpriseId = logier?.EnterpriseId - }); + }; + log.Operate = + entity.State == EntityState.Added + ? EnumDbAuditOperate.Added + : entity.State == EntityState.Modified + ? EnumDbAuditOperate.Modified + : EnumDbAuditOperate.Deleted; + if (entity.Property(nameof(CommonEntity.IsDeleted)).CurrentValue is bool isDeleted && isDeleted == true) + { + log.Operate = EnumDbAuditOperate.Deleted; + } + log.NewValues = + log.Operate == EnumDbAuditOperate.Deleted + ? null + : JsonConvert.SerializeObject(entity.Properties + .Where(p => log.Operate == EnumDbAuditOperate.Modified + ? p.IsModified + : true) + .ToDictionary(p => p.Metadata.Name, p => p.CurrentValue)); + log.OldValues = + log.Operate == EnumDbAuditOperate.Added + ? null + : JsonConvert.SerializeObject(entity.Properties + .Where(p => log.Operate == EnumDbAuditOperate.Modified + ? p.IsModified + : true) + .ToDictionary(p => p.Metadata.Name, p => p.OriginalValue)); + Db.GetRepository<DbAuditLog, LogDbContextLocator>().InsertNow(log); } - } - - private static string GetPropertyValuesAsJson(EntityEntry entry, bool getOldValues = false) - { - var properties = entry.Properties - .Where(p => getOldValues ? p.IsModified : true) - .ToDictionary(p => p.Metadata.Name, p => getOldValues ? p.OriginalValue : p.CurrentValue); - - return JsonConvert.SerializeObject(properties); } } } diff --git a/FlexJobApi.Database.Migrations/Migrations/20250820052049_AddContractTemplate.Designer.cs b/FlexJobApi.Database.Migrations/Migrations/20250820052049_AddContractTemplate.Designer.cs new file mode 100644 index 0000000..542d937 --- /dev/null +++ b/FlexJobApi.Database.Migrations/Migrations/20250820052049_AddContractTemplate.Designer.cs @@ -0,0 +1,2784 @@ +锘�// <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("20250820052049_AddContractTemplate")] + partial class AddContractTemplate + { + /// <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") + .HasColumnType("nvarchar(max)"); + + 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>("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>("TemplateId") + .HasColumnType("nvarchar(max)"); + + 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("ContractTemplate"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ContractTemplateValue", 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<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.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<decimal?>("MergeSignCost") + .HasColumnType("decimal(18,2)"); + + b.Property<int?>("PayAccess") + .HasColumnType("int"); + + b.Property<string>("ProvinceCode") + .HasColumnType("nvarchar(128)"); + + b.Property<int?>("RealAccess") + .HasColumnType("int"); + + b.Property<decimal?>("RealVerifyCost") + .HasColumnType("decimal(18,2)"); + + b.Property<string>("RegisteredCapital") + .HasColumnType("nvarchar(max)"); + + b.Property<decimal?>("SignCost") + .HasColumnType("decimal(18,2)"); + + 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<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<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.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>("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<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<int?>("UserSignContractStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("UserSignContractTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("EnterpriseId"); + + b.HasIndex("UserId"); + + b.ToTable("EnterpriseEmployee"); + }); + + 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.EnterpriseEmployee", b => + { + 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("Enterprise"); + + b.Navigation("User"); + }); + + 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("EnterpriseAuth"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployee", b => + { + 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/20250820052049_AddContractTemplate.cs b/FlexJobApi.Database.Migrations/Migrations/20250820052049_AddContractTemplate.cs new file mode 100644 index 0000000..df244d4 --- /dev/null +++ b/FlexJobApi.Database.Migrations/Migrations/20250820052049_AddContractTemplate.cs @@ -0,0 +1,101 @@ +锘縰sing System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace FlexJobApi.Database.Migrations.Migrations +{ + /// <inheritdoc /> + public partial class AddContractTemplate : Migration + { + /// <inheritdoc /> + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "ContractTemplate", + columns: table => new + { + Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), + EnterpriseId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), + Name = table.Column<string>(type: "nvarchar(max)", nullable: false), + File = table.Column<string>(type: "nvarchar(max)", nullable: false), + Code = table.Column<string>(type: "nvarchar(max)", nullable: true), + Access = table.Column<int>(type: "int", nullable: true), + TemplateId = table.Column<string>(type: "nvarchar(max)", nullable: true), + Status = table.Column<int>(type: "int", nullable: false), + CompletedTime = table.Column<DateTime>(type: "datetime2", nullable: true), + IsDisabled = table.Column<bool>(type: "bit", nullable: false), + CreatedTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false), + UpdatedTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true), + Sort = table.Column<int>(type: "int", nullable: false), + TraceId = table.Column<string>(type: "nvarchar(max)", nullable: true), + CreatedUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), + CreatedEnterpriseId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), + UpdatedUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column<bool>(type: "bit", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ContractTemplate", x => x.Id); + table.ForeignKey( + name: "FK_ContractTemplate_Enterprise_EnterpriseId", + column: x => x.EnterpriseId, + principalTable: "Enterprise", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ContractTemplateValue", + columns: table => new + { + Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), + TemplateId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), + Type = table.Column<int>(type: "int", nullable: false), + Recorder = table.Column<int>(type: "int", nullable: false), + UserType = table.Column<int>(type: "int", nullable: true), + Label = table.Column<string>(type: "nvarchar(max)", nullable: true), + Name = table.Column<string>(type: "nvarchar(max)", nullable: true), + Required = table.Column<bool>(type: "bit", nullable: false), + CreatedTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: false), + UpdatedTime = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true), + Sort = table.Column<int>(type: "int", nullable: false), + TraceId = table.Column<string>(type: "nvarchar(max)", nullable: true), + CreatedUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), + CreatedEnterpriseId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), + UpdatedUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column<bool>(type: "bit", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ContractTemplateValue", x => x.Id); + table.ForeignKey( + name: "FK_ContractTemplateValue_ContractTemplate_TemplateId", + column: x => x.TemplateId, + principalTable: "ContractTemplate", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_ContractTemplate_EnterpriseId", + table: "ContractTemplate", + column: "EnterpriseId"); + + migrationBuilder.CreateIndex( + name: "IX_ContractTemplateValue_TemplateId", + table: "ContractTemplateValue", + column: "TemplateId"); + } + + /// <inheritdoc /> + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ContractTemplateValue"); + + migrationBuilder.DropTable( + name: "ContractTemplate"); + } + } +} diff --git a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs index 742a21f..d05d4d2 100644 --- a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs +++ b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs @@ -22,6 +22,130 @@ 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") + .HasColumnType("nvarchar(max)"); + + 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>("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>("TemplateId") + .HasColumnType("nvarchar(max)"); + + 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("ContractTemplate"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ContractTemplateValue", 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<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") @@ -2096,6 +2220,28 @@ 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") @@ -2541,6 +2687,11 @@ b.Navigation("User"); }); + modelBuilder.Entity("FlexJobApi.Core.ContractTemplate", b => + { + b.Navigation("Values"); + }); + modelBuilder.Entity("FlexJobApi.Core.Department", b => { b.Navigation("Children"); @@ -2553,6 +2704,8 @@ modelBuilder.Entity("FlexJobApi.Core.Enterprise", b => { + b.Navigation("ContractTemplates"); + b.Navigation("Departments"); b.Navigation("EnterpriseAuth"); diff --git a/FlexJobApi.Database.Migrations/REDEME.MD b/FlexJobApi.Database.Migrations/REDEME.MD index 8c38ead..3e2ff92 100644 --- a/FlexJobApi.Database.Migrations/REDEME.MD +++ b/FlexJobApi.Database.Migrations/REDEME.MD @@ -1,7 +1,7 @@ -------------------------------主数据库--------------------------------------- 新增迁移文件 -dotnet ef migrations add UpdateUser0820 -s "../FlexJobApi.Web.Entry" -c DefaultDbContext +dotnet ef migrations add AddContractTemplate -s "../FlexJobApi.Web.Entry" -c DefaultDbContext 删除迁移文件 dotnet ef migrations remove -s "../FlexJobApi.Web.Entry" -c DefaultDbContext diff --git a/FlexJobApi.EntityFramework.Core/DbContexts/LogDbContext.cs b/FlexJobApi.EntityFramework.Core/DbContexts/LogDbContext.cs index 87ec6af..8585d3d 100644 --- a/FlexJobApi.EntityFramework.Core/DbContexts/LogDbContext.cs +++ b/FlexJobApi.EntityFramework.Core/DbContexts/LogDbContext.cs @@ -1,8 +1,10 @@ 锘縰sing FlexJobApi.Core; +using Furion; using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Microsoft.Extensions.Configuration; using System; namespace FlexJobApi.EntityFramework.Core; @@ -14,6 +16,19 @@ { } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + optionsBuilder + .UseSqlServer(App.Configuration.GetConnectionString("FlexJobApiLog"), options => + { + // 鎸囧畾鐩爣鏁版嵁搴撶増鏈负SQL Server 2014 + options.UseCompatibilityLevel(120); // 120瀵瑰簲SQL Server 2014 + // 鍙�夛細璁剧疆鎵归噺鎿嶄綔澶у皬锛堟寜闇�璋冩暣锛� + options.MaxBatchSize(1000); + }); + } + protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs new file mode 100644 index 0000000..63c0831 --- /dev/null +++ b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs @@ -0,0 +1,100 @@ +锘縰sing FlexJobApi.Core; +using Furion.DatabaseAccessor; +using Furion.FriendlyException; +using Mapster; +using MediatR; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.UserServer.Application +{ + /// <summary> + /// 鍚堝悓妯℃澘鍛戒护澶勭悊鍣� + /// </summary> + public class ContractTemplateCommandHandler( + IRepository<ContractTemplate> rep + ) : + IRequestHandler<SaveContractTemplateCommand, Guid>, + IRequestHandler<SetIsDisabledContractTemplateCommand, int> + { + private readonly IRepository<ContractTemplate> rep = rep; + + /// <summary> + /// 淇濆瓨鍚堝悓妯℃澘 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<Guid> Handle(SaveContractTemplateCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + if (logier.Type == EnumUserType.Enterprise) + { + request.EnterpriseId = logier.EnterpriseId; + } + if (request.EnterpriseId == null) throw Oops.Oh(EnumErrorCodeType.s400, "璇烽�夋嫨浼佷笟"); + + return await request.SaveData<ContractTemplate, SaveContractTemplateCommand>( + q => q + .Include(it => it.Values) + .Where(it => it.EnterpriseId == request.EnterpriseId && !it.IsDisabled), + it => it.EnterpriseId == request.EnterpriseId && it.Name == request.Name && !it.IsDisabled && it.Id != request.Id, + entity => + { + request.Adapt(entity); + if (entity.Values.Count != request.Values.Count + || entity.Values.Any(ov => + request.Values.Count(nv => + ov.Id == nv.Id + && ov.Type == nv.Type + && ov.Recorder == nv.Recorder + && ov.UserType == nv.UserType + && ov.Label == nv.Label + && ov.Required == nv.Required) != 1)) + { + entity.Values = request.Values.Select(it => + { + var value = entity.Values.FirstOrDefault(v => v.Id == it.Id); + if (value == null) + { + value = new ContractTemplateValue(); + } + it.Adapt(value); + return value; + }).ToList(); + entity.UpdatedUserId = logier.Id; + entity.UpdatedTime = DateTime.Now; + } + if (entity.Access.HasValue && entity.TemplateId.IsNotNull() && entity.Status == EnumContractTemplateStatus.Wait) + { + entity.Status = EnumContractTemplateStatus.Completed; + entity.CompletedTime = DateTime.Now; + } + }, + cancellationToken); + } + + /// <summary> + /// 绂佺敤鍚堝悓妯℃澘 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<int> Handle(SetIsDisabledContractTemplateCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + return await request.SetIsDisabled<ContractTemplate>(q => + { + if (logier.Type == EnumUserType.Enterprise) + { + q = q.Where(it => it.EnterpriseId == logier.EnterpriseId); + } + return q; + }, cancellationToken); + } + } +} diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Queries/ContractTemplateQueryHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Queries/ContractTemplateQueryHandler.cs new file mode 100644 index 0000000..5906423 --- /dev/null +++ b/FlexJobApi.UserServer.Application/ElectronSign/Queries/ContractTemplateQueryHandler.cs @@ -0,0 +1,301 @@ +锘縰sing FlexJobApi.Core; +using FlexJobApi.Core.Models; +using Furion.DatabaseAccessor; +using Mapster; +using MediatR; +using Microsoft.EntityFrameworkCore; +using NetTopologySuite.Index.HPRtree; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.UserServer.Application +{ + /// <summary> + /// 鍚堝悓妯℃澘鏌ヨ澶勭悊鍣� + /// </summary> + public class ContractTemplateQueryHandler( + IRepository<ContractTemplate> rep, + IRepository<Enterprise> repEnterprise, + IRepository<User> repUser, + IRepository<DbAuditLog, LogDbContextLocator> repDbAuditLog + ) : + IRequestHandler<GetContractTemplateEnterprisesQuery, GetContractTemplateEnterprisesQueryResult>, + IRequestHandler<GetEnterpriseContractTemplatesQuery, GetEnterpriseContractTemplatesQueryResult>, + IRequestHandler<GetEnterpriseContractTemplateLogsQuery, GetEnterpriseContractTemplateLogsQueryResult>, + IRequestHandler<GetContractTemplateQuery, GetContractTemplateQueryResult> + { + private readonly IRepository<ContractTemplate> rep = rep; + private readonly IRepository<Enterprise> repEnterprise = repEnterprise; + private readonly IRepository<User> repUser = repUser; + private readonly IRepository<DbAuditLog, LogDbContextLocator> repDbAuditLog = repDbAuditLog; + + /// <summary> + /// 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<GetContractTemplateEnterprisesQueryResult> Handle(GetContractTemplateEnterprisesQuery request, CancellationToken cancellationToken) + { + var q = repEnterprise.AsQueryable().AsNoTracking(); + if (request.Keywords.IsNotNull()) + { + q = q.Where(it => it.EnterpriseName.Contains(request.Keywords)); + } + if (request.Status.HasValue) + { + if (request.Status == EnumContractTemplateStatus.Wait) + { + q = q.Where(it => it.ContractTemplates.Any(ct => ct.Status == EnumContractTemplateStatus.Wait)); + } + else + { + q = q.Where(it => it.ContractTemplates.Any() && it.ContractTemplates.All(ct => ct.Status == EnumContractTemplateStatus.Completed)); + } + } + var s = q + .Select(it => new GetContractTemplateEnterprisesQueryResultItem + { + Id = it.Id, + EnterpriseName = it.EnterpriseName, + Contacts = it.Contacts, + ContactPhoneNumber = it.ContactPhoneNumber, + Total = it.ContractTemplates.Count(it => !it.IsDisabled), + WaitCount = it.ContractTemplates.Count(it => !it.IsDisabled && it.Status == EnumContractTemplateStatus.Wait), + }); + return await request.PageModel.GetPagedListAsync<GetContractTemplateEnterprisesQueryResult, GetContractTemplateEnterprisesQueryResultItem>(s, cancellationToken); + } + + /// <summary> + /// 鏌ヨ浼佷笟鍚堝悓妯℃澘 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<GetEnterpriseContractTemplatesQueryResult> Handle(GetEnterpriseContractTemplatesQuery request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + if (logier.Type == EnumUserType.Enterprise) + { + request.EnterpriseId = logier.EnterpriseId; + } + var q = rep.AsQueryable().AsNoTracking() + .Where(it => it.EnterpriseId == request.EnterpriseId && !it.IsDisabled); + if (request.Keywords.IsNotNull()) + { + q = q.Where(it => + it.Name.Contains(request.Keywords) + || it.TemplateId.Contains(request.Keywords) + || it.Code.Contains(request.Keywords)); + } + if (request.CreatedTimeBegin.HasValue && request.CreatedTimeEnd.HasValue) + { + q = q.Where(it => request.CreatedTimeBegin <= it.CreatedTime && it.CreatedTime <= request.CreatedTimeEnd); + } + if (request.CompletedTimeBegin.HasValue && request.CompletedTimeEnd.HasValue) + { + q = q.Where(it => request.CompletedTimeBegin <= it.CompletedTime && it.CreatedTime <= request.CompletedTimeEnd); + } + if (request.Status.HasValue) + { + q = q.Where(it => it.Status == request.Status); + } + var s = from t in q + join cu in repUser.AsQueryable().AsNoTracking() on t.CreatedUserId equals cu.Id + join uu in repUser.AsQueryable().AsNoTracking() on t.UpdatedUserId equals uu.Id into uug + from uugi in uug.DefaultIfEmpty() + select new GetEnterpriseContractTemplatesQueryResultItem + { + Id = t.Id, + Name = t.Name, + CreatedTime = t.CreatedTime, + TemplateId = t.TemplateId, + Access = t.Access, + Code = t.Code, + File = t.File, + Status = t.Status, + CompletedTime = t.CompletedTime, + Operator = uugi == null + ? cu.Name + : uugi.Name + }; + return await request.PageModel.GetPagedListAsync<GetEnterpriseContractTemplatesQueryResult, GetEnterpriseContractTemplatesQueryResultItem>(s, cancellationToken); + } + + /// <summary> + /// 鏌ヨ浼佷笟鍚堝悓妯℃澘鏃ュ織鍒嗛〉鍒楄〃鏁版嵁 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<GetEnterpriseContractTemplateLogsQueryResult> Handle(GetEnterpriseContractTemplateLogsQuery request, CancellationToken cancellationToken) + { + var tableName = nameof(ContractTemplate); + var q = repDbAuditLog.AsQueryable().AsNoTracking() + .Where(it => it.TableName == tableName && it.PrimaryKey == request.Id) + .ProjectToType<GetEnterpriseContractTemplateLogsQueryResultItem>(); + var result = await request.PageModel.GetPagedListAsync<GetEnterpriseContractTemplateLogsQueryResult, GetEnterpriseContractTemplateLogsQueryResultItem>(q, cancellationToken); + if (result.Data.IsNotNull()) + { + var type = typeof(ContractTemplate); + var xmlDoc = await XmlDocUtils.GetXmlDocAsync(); + var ignorePropertyNames = new List<string> + { + "Id", + "EnterpriseId", + "IsDisabled", + "Sort", + "TraceId", + "CreatedTime", + "CreatedUserId", + "CreatedEnterpriseId", + "UpdatedTime", + "UpdatedUserId", + "IsDeleted", + "Values", + "TemplateId", + }; + var properties = type.GetProperties().Where(it => !ignorePropertyNames.Contains(it.Name)).ToList(); + var traceIds = result.Data.DistinctSelect(it => it.TraceId); + tableName = nameof(ContractTemplateValue); + var valueType = typeof(ContractTemplateValue); + var valueProperties = valueType.GetProperties().Where(it => !ignorePropertyNames.Contains(it.Name)).ToList(); + var valueLogs = await repDbAuditLog.AsQueryable().AsNoTracking() + .Where(it => it.TableName == tableName && traceIds.Contains(it.TraceId)) + .Select(it => new GetEnterpriseContractTemplateLogsQueryResultItem + { + TraceId = it.TraceId, + Operate = it.Operate, + OldValues = it.OldValues, + NewValues = it.NewValues + }) + .ToListAsync(); + var userIds = result.Data.DistinctSelect(it => it.CreatedUserId); + var users = await repUser.AsQueryable().AsNoTracking() + .Where(it => userIds.Contains(it.Id)) + .Select(it => new + { + it.Id, + it.Name + }) + .ToListAsync(); + foreach (var item in result.Data) + { + item.CreatedUser = users.FirstOrDefault(it => it.Id == item.CreatedUserId)?.Name; + await AddContractTemplateLogsAsync(item, properties, xmlDoc); + var traceValueLogs = valueLogs.Where(it => it.TraceId == item.TraceId).ToList(); + await AddContractTemplateValueLogsAsync(item, traceValueLogs, valueProperties, xmlDoc); + + } + } + return result; + } + + /// <summary> + /// 鏌ヨ鍚堝悓妯℃澘璇︽儏 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<GetContractTemplateQueryResult> Handle(GetContractTemplateQuery request, CancellationToken cancellationToken) + { + return await rep.AsQueryable().AsNoTracking() + .Where(it => it.Id == request.Id) + .GetDetail<ContractTemplate, GetContractTemplateQueryResult>(cancellationToken); + } + + private async Task AddContractTemplateLogsAsync( + GetEnterpriseContractTemplateLogsQueryResultItem item, + List<PropertyInfo> properties, + XmlDoc xmlDoc) + { + var oldEntity = item.OldValues?.JsonTo<ContractTemplate>(); + var newEntity = item.NewValues?.JsonTo<ContractTemplate>(); + foreach (var property in properties) + { + var propertySummary = await property.GetXmlDocMemberAsync(xmlDoc); + var oldValue = await GetLogValue(oldEntity, property, xmlDoc); + var newValue = await GetLogValue(newEntity, property, xmlDoc); + if (item.Operate == EnumDbAuditOperate.Added && newValue != null) + { + item.Content.Add($"{propertySummary?.Summary ?? property.Name}锛歿newValue}"); + } + else if (item.Operate == EnumDbAuditOperate.Modified && oldValue != newValue) + { + item.Content.Add($"{propertySummary?.Summary ?? property.Name}锛氱敱 {oldValue} 鏀逛负 {newValue}"); + } + } + } + + private async Task AddContractTemplateValueLogsAsync( + GetEnterpriseContractTemplateLogsQueryResultItem item, + List<GetEnterpriseContractTemplateLogsQueryResultItem> traceValueLogs, + List<PropertyInfo> properties, + XmlDoc xmlDoc) + { + foreach (var traceValueLog in traceValueLogs) + { + var oldEntity = traceValueLog.OldValues?.JsonTo<ContractTemplateValue>(); + var newEntity = traceValueLog.NewValues?.JsonTo<ContractTemplateValue>(); + if (traceValueLog.Operate == EnumDbAuditOperate.Added) + { + item.Content.Add("鏂板鍙橀噺锛�"); + } + else if (traceValueLog.Operate == EnumDbAuditOperate.Modified) + { + item.Content.Add("缂栬緫鍙橀噺锛�"); + } + foreach (var property in properties) + { + var propertySummary = await property.GetXmlDocMemberAsync(xmlDoc); + var oldValue = await GetLogValue(oldEntity, property, xmlDoc); + var newValue = await GetLogValue(newEntity, property, xmlDoc); + if (traceValueLog.Operate == EnumDbAuditOperate.Added && newValue != null) + { + item.Content.Add($"--{propertySummary?.Summary ?? property.Name}锛歿newValue}"); + } + else if (traceValueLog.Operate == EnumDbAuditOperate.Modified && oldValue != newValue) + { + item.Content.Add($"--{propertySummary?.Summary ?? property.Name}锛氱敱 {oldValue} 鏀逛负 {newValue}"); + } + } + if (traceValueLog.Operate == EnumDbAuditOperate.Deleted) + { + var property = properties.First(it => it.Name == nameof(ContractTemplateValue.Label)); + var oldValue = oldEntity != null ? property.GetValue(oldEntity) : null; + var propertySummary = await property.GetXmlDocMemberAsync(xmlDoc); + item.Content.Add($"鍒犻櫎鍙橀噺锛歿oldValue}"); + } + } + } + + private async Task<string?> GetLogValue(object? entity, PropertyInfo property, XmlDoc xmlDoc) + { + if (entity == null) return null; + var propertyType = property.PropertyType; + if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(Nullable<>)) + { + propertyType = propertyType.GetGenericArguments()[0]; + } + var value = property.GetValue(entity); + if (propertyType.IsEnum && value != null) + { + var model = await propertyType.GetModel(); + var item = model.Items.FirstOrDefault(it => it.Value == (int)value); + return item?.Description; + } + else if (value is bool boolValue) + { + return boolValue ? "鏄�" : "鍚�"; + } + else + { + return value?.ToString(); + } + } + } +} diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml index 18f798d..c39615f 100644 --- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml +++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml @@ -156,6 +156,32 @@ <param name="all"></param> <param name="roleMenuIds"></param> </member> + <member name="T:FlexJobApi.UserServer.Application.ContractTemplateCommandHandler"> + <summary> + 鍚堝悓妯℃澘鍛戒护澶勭悊鍣� + </summary> + </member> + <member name="M:FlexJobApi.UserServer.Application.ContractTemplateCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate})"> + <summary> + 鍚堝悓妯℃澘鍛戒护澶勭悊鍣� + </summary> + </member> + <member name="M:FlexJobApi.UserServer.Application.ContractTemplateCommandHandler.Handle(FlexJobApi.Core.SaveContractTemplateCommand,System.Threading.CancellationToken)"> + <summary> + 淇濆瓨鍚堝悓妯℃澘 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.UserServer.Application.ContractTemplateCommandHandler.Handle(FlexJobApi.Core.SetIsDisabledContractTemplateCommand,System.Threading.CancellationToken)"> + <summary> + 绂佺敤鍚堝悓妯℃澘 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> <member name="T:FlexJobApi.UserServer.Application.ElectronSignCallbackCommandHandler"> <summary> 鐢靛瓙绛惧洖浼� @@ -217,6 +243,48 @@ 涓汉瀹炲悕 </summary> </member> + <member name="T:FlexJobApi.UserServer.Application.ContractTemplateQueryHandler"> + <summary> + 鍚堝悓妯℃澘鏌ヨ澶勭悊鍣� + </summary> + </member> + <member name="M:FlexJobApi.UserServer.Application.ContractTemplateQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.DbAuditLog,FlexJobApi.Core.LogDbContextLocator})"> + <summary> + 鍚堝悓妯℃澘鏌ヨ澶勭悊鍣� + </summary> + </member> + <member name="M:FlexJobApi.UserServer.Application.ContractTemplateQueryHandler.Handle(FlexJobApi.Core.GetContractTemplateEnterprisesQuery,System.Threading.CancellationToken)"> + <summary> + 鏌ヨ杩愯惀绔崗璁鐞嗗垪琛� + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.UserServer.Application.ContractTemplateQueryHandler.Handle(FlexJobApi.Core.GetEnterpriseContractTemplatesQuery,System.Threading.CancellationToken)"> + <summary> + 鏌ヨ浼佷笟鍚堝悓妯℃澘 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.UserServer.Application.ContractTemplateQueryHandler.Handle(FlexJobApi.Core.GetEnterpriseContractTemplateLogsQuery,System.Threading.CancellationToken)"> + <summary> + 鏌ヨ浼佷笟鍚堝悓妯℃澘鏃ュ織鍒嗛〉鍒楄〃鏁版嵁 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.UserServer.Application.ContractTemplateQueryHandler.Handle(FlexJobApi.Core.GetContractTemplateQuery,System.Threading.CancellationToken)"> + <summary> + 鏌ヨ鍚堝悓妯℃澘璇︽儏 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> <member name="T:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler"> <summary> 鐏靛伐鍛戒护澶勭悊鍣� -- Gitblit v1.9.1