using System; using System.Collections.Generic; using System.Threading.Tasks; using EasyCaching.Core; using IRaCIS.Api.Filter; using IRaCIS.Application; using IRaCIS.Application.Interfaces; using IRaCIS.Application.ViewModels; using IRaCIS.Core.API.Auth; using IRaCIS.Core.Application.Contracts.RequestAndResponse; using IRaCIS.Core.Domain.Share; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace IRaCIS.Api.Controllers { [Authorize] [Route("sysUser")] [ApiController, ApiExplorerSettings(GroupName = "Management")] public class UserController : ControllerBase { private readonly IUserService _userService; private readonly ITokenService _tokenService; public UserController(IUserService userService, ITokenService tokenService) { _userService = userService; _tokenService = tokenService; } /// /// 通过邮箱或者手机 发送验证码 /// /// /// /// /// [HttpGet, Route("sendVerificationCode/{emailOrPhone}/{verificationType:int}/{isReviewer:bool}")] [AllowAnonymous] public async Task SendVerificationCode(string emailOrPhone, int verificationType, bool isReviewer) { return await _userService.SendVerificationCode(emailOrPhone, verificationType, isReviewer); } /// /// 通过验证码设置新密码 /// /// /// [AllowAnonymous] [HttpPost, Route("setNewPassword")] public IResponseOutput SetNewPassword(ResetPasswordCommand resetPwdModel) { return _userService.SetNewPassword(resetPwdModel.EmailOrPhone, resetPwdModel.VerificationType, resetPwdModel.VerificationCode, resetPwdModel.NewPwd, resetPwdModel.IsReviewer); } /// 系统用户登录接口[New] [HttpPost, Route("login")] [AllowAnonymous] [LogFilter] public IResponseOutput Login(UserLoginDTO loginUser, [FromServices]IEasyCachingProvider provider) { var returnModel = _userService.Login(loginUser.UserName, loginUser.Password); if (returnModel.IsSuccess) { returnModel.Data.JWTStr = _tokenService.GetToken(UserClaims.Create(returnModel.Data.BasicInfo)); } var userId = returnModel.Data.BasicInfo.Id.ToString(); provider.Set(userId, userId, TimeSpan.FromMinutes(SystemConfig.LoginExpiredTimeSpan)); return returnModel; } /// 签名认证[New] [HttpGet, Route("VerifySignature/{userName}/{password}")] [AllowAnonymous] [LogFilter] public IResponseOutput VerifySignature(string userName, string password) { var returnModel = _userService.VerifySignature(userName, password); return returnModel; //return ResponseOutput.Result(returnModel.IsSuccess); } /// 分页获取用户列表[New] [HttpPost, Route("getUserList")] [Authorize] public IResponseOutput> GetUserList(UserListQueryDTO param) { return ResponseOutput.Ok(_userService.GetUserList(param)); } /// 更新用户状态(1 可用 0 禁用)[New] [Authorize] [LogFilter] [HttpPost, Route("updateUserState/{userId:guid}/{state:int}")] public IResponseOutput UpdateUserState(Guid userId, int state) { return _userService.UpdateUserState(userId, state); } /// 修改密码,当前支持旧密码修改密码,手机及邮箱验证码后续支持[New] [HttpPost, Route("modifyPassword")] [Authorize] [LogFilter] public IResponseOutput ModifyPassword(EditPasswordCommand editPwModel) { return _userService.ModifyPassword(editPwModel); } /// 根据用户Id,获取用户角色列表和当前登录用户的最大权限级别[New][AUTH] [HttpGet, Route("getUserRoles/{userId:guid}")] [Authorize] public IResponseOutput GetUserRolesById(Guid userId) { var optUserId = User.FindFirst("id").Value; return ResponseOutput.Ok(new UserRoleInfoDTO() { RoleList = _userService.GetUserRolesById(userId), MaxPrivilegeLevel = _userService.GetUserRoleMaxPrivilegeLevel(Guid.Parse(optUserId)) }); } /// 添加用户[New][AUTH] [HttpPost, Route("addUser")] public IResponseOutput AddUser(UserCommand userAddModel) { var userId = User.FindFirst("id").Value; return _userService.AddUser(userAddModel, Guid.Parse(userId)); } /// 更新用户信息[New][AUTH] [HttpPost, Route("updateUser")] [LogFilter] public IResponseOutput UpdateUser(UserCommand userUpdateModel) { var userId = User.FindFirst("id").Value; return _userService.UpdateUser(userUpdateModel, Guid.Parse(userId)); } /// 根据用户Id获取用户详细信息[New] [HttpGet, Route("getUser/{userId:guid}")] public IResponseOutput GetUserById(Guid userId) { return ResponseOutput.Ok(_userService.GetUserById(userId)); } /// 获取所有用户列表 [HttpGet, Route("getAllUser")] public IResponseOutput> GetAllUser() { return ResponseOutput.Ok(_userService.GetAllUser()); } ///// 获取当前用户是否有复审权限和编辑权限[New][AUTH] //[HttpGet, Route("getUserResumePermission/{reviewerId:guid}")] //public IResponseOutput GetUserResumePermission(Guid reviewerId) //{ // var userId = User.FindFirst("id").Value; // return ResponseOutput.Ok(_userService.GetUserResumePermission(reviewerId, Guid.Parse(userId))) ; //} /// 后台重置密码为123456[New] [HttpGet, Route("resetPassword/{userId:guid}")] [LogFilter] public IResponseOutput ResetPassword(Guid userId) { return _userService.ResetPassword(userId); } } }