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
}
}