SysUserController.cs 11.5 KB
using HHECS.Application.Enums;
using HHECS.Application.Service;
using HHECS.BllModel;
using HHECS.Infrastructure.CommonHelper;
using HHECS.Model.ClassComparer;
using HHECS.Model.Entities;
using HHECS.Web.Aop;
using HHECS.WebCommon;
using HHECS.WebCommon.Entities;
using HHECS.WebCommon.Http;
using HHECS.WebCommon.Json;
using HHECS.WebCommon.SystemHelp.Log;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

namespace HHECS.Web.Controllers
{
    public class SysUserController : BaseController
    {
        private readonly ILogger<SysUserController> _logger;
        private readonly PermissionService _permissionService;
        private readonly LogService _logService;
        public SysUserController(ILogger<SysUserController> logger, PermissionService permissionService, LogService logService)
        {
            _logger = logger;
            _permissionService = permissionService;
            _logService = logService;
        }

        //
        // GET: /SysUser/
        public ActionResult Index()
        {
            return View();
        }

        /// <summary>
        /// 加载组织下面的所有用户
        /// </summary>
        [HttpPost]
        public string Load(PageReq pageRequest, WebUser entity)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                var response = new Response();
                Expression<Func<User, bool>> filter = a => true;
                var result = _permissionService.GetUsers(filter, pageRequest.page, pageRequest.limit, out long totalCount);
                if (result.Success)
                {
                    List<User> resultUsers = result.Data;
                    if (entity.UserCode != null && entity.UserName != null)
                        resultUsers = result.Data.FindAll(t => t.UserCode.IndexOf(entity.UserCode) >= 0 && t.UserName.IndexOf(entity.UserName) >= 0);
                    if (entity.UserCode != null)
                        resultUsers = result.Data.FindAll(t => t.UserCode.IndexOf(entity.UserCode) >= 0);
                    if (entity.UserName != null)
                        resultUsers = result.Data.FindAll(t => t.UserName.IndexOf(entity.UserName) >= 0);

                    List<WebUser> users = new List<WebUser>();
                    foreach (var item in resultUsers)
                    {
                        var user = ObjectHelper.TransReflection<User, WebUser>(item);
                        var resultUser = _permissionService.GetUserWithRoles(user.UserCode);
                        foreach (var role in resultUser.Data.Roles)
                        {
                            user.MenuRole += string.IsNullOrEmpty(user.MenuRole) ? role.RoleName : "," + role.RoleName;
                            user.MenuRoles += string.IsNullOrEmpty(user.MenuRoles) ? role.Id : "," + role.Id;
                        }
                        users.Add(user);
                    }
                    response.Result = users;
                    response.Count = (int)totalCount;
                }
                return JsonHelper.Instance.Serialize(response);
            });
        }

        /// <summary>
        /// 获取发起页面的菜单权限
        /// </summary>
        /// <returns>System.String.</returns>
        [HttpGet]
        public string LoadAuthorizedMenus(string modulecode, string AreaMenus)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                var result = _permissionService.GetAllPermission("WEB");
                List<WebPermission> permissions = new List<WebPermission>();
                var userPermissions = User.Roles.SelectMany(t => t.Permissions).Distinct(new PermissionComparer()).ToList();
                result.Data.OrderBy(t => t.OrderNum).ToList().ForEach(permission =>
                {
                    if (permission.MenuName == modulecode && permission.Visible && userPermissions.FindAll(t => t.Id == permission.Id).Count > 0)
                    {
                        var obj = ObjectHelper.TransReflection<Permission, WebPermission>(permission);
                        obj.Name = permission.PermissionName;
                        obj.DomId = permission.PermissionCode;
                        obj.Class = permission.Url;
                        obj.Sort = permission.OrderNum;
                        permissions.Add(obj);
                    }
                });
                return permissions.ToJson();
            });
        }

        //添加用户
        [HttpPost]
        [XSSFilter]
        [ServiceFilter(typeof(OperLogFilter))]
        public string Ins(WebUser Table_entity)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                var user = new User()
                {
                    UserCode = Table_entity.UserCode,
                    UserName = Table_entity.UserName,
                    Password = Table_entity.Password,
                    Phone = Table_entity.Phone,
                    Disable = Table_entity.Disable,
                    CreateBy = User.UserCode
                };

                List<string> idList = new List<string>(Table_entity.MenuRoles.Split(','));
                List<Role> roleList = _permissionService.GetAllRole().Data.FindAll(item =>
                {
                    return idList.Contains(item.Id.ToString());
                });
                BllResult<User> result = _permissionService.InsertOrUpdateUserWithRoles(user, roleList);
                var response = new Response();
                if (result.Success)
                {
                    _logService.LogOperation(Title.UserAdd, ModuleConst.User, $"用户新增保存成功.数据:{JsonConvert.SerializeObject(user)}", result.Code.ToString(), User.UserCode);
                }
                else
                {
                    response.ResponseError(result.Msg);
                    _logService.LogOperation(Title.UserAdd, ModuleConst.User, $"用户新增保存失败.数据:{JsonConvert.SerializeObject(user)},详情:{result.Msg}", result.Code.ToString(), User.UserCode);
                }
                return JsonHelper.Instance.Serialize(response);
            });
        }

        //修改用户
        [HttpPost]
        [XSSFilter]
        [ServiceFilter(typeof(OperLogFilter))]
        public string Upd(WebUser Table_entity)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                Table_entity.UpdateBy = User.UserCode;
                List<string> idList = new List<string>(Table_entity.MenuRoles.Split(','));
                List<Role> roleList = _permissionService.GetAllRole().Data.FindAll(item =>
                {
                    return idList.Contains(item.Id.ToString());
                });
                BllResult<User> result = _permissionService.InsertOrUpdateUserWithRoles(Table_entity, roleList);
                var response = new Response();
                if (result.Success)
                {
                    _logService.LogOperation(Title.UserEdit, ModuleConst.User, $"用户编辑保存成功.数据:{JsonConvert.SerializeObject(Table_entity)}", result.Code.ToString(), User.UserCode);
                }
                else
                {
                    response.ResponseError(result.Msg);
                    _logService.LogOperation(Title.UserEdit, ModuleConst.User, $"用户编辑保存失败.数据:{JsonConvert.SerializeObject(Table_entity)},详情:{result.Msg}", result.Code.ToString(), User.UserCode);
                }

                return JsonHelper.Instance.Serialize(response);
            });
        }

        [HttpPost]
        [XSSFilter]
        [ServiceFilter(typeof(OperLogFilter))]
        public string DelByIds(int[] ids)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                Expression<Func<User, bool>> filter = a => true;
                var response = new Response();
                var resultUsers = _permissionService.GetUsers(filter, 1, 9999, out long count);
                if (resultUsers.Success)
                {
                    List<int> userIds = new List<int>(ids);
                    List<User> users = resultUsers.Data.FindAll(user =>
                    {
                        return userIds.Contains(user.Id);
                    });
                    List<User> userList = new List<User>();
                    foreach (User user in users)
                    {
                        userList.Add(new User() { Id = user.Id, UserCode = user.UserCode, UserName = user.UserName });
                    }

                    BllResult result = _permissionService.DeleteUserById(userIds);
                    if (result.Success)
                    {
                        _logService.LogOperation(Title.UserDelete, ModuleConst.User, $"用户删除成功.数据:{JsonConvert.SerializeObject(userList)}", result.Code.ToString(), User.UserCode);
                    }
                    else
                    {
                        response.ResponseError(result.Msg);
                        _logService.LogOperation(Title.UserDelete, ModuleConst.User, $"用户删除失败.数据:{JsonConvert.SerializeObject(userList)}.详情:{result.Msg}", result.Code.ToString(), User.UserCode);
                    }
                }
                else
                {
                    response.ResponseError(resultUsers.Msg);
                }
                return JsonHelper.Instance.Serialize(response);
            });
        }

        #region 获取权限数据

        #endregion

        public ActionResult ChangePassword()
        {
            return View();
        }

        /// <summary>
        /// 修改密码
        /// </summary>
        [HttpPost]
        [XSSFilter]
        [ServiceFilter(typeof(OperLogFilter))]
        public string ChangeUserPassword(string OldPassword, string Password)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                var response = new Response();
                if (User == null)
                {
                    response.ResponseError("用户信息有误,请重新登录");
                    return JsonHelper.Instance.Serialize(response);
                }
                var user = _permissionService.GetUserWithRoles(User.UserCode).Data;
                if (user.Password != OldPassword)
                {
                    response.ResponseError("用户旧密码错误,请重新输入");
                    return JsonHelper.Instance.Serialize(response);
                }
                user.Password = Password;
                BllResult<User> result = _permissionService.InsertOrUpdateUserWithRoles(user, user.Roles);
                if (result.Success)
                {
                    _logService.LogOperation(Title.UserEdit, ModuleConst.User, $"用户修改密码成功.数据:旧密码{OldPassword},新密码{Password}", result.Code.ToString(), User.UserCode);
                }
                else
                {
                    response.ResponseError(result.Msg);
                    _logService.LogOperation(Title.UserEdit, ModuleConst.User, $"用户修改密码失败.数据:旧密码{OldPassword},新密码{Password},详情:{result.Msg}", result.Code.ToString(), User.UserCode);
                }

                return JsonHelper.Instance.Serialize(response);
            });
        }

        [Authenticate]
        public ActionResult Binding()
        {
            return View();
        }
    }
}