diff --git a/CloudBuilder/CloudBuilder.Core/Application/Builders/CloudBuilderBuilder.cs b/CloudBuilder/CloudBuilder.Core/Application/Builders/CloudBuilderBuilder.cs index 9cfa4c7..678b515 100644 --- a/CloudBuilder/CloudBuilder.Core/Application/Builders/CloudBuilderBuilder.cs +++ b/CloudBuilder/CloudBuilder.Core/Application/Builders/CloudBuilderBuilder.cs @@ -87,17 +87,17 @@ namespace CloudBuilder.Core.Application.Builders return this; } - public T GetTransientService() - { - object? t = Services.BuildServiceProvider().GetService(typeof(T)); - if (t == null) return default(T)!; - return (T)t; - } + //public T GetTransientService() + //{ + // object? t = Services.BuildServiceProvider().GetService(typeof(T)); + // if (t == null) return default(T)!; + // return (T)t; + //} - public T GetTransientRequiredService() - { - return (T)Services.BuildServiceProvider().GetRequiredService(typeof(T)); - } + //public T GetTransientRequiredService() + //{ + // return (T)Services.BuildServiceProvider().GetRequiredService(typeof(T)); + //} public static Assembly[] GetAssemblies() { diff --git a/CloudBuilder/CloudBuilder.Core/Application/Packs/CloudBuilderCorePack.cs b/CloudBuilder/CloudBuilder.Core/Application/Packs/CloudBuilderCorePack.cs index 04fc787..0778351 100644 --- a/CloudBuilder/CloudBuilder.Core/Application/Packs/CloudBuilderCorePack.cs +++ b/CloudBuilder/CloudBuilder.Core/Application/Packs/CloudBuilderCorePack.cs @@ -41,19 +41,6 @@ namespace CloudBuilder.Core.Application.Packs services.AddScoped(); - //services.TryAddSingleton(); - //services.TryAddSingleton(); - //services.TryAddSingleton(); - //services.TryAddSingleton(); - - //services.TryAddSingleton(); - //services.TryAddScoped(); - - //services.TryAddTransient(); - //services.AddTransient(); - - //services.AddDistributedMemoryCache(); - return services; } } diff --git a/CloudBuilder/CloudBuilder.Core/DatabaseAccessor/ApplicationService.cs b/CloudBuilder/CloudBuilder.Core/DatabaseAccessor/ApplicationService.cs index 9a7aeed..8030d3e 100644 --- a/CloudBuilder/CloudBuilder.Core/DatabaseAccessor/ApplicationService.cs +++ b/CloudBuilder/CloudBuilder.Core/DatabaseAccessor/ApplicationService.cs @@ -15,6 +15,15 @@ namespace CloudBuilder.Core.DatabaseAccessor { public class ApplicationService : IApplicationService { + /// + /// 显式赋值的登录Id(登录流程/桌面端会主动赋值),为空时按当前请求的令牌解析 + /// + private string? userId; + + /// + /// 显式赋值的语言,为空时按当前请求的报文头解析 + /// + private string? locale; public ApplicationService( CloudBuilderBuilder cloudBuilder, @@ -29,23 +38,47 @@ namespace CloudBuilder.Core.DatabaseAccessor this.ServiceProvider = serviceProvider; this.UnitOfWork = unitOfWork; this.HttpContext = httpContext; - if (httpContext.HttpContext != null) - { - UserId = ClaimPolicy.GetClaimValue(HttpContext, ClaimPolicy.CLAINM_USERID); - string key = ClaimPolicy.GetHeaderKeyValue(HttpContext, ClaimPolicy.HEADER_LOCALE); - if (!string.IsNullOrEmpty(key)) - { - Locale = key; - } - } } public IServiceProvider ServiceProvider { get; private set; } public IHttpContextAccessor HttpContext { get; private set; } - public string UserId { get; set; } - public string Locale { get; set; } = ClaimPolicy.CLAINM_LOCALE; + /// + /// 当前登录Id:取自当前请求的令牌,每次访问都重新解析 + /// (不能在构造函数中缓存,否则实例被长生命周期对象持有时会一直返回上一个登录用户) + /// + public string UserId + { + get + { + if (!string.IsNullOrEmpty(userId)) return userId!; + if (HttpContext?.HttpContext == null) return string.Empty; + return ClaimPolicy.GetClaimValue(HttpContext, ClaimPolicy.CLAINM_USERID); + } + set + { + userId = value; + } + } + + /// + /// 当前语言:取自当前请求的报文头,每次访问都重新解析 + /// + public string Locale + { + get + { + if (!string.IsNullOrEmpty(locale)) return locale!; + if (HttpContext?.HttpContext == null) return ClaimPolicy.CLAINM_LOCALE; + string key = ClaimPolicy.GetHeaderKeyValue(HttpContext, ClaimPolicy.HEADER_LOCALE); + return string.IsNullOrEmpty(key) ? ClaimPolicy.CLAINM_LOCALE : key; + } + set + { + locale = value; + } + } public IUnitOfWork UnitOfWork { get; set; } public CloudBuilderBuilder CloudBuilder { get; set; } public IConfiguration Configuration { get; private set; } diff --git a/CloudBuilder/CloudBuilder.Gui/GridViewPagination.cs b/CloudBuilder/CloudBuilder.Gui/GridViewPagination.cs index e9a8fba..ce7fde2 100644 --- a/CloudBuilder/CloudBuilder.Gui/GridViewPagination.cs +++ b/CloudBuilder/CloudBuilder.Gui/GridViewPagination.cs @@ -20,7 +20,7 @@ namespace CloudBuilder.Gui private int OrgLimit; public int CurrentPage { get; set; } = 0; public int Page { get; set; } = 0; - public int Total { get; set; } = 0; + public long Total { get; set; } = 0; public GridViewPagination() { @@ -39,8 +39,11 @@ namespace CloudBuilder.Gui limitTxt.Text = limit.ToString(); Limit = limit; } - public void SetTotal(int total) + { + SetTotal(long.Parse(total.ToString())); + } + public void SetTotal(long total) { this.Total = total; if (Limit > 0) diff --git a/CloudBuilder/CloudBuilder.Master.Service/FamilyTreeService.auto.cs b/CloudBuilder/CloudBuilder.Master.Service/FamilyTreeService.auto.cs index 42b2b9a..fdcf409 100644 --- a/CloudBuilder/CloudBuilder.Master.Service/FamilyTreeService.auto.cs +++ b/CloudBuilder/CloudBuilder.Master.Service/FamilyTreeService.auto.cs @@ -117,9 +117,24 @@ namespace CloudBuilder.Master.Service if (d == null) return data; + IRepository repositoryPermission = repository.GetRepository>(); + + data.FamilyTree = new FamilyTreeDisplayData(d); data.CurrentPerson = new FamilyPersonData(); + data.FamilyTreePermissions = repositoryPermission.DetachedEntities.Where(x => x.TreeId == key).ToArray(); + + if (data.FamilyTreePermissions.Any()) + { + data.IsManager = data.FamilyTreePermissions.Where(x => x.UserName == service.UserId && x.ManagerIndc == YesNoPolicy.YES).Any(); + } + + if(!data.IsManager && data.FamilyTreePermissions.Any()) + { + data.FamilyTreePermissions = data.FamilyTreePermissions.Where(x => x.UserName == service.UserId && x.ValidIndc == YesNoPolicy.NO).ToArray(); + } + IRepository repositoryFamilyPerson = repository.GetRepository>(); var currentPerson = personId; @@ -248,6 +263,21 @@ namespace CloudBuilder.Master.Service repository.InsertNow(d); + FamilyTreePermissionEntity treePermissionEntity = new FamilyTreePermissionEntity(); + treePermissionEntity.TreeId = d.TreeId; + treePermissionEntity.PersonId = d.AncestorPersonId; + treePermissionEntity.UserName = service.UserId; + treePermissionEntity.ManagerIndc = YesNoPolicy.YES; + treePermissionEntity.ValidIndc = YesNoPolicy.YES; + InsertFamilyTreePermission(treePermissionEntity); + + IRepository repositoryPerson = repository.GetRepository>(); + FamilyPersonEntity familyPerson; + + familyPerson = repositoryPerson.DetachedEntities.Where(x => x.PersonId == d.AncestorPersonId).FirstOrDefault()!; + familyPerson.TreeId = d.TreeId; + repositoryPerson.UpdateNow(familyPerson); + var currentPerson = d.AncestorPersonId; if (data.CurrentPerson != null && data.CurrentPerson.FamilyPerson != null && !string.IsNullOrEmpty(data.CurrentPerson.FamilyPerson.PersonId)) @@ -268,16 +298,74 @@ namespace CloudBuilder.Master.Service return FindByCurrentPerson(d.TreeId, currentPerson); } + + public void InsertFamilyTreePermission(FamilyTreePermissionEntity treePermissionEntity) + { + IRepository repositoryPermission = repository.GetRepository>(); + repositoryPermission.InsertNow(treePermissionEntity); + } + + [PermissionOperate(name: MasterPermissionPolicy.FamilyTree, operate: Operate.Find)] + [UnitOfWork] + public void RequestFamilyTreePermission(string treeId, string currentPersonId) + { + IRepository repositoryPermission = repository.GetRepository>(); + FamilyTreePermissionEntity treePermissionEntity = repositoryPermission.DetachedEntities.Where(x => x.TreeId == treeId && x.PersonId == currentPersonId && service.UserId == x.UserName).FirstOrDefault()!; + + if (treePermissionEntity != null) return; + + treePermissionEntity = new FamilyTreePermissionEntity(); + treePermissionEntity.TreeId = treeId; + treePermissionEntity.PersonId = currentPersonId; + treePermissionEntity.UserName = service.UserId; + treePermissionEntity.ManagerIndc = YesNoPolicy.NO; + treePermissionEntity.ValidIndc = YesNoPolicy.NO; + InsertFamilyTreePermission(treePermissionEntity); + } + + [PermissionOperate(name: MasterPermissionPolicy.FamilyTree, operate: Operate.Find)] + [UnitOfWork] + public void ApproveFamilyTreePermission(string treeId, string currentPersonId, string userName, string managerIndc) + { + IRepository repositoryPermission = repository.GetRepository>(); + FamilyTreePermissionEntity treePermissionEntity = repositoryPermission.DetachedEntities.Where(x => x.TreeId == treeId && x.PersonId == currentPersonId && userName == x.UserName).FirstOrDefault()!; + if (treePermissionEntity == null) return; + + treePermissionEntity.ManagerIndc = managerIndc; + treePermissionEntity.ValidIndc = YesNoPolicy.YES; + + repositoryPermission.UpdateNow(treePermissionEntity); + } + + [PermissionOperate(name: MasterPermissionPolicy.FamilyTree, operate: Operate.Find)] + [UnitOfWork] + public void RejectFamilyTreePermission(string treeId, string currentPersonId, string userName) + { + IRepository repositoryPermission = repository.GetRepository>(); + FamilyTreePermissionEntity treePermissionEntity = repositoryPermission.DetachedEntities.Where(x => x.TreeId == treeId && x.PersonId == currentPersonId && userName == x.UserName).FirstOrDefault()!; + if (treePermissionEntity == null) return; + + repositoryPermission.DeleteNow(treePermissionEntity); + } + private void SaveSpouseMaps(string personId, FamilyTreeSpouseMapViewEntity[] maps) { IRepository repositoryMapView = repository.GetRepository>(); IRepository repositoryMap = repository.GetRepository>(); + IRepository repositoryPerson = repository.GetRepository>(); + FamilyPersonEntity familyPerson; FamilyTreeSpouseMapViewEntity[] olds = repositoryMapView.Entities.Where(x => x.PersonId == personId).ToArray(); if (olds != null && olds.Length > 0) { foreach (FamilyTreeSpouseMapViewEntity old in olds) { + familyPerson = repositoryPerson.DetachedEntities.Where(x => x.PersonId == old.PersonId).FirstOrDefault()!; + if (familyPerson != null) + { + repositoryPerson.DeleteNow(familyPerson); + } + repositoryMap.DeleteNow(new FamilyTreeSpouseMapEntity() { TreeId = old.TreeId, @@ -289,8 +377,16 @@ namespace CloudBuilder.Master.Service if (maps == null || maps.Length == 0) return; int i = 1; + foreach (FamilyTreeSpouseMapViewEntity map in maps.OrderBy(x => x.Orderby).ToArray()) { + familyPerson = repositoryPerson.DetachedEntities.Where(x => x.PersonId == map.PersonId && string.IsNullOrEmpty(x.TreeId)).FirstOrDefault()!; + if (familyPerson != null) + { + familyPerson.TreeId = map.TreeId; + repositoryPerson.Update(familyPerson); + } + repositoryMap.InsertNow(new FamilyTreeSpouseMapEntity() { TreeId = map.TreeId, @@ -309,55 +405,25 @@ namespace CloudBuilder.Master.Service } } - private void SaveParentMaps(string personId, FamilyTreeChildrenMapViewEntity[] maps) - { - IRepository repositoryMapView = repository.GetRepository>(); - IRepository repositoryMap = repository.GetRepository>(); - FamilyTreeChildrenMapViewEntity[] olds = repositoryMapView.Entities.Where(x => x.ChildrenId == personId).ToArray(); - if (olds != null && olds.Length > 0) - { - foreach (FamilyTreeChildrenMapViewEntity old in olds) - { - repositoryMap.DeleteNow(new FamilyTreeChildrenMapEntity() - { - TreeId = old.TreeId, - ChildrenId = personId, - PersonId = old.PersonId - }); - } - } - - if (maps == null || maps.Length == 0) return; - - int maxOrderBy = 0; - foreach (FamilyTreeChildrenMapViewEntity map in maps) - { - FamilyTreeChildrenMapViewEntity[] oldMaps = repositoryMapView.Entities.Where(x => x.PersonId == map.PersonId).ToArray(); - - if (oldMaps != null && oldMaps.Count() > 0) maxOrderBy = oldMaps.Max(x => x.Orderby); - - repositoryMap.InsertNow(new FamilyTreeChildrenMapEntity() - { - TreeId = map.TreeId, - ChildrenId = personId, - PersonId = map.PersonId, - Orderby = oldMaps == null ? 1 : maxOrderBy + 1 - }); - } - - } - private void SaveSonMaps(string personId, FamilyTreeChildrenMapViewEntity[] maps) { IRepository repositoryMapView = repository.GetRepository>(); IRepository repositoryMap = repository.GetRepository>(); + IRepository repositoryPerson = repository.GetRepository>(); + FamilyPersonEntity familyPerson; FamilyTreeChildrenMapViewEntity[] olds = repositoryMapView.Entities.Where(x => x.PersonId == personId).ToArray(); if (olds != null && olds.Length > 0) { foreach (FamilyTreeChildrenMapViewEntity old in olds) { + familyPerson = repositoryPerson.DetachedEntities.Where(x => x.PersonId == old.PersonId).FirstOrDefault()!; + if (familyPerson != null) + { + repositoryPerson.DeleteNow(familyPerson); + } + repositoryMap.DeleteNow(new FamilyTreeChildrenMapEntity() { TreeId = old.TreeId, @@ -369,8 +435,16 @@ namespace CloudBuilder.Master.Service if (maps == null || maps.Length == 0) return; int i = 1; + foreach (FamilyTreeChildrenMapViewEntity map in maps.OrderBy(x => x.Orderby).ToArray()) { + familyPerson = repositoryPerson.DetachedEntities.Where(x => x.PersonId == map.PersonId && string.IsNullOrEmpty(x.TreeId)).FirstOrDefault()!; + if (familyPerson != null) + { + familyPerson.TreeId = map.TreeId; + repositoryPerson.Update(familyPerson); + } + repositoryMap.InsertNow(new FamilyTreeChildrenMapEntity() { TreeId = map.TreeId, @@ -439,6 +513,15 @@ namespace CloudBuilder.Master.Service if (ent == null) return; repository.DeleteNow(ent); + IRepository repositoryPerson = repository.GetRepository>(); + FamilyPersonEntity familyPerson; + + familyPerson = repositoryPerson.DetachedEntities.Where(x => x.PersonId == ent.AncestorPersonId).FirstOrDefault()!; + if (familyPerson != null) + { + repositoryPerson.DeleteNow(familyPerson); + } + DeleteSpouses(ent.AncestorPersonId); DeleteChildrens(ent.AncestorPersonId); } diff --git a/CloudBuilder/CloudBuilder.Master/Data/FamilyTreeData.cs b/CloudBuilder/CloudBuilder.Master/Data/FamilyTreeData.cs index fbaa388..a922a14 100644 --- a/CloudBuilder/CloudBuilder.Master/Data/FamilyTreeData.cs +++ b/CloudBuilder/CloudBuilder.Master/Data/FamilyTreeData.cs @@ -15,6 +15,8 @@ namespace CloudBuilder.Master.Data public FamilyTreeDisplayData? FamilyTree { get; set; } public FamilyPersonData? CurrentPerson { get; set; } - + public bool IsManager { get; set; } = false; + + public FamilyTreePermissionUserViewEntity[]? FamilyTreePermissions { get; set; } } } diff --git a/CloudBuilder/CloudBuilder.Master/Data/FamilyTreeDisplayData.cs b/CloudBuilder/CloudBuilder.Master/Data/FamilyTreeDisplayData.cs index e66395b..741f38d 100644 --- a/CloudBuilder/CloudBuilder.Master/Data/FamilyTreeDisplayData.cs +++ b/CloudBuilder/CloudBuilder.Master/Data/FamilyTreeDisplayData.cs @@ -22,6 +22,7 @@ namespace CloudBuilder.Master.Data public FamilyTreeDisplayData(FamilyTreeEntity entity) { CopyFrom(entity); + this.OrgTreeName = entity.TreeName; } public string? AncestorPersonGenealogyName { get; set; } diff --git a/CloudBuilder/CloudBuilder.Master/Entity/CloudBuilderMasterRegistEntity.auto.cs b/CloudBuilder/CloudBuilder.Master/Entity/CloudBuilderMasterRegistEntity.auto.cs index 852ae0d..7eeb88d 100644 --- a/CloudBuilder/CloudBuilder.Master/Entity/CloudBuilderMasterRegistEntity.auto.cs +++ b/CloudBuilder/CloudBuilder.Master/Entity/CloudBuilderMasterRegistEntity.auto.cs @@ -106,7 +106,12 @@ builder.Entity(eb => { eb.HasNoKey(); }); builder.Entity(eb => { eb.HasNoKey(); }); -//***END*** + + +builder.Entity().HasKey(c => new {c.PersonId,c.TreeId,c.UserName}); + +builder.Entity(eb => { eb.HasNoKey(); }); + //***END*** } } } diff --git a/CloudBuilder/CloudBuilder.Master/Entity/FamilyPersonEntity.auto.cs b/CloudBuilder/CloudBuilder.Master/Entity/FamilyPersonEntity.auto.cs index a777744..3f1bb0f 100644 --- a/CloudBuilder/CloudBuilder.Master/Entity/FamilyPersonEntity.auto.cs +++ b/CloudBuilder/CloudBuilder.Master/Entity/FamilyPersonEntity.auto.cs @@ -74,7 +74,7 @@ namespace CloudBuilder.Master.Entity [Column("title")] public string? Title { get; set; } [Column("tree_id")] - public string TreeId { get; set; } + public string? TreeId { get; set; } [Column("updated_by")] public string UpdatedBy { get; set; } [Column("updated_datetime")] diff --git a/CloudBuilder/CloudBuilder.Master/Entity/FamilyTreePermissionEntity.auto.cs b/CloudBuilder/CloudBuilder.Master/Entity/FamilyTreePermissionEntity.auto.cs new file mode 100644 index 0000000..441eb84 --- /dev/null +++ b/CloudBuilder/CloudBuilder.Master/Entity/FamilyTreePermissionEntity.auto.cs @@ -0,0 +1,187 @@ + +using CloudBuilder.Core.Authorization; +using CloudBuilder.Core.DatabaseAccessor.Entity; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +namespace CloudBuilder.Master.Entity + { + [TypeScript] + [Table("family_tree_permission")] + public class FamilyTreePermissionEntity : EntityBase + { + + public FamilyTreePermissionEntity() + { + } + + [Column("created_by")] + public string CreatedBy { get; set; } + [Column("created_datetime")] + public DateTime CreatedDatetime { get; set; } + [Column("manager_indc")] + public string ManagerIndc { get; set; } + [Column("person_id")] + public string PersonId { get; set; } + [Column("tree_id")] + public string TreeId { get; set; } + [Column("updated_by")] + public string UpdatedBy { get; set; } + [Column("updated_datetime")] + public DateTime UpdatedDatetime { get; set; } + [Column("user_name")] + public string UserName { get; set; } + [Column("valid_indc")] + public string ValidIndc { get; set; } + + public const string CREATED_BY = "CreatedBy"; + public const string CREATED_DATETIME = "CreatedDatetime"; + public const string MANAGER_INDC = "ManagerIndc"; + public const string PERSON_ID = "PersonId"; + public const string TREE_ID = "TreeId"; + public const string UPDATED_BY = "UpdatedBy"; + public const string UPDATED_DATETIME = "UpdatedDatetime"; + public const string USER_NAME = "UserName"; + public const string VALID_INDC = "ValidIndc"; + + public const string DB_NAME_FAMILY_TREE_PERMISSION = "family_tree_permission"; + public const string DB_NAME_FIELDS="created_by,created_datetime,manager_indc,person_id,tree_id,updated_by,updated_datetime,user_name,valid_indc"; + + public const string DB_CREATED_BY = "created_by"; + public const string DB_CREATED_DATETIME = "created_datetime"; + public const string DB_MANAGER_INDC = "manager_indc"; + public const string DB_PERSON_ID = "person_id"; + public const string DB_TREE_ID = "tree_id"; + public const string DB_UPDATED_BY = "updated_by"; + public const string DB_UPDATED_DATETIME = "updated_datetime"; + public const string DB_USER_NAME = "user_name"; + public const string DB_VALID_INDC = "valid_indc"; + + private string ProviderName { get; set; } + + public static FamilyTreePermissionEntity GetInstance(string providerName) + { + return new FamilyTreePermissionEntity() { ProviderName = providerName }; + } + + public virtual void CopyFrom(FamilyTreePermissionEntity source) + { + CopyFrom(source, true); + } + + public virtual void CopyFrom(FamilyTreePermissionEntity source, bool includeSystemFields) + { + if (source == null) + { + throw new NullReferenceException("Source entity is null."); + } + + this.CreatedBy = source.CreatedBy; + this.CreatedDatetime = source.CreatedDatetime; + this.ManagerIndc = source.ManagerIndc; + this.PersonId = source.PersonId; + this.TreeId = source.TreeId; + this.UpdatedBy = source.UpdatedBy; + this.UpdatedDatetime = source.UpdatedDatetime; + this.UserName = source.UserName; + this.ValidIndc = source.ValidIndc; + + if (includeSystemFields) + { + this.CreatedBy = source.CreatedBy; + this.CreatedDatetime = source.CreatedDatetime; + this.UpdatedBy = source.UpdatedBy; + this.UpdatedDatetime = source.UpdatedDatetime; + } + } + + public override string GetSelectFrom() + { + if (ProviderName.Contains("MySql")) + { + return GetSelectFromByMySql(); + } + else if (ProviderName.Contains("SqlServer")) + { + return GetSelectFromByBySqlServer(); + } + else + { + throw new NotSupportedException($"不支持的数据库提供程序:{ProviderName}"); + } + } + public string GetSelectFromByMySql() + { + return $" select {DB_NAME_FIELDS} from { DB_NAME_FAMILY_TREE_PERMISSION} with(nolock) "; + } + public string GetSelectFromByBySqlServer() + { + return $" select {DB_NAME_FIELDS} from { DB_NAME_FAMILY_TREE_PERMISSION} "; + } + + public override string GetSelectCountFrom(string sqlWhere) + { + if (ProviderName.Contains("MySql")) + { + return GetSelectCountFromByMySql(sqlWhere); + } + else if (ProviderName.Contains("SqlServer")) + { + return GetSelectCountFromBySqlServer(sqlWhere); + } + else + { + throw new NotSupportedException($"不支持的数据库提供程序:{ProviderName}"); + } + } + + public string GetSelectCountFromByMySql(string sqlWhere) + { + return $" select count(*) from { DB_NAME_FAMILY_TREE_PERMISSION} where 1=1 {sqlWhere}"; + } + public string GetSelectCountFromBySqlServer(string sqlWhere) + { + return $" select count(*) from { DB_NAME_FAMILY_TREE_PERMISSION} with(nolock) where 1=1 {sqlWhere}"; + } + + public override string GetSelectTopFrom(int limit, int start, string orderby, string orderbytag, string sqlWhere) + { + if (ProviderName.Contains("MySql")) + { + return GetSelectTopFromByMySql(limit, start, orderby, orderbytag, sqlWhere); + } + else if (ProviderName.Contains("SqlServer")) + { + return GetSelectTopFromBySqlServer(limit, start, orderby, orderbytag, sqlWhere); + } + else + { + throw new NotSupportedException($"不支持的数据库提供程序:{ProviderName}"); + } + } + + public string GetSelectTopFromByMySql(int limit, int start,string orderby,string orderbytag, string sqlWhere) + { + if (string.IsNullOrEmpty(orderbytag) || orderbytag.Trim() != "desc") orderbytag = "asc"; + if (string.IsNullOrEmpty(orderby) || !DB_NAME_FIELDS.Contains(orderby)) orderby = DB_PERSON_ID ; + int offset = limit * (start - 1); + return $" select {DB_NAME_FIELDS} from (select {DB_NAME_FIELDS} ,row_number() over(order by {orderby} {orderbytag}) as num from { DB_NAME_FAMILY_TREE_PERMISSION} where 1=1 {sqlWhere} ) a where num> {offset} LIMIT {limit} "; + } + + public string GetSelectTopFromBySqlServer(int limit, int start,string orderby,string orderbytag, string sqlWhere) + { + if (string.IsNullOrEmpty(orderbytag) || orderbytag.Trim() != "desc") orderbytag = "asc"; + if (string.IsNullOrEmpty(orderby) || !DB_NAME_FIELDS.Contains(orderby)) orderby = DB_PERSON_ID ; + string top = limit > 0 ? $"top {limit}" : ""; + return $" select {top} {DB_NAME_FIELDS} from (select {DB_NAME_FIELDS} ,row_number() over(order by {orderby} {orderbytag}) as num from { DB_NAME_FAMILY_TREE_PERMISSION} with(nolock) where 1=1 {sqlWhere} ) a where num> {limit * (start - 1)}"; + } + + public FamilyTreePermissionEntity Clone() + { + FamilyTreePermissionEntity result = new FamilyTreePermissionEntity(); + result.CopyFrom(this); + + return result; + } + + } +} diff --git a/CloudBuilder/CloudBuilder.Master/Entity/FamilyTreePermissionEntityKey.auto.cs b/CloudBuilder/CloudBuilder.Master/Entity/FamilyTreePermissionEntityKey.auto.cs new file mode 100644 index 0000000..aef85e9 --- /dev/null +++ b/CloudBuilder/CloudBuilder.Master/Entity/FamilyTreePermissionEntityKey.auto.cs @@ -0,0 +1,35 @@ + +using CloudBuilder.Core.Authorization; +namespace CloudBuilder.Master +{ + [TypeScript] + public class FamilyTreePermissionEntityKey + { + public string PersonId { get; set; } + public string TreeId { get; set; } + public string UserName { get; set; } + + public override bool Equals(object obj) + { + if (this == obj) return true; + + FamilyTreePermissionEntityKey pkey = obj as FamilyTreePermissionEntityKey; + if (pkey == null) return false; + + if (PersonId != pkey.PersonId) return false; + if (TreeId != pkey.TreeId) return false; + if (UserName != pkey.UserName) return false; + + return true; + } + + + public override string ToString() + { + string declareSql=""; + declareSql=declareSql+$"declare @__tkey_PersonId_0 varchar(50) select @__tkey_PersonId_0 ='{PersonId}'; " ; declareSql=declareSql+$"declare @__tkey_TreeId_1 varchar(50) select @__tkey_TreeId_1 ='{TreeId}'; " ; declareSql=declareSql+$"declare @__tkey_UserName_2 varchar(50) select @__tkey_UserName_2 ='{UserName}'; " ; + return declareSql; + } + } + } + /* builder.Entity().HasKey(c => new { c.PersonId, c.TreeId, c.UserName}); */ diff --git a/CloudBuilder/CloudBuilder.Master/Entity/FamilyTreePermissionUserViewEntity.auto.cs b/CloudBuilder/CloudBuilder.Master/Entity/FamilyTreePermissionUserViewEntity.auto.cs new file mode 100644 index 0000000..dbc3e27 --- /dev/null +++ b/CloudBuilder/CloudBuilder.Master/Entity/FamilyTreePermissionUserViewEntity.auto.cs @@ -0,0 +1,179 @@ + +using CloudBuilder.Core.Authorization; +using CloudBuilder.Core.DatabaseAccessor.Entity; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +namespace CloudBuilder.Master.Entity + { + [TypeScript] + [Table("family_tree_permission_user_view")] + public class FamilyTreePermissionUserViewEntity : ViewEntityBase + { + + public FamilyTreePermissionUserViewEntity() + { + } + + [Column("created_datetime")] + public DateTime CreatedDatetime { get; set; } + [Column("manager_indc")] + public string ManagerIndc { get; set; } + [Column("person_id")] + public string PersonId { get; set; } + [Column("person_local_name")] + public string? PersonLocalName { get; set; } + [Column("tree_id")] + public string TreeId { get; set; } + [Column("user_local_name")] + public string UserLocalName { get; set; } + [Column("user_name")] + public string UserName { get; set; } + [Column("valid_indc")] + public string ValidIndc { get; set; } + + public const string CREATED_DATETIME = "CreatedDatetime"; + public const string MANAGER_INDC = "ManagerIndc"; + public const string PERSON_ID = "PersonId"; + public const string PERSON_LOCAL_NAME = "PersonLocalName"; + public const string TREE_ID = "TreeId"; + public const string USER_LOCAL_NAME = "UserLocalName"; + public const string USER_NAME = "UserName"; + public const string VALID_INDC = "ValidIndc"; + + public const string DB_NAME_FAMILY_TREE_PERMISSION_USER_VIEW = "family_tree_permission_user_view"; + public const string DB_NAME_FIELDS="created_datetime,manager_indc,person_id,person_local_name,tree_id,user_local_name,user_name,valid_indc"; + + public const string DB_CREATED_DATETIME = "created_datetime"; + public const string DB_MANAGER_INDC = "manager_indc"; + public const string DB_PERSON_ID = "person_id"; + public const string DB_PERSON_LOCAL_NAME = "person_local_name"; + public const string DB_TREE_ID = "tree_id"; + public const string DB_USER_LOCAL_NAME = "user_local_name"; + public const string DB_USER_NAME = "user_name"; + public const string DB_VALID_INDC = "valid_indc"; + + private string ProviderName { get; set; } + + public static FamilyTreePermissionUserViewEntity GetInstance(string providerName) + { + return new FamilyTreePermissionUserViewEntity() { ProviderName = providerName }; + } + + public virtual void CopyFrom(FamilyTreePermissionUserViewEntity source) + { + CopyFrom(source, true); + } + + public virtual void CopyFrom(FamilyTreePermissionUserViewEntity source, bool includeSystemFields) + { + if (source == null) + { + throw new NullReferenceException("Source entity is null."); + } + + this.CreatedDatetime = source.CreatedDatetime; + this.ManagerIndc = source.ManagerIndc; + this.PersonId = source.PersonId; + this.PersonLocalName = source.PersonLocalName; + this.TreeId = source.TreeId; + this.UserLocalName = source.UserLocalName; + this.UserName = source.UserName; + this.ValidIndc = source.ValidIndc; + + if (includeSystemFields) + { + this.CreatedDatetime = source.CreatedDatetime; + } + } + + public override string GetSelectFrom() + { + if (ProviderName.Contains("MySql")) + { + return GetSelectFromByMySql(); + } + else if (ProviderName.Contains("SqlServer")) + { + return GetSelectFromByBySqlServer(); + } + else + { + throw new NotSupportedException($"不支持的数据库提供程序:{ProviderName}"); + } + } + public string GetSelectFromByMySql() + { + return $" select {DB_NAME_FIELDS} from { DB_NAME_FAMILY_TREE_PERMISSION_USER_VIEW} with(nolock) "; + } + public string GetSelectFromByBySqlServer() + { + return $" select {DB_NAME_FIELDS} from { DB_NAME_FAMILY_TREE_PERMISSION_USER_VIEW} "; + } + + public override string GetSelectCountFrom(string sqlWhere) + { + if (ProviderName.Contains("MySql")) + { + return GetSelectCountFromByMySql(sqlWhere); + } + else if (ProviderName.Contains("SqlServer")) + { + return GetSelectCountFromBySqlServer(sqlWhere); + } + else + { + throw new NotSupportedException($"不支持的数据库提供程序:{ProviderName}"); + } + } + + public string GetSelectCountFromByMySql(string sqlWhere) + { + return $" select count(*) from { DB_NAME_FAMILY_TREE_PERMISSION_USER_VIEW} where 1=1 {sqlWhere}"; + } + public string GetSelectCountFromBySqlServer(string sqlWhere) + { + return $" select count(*) from { DB_NAME_FAMILY_TREE_PERMISSION_USER_VIEW} with(nolock) where 1=1 {sqlWhere}"; + } + + public override string GetSelectTopFrom(int limit, int start, string orderby, string orderbytag, string sqlWhere) + { + if (ProviderName.Contains("MySql")) + { + return GetSelectTopFromByMySql(limit, start, orderby, orderbytag, sqlWhere); + } + else if (ProviderName.Contains("SqlServer")) + { + return GetSelectTopFromBySqlServer(limit, start, orderby, orderbytag, sqlWhere); + } + else + { + throw new NotSupportedException($"不支持的数据库提供程序:{ProviderName}"); + } + } + + public string GetSelectTopFromByMySql(int limit, int start,string orderby,string orderbytag, string sqlWhere) + { + if (string.IsNullOrEmpty(orderbytag) || orderbytag.Trim() != "desc") orderbytag = "asc"; + + if (string.IsNullOrEmpty(orderby) || !DB_NAME_FIELDS.Contains(orderby)) orderby = DB_CREATED_DATETIME ; int offset = limit * (start - 1); + return $" select {DB_NAME_FIELDS} from (select {DB_NAME_FIELDS} ,row_number() over(order by {orderby} {orderbytag}) as num from { DB_NAME_FAMILY_TREE_PERMISSION_USER_VIEW} where 1=1 {sqlWhere} ) a where num> {offset} LIMIT {limit} "; + } + + public string GetSelectTopFromBySqlServer(int limit, int start,string orderby,string orderbytag, string sqlWhere) + { + if (string.IsNullOrEmpty(orderbytag) || orderbytag.Trim() != "desc") orderbytag = "asc"; + + if (string.IsNullOrEmpty(orderby) || !DB_NAME_FIELDS.Contains(orderby)) orderby = DB_CREATED_DATETIME ; string top = limit > 0 ? $"top {limit}" : ""; + return $" select {top} {DB_NAME_FIELDS} from (select {DB_NAME_FIELDS} ,row_number() over(order by {orderby} {orderbytag}) as num from { DB_NAME_FAMILY_TREE_PERMISSION_USER_VIEW} with(nolock) where 1=1 {sqlWhere} ) a where num> {limit * (start - 1)}"; + } + + public FamilyTreePermissionUserViewEntity Clone() + { + FamilyTreePermissionUserViewEntity result = new FamilyTreePermissionUserViewEntity(); + result.CopyFrom(this); + + return result; + } + + } +} diff --git a/CloudBuilder/CloudBuilder.Master/Service/IFamilyTreeService.auto.cs b/CloudBuilder/CloudBuilder.Master/Service/IFamilyTreeService.auto.cs index 02b46af..67b448e 100644 --- a/CloudBuilder/CloudBuilder.Master/Service/IFamilyTreeService.auto.cs +++ b/CloudBuilder/CloudBuilder.Master/Service/IFamilyTreeService.auto.cs @@ -14,5 +14,10 @@ namespace CloudBuilder.Master.Service FamilyTreeResultData FindBySearchCriteria(FamilyTreeSearchCriteria tc); dynamic PrintBySearchCriteria(FamilyTreeSearchCriteria tc); void Deletes(string[] keys); + + void RequestFamilyTreePermission(string treeId, string currentPermission); + void ApproveFamilyTreePermission(string treeId, string currentPersonId, string userName, string managerIndc); + void RejectFamilyTreePermission(string treeId, string currentPersonId, string userName); + } } diff --git a/CloudBuilder/CloudBuilder.Request/Master/DmsFileRequest.auto.cs b/CloudBuilder/CloudBuilder.Request/Master/DmsFileRequest.auto.cs deleted file mode 100644 index cc38f81..0000000 --- a/CloudBuilder/CloudBuilder.Request/Master/DmsFileRequest.auto.cs +++ /dev/null @@ -1,164 +0,0 @@ - -using CloudBuilder.Core.DependencyInjection.Request; -using CloudBuilder.Core.Request; -using CloudBuilder.Core.Service; -using Microsoft.Extensions.DependencyInjection; -using CloudBuilder.Master.Service; - using CloudBuilder.Core.DatabaseAccessor.Entity; - using Microsoft.AspNetCore.Http; - using CloudBuilder.Master.Entity; - using System; - using CloudBuilder.Master.Data; - using CloudBuilder.Master.SearchCriteria; - -namespace CloudBuilder.Request.Master -{ - -public class DmsFileRequest : IRequest -{ - -private readonly IServiceRequest serviceRequest; -public DmsFileRequest(IServiceRequest serviceRequest) -{ -this.serviceRequest = serviceRequest; -} - - public DmsFileEntity FindByKey(Int64 key) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindByKey?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public DmsFileResultData FindBySearchCriteria(DmsFileSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public DmsFileResultData FindDatasBySearchCriteria(DmsFileSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindDatasBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public DmsFileResultData FindDeleteLogBySearchCriteria(DmsFileSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindDeleteLogBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public DmsFileResultData FindFamilyBySearchCriteria(DmsFileSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindFamilyBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public DmsFileDeleteLogEntity FindDmsFileDeleteLogByKey(Int64 key) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindDmsFileDeleteLogByKey?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public dynamic PrintBySearchCriteria(DmsFileSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/PrintBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public DmsFileEntity Insert(DmsFileEntity data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/Insert" , data)).GetAwaiter().GetResult(); } - - public DmsFileEntity Update(DmsFileEntity data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/Update" , data)).GetAwaiter().GetResult(); } - - public void Delete(Int64 key) - { - Task.Run(() => serviceRequest.PostAsync("/DmsFile/Delete?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public void RestoreDmsFile(Int64 key) - { - Task.Run(() => serviceRequest.PostAsync("/DmsFile/RestoreDmsFile?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public void DeleteLog(Int64 key) - { - Task.Run(() => serviceRequest.PostAsync("/DmsFile/DeleteLog?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public string CreateDmsFolder(DmsFileEntity dmsFile) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/CreateDmsFolder" , dmsFile)).GetAwaiter().GetResult(); } - - public void DeleteFamilyDmsFolder(FamilyDmsFileViewEntity familyDmsFile) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/DeleteFamilyDmsFolder" , familyDmsFile)).GetAwaiter().GetResult(); } - - public void CreateFamilyDmsFolder(FamilyDmsFileViewEntity familyDmsFile) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/CreateFamilyDmsFolder" , familyDmsFile)).GetAwaiter().GetResult(); } - - public void UpdateDmsFolder(DmsFileEntity dmsFile) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/UpdateDmsFolder" , dmsFile)).GetAwaiter().GetResult(); } - - public SelectOption[] FindDmsFolders() - { -return Task.Run(() => serviceRequest.PostAsJsonAsync ("/DmsFile/FindDmsFolders")).GetAwaiter().GetResult(); } - - public SelectOption[] FindDmsFolderDeleteLogs() - { -return Task.Run(() => serviceRequest.PostAsJsonAsync ("/DmsFile/FindDmsFolderDeleteLogs")).GetAwaiter().GetResult(); } - - public DmsFolderData FindDmsFolderData() - { -return Task.Run(() => serviceRequest.PostAsJsonAsync ("/DmsFile/FindDmsFolderData")).GetAwaiter().GetResult(); } - - public void MoveDmsFolder(DmsFileEntity dmsFile) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/MoveDmsFolder" , dmsFile)).GetAwaiter().GetResult(); } - - public void UploadFile() - { - Task.Run(() => serviceRequest.PostAsync("/DmsFile/UploadFile")).GetAwaiter().GetResult(); } - - public void UploadDmsFile() - { - Task.Run(() => serviceRequest.PostAsync("/DmsFile/UploadDmsFile")).GetAwaiter().GetResult(); } - - public string FindM3u8Path(Int64 fileId) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindM3u8Path?fileId=" + fileId.ToString())).GetAwaiter().GetResult(); } - - public string FindSourceVideoPath(Int64 fileId) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindSourceVideoPath?fileId=" + fileId.ToString())).GetAwaiter().GetResult(); } - - public string FindDeleteLogM3u8Path(Int64 fileId) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindDeleteLogM3u8Path?fileId=" + fileId.ToString())).GetAwaiter().GetResult(); } - - public dynamic DownloadFile(Int64 fileId) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/DownloadFile?fileId=" + fileId.ToString())).GetAwaiter().GetResult(); } - - public dynamic DownloadFilePreview(DmsFileEntity dmsFile) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/DownloadFilePreview" , dmsFile)).GetAwaiter().GetResult(); } - - public dynamic DownloadFileCombine(string fileName) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/DownloadFileCombine?fileName=" + fileName.ToString())).GetAwaiter().GetResult(); } - - public SelectOption[] FindFamilyDmsFolders() - { -return Task.Run(() => serviceRequest.PostAsJsonAsync ("/DmsFile/FindFamilyDmsFolders")).GetAwaiter().GetResult(); } - - public SelectOption[] FindFamilyDmsFoldersByFamilyName(string familyName) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindFamilyDmsFoldersByFamilyName?familyName=" + familyName.ToString())).GetAwaiter().GetResult(); } - - public Int32 FindDmsFolderMapByFolderName(string folderName) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindDmsFolderMapByFolderName?folderName=" + folderName.ToString())).GetAwaiter().GetResult(); } - - public string FindFolderNameParentByFolderName(string folderName) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/FindFolderNameParentByFolderName?folderName=" + folderName.ToString())).GetAwaiter().GetResult(); } - - public void CreateFamilyGroupFolder(FamilyGroupFolderEntity[] familyGroupFolder) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/CreateFamilyGroupFolder" , familyGroupFolder)).GetAwaiter().GetResult(); } - - public void DeleteFamilyGroupFolder(FamilyGroupFolderEntity[] familyGroupFolder) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/DmsFile/DeleteFamilyGroupFolder" , familyGroupFolder)).GetAwaiter().GetResult(); } - - -} -} \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Request/Master/FamilyGroupRequest.auto.cs b/CloudBuilder/CloudBuilder.Request/Master/FamilyGroupRequest.auto.cs deleted file mode 100644 index 0ad25b7..0000000 --- a/CloudBuilder/CloudBuilder.Request/Master/FamilyGroupRequest.auto.cs +++ /dev/null @@ -1,88 +0,0 @@ - -using CloudBuilder.Core.DependencyInjection.Request; -using CloudBuilder.Core.Request; -using CloudBuilder.Core.Service; -using Microsoft.Extensions.DependencyInjection; -using CloudBuilder.Master.Service; - using CloudBuilder.Core.DatabaseAccessor.Entity; - using Microsoft.AspNetCore.Http; - using CloudBuilder.Master.Entity; - using System; - using CloudBuilder.Master.Data; - using CloudBuilder.Master.SearchCriteria; - -namespace CloudBuilder.Request.Master -{ - -public class FamilyGroupRequest : IRequest -{ - -private readonly IServiceRequest serviceRequest; -public FamilyGroupRequest(IServiceRequest serviceRequest) -{ -this.serviceRequest = serviceRequest; -} - - public FamilyGroupData FindByKey(string key) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/FindByKey?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public FamilyGroupResultData FindBySearchCriteria(FamilyGroupSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/FindBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public FamilyGroupResultData FindFamilyUserBySearchCriteria(FamilyGroupManagerUserSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/FindFamilyUserBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public FamilyGroupResultData FamilyFolderFavoriteBySearchCriteria(FamilyGroupManagerUserSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/FamilyFolderFavoriteBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public dynamic PrintBySearchCriteria(FamilyGroupSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/PrintBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public FamilyGroupData Insert(FamilyGroupData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/Insert" , data)).GetAwaiter().GetResult(); } - - public FamilyGroupData Update(FamilyGroupData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/Update" , data)).GetAwaiter().GetResult(); } - - public void Delete(string key) - { - Task.Run(() => serviceRequest.PostAsync("/FamilyGroup/Delete?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public void InsertFamilyGroupManager(FamilyGroupManagerEntity manager) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/InsertFamilyGroupManager" , manager)).GetAwaiter().GetResult(); } - - public void InsertFamilyGroupPermission(FamilyGroupPermissionEntity[] managers) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/InsertFamilyGroupPermission" , managers)).GetAwaiter().GetResult(); } - - public void UpdateFamilyGroupManager(FamilyGroupManagerEntity manager) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/UpdateFamilyGroupManager" , manager)).GetAwaiter().GetResult(); } - - public void DeleteFamilyGroupManager(FamilyGroupManagerEntity manager) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/DeleteFamilyGroupManager" , manager)).GetAwaiter().GetResult(); } - - public void InsertFamilyFolderFavorite(string folderName) - { - Task.Run(() => serviceRequest.PostAsync("/FamilyGroup/InsertFamilyFolderFavorite?folderName=" + folderName.ToString())).GetAwaiter().GetResult(); } - - public void DeleteFamilyFolderFavorite(string folderName) - { - Task.Run(() => serviceRequest.PostAsync("/FamilyGroup/DeleteFamilyFolderFavorite?folderName=" + folderName.ToString())).GetAwaiter().GetResult(); } - - public void DeleteFamilyFolderFavorites(FamilyFolderFavoriteEntity[] familyFolderFavorites) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyGroup/DeleteFamilyFolderFavorites" , familyFolderFavorites)).GetAwaiter().GetResult(); } - - -} -} \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Request/Master/FamilyPersonRequest.auto.cs b/CloudBuilder/CloudBuilder.Request/Master/FamilyPersonRequest.auto.cs deleted file mode 100644 index cf033b0..0000000 --- a/CloudBuilder/CloudBuilder.Request/Master/FamilyPersonRequest.auto.cs +++ /dev/null @@ -1,60 +0,0 @@ - -using CloudBuilder.Core.DependencyInjection.Request; -using CloudBuilder.Core.Request; -using CloudBuilder.Core.Service; -using Microsoft.Extensions.DependencyInjection; -using CloudBuilder.Master.Service; - using CloudBuilder.Core.DatabaseAccessor.Entity; - using Microsoft.AspNetCore.Http; - using CloudBuilder.Master.Entity; - using System; - using CloudBuilder.Master.Data; - using CloudBuilder.Master.SearchCriteria; - -namespace CloudBuilder.Request.Master -{ - -public class FamilyPersonRequest : IRequest -{ - -private readonly IServiceRequest serviceRequest; -public FamilyPersonRequest(IServiceRequest serviceRequest) -{ -this.serviceRequest = serviceRequest; -} - - public FamilyPersonEntity[] FindAll() - { -return Task.Run(() => serviceRequest.PostAsJsonAsync ("/FamilyPerson/FindAll")).GetAwaiter().GetResult(); } - - public FamilyPersonData FindByKey(string key) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyPerson/FindByKey?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public FamilyPersonResultData FindBySearchCriteria(FamilyPersonSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyPerson/FindBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public dynamic PrintBySearchCriteria(FamilyPersonSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyPerson/PrintBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public FamilyPersonData Insert(FamilyPersonData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyPerson/Insert" , data)).GetAwaiter().GetResult(); } - - public FamilyPersonData Update(FamilyPersonData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyPerson/Update" , data)).GetAwaiter().GetResult(); } - - public void Delete(string key) - { - Task.Run(() => serviceRequest.PostAsync("/FamilyPerson/Delete?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public void Deletes(string[] keys) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyPerson/Deletes" , keys)).GetAwaiter().GetResult(); } - - -} -} \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Request/Master/FamilyTreeRequest.auto.cs b/CloudBuilder/CloudBuilder.Request/Master/FamilyTreeRequest.auto.cs deleted file mode 100644 index ffff9b3..0000000 --- a/CloudBuilder/CloudBuilder.Request/Master/FamilyTreeRequest.auto.cs +++ /dev/null @@ -1,66 +0,0 @@ - -using CloudBuilder.Core.DependencyInjection.Request; -using CloudBuilder.Core.Request; -using CloudBuilder.Core.Service; -using Microsoft.Extensions.DependencyInjection; -using CloudBuilder.Master.Service; - using CloudBuilder.Core.DatabaseAccessor.Entity; - using Microsoft.AspNetCore.Http; - using CloudBuilder.Master.Entity; - using System; - using CloudBuilder.Master.Data; - using CloudBuilder.Master.SearchCriteria; - -namespace CloudBuilder.Request.Master -{ - -public class FamilyTreeRequest : IRequest -{ - -private readonly IServiceRequest serviceRequest; -public FamilyTreeRequest(IServiceRequest serviceRequest) -{ -this.serviceRequest = serviceRequest; -} - - public FamilyTreeData FindAllByTreeId(string treeId) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyTree/FindAllByTreeId?treeId=" + treeId.ToString())).GetAwaiter().GetResult(); } - - public FamilyTreeData FindByKey(string key) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyTree/FindByKey?key=" + key.ToString())).GetAwaiter().GetResult(); } - - - public class FindByCurrentPersonCompositionData2 { - public string key { get; set; } - public string personId { get; set; } - - } - public FamilyTreeData FindByCurrentPerson(string key, string personId) - { -var compositionData = new FindByCurrentPersonCompositionData2{ key = key, personId = personId }; return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyTree/FindByCurrentPerson", compositionData)).GetAwaiter().GetResult(); } - - public FamilyTreeResultData FindBySearchCriteria(FamilyTreeSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyTree/FindBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public FamilyTreeData Insert(FamilyTreeData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyTree/Insert" , data)).GetAwaiter().GetResult(); } - - public FamilyTreeData Update(FamilyTreeData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyTree/Update" , data)).GetAwaiter().GetResult(); } - - public void Delete(string key) - { - Task.Run(() => serviceRequest.PostAsync("/FamilyTree/Delete?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public void Deletes(string[] keys) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/FamilyTree/Deletes" , keys)).GetAwaiter().GetResult(); } - - -} -} \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Request/Master/FileTypePolicyRequest.auto.cs b/CloudBuilder/CloudBuilder.Request/Master/FileTypePolicyRequest.auto.cs deleted file mode 100644 index c540786..0000000 --- a/CloudBuilder/CloudBuilder.Request/Master/FileTypePolicyRequest.auto.cs +++ /dev/null @@ -1,32 +0,0 @@ - -using CloudBuilder.Core.DependencyInjection.Request; -using CloudBuilder.Core.Request; -using CloudBuilder.Core.Service; -using Microsoft.Extensions.DependencyInjection; -using CloudBuilder.Master.Service; - using CloudBuilder.Core.DatabaseAccessor.Entity; - using Microsoft.AspNetCore.Http; - using CloudBuilder.Master.Entity; - using System; - using CloudBuilder.Master.Data; - using CloudBuilder.Master.SearchCriteria; - -namespace CloudBuilder.Request.Master -{ - -public class FileTypePolicyRequest : IRequest -{ - -private readonly IServiceRequest serviceRequest; -public FileTypePolicyRequest(IServiceRequest serviceRequest) -{ -this.serviceRequest = serviceRequest; -} - - public SelectOption[] FindSelectOption(bool blank) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/FileTypePolicy/FindSelectOption?blank=" + blank.ToString())).GetAwaiter().GetResult(); } - - -} -} \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Request/Master/PublishAudioRequest.auto.cs b/CloudBuilder/CloudBuilder.Request/Master/PublishAudioRequest.auto.cs deleted file mode 100644 index 9423d19..0000000 --- a/CloudBuilder/CloudBuilder.Request/Master/PublishAudioRequest.auto.cs +++ /dev/null @@ -1,60 +0,0 @@ - -using CloudBuilder.Core.DependencyInjection.Request; -using CloudBuilder.Core.Request; -using CloudBuilder.Core.Service; -using Microsoft.Extensions.DependencyInjection; -using CloudBuilder.Master.Service; - using CloudBuilder.Core.DatabaseAccessor.Entity; - using Microsoft.AspNetCore.Http; - using CloudBuilder.Master.Entity; - using System; - using CloudBuilder.Master.Data; - using CloudBuilder.Master.SearchCriteria; - -namespace CloudBuilder.Request.Master -{ - -public class PublishAudioRequest : IRequest -{ - -private readonly IServiceRequest serviceRequest; -public PublishAudioRequest(IServiceRequest serviceRequest) -{ -this.serviceRequest = serviceRequest; -} - - public PublishAudioData FindByKey(string key) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishAudio/FindByKey?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public PublishAudioResultData FindBySearchCriteria(PublishAudioSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishAudio/FindBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public PublishAudioData FindPublishAudioDefault() - { -return Task.Run(() => serviceRequest.PostAsJsonAsync ("/PublishAudio/FindPublishAudioDefault")).GetAwaiter().GetResult(); } - - public dynamic PrintBySearchCriteria(PublishAudioSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishAudio/PrintBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public PublishAudioData Insert(PublishAudioData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishAudio/Insert" , data)).GetAwaiter().GetResult(); } - - public PublishAudioData Update(PublishAudioData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishAudio/Update" , data)).GetAwaiter().GetResult(); } - - public void Delete(string key) - { - Task.Run(() => serviceRequest.PostAsync("/PublishAudio/Delete?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public void InsertPublishAudioDetail(PublishData publishData) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishAudio/InsertPublishAudioDetail" , publishData)).GetAwaiter().GetResult(); } - - -} -} \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Request/Master/PublishPhotoRequest.auto.cs b/CloudBuilder/CloudBuilder.Request/Master/PublishPhotoRequest.auto.cs deleted file mode 100644 index a4ff868..0000000 --- a/CloudBuilder/CloudBuilder.Request/Master/PublishPhotoRequest.auto.cs +++ /dev/null @@ -1,68 +0,0 @@ - -using CloudBuilder.Core.DependencyInjection.Request; -using CloudBuilder.Core.Request; -using CloudBuilder.Core.Service; -using Microsoft.Extensions.DependencyInjection; -using CloudBuilder.Master.Service; - using CloudBuilder.Core.DatabaseAccessor.Entity; - using Microsoft.AspNetCore.Http; - using CloudBuilder.Master.Entity; - using System; - using CloudBuilder.Master.Data; - using CloudBuilder.Master.SearchCriteria; - -namespace CloudBuilder.Request.Master -{ - -public class PublishPhotoRequest : IRequest -{ - -private readonly IServiceRequest serviceRequest; -public PublishPhotoRequest(IServiceRequest serviceRequest) -{ -this.serviceRequest = serviceRequest; -} - - public PublishPhotoData FindByKey(string key) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishPhoto/FindByKey?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public PublishPhotoResultData FindBySearchCriteria(PublishPhotoSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishPhoto/FindBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public dynamic PrintBySearchCriteria(PublishPhotoSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishPhoto/PrintBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public PublishPhotoData Insert(PublishPhotoData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishPhoto/Insert" , data)).GetAwaiter().GetResult(); } - - public PublishPhotoData Update(PublishPhotoData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishPhoto/Update" , data)).GetAwaiter().GetResult(); } - - public void Delete(string key) - { - Task.Run(() => serviceRequest.PostAsync("/PublishPhoto/Delete?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public PublishPhotoDetailEntity[] FindPublishPhotoDetailByPublishName(string publishName) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishPhoto/FindPublishPhotoDetailByPublishName?publishName=" + publishName.ToString())).GetAwaiter().GetResult(); } - - public PublishPhotoDetailEntity[] FindPublishPhotoDetail() - { -return Task.Run(() => serviceRequest.PostAsJsonAsync ("/PublishPhoto/FindPublishPhotoDetail")).GetAwaiter().GetResult(); } - - public void InsertPublishPhotoDetail(PublishData publishData) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishPhoto/InsertPublishPhotoDetail" , publishData)).GetAwaiter().GetResult(); } - - public void InsertPublishPhotoDetailByFamilyGroup(PublishData publishData) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishPhoto/InsertPublishPhotoDetailByFamilyGroup" , publishData)).GetAwaiter().GetResult(); } - - -} -} \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Request/Master/PublishVideoRequest.auto.cs b/CloudBuilder/CloudBuilder.Request/Master/PublishVideoRequest.auto.cs deleted file mode 100644 index c3a0c7e..0000000 --- a/CloudBuilder/CloudBuilder.Request/Master/PublishVideoRequest.auto.cs +++ /dev/null @@ -1,60 +0,0 @@ - -using CloudBuilder.Core.DependencyInjection.Request; -using CloudBuilder.Core.Request; -using CloudBuilder.Core.Service; -using Microsoft.Extensions.DependencyInjection; -using CloudBuilder.Master.Service; - using CloudBuilder.Core.DatabaseAccessor.Entity; - using Microsoft.AspNetCore.Http; - using CloudBuilder.Master.Entity; - using System; - using CloudBuilder.Master.Data; - using CloudBuilder.Master.SearchCriteria; - -namespace CloudBuilder.Request.Master -{ - -public class PublishVideoRequest : IRequest -{ - -private readonly IServiceRequest serviceRequest; -public PublishVideoRequest(IServiceRequest serviceRequest) -{ -this.serviceRequest = serviceRequest; -} - - public PublishVideoData FindByKey(string key) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishVideo/FindByKey?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public PublishVideoResultData FindBySearchCriteria(PublishVideoSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishVideo/FindBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public PublishVideoData FindPublishVideoDefault() - { -return Task.Run(() => serviceRequest.PostAsJsonAsync ("/PublishVideo/FindPublishVideoDefault")).GetAwaiter().GetResult(); } - - public dynamic PrintBySearchCriteria(PublishVideoSearchCriteria criteria) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishVideo/PrintBySearchCriteria" , criteria)).GetAwaiter().GetResult(); } - - public PublishVideoData Insert(PublishVideoData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishVideo/Insert" , data)).GetAwaiter().GetResult(); } - - public PublishVideoData Update(PublishVideoData data) - { -return Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishVideo/Update" , data)).GetAwaiter().GetResult(); } - - public void Delete(string key) - { - Task.Run(() => serviceRequest.PostAsync("/PublishVideo/Delete?key=" + key.ToString())).GetAwaiter().GetResult(); } - - public void InsertPublishVideoDetail(PublishData publishData) - { - Task.Run(() => serviceRequest.PostAsJsonAsync("/PublishVideo/InsertPublishVideoDetail" , publishData)).GetAwaiter().GetResult(); } - - -} -} \ No newline at end of file diff --git a/CloudBuilder/CloudBuilder.Security.Gui/SecurityFunctionEnquiryPage.cs b/CloudBuilder/CloudBuilder.Security.Gui/SecurityFunctionEnquiryPage.cs index 3a15ef1..209c4bf 100644 --- a/CloudBuilder/CloudBuilder.Security.Gui/SecurityFunctionEnquiryPage.cs +++ b/CloudBuilder/CloudBuilder.Security.Gui/SecurityFunctionEnquiryPage.cs @@ -145,7 +145,7 @@ namespace CloudBuilder.Security.Gui private void InitCombo() { - functionIndcCombo.SetDataSource(YesNoPolicy.GetInstance().GetComposeMessages(), true); + functionIndcCombo.SetDataSource(YesNoPolicy.GetInstance(ApplicationServiceContext.ServiceProvider).GetComposeMessages(), true); } /// diff --git a/CloudBuilder/CloudBuilder.Security.Gui/SecurityFunctionOperationPage.cs b/CloudBuilder/CloudBuilder.Security.Gui/SecurityFunctionOperationPage.cs index 1c44a97..da343e6 100644 --- a/CloudBuilder/CloudBuilder.Security.Gui/SecurityFunctionOperationPage.cs +++ b/CloudBuilder/CloudBuilder.Security.Gui/SecurityFunctionOperationPage.cs @@ -1,4 +1,5 @@ -using CloudBuilder.Core.Service; +using CloudBuilder.Core.DependencyInjection.Form; +using CloudBuilder.Core.Service; using CloudBuilder.Gui; using CloudBuilder.Request.Security; using CloudBuilder.Security.Data; @@ -102,7 +103,7 @@ namespace CloudBuilder.Security.Gui private void InitComBox() { - functionIndcCombo.SetDataSource(YesNoPolicy.GetInstance().GetComposeMessages(), true); + functionIndcCombo.SetDataSource(YesNoPolicy.GetInstance(ApplicationServiceContext.ServiceProvider).GetComposeMessages(), true); } private void InitPermission() diff --git a/CloudBuilder/CloudBuilder.Security.Gui/SecurityMasterDialogPage.cs b/CloudBuilder/CloudBuilder.Security.Gui/SecurityMasterDialogPage.cs index dfbf576..5558bdb 100644 --- a/CloudBuilder/CloudBuilder.Security.Gui/SecurityMasterDialogPage.cs +++ b/CloudBuilder/CloudBuilder.Security.Gui/SecurityMasterDialogPage.cs @@ -1,4 +1,5 @@ -using CloudBuilder.Core.Service; +using CloudBuilder.Core.DependencyInjection.Form; +using CloudBuilder.Core.Service; using CloudBuilder.Gui; using CloudBuilder.Request.Security; using CloudBuilder.Security.Entity; @@ -107,7 +108,7 @@ namespace CloudBuilder.Security.Gui private void InitCombo() { - validIndcCombo.SetDataSource(YesNoPolicy.GetInstance().GetComposeMessages(), true); + validIndcCombo.SetDataSource(YesNoPolicy.GetInstance(ApplicationServiceContext.ServiceProvider).GetComposeMessages(), true); } /// diff --git a/CloudBuilder/CloudBuilder.Security.Gui/SecurityUserEnquiryPage.cs b/CloudBuilder/CloudBuilder.Security.Gui/SecurityUserEnquiryPage.cs index eb595c5..bf336a2 100644 --- a/CloudBuilder/CloudBuilder.Security.Gui/SecurityUserEnquiryPage.cs +++ b/CloudBuilder/CloudBuilder.Security.Gui/SecurityUserEnquiryPage.cs @@ -124,7 +124,7 @@ namespace CloudBuilder.Security.Gui { //設置Value與description的映射,另一方式是dataValeOperation传入函数 Dictionary> mappings = new Dictionary>(); - Dictionary validDic = YesNoPolicy.GetInstance().GetDictionary(); + Dictionary validDic = YesNoPolicy.GetInstance(ApplicationServiceContext.ServiceProvider).GetDictionary(); mappings.Add(SecurityUserEntity.USER_IS_VALID_INDC, validDic); //設置查詢條件 List searCriteria = new List(); @@ -151,7 +151,7 @@ namespace CloudBuilder.Security.Gui private void InitCombo() { - userIsValidIndcCombo.SetDataSource(YesNoPolicy.GetInstance().GetComposeMessages(), true); + userIsValidIndcCombo.SetDataSource(YesNoPolicy.GetInstance(ApplicationServiceContext.ServiceProvider).GetComposeMessages(), true); } /// diff --git a/CloudBuilder/CloudBuilder.Security.Service/Authorization/PermissionHandler.cs b/CloudBuilder/CloudBuilder.Security.Service/Authorization/PermissionHandler.cs index c6d91b9..464c52f 100644 --- a/CloudBuilder/CloudBuilder.Security.Service/Authorization/PermissionHandler.cs +++ b/CloudBuilder/CloudBuilder.Security.Service/Authorization/PermissionHandler.cs @@ -27,13 +27,19 @@ namespace CloudBuilder.Security.Service.Authorization { public class PermissionHandler : AuthorizationHandler, IAuthorize { - private readonly WebService service; + private readonly IServiceProvider serviceProvider; private readonly IContext loginContext; private readonly IHttpContextAccessor httpContextAccessor; - public PermissionHandler(WebService service, IContext loginContext, IHttpContextAccessor httpContextAccessor) + /// + /// 注意:这里必须注入当前请求作用域的 IServiceProvider, + /// 不能使用 WebService.Services.BuildServiceProvider() 新建容器, + /// 否则每次鉴权都会独立构建一整套服务实例(单例/作用域都会重建,且无法释放), + /// 取到的 IApplicationService 也会与当前请求的作用域不一致。 + /// + public PermissionHandler(IServiceProvider serviceProvider, IContext loginContext, IHttpContextAccessor httpContextAccessor) { - this.service = service; + this.serviceProvider = serviceProvider; this.loginContext = loginContext; this.httpContextAccessor = httpContextAccessor; } @@ -66,7 +72,7 @@ namespace CloudBuilder.Security.Service.Authorization loginContext.SetToken(ClaimPolicy.GetJwtBearerToken(httpContextAccessor.HttpContext)); loginContext.SetCulture(ClaimPolicy.GetClaimValue(httpContextAccessor, ClaimPolicy.CLAINM_LOCALE) ?? CulturePolicy.ZH_CN); - IApplicationService applicationService = service.Services.BuildServiceProvider().GetRequiredService(); + IApplicationService applicationService = serviceProvider.GetRequiredService(); PermissionContext permissionContext = new PermissionContext(applicationService); bool result = false; diff --git a/CloudBuilder/CloudBuilder.Web.Entry/Controllers/Master/FamilyTreeController.auto.cs b/CloudBuilder/CloudBuilder.Web.Entry/Controllers/Master/FamilyTreeController.auto.cs index 0accd03..255031c 100644 --- a/CloudBuilder/CloudBuilder.Web.Entry/Controllers/Master/FamilyTreeController.auto.cs +++ b/CloudBuilder/CloudBuilder.Web.Entry/Controllers/Master/FamilyTreeController.auto.cs @@ -137,6 +137,90 @@ this.familyTreeService= familyTreeService; } } + + public class RequestFamilyTreePermissionCompositionData + { + public string treeId { get; set; } + public string currentPersonId { get; set; } + + } + [PermissionOperate(name: "FamilyTree", operate: "Find")] + [HttpPost] + [UnitOfWork] + public dynamic RequestFamilyTreePermission(RequestFamilyTreePermissionCompositionData compositionData){ + try + { + familyTreeService.RequestFamilyTreePermission(compositionData.treeId,compositionData.currentPersonId); + + return string.Empty; + } + catch (ValidatedException vex) + { + return vex; + } + catch (Exception ex) + { + return new ServiceErrorException(ex); + } + } + + + public class ApproveFamilyTreePermissionCompositionData + { + public string treeId { get; set; } + public string currentPersonId { get; set; } + public string userName { get; set; } + public string managerIndc { get; set; } + + } + [PermissionOperate(name: "FamilyTree", operate: "Find")] + [HttpPost] + [UnitOfWork] + public dynamic ApproveFamilyTreePermission(ApproveFamilyTreePermissionCompositionData compositionData){ + try + { + familyTreeService.ApproveFamilyTreePermission(compositionData.treeId,compositionData.currentPersonId,compositionData.userName,compositionData.managerIndc); + + return string.Empty; + } + catch (ValidatedException vex) + { + return vex; + } + catch (Exception ex) + { + return new ServiceErrorException(ex); + } + } + + + public class RejectFamilyTreePermissionCompositionData + { + public string treeId { get; set; } + public string currentPersonId { get; set; } + public string userName { get; set; } + + } + [PermissionOperate(name: "FamilyTree", operate: "Find")] + [HttpPost] + [UnitOfWork] + public dynamic RejectFamilyTreePermission(RejectFamilyTreePermissionCompositionData compositionData){ + try + { + familyTreeService.RejectFamilyTreePermission(compositionData.treeId,compositionData.currentPersonId,compositionData.userName); + + return string.Empty; + } + catch (ValidatedException vex) + { + return vex; + } + catch (Exception ex) + { + return new ServiceErrorException(ex); + } + } + [PermissionOperate(name: "FamilyTree", operate: "Update")] [HttpPost] [UnitOfWork] diff --git a/WebVue/src/components/basic/SearchCriteria.vue b/WebVue/src/components/basic/SearchCriteria.vue index d34059c..419da4e 100644 --- a/WebVue/src/components/basic/SearchCriteria.vue +++ b/WebVue/src/components/basic/SearchCriteria.vue @@ -587,6 +587,9 @@ const handleChange = (bindValue: string, value: string) => { const onReset = () => { bindOptions.value.forEach((element: BindOption) => { + // 只读(disabled)的查询条件属于固定约束,重置时保留其值 + if (element.disabled) return; + element.Value = ""; element.Value1 = ""; element.Values = []; diff --git a/WebVue/src/service/master/familyTreeService.ts b/WebVue/src/service/master/familyTreeService.ts index 1810dde..55f8787 100644 --- a/WebVue/src/service/master/familyTreeService.ts +++ b/WebVue/src/service/master/familyTreeService.ts @@ -56,6 +56,36 @@ class FamilyTreeService{ ) }; + async RequestFamilyTreePermission(data: any) { + return request( + { + url: "/FamilyTree/RequestFamilyTreePermission", + method: "post", + data, + } + ) + }; + + async ApproveFamilyTreePermission(data: any) { + return request( + { + url: "/FamilyTree/ApproveFamilyTreePermission", + method: "post", + data, + } + ) + }; + + async RejectFamilyTreePermission(data: any) { + return request( + { + url: "/FamilyTree/RejectFamilyTreePermission", + method: "post", + data, + } + ) + }; + async Update(data: FamilyTreeData) { return request( { diff --git a/WebVue/src/views/master/FamilyPersonEnquiry.vue b/WebVue/src/views/master/FamilyPersonEnquiry.vue index 4226a62..2c9e935 100644 --- a/WebVue/src/views/master/FamilyPersonEnquiry.vue +++ b/WebVue/src/views/master/FamilyPersonEnquiry.vue @@ -396,6 +396,15 @@ const initBindOption = async () => { bindOption.lg = 10; bindOptions.value.push(bindOption); + bindOption = ubo.getBindOption( + FamilyPersonEntity.DB_TREE_ID, + "族谱编号", + SearchFilterTypePolicy.TEXT, + SearchFilterOperatorPolicy.CONTAIN, + ); + bindOption.lg = 10; + bindOptions.value.push(bindOption); + initBindOptions.value.forEach((element) => { setBindOptionValue( element.BindValue, @@ -405,15 +414,6 @@ const initBindOption = async () => { element.disabled, ); }); - - bindOption = ubo.getBindOption( - FamilyPersonEntity.DB_CREATED_DATETIME, - "创建日期", - SearchFilterTypePolicy.DATE, - SearchFilterOperatorPolicy.DATE_BETWEEN, - ); - bindOption.lg = 10; - bindOptions.value.push(bindOption); }; //table from----------------------------------------------------------------------------------------------------------------------------------- diff --git a/WebVue/src/views/master/FamilyPersonOperation.vue b/WebVue/src/views/master/FamilyPersonOperation.vue index ed0eaaa..cc9f637 100644 --- a/WebVue/src/views/master/FamilyPersonOperation.vue +++ b/WebVue/src/views/master/FamilyPersonOperation.vue @@ -7,47 +7,26 @@
- + " />
- +
- 查询 - 重置 + 查询 + 重置
- -
+ +
diff --git a/WebVue/src/views/master/FamilyPersonQuickCreateModal.vue b/WebVue/src/views/master/FamilyPersonQuickCreateModal.vue new file mode 100644 index 0000000..892bec5 --- /dev/null +++ b/WebVue/src/views/master/FamilyPersonQuickCreateModal.vue @@ -0,0 +1,212 @@ + + + + + \ No newline at end of file diff --git a/WebVue/src/views/master/FamilyTreeOperation.vue b/WebVue/src/views/master/FamilyTreeOperation.vue index 24b7ee1..0992c9f 100644 --- a/WebVue/src/views/master/FamilyTreeOperation.vue +++ b/WebVue/src/views/master/FamilyTreeOperation.vue @@ -7,63 +7,33 @@
- + " />
- +
- 查询 - 重置 - 新增 + 查询 + 重置 + 新增
-
+
@@ -89,91 +59,43 @@
族谱编号*
- +
族谱名称*
- +
简介
- +
封面文件名
- +
公开
- - {{ o.DisplayName }} + + {{ o.DisplayName }}
祖先
- - - + + + - 祖谱系图 + 祖谱系图
@@ -184,58 +106,33 @@
性别
- - {{ o.DisplayName }} + + {{ o.DisplayName }}
族谱名
- +
常用名
- +
-
族员ID
- +
族员
+
-
- 谱系图 +
+
+ 谱系图 + 申请管理 +
@@ -245,20 +142,16 @@
-
+
{{ index + 1 }}
{{ (record.SpouseSurname || "") + - (record.SpouseGenealogyName || "") || + (record.SpouseGenealogyName || "") || record.SpouseCommonName || "未命名配偶" }} @@ -268,98 +161,55 @@
- - - + + +
结婚日期文本 - + {{ record.MarryDateText || "-" }}
结婚日期 - + @change="onMarryDateChange(record, $event)" /> {{ formatDate(record.MarryDate) || "-" }}
离婚日期文本 - + {{ record.DivorceDateText || "-" }}
离婚日期 - + {{ formatDate(record.DivorceDate) || "-" }}
婚配类型 - + {{ record.MarryType || "-" }}
当前? - - {{ o.DisplayName }} + + {{ o.DisplayName + }} {{ getPolicyText(yesNoPolicy, record.IsCurrent) || "-" @@ -367,12 +217,7 @@
备注 - + {{ record.Remark || "-" }} @@ -380,40 +225,27 @@
-
+
暂无夫妻关系
- + 新增夫妻关系
-
+
{{ index + 1 }}
{{ (record.ChildrenSurname || "") + - (record.ChildrenGenealogyName || "") || + (record.ChildrenGenealogyName || "") || record.ChildrenCommonName || "未命名孩子" }} @@ -424,45 +256,23 @@
- - + +
父母 - + {{ getSpouseName(record.SpouseId) || "-" }}
关系 - + {{ getPolicyText(relationTypeOptions, record.RelationType) || "-" @@ -470,12 +280,7 @@
备注 - + {{ record.Remark || "-" }} @@ -483,26 +288,95 @@
-
+
暂无孩子关系
- + 新增孩子关系
+ +
+ + +
+
+
+ {{ index + 1 }} +
+ + {{ record.UserLocalName || "未命名成员" }} + +
+
+ + + +
+
+
+
+ 授权族员节点 + {{ record.PersonLocalName || "-" }} +
+
+ 申请时间 + {{ formatDate(record.CreatedDatetime) || "-" }} +
+
+
+
+ 暂无待审核成员 +
+
+
+
+
+ +
+ + +
+
+
+ {{ index + 1 }} +
+ + {{ record.UserLocalName || "未命名成员" }} + + 管理员 +
+
+ +
+
+
+
+ 授权族员节点 + {{ record.PersonLocalName || "-" }} +
+
+ 管理员 + {{ + getPolicyText(yesNoPolicy, record.ManagerIndc) || "-" + }} +
+
+
+
+ 暂无管理成员 +
+
+
+
+
- - + + - - + + - - + + +