using Microsoft.AspNetCore.Mvc;
using QM.AuthServer.IRepository;
using QM.AuthServer.Models.Menus;
using QM.AuthServer.Models.Menus.Views;
using QM.AuthServer.Models.Roles;
using QM.AuthServer.Models.Users;
using QM.OrmSqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WS;
using WS.AutoMapper;
using WS.Orm;
using WS.Security;
using WS.Web.Auth;
using WS.WebCore.Api;
namespace QM.Gateway.Controllers
{
///
/// 用户
///
public class UserController : BaseApiController
{
private readonly ISysUserRepository _ISysUserRepository;
public UserController(
ISysUserRepository ISysUserRepository
)
{
_ISysUserRepository = ISysUserRepository;
}
#region 查询
///
/// 分页查询
///
/// 查询条件
///
[HttpGet]
public async Task GetPage([FromQuery] UserPageDto input)
{
var query = _ISysUserRepository.Query();
if (!string.IsNullOrWhiteSpace(input.key))
query.Where(t => t.uid.Contains(input.key) || t.name.Contains(input.key));
var page = await query.OrderBy(t => t.name).ToPageAsync(input.page, input.limit);
page.Data = (page.Data as List).MapTo();
return page;
}
///
/// 按编码获取
///
/// 用户编码
/// 返回菜单(-1不返回,0后台, 1前台)
///
[HttpGet]
public async Task GetById(string id, int menu = -1)
{
if (string.IsNullOrWhiteSpace(id))
id = AuthUser.Uid;
var user = _ISysUserRepository.Get(t => t.uid == id);
if (user == null)
throw new UseMassageException("未找到匹配的数据");
var info = user.MapTo();
//info.posts = _ISysUserRepository.DbClient().Queryable().Where(t => t.uid == id).Select(t => t.gid).ToList();
info.departments = _ISysUserRepository.DbClient().Queryable().Where(t => t.bid == user.bid).First().name;
//info.menus = (await _ISysUserRepository.GetUserMenu(new AuthoDto() { User = user.uid })).OrderBy(t => t.sort).OrderBy(t => t.lev).ToList().MapTo();
if(menu == 0 || menu == 1)
info.menus = (await _ISysUserRepository.GetUserMenu(user.uid, menu)).MapTo();
return info;
}
///
/// 获取所有用户
///
///
[HttpGet]
public async Task> GetAll()
{
var data = await _ISysUserRepository.GetListAsync(t => t.state == EnumState.Enable, new List>() {
new OrderByModel(){order= t=>t.name}
});
return data;
}
///
/// 获取当前用户
///
///
[HttpGet]
public async Task GetUser()
{
var user = (await _ISysUserRepository.GetAsync(t => t.uid == AuthUser.Uid)).MapTo();
user.menus = (await _ISysUserRepository.GetUserMenu(AuthUser.Uid)).MapTo();
return user;
}
#endregion
#region 添加或修改
///
/// 添加
///
///
[HttpPost]
public async Task Create(UserInputDto input)
{
try
{
_ISysUserRepository.BeginTran();
SysUser user = input.MapTo();
var exi = _ISysUserRepository.Get(t => t.name == user.name);
if (_ISysUserRepository.IsExist(t => t.uid == input.uid))
throw new UseArgumentException("登录账号已经存在");
user.cuser = AuthUser.Uid;
user.pwd = Md5Crypt.Encrypt(user.pwd);
//
_ISysUserRepository.DbClient().Insertable(input.posts.Split(',').Select(t => new SysUserPost()
{
uid = user.uid,
gid = t
}).ToList());
_ISysUserRepository.CommitTran();
await _ISysUserRepository.InsertAsync(user);
}
catch (Exception ex)
{
_ISysUserRepository.RollbackTran();
throw ex;
}
return true;
}
///
/// 修改
///
///
[HttpPost]
public async Task Update(UserInputDto input)
{
try
{
_ISysUserRepository.BeginTran();
SysUser user = input.MapTo();
var ouser = _ISysUserRepository.Get(t => t.uid == user.uid);
user.pwd = ouser.pwd;
await _ISysUserRepository.UpdateAsync(user);
//角色
_ISysUserRepository.DbClient().Deleteable(t => t.uid == user.uid);
_ISysUserRepository.DbClient().Insertable(input.posts.Split(',').Select(t => new SysUserPost()
{
uid = user.uid,
gid = t
}).ToList());
_ISysUserRepository.CommitTran();
}
catch (Exception ex)
{
_ISysUserRepository.RollbackTran();
throw ex;
}
return true;
}
#endregion
#region 删除
///
/// 删除
///
///
///
[HttpPost]
public async Task Delete(string id)
{
if (string.IsNullOrWhiteSpace(id))
throw new UseMassageException("参数不能为空");
try
{
await _ISysUserRepository.DeleteAsync(t => t.uid == id);
return true;
}
catch (Exception ex)
{
_ISysUserRepository.RollbackTran();
throw ex;
}
}
///
/// 批量删除
///
/// 编码集(逗号分割)
///
[HttpPost]
public async Task Deletes(string ids)
{
if (string.IsNullOrWhiteSpace(ids))
throw new UseMassageException("参数不能为空");
var idArray = ids.Split(',');
if (idArray.Contains(AuthUser.Uid))
throw new UseMassageException("不能自己删除自己");
var list = _ISysUserRepository.GetList(t => idArray.Contains(t.uid));
_ISysUserRepository.BeginTran();
try
{
foreach (var user in list)
{
user.is_delete = 0;
user.dtime = DateTime.Now;
user.duser = AuthUser.Uid;
await _ISysUserRepository.UpdateAsync(user);
}
_ISysUserRepository.CommitTran();
return true;
}
catch (Exception ex)
{
_ISysUserRepository.RollbackTran();
throw ex;
}
}
#endregion
#region 修改密码
/////
///// 修改密码
/////
/////
//[HttpPost]
//public async Task UpdatePwd(EditPwd input)
//{
// input.uid = AuthUser.Uid;
// if (string.IsNullOrWhiteSpace(input.uid) || string.IsNullOrWhiteSpace(input.opwd) || string.IsNullOrWhiteSpace(input.npwd))
// throw new UseArgumentException("参数不能为空,请重新输入");
// if (input.opwd == input.npwd)
// throw new UseArgumentException("新密码与旧密码相同");
// var entity = await _ISysUserRepository.GetAsync(t => t.uid == input.uid && t.state == EnumState.Enable && t.is_delete == EnumDelete.Normal);
// if (entity == null)
// throw new UseArgumentException("用户不存在或被禁用");
// if (entity.pwd != Md5Crypt.Encrypt(input.opwd))
// throw new UseArgumentException("原始密码错误,请确认后重新输入");
// entity.pwd = Md5Crypt.Encrypt(input.npwd);
// var res = await _ISysUserRepository.UpdateAsync(entity);
// return res;
//}
/////
///// 重置密码
/////
/////
//[HttpPost]
//public async Task ResPwd(EditPwd input)
//{
// if (AuthUser.Uid != "admin")
// throw new UseMassageException("您没有权限重置密码");
// if (string.IsNullOrWhiteSpace(input.uid) || string.IsNullOrWhiteSpace(input.npwd))
// throw new UseArgumentException("参数不能为空,请重新输入");
// var entity = await _ISysUserRepository.GetAsync(t => t.uid == input.uid && t.is_delete == EnumDelete.Normal);
// if (entity == null)
// throw new UseArgumentException("用户不存在或被删除");
// entity.pwd = Md5Crypt.Encrypt(input.npwd);
// var res = await _ISysUserRepository.UpdateAsync(entity);
// return res;
//}
#endregion
}
}