using Admin.Core.Model; using Admin.Core.Common.Resource; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; using Admin.Core.Common; using System.Linq; using AutoMapper; using Admin.Core.IService.ISys; using Admin.Core.Model.Sys; namespace Admin.Core.Api { /// <summary> /// SysDeptController /// </summary> [Route("api/[controller]/[action]")] [ApiController] [Authorize(Permissions.Name)] public class SysDeptController : BaseApiUserController { /// <summary> /// _sysDeptService /// </summary> private readonly ISysDeptService _sysDeptService; private readonly ISysRoleDeptService _sysRoleDeptService; private readonly IMapper _mapper; /// <summary> /// 构造方法 /// </summary> /// <param name="SysDeptService"></param> /// <param name="sysRoleDeptService"></param> /// <param name="sysUserService"></param> /// <param name="mapper"></param> public SysDeptController(ISysDeptService SysDeptService, ISysRoleDeptService sysRoleDeptService, ISysUserService sysUserService, IMapper mapper) : base(sysUserService) { _sysUserService = sysUserService; _sysDeptService = SysDeptService; _sysRoleDeptService = sysRoleDeptService; _mapper = mapper; } /// <summary> /// 分页查询 /// </summary> /// <param name="pageQuery"></param> /// <returns></returns> [HttpPost] public async Task<MessageModel<PageModel<DeptView>>> GetByPage([FromBody] PageQuery<SysDept> pageQuery) { if (!pageQuery.Query.IsNotEmptyOrNull()) { pageQuery.Query = new SysDept(); } var model = await _sysDeptService.SelectDeptList(pageQuery); return SuccessPage(model); } /// <summary> /// 查询所有部门信息 /// </summary> /// <returns></returns> [HttpGet] public async Task<MessageModel<List<SysDept>>> GetAll() { return Success(await _sysDeptService.QueryAsync()); } /// <summary> /// 根据ID查询 /// </summary> /// <param name="id">主键</param> /// <returns></returns> [HttpGet] public async Task<MessageModel<SysDept>> GetByID(int id) { return new MessageModel<SysDept>() { msg = Resource_SysBase.OprateSuccess, success = true, data = await _sysDeptService.QueryByIdAsync(id) }; } /// <summary> /// 新增一条数据 /// </summary> /// <param name="request">SysDept</param> /// <returns></returns> [HttpPost] public async Task<MessageModel<int>> Add([FromBody] SysDept request) { var data = new MessageModel<int>(); if (!await _sysDeptService.CheckDeptNameUnique(request)) { data.success = false; data.msg = "部门名称已存在!"; return data; } request.CreateBy = CurrentUser.LoginName; request.UpdateBy = CurrentUser.LoginName; data.data = await _sysDeptService.InsertDept(request); if (data.data > 0) { data.success = true; data.msg = Resource_SysBase.OprateSuccess; } else { data.success = false; data.msg = Resource_SysBase.OprateFail; } return data; } /// <summary> /// 更新一条数据 /// </summary> /// <param name="request">SysDept</param> /// <returns></returns> [HttpPost] public async Task<MessageModel<bool>> Update([FromBody] SysDept request) { var data = new MessageModel<bool>(); if (!await _sysDeptService.CheckDeptNameUnique(request)) { data.success = false; data.msg = "部门名称已存在!"; return data; } else if (request.ParentID == request.DeptID) { data.success = false; data.msg = "上级部门不能是自己!"; return data; } else if (request.Status == SysConst.DISABLE) { //禁用部门需先禁用所有子部门 var existChildren = await _sysDeptService.SelectNormalChildrenDeptById(request.DeptID); if (existChildren > 0) { data.success = false; data.msg = "该部门包含未停用的子部门!"; return data; } } data.success = await _sysDeptService.UpdateDept(request); if (data.success) { data.msg = Resource_SysBase.OprateSuccess; } else { data.msg = Resource_SysBase.OprateFail; } return data; } /// <summary> /// 删除一条数据 /// </summary> /// <param name="id">主键</param> /// <returns></returns> [HttpPost] public async Task<MessageModel<bool>> Del(int id) { var data = new MessageModel<bool>(); if (await _sysDeptService.HasChildByDeptId(id)) { data.success = false; data.msg = "存在下级部门,不允许删除!"; return data; } if (await _sysDeptService.CheckDeptExistUser(id)) { data.success = false; data.msg = "部门存在用户,不允许删除!"; return data; } data.success = await _sysDeptService.DeleteDeptById(id, CurrentUser.LoginName); if (data.success) { data.msg = Resource_SysBase.OprateSuccess; } else { data.msg = Resource_SysBase.OprateFail; } return data; } /// <summary> /// 查询部门列表(排除节点) /// </summary> [HttpGet] public async Task<MessageModel<List<TreeSelect>>> ExcludeChild(int deptId) { var detptList = new List<SysDept>(); var depts = await _sysDeptService.SelectDeptAll(); foreach (var item in depts) { if (item.DeptID != deptId && item.Ancestors.IsNotEmptyOrNull() && !item.Ancestors.Split(",").Contains(deptId.ToString())) { detptList.Add(item); } } return Success(_sysDeptService.BuildDeptTreeSelect(detptList)); } /// <summary> /// 获取部门下拉树列表 /// </summary> [HttpGet] public async Task<MessageModel<List<TreeSelect>>> TreeSelect() { var depts = await _sysDeptService.SelectDeptAll(); return Success(_sysDeptService.BuildDeptTreeSelect(depts)); } /// <summary> /// 获取部门下拉树列表 /// </summary> [HttpGet] public async Task<MessageModel<List<TreeSelect>>> TreeSelectByPid(int id) { var depts = await _sysDeptService.QueryAsync(x => x.DelFlag == false && x.Status == SysConst.ENABLE && x.ParentID == id); return Success(_sysDeptService.BuildDeptTreeSelect(depts)); } /// <summary> /// 加载对应角色部门列表树 /// </summary> [HttpGet] public async Task<MessageModel<TreeNode>> RoleDeptTreeSelect(int roleId) { var depts = await _sysDeptService.SelectDeptAll(); var roleDepts = await _sysRoleDeptService.QueryAsync(x => x.RoleID == roleId); TreeNode tree = new TreeNode() { CheckedKeys = roleDepts.Select(x => (int)x.DeptID).ToList(), TreeSelects = _sysDeptService.BuildDeptTreeSelect(depts) }; return Success(tree); } } }