namespace MiaoYu.Api.Admin.ApplicationServices.Systems;
///
/// 系统账号服务
///
public class SysUserService : ApplicationService>, IAopServiceProvider
{
public IServiceProvider ServiceProvider { get; set; }
[Autowired]
private IRepository _sysUserRoleRepository { get; }
[Autowired]
private IRepository _sysRoleRepository { get; }
[Autowired]
private IRepository _sysUserPostRepository { get; }
[Autowired]
private IRepository _sysPostRepository { get; }
[Autowired]
private IAccountService _accountService { get; }
[Autowired]
private SysMenuService _sysMenuService { get; }
[Autowired]
private IRepository _sysOrganizationRepository { get; }
[Autowired]
private IPermissionService _permissionService { get; }
public SysUserService(IServiceProvider serviceProvider, IRepository defaultRepository) : base(defaultRepository)
{
this.ServiceProvider = serviceProvider;
}
//public SysUserService(IRepository defaultRepository,
// IRepository sysUserRoleRepository,
// IRepository sysRoleRepository,
// IRepository sysUserPostRepository,
// IRepository sysPostRepository,
// IAccountService accountService,
// SysMenuService sysMenuService,
// IRepository sysOrganizationRepository,
// IPermissionService permissionService) : base(defaultRepository)
//{
// _sysUserRoleRepository = sysUserRoleRepository;
// _sysRoleRepository = sysRoleRepository;
// _sysUserPostRepository = sysUserPostRepository;
// _sysPostRepository = sysPostRepository;
// _accountService = accountService;
// _sysMenuService = sysMenuService;
// _sysOrganizationRepository = sysOrganizationRepository;
// _permissionService = permissionService;
//}
///
/// 获取列表数据
///
///
///
public async Task FindListAsync(PagingSearchInput pagingSearchInput)
{
var accountInfo = _accountService.GetAccountContext();
//被数据权限处理的 query 对象
var querySysUser = _defaultRepository
.DataPermission(_defaultRepository.Select, accountInfo, w => w.Id, w => w.OrganizationId)
;
var query = (from sysUser in querySysUser
from sysOrganization in _sysOrganizationRepository.Select.Where(w => w.Id == sysUser.OrganizationId).DefaultIfEmpty()
select new
{
t1 = sysUser,
t2 = sysOrganization,
所属角色 = string.Join(",", from userRole in _sysUserRoleRepository.Select
join role in _sysRoleRepository.Select on userRole.RoleId equals role.Id
where userRole.UserId == sysUser.Id
select role.Name)
})
.WhereIf(pagingSearchInput.Search.OrganizationId != null, w => w.t1.OrganizationId == pagingSearchInput.Search.OrganizationId)
.WhereIf(!string.IsNullOrWhiteSpace(pagingSearchInput.Search?.Name), w => w.t1.Name.Contains(pagingSearchInput.Search.Name))
.WhereIf(!string.IsNullOrWhiteSpace(pagingSearchInput.Search?.LoginName), w => w.t1.LoginName.Contains(pagingSearchInput.Search.LoginName))
.OrderBy(w => w.t1.OrganizationId)
.ThenByDescending(w => w.t1.CreationTime)
.Select(w => new
{
w.t1.Name,
w.t1.LoginName,
w.所属角色,
OrganizationName = w.t2.Name,
w.t1.Phone,
_Email = w.t1.Email,
w.t1.LastModificationTime,
w.t1.CreationTime,
w.t1.Id,
})
;
var result = await _defaultRepository.AsPagingViewAsync(query, pagingSearchInput);
//覆盖值
result
.FormatValue(query, w => w.CreationTime, (oldValue) => oldValue.ToString("yyyy-MM-dd"))
.FormatValue(query, w => w.LastModificationTime, (oldValue) => oldValue?.ToString("yyyy-MM-dd"))
;
result.GetColumn(query, w => w.OrganizationName!).SetColumn("所属组织");
result.GetColumn(query, w => w.所属角色!).SetColumn("所属角色", sort: false);
return result;
}
///
/// 根据id数组删除
///
///
///
public async Task DeleteListAsync(List ids)
{
foreach (var item in ids)
{
var userModel = await _defaultRepository.FindByIdAsync(item);
if (userModel.DeleteLock) MessageBox.Show("该信息已被锁定不能删除!");
await _sysUserRoleRepository.DeleteAsync(w => w.UserId == item);
await _defaultRepository.DeleteAsync(userModel);
//清除缓存
_accountService.DeleteCacheAccountContextById(item.ToString());
}
}
///
/// 查询表单数据
///
///
///
public virtual async Task> FindFormAsync(Guid id)
{
var res = new Dictionary();
var form = (await _defaultRepository.FindByIdAsync(id)).NullSafe();
//角色信息
var roleIds = await _sysUserRoleRepository.Select
.Where(w => w.UserId == id)
.Select(w => w.RoleId)
.ToListAsync();
var allRoleList = await _sysRoleRepository.Select.ToListAsync();
//岗位信息
var postIds = await _sysUserPostRepository.Select
.Where(w => w.UserId == id)
.Select(w => w.PostId)
.ToListAsync()
;
var allPostList = await _sysPostRepository.Select.OrderBy(w => w.Number).ToListAsync();
res[nameof(id)] = id == Guid.Empty ? "" : id;
res[nameof(form)] = form;
res[nameof(roleIds)] = roleIds;
res[nameof(allRoleList)] = allRoleList;
//
res[nameof(postIds)] = postIds;
res[nameof(allPostList)] = allPostList;
return res;
}
///
/// 保存数据
///
///
///
[Transactional]
public virtual async Task SaveFormAsync(SysUserFormDto form)
{
var model = form.Form;
//if (string.IsNullOrWhiteSpace(model.Password))
// MessageBox.Show("密码不能为空!");
if (model.Id == Guid.Empty)
{
model.Password = string.IsNullOrWhiteSpace(model.Password) ? Tools.Md5Encrypt("123qwe") : Tools.Md5Encrypt(model.Password);
}
else
{
if (string.IsNullOrWhiteSpace(model.Password))
{
var user = await _defaultRepository.FindByIdAsync(model.Id);
model.Password = user.Password;
}
else
{
model.Password = Tools.Md5Encrypt(model.Password);
}
}
if (await _defaultRepository.AnyAsync(w => w.LoginName == model.LoginName && w.Id != model.Id))
{
MessageBox.Show("登录账号名称已存在!");
}
await _defaultRepository.InsertOrUpdateAsync(form.Form);
//变更用户角色
if (form.RoleIds.Count > 0)
{
var sysUserRoles = await _sysUserRoleRepository.Select
.Where(w => w.UserId == model.Id)
.ToListAsync();
await _sysUserRoleRepository.DeleteAsync(w => w.UserId == model.Id);
foreach (var item in form.RoleIds)
{
var sysUserRole = sysUserRoles.FirstOrDefault(w => w.RoleId == item).NullSafe();
sysUserRole.Id = Guid.NewGuid();
sysUserRole.RoleId = item;
sysUserRole.UserId = model.Id;
await _sysUserRoleRepository.InsertAsync(sysUserRole);
}
}
//处理岗位信息
if (form.PostIds.Count > 0)
{
var sysUserPosts = await _sysUserPostRepository.Select
.Where(w => w.UserId == model.Id)
.ToListAsync()
;
await _sysUserPostRepository.DeleteAsync(w => w.UserId == model.Id);
foreach (var item in form.PostIds)
{
var sysUserPost = sysUserPosts.FirstOrDefault(w => w.PostId == item).NullSafe();
sysUserPost.Id = Guid.NewGuid();
sysUserPost.PostId = item;
sysUserPost.UserId = model.Id;
await _sysUserPostRepository.InsertAsync(sysUserPost);
}
}
//清除缓存
_accountService.DeleteCacheAccountContextById(model.Id.ToString());
}
///
/// 导出Excel
///
///
///
public async Task ExportExcelAsync(PagingSearchInput pagingSearchInput)
{
pagingSearchInput.Page = -1;
var tableViewModel = await FindListAsync(pagingSearchInput);
return ExcelUtil.ExportExcelByPagingView(tableViewModel, null, "Id");
}
///
/// 获取当前用户信息
///
///
public async Task GetUserInfoAsync()
{
var userInfo = _accountService.GetAccountContext();
var sysMenus = await _sysMenuService.GetMenusByCurrentRoleAsync();
//设置菜单 Map
var sysMenusMap = _sysMenuService.CreateMenus(sysMenus);
userInfo.Menus = sysMenusMap;
//设置菜单权限
userInfo.MenuPowers = await _permissionService.GetPowerByMenusAsync(sysMenus);
return userInfo;
}
}