using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Myshipping.Core.Entity;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System;
using System.Threading.Tasks;
namespace Myshipping.Core.Service;
///
/// 系统应用服务
///
[ApiDescriptionSettings(Name = "App", Order = 100)]
public class SysAppService : ISysAppService, IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _sysAppRep; // 应用表仓储
private readonly ISysMenuService _sysMenuService;
public SysAppService(SqlSugarRepository sysAppRep,
ISysMenuService sysMenuService)
{
_sysAppRep = sysAppRep;
_sysMenuService = sysMenuService;
}
///
/// 获取用户应用相关信息
///
///
///
[NonAction]
public async Task GetLoginApps(long userId)
{
var apps = _sysAppRep.Where(u => u.Status == (int)CommonStatus.ENABLE);
if (!UserManager.IsSuperAdmin)
{
var appCodeList = await _sysMenuService.GetUserMenuAppCodeList(userId);
apps = apps.Where(u => appCodeList.Contains(u.Code));
}
var appList = await apps.OrderBy(u => u.Active, OrderByType.Desc).OrderBy(u => u.Sort).Select(u => new AppOutput
{
Code = u.Code,
Name = u.Name,
Active = u.Active
}).ToListAsync();
return appList;
}
///
/// 分页查询系统应用
///
///
///
[HttpGet("/sysApp/page")]
public async Task QueryAppPageList([FromQuery] AppInput input)
{
var apps = await _sysAppRep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), m => m.Name.Contains(input.Name.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Code), m => m.Name.Contains(input.Code))
.ToPagedListAsync(input.PageNo, input.PageSize);
return apps.XnPagedResult();
}
///
/// 增加系统应用
///
///
///
[HttpPost("/sysApp/add")]
public async Task AddApp(AddAppInput input)
{
var isExist = await _sysAppRep.AnyAsync(u => u.Name == input.Name || u.Code == input.Code);
if (isExist)
throw Oops.Oh(ErrorCode.D5000);
if (input.Active == YesOrNot.Y.ToString())
{
isExist = await _sysAppRep.AnyAsync(u => u.Active == input.Active);
if (isExist)
throw Oops.Oh(ErrorCode.D5001);
}
var app = input.Adapt();
await _sysAppRep.InsertAsync(app);
}
///
/// 删除系统应用
///
///
///
[HttpPost("/sysApp/delete")]
public async Task DeleteApp(DeleteAppInput input)
{
var app = await _sysAppRep.FirstOrDefaultAsync(u => u.Id == input.Id);
// 该应用下是否有状态为正常的菜单
var hasMenu = await _sysMenuService.HasMenu(app.Code);
if (hasMenu)
throw Oops.Oh(ErrorCode.D5002);
await _sysAppRep.DeleteAsync(app);
}
///
/// 更新系统应用
///
///
///
[HttpPost("/sysApp/edit")]
public async Task UpdateApp(UpdateAppInput input)
{
var isExist = await _sysAppRep.AnyAsync(u => (u.Name == input.Name || u.Code == input.Code) && u.Id != input.Id);
if (isExist)
throw Oops.Oh(ErrorCode.D5000);
if (input.Active == YesOrNot.Y.ToString())
{
isExist = await _sysAppRep.AnyAsync(u => u.Active == input.Active && u.Id!=input.Id);
if (isExist)
throw Oops.Oh(ErrorCode.D5001);
}
var app = input.Adapt();
await _sysAppRep.AsUpdateable(app).IgnoreColumns(it => new { it.Status }).ExecuteCommandAsync();
}
///
/// 获取系统应用
///
///
///
[HttpGet("/sysApp/detail")]
public async Task GetApp([FromQuery] QueryAppInput input)
{
return await _sysAppRep.FirstOrDefaultAsync(u => u.Id == input.Id);
}
///
/// 获取系统应用列表
///
///
///
[HttpGet("/sysApp/list")]
public async Task GetAppList([FromQuery] AppInput input)
{
return await _sysAppRep.Where(u => u.Status == (int)CommonStatus.ENABLE).ToListAsync();
}
///
/// 设为默认应用
///
///
///
[HttpPost("/sysApp/setAsDefault")]
public async Task SetAsDefault(SetDefaultAppInput input)
{
var apps = await _sysAppRep.Where(u => u.Status == (int)CommonStatus.ENABLE).ToListAsync();
apps.ForEach(u =>
{
if (u.Id == input.Id)
{
u.Active = YesOrNot.Y.ToString();
}
else {
u.Active = YesOrNot.N.ToString();
}
});
await _sysAppRep.UpdateAsync(apps);
}
///
/// 修改用户状态
///
///
///
[HttpPost("/sysApp/changeStatus")]
public async Task ChangeUserAppStatus(UpdateAppInput input)
{
if (!Enum.IsDefined(typeof(CommonStatus), input.Status))
throw Oops.Oh(ErrorCode.D3005);
var app = await _sysAppRep.FirstOrDefaultAsync(u => u.Id == input.Id);
app.Status = input.Status;
await _sysAppRep.UpdateAsync(app);
}
}