using Infrastructure;
using Infrastructure.Attribute;
using Infrastructure.Enums;
using Infrastructure.Model;
using Mapster;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using System;
using System.Threading.Tasks;
using ZR.Admin.WebApi.Extensions;
using ZR.Admin.WebApi.Filters;
using ZR.Model.System;
using ZR.Model.System.Dto;
using ZR.Service.System.IService;
namespace ZR.Admin.WebApi.Controllers.System
{
///
/// 个人中心
///
[Verify]
[Route("system/user/profile")]
public class SysProfileController : BaseController
{
private readonly ISysUserService UserService;
private readonly ISysRoleService RoleService;
private readonly ISysUserPostService UserPostService;
private readonly ISysDeptService DeptService;
private readonly ISysFileService FileService;
private IWebHostEnvironment hostEnvironment;
public SysProfileController(
ISysUserService userService,
ISysRoleService roleService,
ISysUserPostService postService,
ISysDeptService deptService,
ISysFileService sysFileService,
IWebHostEnvironment hostEnvironment)
{
UserService = userService;
RoleService = roleService;
UserPostService = postService;
DeptService = deptService;
FileService = sysFileService;
this.hostEnvironment = hostEnvironment;
}
///
/// 个人中心用户信息获取
///
///
[HttpGet]
public IActionResult Profile()
{
long userId = HttpContext.GetUId();
var user = UserService.SelectUserById(userId);
var roles = RoleService.SelectUserRoleNames(userId);
var postGroup = UserPostService.GetPostsStrByUserId(userId);
var deptInfo = DeptService.GetFirst(f => f.DeptId == user.DeptId);
user.DeptName = deptInfo?.DeptName ?? "-";
return SUCCESS(new { user, roles, postGroup }, TIME_FORMAT_FULL);
}
///
/// 修改用户
///
///
[HttpPut]
[ActionPermissionFilter(Permission = "common")]
[Log(Title = "修改信息", BusinessType = BusinessType.UPDATE)]
public IActionResult UpdateProfile([FromBody] SysUserDto userDto)
{
if (userDto == null)
{
throw new CustomException(ResultCode.PARAM_ERROR, "请求参数错误");
}
var user = userDto.Adapt().ToUpdate(HttpContext);
int result = UserService.ChangeUser(user);
return ToResponse(result);
}
///
/// 修改密码
///
///
[HttpPut("updatePwd")]
[ActionPermissionFilter(Permission = "common")]
[Log(Title = "修改密码", BusinessType = BusinessType.UPDATE)]
public IActionResult UpdatePwd(string oldPassword, string newPassword)
{
LoginUser loginUser = Framework.JwtUtil.GetLoginUser(HttpContext);
SysUser user = UserService.SelectUserById(loginUser.UserId);
string oldMd5 = NETCore.Encrypt.EncryptProvider.Md5(oldPassword);
string newMd5 = NETCore.Encrypt.EncryptProvider.Md5(newPassword);
if (!user.Password.Equals(oldMd5, StringComparison.OrdinalIgnoreCase))
{
return ToResponse(ApiResult.Error("修改密码失败,旧密码错误"));
}
if (user.Password.Equals(newMd5, StringComparison.OrdinalIgnoreCase))
{
return ToResponse(ApiResult.Error("新密码不能和旧密码相同"));
}
if (UserService.ResetPwd(loginUser.UserId, newMd5.ToLower()) > 0)
{
//TODO 更新缓存
return SUCCESS(1);
}
return ToResponse(ApiResult.Error("修改密码异常,请联系管理员"));
}
///
/// 修改头像
///
///
///
[HttpPost("Avatar")]
[ActionPermissionFilter(Permission = "common")]
[Log(Title = "修改头像", BusinessType = BusinessType.UPDATE, IsSaveRequestData = false)]
public async Task Avatar([FromForm(Name = "picture")] IFormFile formFile)
{
LoginUser loginUser = Framework.JwtUtil.GetLoginUser(HttpContext);
if (formFile == null) throw new CustomException("请选择文件");
SysFile file = await FileService.SaveFileToLocal(hostEnvironment.WebRootPath, "", "avatar", HttpContext.GetName(), formFile);
UserService.UpdatePhoto(new SysUser() { Avatar = file.AccessUrl, UserId = loginUser.UserId });
return SUCCESS(new { imgUrl = file.AccessUrl });
}
}
}