diff --git a/OpenAuth.App/ModuleManagerApp.cs b/OpenAuth.App/ModuleManagerApp.cs index b300773d..cf535e96 100644 --- a/OpenAuth.App/ModuleManagerApp.cs +++ b/OpenAuth.App/ModuleManagerApp.cs @@ -10,13 +10,10 @@ namespace OpenAuth.App public class ModuleManagerApp { private IModuleRepository _repository; - private IOrgRepository _orgRepository; - public ModuleManagerApp(IModuleRepository repository, - IOrgRepository orgRepository) + public ModuleManagerApp(IModuleRepository repository) { _repository = repository; - _orgRepository = orgRepository; } public int GetModuleCntInOrg(int orgId) @@ -57,16 +54,15 @@ namespace OpenAuth.App }; } - /// - /// 获取当前组织的所有下级组织 - /// - private int[] GetSubOrgIds(int orgId) + public List LoadForTree(bool bAll) { - var org = _orgRepository.FindSingle(u => u.Id == orgId); - var orgs = _orgRepository.Find(u => u.CascadeId.Contains(org.CascadeId)).Select(u => u.Id).ToArray(); - return orgs; + if (bAll) + return _repository.Find(null).ToList(); + return _repository.Find(u => u.ParentId == 0).ToList(); } + + public Module Find(int id) { var module = _repository.FindSingle(u => u.Id == id); @@ -77,7 +73,10 @@ namespace OpenAuth.App public void Delete(int id) { - _repository.Delete(id); + var del = _repository.FindSingle(u => u.Id == id); + if (del == null) return; + + _repository.Delete(u => u.CascadeId.Contains(del.CascadeId)); } public void AddOrUpdate(Module model) @@ -85,6 +84,29 @@ namespace OpenAuth.App Module module = model; if (module.Id == 0) { + string cascadeId; + int currentCascadeId = GetMaxCascadeId(module.ParentId); + + if (module.ParentId != 0) + { + var parentOrg = _repository.FindSingle(o => o.Id == module.ParentId); + if (parentOrg != null) + { + cascadeId = parentOrg.CascadeId + "." + currentCascadeId; + module.ParentName = parentOrg.Name; + } + else + { + throw new Exception("未能找到该组织的父节点信息"); + } + } + else + { + cascadeId = "0." + currentCascadeId; + module.ParentName = ""; + } + + module.CascadeId = cascadeId; _repository.Add(module); } else @@ -94,6 +116,31 @@ namespace OpenAuth.App } + #region 私有方法 + + //根据同一级中最大的语义ID + private int GetMaxCascadeId(int parentId) + { + int currentCascadeId = 1; + var sameLevels = _repository.Find(o => o.ParentId == parentId); + foreach (var obj in sameLevels) + { + int objCascadeId = int.Parse(obj.CascadeId.Split('.').Last()); + if (currentCascadeId < objCascadeId) currentCascadeId = objCascadeId + 1; + } + + return currentCascadeId; + } + + private int[] GetSubOrgIds(int orgId) + { + var org = _repository.FindSingle(u => u.Id == orgId); + var orgs = _repository.Find(u => u.CascadeId.Contains(org.CascadeId)).Select(u => u.Id).ToArray(); + return orgs; + } + + #endregion 私有方法 + } } \ No newline at end of file diff --git a/OpenAuth.App/OrgManagerApp.cs b/OpenAuth.App/OrgManagerApp.cs index c76d59fa..89a5d462 100644 --- a/OpenAuth.App/OrgManagerApp.cs +++ b/OpenAuth.App/OrgManagerApp.cs @@ -109,13 +109,13 @@ namespace OpenAuth.App { int currentCascadeId = 1; - var maxCascadeIdOrg = _repository.Find(o => o.ParentId == parentId) - .OrderByDescending(o => o.CascadeId).FirstOrDefault(); - if (maxCascadeIdOrg != null) + var sameLevels = _repository.Find(o => o.ParentId == parentId); + foreach (var obj in sameLevels) { - var cascades = maxCascadeIdOrg.CascadeId.Split('.'); - currentCascadeId = int.Parse(cascades[cascades.Length - 1]) + 1; + int objCascadeId = int.Parse(obj.CascadeId.Split('.').Last()); + if (currentCascadeId < objCascadeId) currentCascadeId = objCascadeId + 1; } + return currentCascadeId; } diff --git a/OpenAuth.Mvc/Controllers/ModuleManagerController.cs b/OpenAuth.Mvc/Controllers/ModuleManagerController.cs index 827d89cc..01562f7e 100644 --- a/OpenAuth.Mvc/Controllers/ModuleManagerController.cs +++ b/OpenAuth.Mvc/Controllers/ModuleManagerController.cs @@ -28,7 +28,7 @@ namespace OpenAuth.Mvc.Controllers return View(_app.Find(id)); } - //添加或修改组织 + //添加或修改模块 [HttpPost] public string Add(Module model) { @@ -46,14 +46,31 @@ namespace OpenAuth.Mvc.Controllers } /// - /// 加载组织下面的所有用户 + /// 加载模块下面的所有模块 /// public string Load(int orgId, int pageCurrent = 1, int pageSize = 30) { return JsonHelper.Instance.Serialize(_app.Load(orgId, pageCurrent, pageSize)); } - //获取组织下面用户个数 + /// + /// 加载tree结构 + /// + public string LoadForTree(bool bAll=false) + { + var orgs = _app.LoadForTree(bAll); + //添加根节点 + orgs.Add(new Module + { + Id = 0, + ParentId = -1, + Name = "全部模块", + CascadeId = "0" + }); + return JsonHelper.Instance.Serialize(orgs); + } + + //获取模块下面模块个数 public int GetCount(int orgId) { return _app.GetModuleCntInOrg(orgId); diff --git a/OpenAuth.Mvc/Views/ModuleManager/Add.cshtml b/OpenAuth.Mvc/Views/ModuleManager/Add.cshtml index 9337797a..bf78d25b 100644 --- a/OpenAuth.Mvc/Views/ModuleManager/Add.cshtml +++ b/OpenAuth.Mvc/Views/ModuleManager/Add.cshtml @@ -14,121 +14,61 @@ @Html.HiddenFor(m => m.Id) - - - - - + @Html.HiddenFor(m =>m.CascadeId) - - + - - + - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + + - - - - - - - - - + - - - - - +