using Hotline.Permissions; using Hotline.Repository.SqlSugar.System; using Hotline.Settings; using Hotline.Share.Dtos; using Hotline.Share.Dtos.Dic; using Hotline.Share.Dtos.Menu; using Hotline.Share.Dtos.Trunk; using Hotline.Share.Requests; using MapsterMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Diagnostics.CodeAnalysis; using XF.Domain.Exceptions; using XF.Utility.UnifyResponse; namespace Hotline.Api.Controllers { /// /// 系统管理相关接口 /// public class SysController : BaseController { private readonly IMapper _mapper; private readonly ISystemSettingRepository _systemSettingsRepository; private readonly ISystemSettingGroupRepository _systemSettingGroupRepository; private readonly ISystemMenuRepository _systemMenuRepository; private readonly ISystemButtonRepository _systemButtonRepository; private readonly ISysDicTypeRepository _sysDicTypeRepository; private readonly ISysDicDataRepository _sysDicDataRepository; /// /// 系统管理相关接口 /// /// /// /// /// /// /// /// public SysController( IMapper mapper, ISystemSettingRepository systemSettingsRepository, ISystemSettingGroupRepository systemSettingGroupRepository, ISystemMenuRepository systemMenuRepository, ISystemButtonRepository systemButtonRepository, ISysDicTypeRepository sysDicTypeRepository, ISysDicDataRepository sysDicDataRepository) { _mapper = mapper; _systemSettingsRepository = systemSettingsRepository; _systemSettingGroupRepository = systemSettingGroupRepository; _systemMenuRepository = systemMenuRepository; _systemButtonRepository = systemButtonRepository; _sysDicTypeRepository = sysDicTypeRepository; _sysDicDataRepository = sysDicDataRepository; } #region 系统参数 /// /// 获取系统参数列表 /// /// [Permission(EPermission.GetSysSettingsAsync)] [HttpGet("getsyssettings")] public async Task> GetSysSettingsAsync() { return await _systemSettingGroupRepository.QueryExtAsync(x => true, x => x.Includes(d => d.SystemSettings)); } /// /// 更新配置 /// /// /// /// [Permission(EPermission.ModifySettings)] [HttpPost("modifysettings")] public async Task ModifySettings([FromBody] ModifySettingsRequest request) { for (int i = 0; i < request.list.Count; i++) { var model = await _systemSettingsRepository.GetAsync(x => x.Id == request.list[i].id, HttpContext.RequestAborted); if (model != null) { model.SettingValue = request.list[i].value; await _systemSettingsRepository.UpdateAsync(model, HttpContext.RequestAborted); } } } #endregion #region 菜单管理 /// /// 获取菜单 /// /// //[Permission(EPermission.GetMenuJson)] [AllowAnonymous] [HttpGet("getmenujson")] public async Task> GetMenuJson() { //获取菜单树形 return await _systemMenuRepository.GetSystemMenus(); } /// /// 新增菜单 /// /// /// [Permission(EPermission.AddMenu)] [HttpPost("add-menu")] public async Task AddMenu([FromBody] AddMenuDto dto) { var menu = _mapper.Map(dto); await _systemMenuRepository.AddAsync(menu,HttpContext.RequestAborted); } /// /// 修改菜单 /// /// /// [Permission(EPermission.UpdateMenu)] [HttpPost("update-menu")] public async Task UpdateMenu([FromBody] UpdateMenuDto dto) { var menu = await _systemMenuRepository.GetAsync(dto.Id, HttpContext.RequestAborted); if (menu is null) throw UserFriendlyException.SameMessage("无效菜单"); _mapper.Map(dto, menu); await _systemMenuRepository.UpdateAsync(menu, HttpContext.RequestAborted); } /// /// 删除菜单 /// /// /// [Permission(EPermission.RemoveMenu)] [HttpDelete("removemenu/{id}")] public async Task RemoveMenu(string id) { var menu = await _systemMenuRepository.GetAsync(id, HttpContext.RequestAborted); if (menu is null) throw UserFriendlyException.SameMessage("无效菜单"); //检查是否存在下级菜单 var ishavemenu = await _systemMenuRepository.AnyAsync(x => x.ParentId == id); if (ishavemenu) throw UserFriendlyException.SameMessage("存在下级菜单,暂时不能删除"); //检查是否存在按钮 var ishavebutton = await _systemButtonRepository.AnyAsync(x => x.MenuId == id); if (ishavebutton) throw UserFriendlyException.SameMessage("存在按钮权限,暂时不能删除"); await _systemMenuRepository.RemoveAsync(id, false, HttpContext.RequestAborted); } /// /// 获取菜单对象 /// /// /// [Permission(EPermission.GetMenu)] [HttpGet("menu/{id}")] public async Task GetMenu(string id) { var menu = await _systemMenuRepository.GetAsync(id, HttpContext.RequestAborted); if (menu is null) throw UserFriendlyException.SameMessage("无效菜单"); return menu; } #region 按钮管理 /// /// 通过菜单ID获取按钮列表 /// /// /// [Permission(EPermission.GetButtonByMenu)] [HttpGet("getbuttonmenu")] public async Task> GetButtonByMenu(string menuid) { return await _systemButtonRepository.QueryAsync(x => x.MenuId == menuid); } /// /// 新增按钮 /// /// /// [Permission(EPermission.AddButton)] [HttpPost("add-button")] public async Task AddButton([FromBody] AddButtonDto dto) { var button = _mapper.Map(dto); await _systemButtonRepository.AddAsync(button); } /// /// 编辑按钮 /// /// /// [Permission(EPermission.UpdateButton)] [HttpPost("update-button")] public async Task UpdateButton([FromBody] UpdateButtonDto dto) { var button = await _systemButtonRepository.GetAsync(dto.Id, HttpContext.RequestAborted); if (button is null) throw UserFriendlyException.SameMessage("无效按钮"); _mapper.Map(dto, button); await _systemButtonRepository.UpdateAsync(button); } /// /// 删除按钮 /// /// /// [Permission(EPermission.RemoveButton)] [HttpDelete("removebutton/{id}")] public async Task RemoveButton(string id) { var button = await _systemButtonRepository.GetAsync(id, HttpContext.RequestAborted); if (button is null) throw UserFriendlyException.SameMessage("无效按钮"); await _systemButtonRepository.RemoveAsync(id, false, HttpContext.RequestAborted); } /// /// 获取按钮对象 /// /// /// [Permission(EPermission.GetButton)] [HttpGet("button/{id}")] public async Task GetButton(string id) { var button = await _systemButtonRepository.GetAsync(id, HttpContext.RequestAborted); if (button is null) throw UserFriendlyException.SameMessage("无效按钮"); return button; } #endregion #endregion #region 字典管理 /// /// 获取字典类型列表 /// /// [Permission(EPermission.GetSysDicType)] [HttpPost("dictype-list")] public async Task> GetSysDicType() { return await _sysDicTypeRepository.Queryable().ToListAsync(); } /// /// 根据字典类型ID获取字典列表 /// /// /// [Permission(EPermission.GetSysDicData)] [HttpGet("dictdata-type")] public async Task> GetSysDicData([FromQuery] GetSysDicDataDto dto) { return await _sysDicDataRepository.Queryable().Where(x => x.DicTypeId == dto.typeid).WhereIF(!string.IsNullOrEmpty(dto.datavalue),x=>x.DicDataValue.Contains(dto.datavalue)).ToTreeAsync(x=>x.Children,x=>x.ParentId,""); } /// /// 根据字典类型Code获取字典列表 /// /// /// [HttpGet("dictdata-code/{code}")] public async Task> GetSysDicDataByCode(string code) { return await _sysDicDataRepository.Queryable().Where(x => x.DicTypeCode == code).ToListAsync(); } /// /// 获取字典对象 /// /// /// [Permission(EPermission.SysDicDataModel)] [HttpGet("dicdata/{id}")] public async Task SysDicDataModel(string id) { var dicData = await _sysDicDataRepository.GetAsync(id, HttpContext.RequestAborted); if (dicData is null) throw UserFriendlyException.SameMessage("无效数据"); return dicData; } /// /// 新增字典数据 /// /// /// [Permission(EPermission.AddDicData)] [HttpPost("add-dicdata")] public async Task AddDicData([FromBody] AddDicDataDto dto) { var dicType = await _sysDicTypeRepository.GetAsync(dto.DicTypeId, HttpContext.RequestAborted); if (dicType is null) throw UserFriendlyException.SameMessage("无效字典类型"); var dicData = _mapper.Map(dto); dicData.DicTypeCode = dicType.DicTypeCode; await _sysDicDataRepository.AddAsync(dicData); } /// /// 修改字典数据 /// /// /// [Permission(EPermission.UpdateDicData)] [HttpPost("update-dicdata")] public async Task UpdateDicData([FromBody]UpdateDicDataDto dto) { var dicData = await _sysDicDataRepository.GetAsync(dto.Id, HttpContext.RequestAborted); if (dicData is null) throw UserFriendlyException.SameMessage("无效字典数据"); var dicType = await _sysDicTypeRepository.GetAsync(dto.DicTypeId, HttpContext.RequestAborted); if (dicType is null) throw UserFriendlyException.SameMessage("无效字典类型"); _mapper.Map(dto, dicData); dicData.DicTypeCode = dicType.DicTypeCode; await _sysDicDataRepository.UpdateAsync(dicData,HttpContext.RequestAborted); } #endregion } }