diff --git a/.gitignore b/.gitignore
index 857671e..6b01279 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,7 +20,6 @@
*.props
/BPA.SAAS.Manage.Web.Entry/obj/Debug/net6.0/BPA.SAAS.Manage.Web.Entry.csproj.AssemblyReference.cache
/BPA.SAAS.Manage.Web.Entry/obj/Debug/net6.0/staticwebassets.build.json
-*.cs
/BPA.SAAS.Manage.Web.Core/obj/Debug/net6.0/BPA.SAAS.Manage.Web.Core.csproj.AssemblyReference.cache
/BPA.SAAS.Manage.Web.Entry/obj/Debug/net6.0/apphost.exe
/BPA.SAAS.Manage.Core/BPA.SAAS.Manage.Core.xml
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Organize/DeleteOrgInput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/DeleteOrgInput.cs
new file mode 100644
index 0000000..ce6c436
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/DeleteOrgInput.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Organize
+{
+ public class DeleteOrgInput
+ {
+ public string Id { get; set; }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgAddInput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgAddInput.cs
new file mode 100644
index 0000000..e33304c
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgAddInput.cs
@@ -0,0 +1,30 @@
+using BPA.SAAS.Manage.Comm.Enum;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Organize
+{
+ public class OrgAddInput
+ {
+ ///
+ /// 机构名称
+ ///
+ public string Name { get; set; }
+ ///
+ /// 上级id
+ ///
+ public string PID { get; set; }
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; }
+ ///
+ /// 电话
+ ///
+ public string Tel { get; set; }
+ public int Sort { get; set; }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgListInput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgListInput.cs
new file mode 100644
index 0000000..ba56b16
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgListInput.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Organize
+{
+ public class OrgListInput
+ {
+ public string Pid { get; set; }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgOutput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgOutput.cs
new file mode 100644
index 0000000..1a34bf9
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgOutput.cs
@@ -0,0 +1,51 @@
+using BPA.SAAS.Manage.Comm.Enum;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Organize
+{
+ public class OrgOutput
+ {
+ public string Id { get; set; }
+ ///
+ /// 机构名称
+ ///
+ public string Name { get; set; }
+ ///
+ /// 上级id
+ ///
+ public string PID { get; set; }
+ ///
+ /// 类型 默认 机构
+ ///
+ public int Type { get; set; }
+ ///
+ /// 上级ID集合
+ ///
+ public string Pids { get; set; }
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; }
+ ///
+ /// 电话
+ ///
+ public string Tel { get; set; }
+ ///
+ /// AutoKey 唯一值
+ ///
+ public string AutoKey { get; set; }
+ ///
+ /// 状态 【正常 停用】默认 正常
+ ///
+ public CommonStatus Status { get; set; } = CommonStatus.ENABLE;
+ ///
+ /// 加盟商id
+ ///
+ public string GroupId { get; set; }
+ public DateTime CreateAt { get; set; }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgPageInput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgPageInput.cs
new file mode 100644
index 0000000..f48382d
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgPageInput.cs
@@ -0,0 +1,24 @@
+using BPA.SAAS.Manage.Core.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Organize
+{
+ public class OrgPageInput: PageInputBase
+ {
+ public string Id { get; set; }
+
+ ///
+ /// 父Id
+ ///
+ public string Pid { get; set; }
+
+ ///
+ /// 名称
+ ///
+ public string Name { get; set; }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgTreeNode.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgTreeNode.cs
new file mode 100644
index 0000000..140b13c
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/OrgTreeNode.cs
@@ -0,0 +1,62 @@
+using BPA.SAAS.Manage.Comm.Util;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Organize
+{
+ public class OrgTreeNode : ITreeNode
+ {
+
+ public int Type { get; set; }
+
+ ///
+ /// Id
+ ///
+ public string key { get; set; }
+
+ ///
+ /// 父Id
+ ///
+ public string parentId { get; set; }
+
+ ///
+ /// 名称
+ ///
+ public string title { get; set; }
+
+ ///
+ /// 值
+ ///
+ public string value { get; set; }
+
+ ///
+ /// 排序,越小优先级越高
+ ///
+ public int weight { get; set; }
+
+ ///
+ /// 子节点
+ ///
+ public List Children { get; set; } = new List();
+
+
+ public string GetId()
+ {
+ return key;
+ }
+
+ public string GetPid()
+ {
+ return parentId;
+ }
+
+ public void SetChildren(IList children)
+ {
+ Children = (List)children;
+ }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Organize/UpdateOrgInput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/UpdateOrgInput.cs
new file mode 100644
index 0000000..fd1fc7a
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Organize/UpdateOrgInput.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Organize
+{
+ public class UpdateOrgInput
+ {
+ public string Id { get; set; }
+ ///
+ /// 机构名称
+ ///
+ public string Name { get; set; }
+ ///
+ /// 上级id
+ ///
+ public string Pid { get; set; }
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; }
+ ///
+ /// 电话
+ ///
+ public string Tel { get; set; }
+ public int Sort { get; set; }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Role/QueryRoleMenuListDto.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Role/QueryRoleMenuListDto.cs
new file mode 100644
index 0000000..2a99624
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Role/QueryRoleMenuListDto.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Role
+{
+ public class QueryRoleMenuListDto
+ {
+ public string Name { get; set; }
+ public string Id { get; set; }
+
+ public bool IsParentMenu { get; set; }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoInput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoInput.cs
index 87f606a..ef1f4e2 100644
--- a/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoInput.cs
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoInput.cs
@@ -20,7 +20,7 @@ namespace BPA.SAAS.Manage.Application.Org.Dtos.Role
///
/// 排序
///
- public string Sort { get; set; }
+ public int Sort { get; set; }
///
/// 备注
///
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoOutput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoOutput.cs
new file mode 100644
index 0000000..9e34ade
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoOutput.cs
@@ -0,0 +1,40 @@
+using BPA.SAAS.Manage.Comm.Enum;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Role
+{
+ public class RoleDtoOutput
+ {
+ public string Id { get; set; }
+ //
+ /// 角色名称
+ ///
+ public string Name { get; set; }
+ ///
+ /// 编码
+ ///
+ public string Code { get; set; }
+ ///
+ /// 排序
+ ///
+ public int Sort { get; set; }
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; }
+ ///
+ /// 角色类型-集团角色_0、加盟商角色_1、门店角色_2
+ ///
+ public int RoleType { get; set; }
+ public DateTime? CreateAt { get; set; }
+ ///
+ /// 状态 【正常 停用】默认 正常
+ ///
+ public CommonStatus Status { get; set; }
+
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoPageInput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoPageInput.cs
new file mode 100644
index 0000000..b059b22
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleDtoPageInput.cs
@@ -0,0 +1,22 @@
+using BPA.SAAS.Manage.Core.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Role
+{
+ public class RoleDtoPageInput: PageInputBase
+ {
+ ///
+ /// 名称
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 编码
+ ///
+ public string Code { get; set; }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleMenuDtoInput.cs b/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleMenuDtoInput.cs
new file mode 100644
index 0000000..c0f825d
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Dtos/Role/RoleMenuDtoInput.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Dtos.Role
+{
+ public class RoleMenuDtoInput
+ {
+ ///
+ /// 角色Id
+ ///
+ public string SysRoleId { get; set; }
+
+ ///
+ /// 菜单Id
+ ///
+ public List SysMenuId { get; set; }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Interface/IOrganizeService.cs b/BPA.SAAS.Manage.Application/Org/Interface/IOrganizeService.cs
new file mode 100644
index 0000000..178cb72
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Interface/IOrganizeService.cs
@@ -0,0 +1,20 @@
+using BPA.SAAS.Manage.Application.Org.Dtos.Organize;
+using BPA.SAAS.Manage.Core.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org.Interface
+{
+ public interface IOrganizeService
+ {
+ Task QueryOrgPageList(OrgPageInput input);
+ Task> GetOrgList(OrgListInput input);
+ Task AddOrg(OrgAddInput input);
+ Task DeleteOrg(DeleteOrgInput input);
+ Task UpdateOrg(UpdateOrgInput input);
+ Task GetOrgTree();
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Interface/IRoleService.cs b/BPA.SAAS.Manage.Application/Org/Interface/IRoleService.cs
index 14f4ade..54bdeab 100644
--- a/BPA.SAAS.Manage.Application/Org/Interface/IRoleService.cs
+++ b/BPA.SAAS.Manage.Application/Org/Interface/IRoleService.cs
@@ -12,6 +12,8 @@ namespace BPA.SAAS.Manage.Application.Org.Interface
{
Task Page(RoleDtoPageInput input);
Task Add(RoleDtoInput input);
+ Task Update(RoleDtoInput input);
+ Task Delete(List input);
Task> GetMenuRole(string RoleId);
Task AddOrUpdateMenuRole(RoleMenuDtoInput input);
Task Disable(string Id);
diff --git a/BPA.SAAS.Manage.Application/Org/OrganizeServices.cs b/BPA.SAAS.Manage.Application/Org/OrganizeServices.cs
new file mode 100644
index 0000000..8c570e6
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/OrganizeServices.cs
@@ -0,0 +1,80 @@
+using BPA.SAAS.Manage.Application.Org.Dtos.Organize;
+using BPA.SAAS.Manage.Application.Org.Interface;
+using BPA.SAAS.Manage.Core.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org
+{
+ [ApiDescriptionSettings("Org", Tag = "组织机构管理")]
+ public class OrganizeServices: IDynamicApiController
+ {
+ IOrganizeService _organizeService;
+ public OrganizeServices(IOrganizeService organizeService)
+ {
+ _organizeService=organizeService;
+ }
+ ///
+ /// 分页查询
+ ///
+ ///
+ ///
+ [HttpPost("/api/organize/page")]
+ public async Task QueryOrgPageList([FromBody]OrgPageInput input)
+ {
+ return await _organizeService.QueryOrgPageList(input);
+ }
+ ///
+ /// 获取列表
+ ///
+ ///
+ ///
+ [HttpPost("/api/organize/getorglist")]
+ public async Task> GetOrgList(OrgListInput input)
+ {
+ return await _organizeService.GetOrgList(input);
+ }
+ ///
+ /// 添加
+ ///
+ ///
+ ///
+ [HttpPost("/api/organize/addorg")]
+ public async Task AddOrg(OrgAddInput input)
+ {
+ return await _organizeService.AddOrg(input);
+ }
+ ///
+ /// 删除
+ ///
+ ///
+ ///
+ [HttpPost("/api/organize/deleteorg")]
+ public async Task DeleteOrg(DeleteOrgInput input)
+ {
+ return await _organizeService.DeleteOrg(input);
+ }
+ ///
+ /// 修改
+ ///
+ ///
+ ///
+ [HttpPost("/api/organize/updateorg")]
+ public async Task UpdateOrg(UpdateOrgInput input)
+ {
+ return await _organizeService.UpdateOrg(input);
+ }
+ ///
+ /// 获取组织机构树
+ ///
+ ///
+ [HttpGet("/api/organize/tree")]
+ public async Task GetOrgTree()
+ {
+ return await _organizeService.GetOrgTree();
+ }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/RolesServices.cs b/BPA.SAAS.Manage.Application/Org/RolesServices.cs
new file mode 100644
index 0000000..e3c1edf
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/RolesServices.cs
@@ -0,0 +1,101 @@
+using BPA.SAAS.Manage.Application.Org.Dtos.Role;
+using BPA.SAAS.Manage.Application.Org.Interface;
+using BPA.SAAS.Manage.Core.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Application.Org
+{
+ [ApiDescriptionSettings("SYS", Tag = "角色信息")]
+ public class RolesServices: IDynamicApiController
+ {
+ IRoleService _roleService;
+ public RolesServices(IRoleService roleService)
+ {
+ _roleService=roleService;
+ }
+ ///
+ /// 分页查询
+ ///
+ ///
+ ///
+ [HttpPost("/api/roles/page")]
+ public async Task Page(RoleDtoPageInput input)
+ {
+ return await _roleService.Page(input);
+ }
+ ///
+ /// 根据角色查询角色菜单
+ ///
+ ///
+ ///
+ [HttpGet("/api/roles/getmenurole")]
+ public async Task> GetMenuRole(string RoleId)
+ {
+ return await _roleService.GetMenuRole(RoleId);
+ }
+ ///
+ /// 添加
+ ///
+ ///
+ ///
+ [HttpPost("/api/roles/add")]
+ public async Task Add(RoleDtoInput input)
+ {
+ return await _roleService.Add(input);
+ }
+ ///
+ /// 更新
+ ///
+ ///
+ ///
+ [HttpPost("/api/roles/update")]
+ public async Task Update(RoleDtoInput input)
+ {
+ return await _roleService.Update(input);
+ }
+ ///
+ /// 删除
+ ///
+ ///
+ ///
+ [HttpPost("/api/roles/delete")]
+ public async Task Delete(List input)
+ {
+ return await _roleService.Delete(input);
+ }
+ ///
+ /// 编辑角色菜单
+ ///
+ ///
+ ///
+ [HttpPost("/api/roles/addorupdatemenurole")]
+ public async Task AddOrUpdateMenuRole(RoleMenuDtoInput input)
+ {
+ return await _roleService.AddOrUpdateMenuRole(input);
+ }
+ ///
+ /// 启用
+ ///
+ ///
+ ///
+ [HttpGet("/api/roles/enable")]
+ public async Task Enable(string Id)
+ {
+ return await _roleService.Enable(Id);
+ }
+ ///
+ /// 禁用
+ ///
+ ///
+ ///
+ [HttpGet("/api/roles/disable")]
+ public async Task Disable(string Id)
+ {
+ return await _roleService.Disable(Id);
+ }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Services/OrganizeService.cs b/BPA.SAAS.Manage.Application/Org/Services/OrganizeService.cs
new file mode 100644
index 0000000..3c765ab
--- /dev/null
+++ b/BPA.SAAS.Manage.Application/Org/Services/OrganizeService.cs
@@ -0,0 +1,185 @@
+using BPA.SAAS.Manage.Application.Org.Dtos.Organize;
+using BPA.SAAS.Manage.Application.Org.Interface;
+using BPA.SAAS.Manage.Comm.Enum;
+using BPA.SAAS.Manage.Comm.Util;
+using BPA.SAAS.Manage.Core.Base;
+using BPA.SAAS.Manage.Core.Org;
+using Furion.DatabaseAccessor;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace BPA.SAAS.Manage.Application.Org.Services
+{
+ public class OrganizeService : IOrganizeService, ITransient
+ {
+ private readonly ISqlSugarClient _db;
+ public OrganizeService(ISqlSugarClient db)
+ {
+ _db = db;
+ }
+ ///
+ /// 分页获取组织机构列表
+ ///
+ ///
+ ///
+ public async Task QueryOrgPageList(OrgPageInput input)
+ {
+ RefAsync total = 0;
+ var name = !string.IsNullOrEmpty(input.Name?.Trim());
+ var id = !string.IsNullOrEmpty(input.Id?.Trim());
+ var pId = !string.IsNullOrEmpty(input.Pid?.Trim());
+ var data = await _db.Queryable()
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
+ .WhereIF(!string.IsNullOrWhiteSpace(input.Pid), u => u.Pids.Contains(input.Pid.Trim()) || u.Id == input.Pid.Trim())
+ .Select()
+ .OrderBy(a => a.CreateAt, OrderByType.Asc)
+ .ToPageListAsync(input.Current, input.PageSize, total);
+ PageUtil util = new PageUtil()
+ {
+ Total = total,
+ Data = data
+
+ };
+ return util;
+ }
+ ///
+ /// 获取组织机构列表
+ ///
+ ///
+ ///
+ public async Task> GetOrgList(OrgListInput input)
+ {
+ var pId = !string.IsNullOrEmpty(input.Pid?.Trim());
+ var orgs = await _db.Queryable()
+ .WhereIF(pId, u => u.PID == input.Pid)
+ .Where(u => u.Status != CommonStatus.DELETED).ToListAsync();
+ return orgs.Adapt>();
+ }
+ ///
+ /// 新增组织
+ ///
+ ///
+ ///
+ public async Task AddOrg(OrgAddInput input)
+ {
+ if (!string.IsNullOrEmpty(input.Tel))
+ {
+ var tel = Regex.IsMatch(input.Tel, "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$");
+ if (tel == false) throw Oops.Oh("手机号错误");
+ }
+ var sysOrg = input.Adapt();
+ await FillPids(sysOrg);
+ return await _db.Insertable(sysOrg).CallEntityMethod(m => m.Create()).ExecuteCommandAsync()>0;
+ }
+ ///
+ /// 删除组织机构
+ ///
+ ///
+ ///
+ public async Task DeleteOrg(DeleteOrgInput input)
+ {
+ var sysOrg = await _db.Queryable().FirstAsync(u => u.Id == input.Id);
+ // 级联删除子节点
+ var childIdList = await GetChildIdListWithSelfById(sysOrg.Id);
+ var orgs = await _db.Queryable().Where(u => childIdList.Contains(u.Id)).ToListAsync();
+ return await _db.Deleteable(orgs).ExecuteCommandAsync()>0;
+ }
+
+ ///
+ /// 更新组织机构
+ ///
+ ///
+ ///
+ public async Task UpdateOrg(UpdateOrgInput input)
+ {
+ if (input.Pid != Guid.Empty.ToString() && !string.IsNullOrEmpty(input.Pid) && input.Pid != "0")
+ {
+ var org = await _db.Queryable().FirstAsync(u => u.Id == input.Pid);
+ _ = org ?? throw Oops.Oh("父机构不存在");
+ }
+
+ if (!string.IsNullOrEmpty(input.Tel))
+ {
+ var tel = Regex.IsMatch(input.Tel, "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$");
+ if (tel == false) throw Oops.Oh("手机号错误");
+ }
+
+ if (input.Id == input.Pid)
+ throw Oops.Oh("当前机构Id不能与父机构Id相同");
+
+ // 如果是编辑,父id不能为自己的子节点
+ var childIdListById = await GetChildIdListWithSelfById(input.Id);
+ if (childIdListById.Contains(input.Pid))
+ throw Oops.Oh("当前机构Id不能与父机构Id相同");
+
+ var sysOrg = await _db.Queryable().FirstAsync(u => u.Id == input.Id);
+ sysOrg.Name=input.Name;
+ sysOrg.Tel = input.Tel;
+ sysOrg.Remark = input.Remark;
+ sysOrg.Sort= input.Sort;
+ await FillPids(sysOrg);
+ return await _db.Updateable(sysOrg).IgnoreColumns(ignoreAllNullColumns: true)
+ .ExecuteCommandAsync()>0;
+
+ }
+ ///
+ /// 获取组织机构树
+ ///
+ ///
+ public async Task GetOrgTree()
+ {
+ var dataScopeList = new List();
+
+ var orgs = await _db.Queryable().WhereIF(dataScopeList.Count > 0, u => dataScopeList.Contains(u.Id))
+ .Where(u => u.Status == CommonStatus.ENABLE).OrderBy(u => u.Sort)
+ .Select(u => new OrgTreeNode
+ {
+ key = u.Id,
+ parentId = u.PID,
+ title = u.Name,
+ value = u.Id.ToString(),
+ weight = u.Sort,
+ Type = u.Type,
+ }).ToListAsync();
+
+ return new TreeBuildUtil().Build(orgs);
+
+ }
+ ///
+ /// 填充父Ids字段
+ ///
+ ///
+ ///
+ private async Task FillPids(BPA_Organize sysOrg)
+ {
+ if (string.IsNullOrWhiteSpace(sysOrg.PID) || sysOrg.PID == "0")
+ {
+ sysOrg.Pids = "[0],";
+ sysOrg.PID = "0";
+ }
+ else
+ {
+ var t = await _db.Queryable().FirstAsync(u => u.Id == sysOrg.PID);
+ sysOrg.Pids = t.Pids + "[" + t.Id + "],";
+ }
+ }
+ ///
+ /// 根据节点Id获取所有子节点Id集合,包含自己
+ ///
+ ///
+ ///
+ private async Task> GetChildIdListWithSelfById(string id)
+ {
+ var childIdList = await _db.Queryable()
+ .Where(u => u.Pids.Contains(id.ToString()))
+ .Select(u => u.Id).ToListAsync();
+ childIdList.Add(id);
+ return childIdList;
+ }
+ }
+}
diff --git a/BPA.SAAS.Manage.Application/Org/Services/RoleService.cs b/BPA.SAAS.Manage.Application/Org/Services/RoleService.cs
index e4a6891..f73eb3a 100644
--- a/BPA.SAAS.Manage.Application/Org/Services/RoleService.cs
+++ b/BPA.SAAS.Manage.Application/Org/Services/RoleService.cs
@@ -48,6 +48,11 @@ namespace BPA.SAAS.Manage.Application.Org.Services
};
return util;
}
+ ///
+ /// 添加
+ ///
+ ///
+ ///
public async Task Add(RoleDtoInput input)
{
@@ -64,6 +69,59 @@ namespace BPA.SAAS.Manage.Application.Org.Services
return await _db.Insertable(role).CallEntityMethod(t => t.Create()).ExecuteCommandAsync() > 0;
}
///
+ /// 修改
+ ///
+ ///
+ ///
+ public async Task Update(RoleDtoInput input)
+ {
+ var BPA_Roles = await _db.Queryable().Where(a => a.Code == input.Code).FirstAsync();
+ var code = BPA_Roles.Code;
+ if (code != input.Code)
+ {
+ throw Oops.Oh("角色编码不能进行修改");
+ }
+ var Roles = await _db.Queryable().Where(a => a.Id == input.Id).FirstAsync();
+ Roles.Name= input.Name;
+ Roles.Code= input.Code;
+ Roles.Remark= input.Remark;
+ Roles.Sort = input.Sort;
+ return _db.Updateable(Roles).ExecuteCommandHasChange();
+
+ }
+ ///
+ /// 删除
+ ///
+ ///
+ ///
+ public async Task Delete(List input)
+ {
+ try
+ {
+ _db.Ado.BeginTran();
+ // 查询数据库中是否存在未删除的活动信息
+ var resEntitites = _db.Queryable().In(input).ToList();
+ var ids = resEntitites.Select(a => a.Id).ToArray();
+ //校验用户
+ var dara = _db.Queryable().Where(x => ids.Contains(x.SysRoleId)).ToList();
+ if (dara.Count() <= 0)
+ {
+ var res =await _db.Deleteable(resEntitites).ExecuteCommandAsync();
+ _db.Ado.CommitTran();
+ return res > 0;
+ }
+ else
+ {
+ throw Oops.Oh("删除失败, 请检查用户是否关联该角色");
+ }
+ }
+ catch (Exception)
+ {
+ _db.Ado.RollbackTran();
+ throw Oops.Oh("删除失败");
+ }
+ }
+ ///
/// 根据角色查询角色菜单
///
///
diff --git a/BPA.SAAS.Manage.Comm/Util/ITreeNode.cs b/BPA.SAAS.Manage.Comm/Util/ITreeNode.cs
new file mode 100644
index 0000000..937f1f1
--- /dev/null
+++ b/BPA.SAAS.Manage.Comm/Util/ITreeNode.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BPA.SAAS.Manage.Comm.Util
+{
+ ///
+ /// 树基类
+ ///
+ public interface ITreeNode
+ {
+ ///
+ /// 获取节点id
+ ///
+ ///
+ string GetId();
+
+ ///
+ /// 获取节点父id
+ ///
+ ///
+ string GetPid();
+
+ ///
+ /// 设置Children
+ ///
+ ///
+ void SetChildren(IList children);
+ }
+ ///
+ /// 递归工具类,用于遍历有父子关系的节点,例如菜单树,字典树等等
+ ///
+ ///
+ public class TreeBuildUtil where T : ITreeNode
+ {
+ ///
+ /// 顶级节点的父节点Id(默认00000000-0000-0000-0000-000000000000)
+ ///
+ private readonly string _rootParentId = "0";
+
+ ///
+ /// 构造树节点
+ ///
+ ///
+ ///
+ public List Build(List nodes)
+ {
+ nodes.ForEach(u => BuildChildNodes(nodes, u, new List()));
+
+ var result = new List();
+ nodes.ForEach(u =>
+ {
+ if (_rootParentId == u.GetPid())
+ result.Add(u);
+ });
+ return result;
+ }
+
+ ///
+ /// 构造子节点集合
+ ///
+ ///
+ ///
+ ///
+ private void BuildChildNodes(List totalNodes, T node, List childNodeList)
+ {
+ var nodeSubList = new List();
+ totalNodes.ForEach(u =>
+ {
+ if (u.GetPid().Equals(node.GetId()))
+ nodeSubList.Add(u);
+ });
+ nodeSubList.ForEach(u => BuildChildNodes(totalNodes, u, new List()));
+ childNodeList.AddRange(nodeSubList);
+ node.SetChildren(childNodeList);
+ }
+ }
+}