SysRoleController.cs 9.92 KB
using HHECS.Application.Enums;
using HHECS.Application.Service;
using HHECS.BllModel;
using HHECS.Common.SystemHelp.DataTableTo;
using HHECS.Infrastructure.CommonHelper;
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.Collections.Generic;

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

        #region 视图功能
        /// <summary>
        /// 默认视图Action
        /// </summary>
        /// <returns></returns>
        [ResponseCache(Duration = 60)]
        public ActionResult Index()
        {
            return View();
        }
        #endregion

        #region 获取数据
        /// <summary>
        /// 加载及分页查询
        /// </summary>
        /// <param name="pageRequest">表单请求信息</param>
        /// <param name="entity">请求条件实例</param>
        /// <returns></returns>
        [HttpPost]
        public string Load(PageReq pageRequest, WebRole entity)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                var response = new Response();
                var result = _permissionService.GetAllRole();
                if (result.Success)
                {
                    int indexStart = 1 + ((pageRequest.page - 1) * pageRequest.limit);
                    int indexEnd = pageRequest.page * pageRequest.limit;
                    int currentIndex = 1;
                    List<WebRole> roles = new List<WebRole>();
                    foreach (var item in result.Data)
                    {
                        if (currentIndex >= indexStart && currentIndex <= indexEnd)
                        {
                            var role = ObjectHelper.TransReflection<Role, WebRole>(item);
                            var permissions = _permissionService.GetPermissionByRoleId(role.Id);
                            foreach (var permission in permissions.Data)
                            {
                                role.MenuAuthority += string.IsNullOrEmpty(role.MenuAuthority) ? permission.PermissionName : "," + permission.PermissionName;
                                role.MenuAuthoritys += string.IsNullOrEmpty(role.MenuAuthoritys) ? permission.Id : "," + permission.Id;
                            }
                            roles.Add(role);
                        }
                        currentIndex++;
                    }
                    response.Result = roles;
                    response.Count = result.Data.Count;
                }
                return JsonHelper.Instance.Serialize(response);
            });
        }

        /// <summary>
        /// 获取所有权限
        /// <para>用于树状结构</para>
        /// </summary>
        [HttpGet]
        public string GetAllRole()
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                var result = _permissionService.GetAllRole();
                List<WebRole> roles = new List<WebRole>();
                result.Data.ForEach(role =>
                {
                    var obj = ObjectHelper.TransReflection<Role, WebRole>(role);
                    obj.Name = role.RoleName;
                    roles.Add(obj);
                });
                return roles.ToJson();
            });
        }
        #endregion

        #region 提交数据
        /// <summary>
        /// 新增数据
        /// </summary>
        /// <param name="Table_entity">新增实例</param>
        /// <returns></returns>
        [HttpPost]
        [XSSFilter]
        [ServiceFilter(typeof(OperLogFilter))]
        public string Ins(WebRole Table_entity)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                var role = new Role()
                {
                    RoleCode = Table_entity.RoleCode,
                    RoleName = Table_entity.RoleName,
                    CreateBy = User.UserCode
                };

                List<string> idList = new List<string>(Table_entity.MenuAuthoritys.Split(','));
                List<Permission> permissionList = _permissionService.GetAllPermission().Data.FindAll(item =>
                {
                    return idList.Contains(item.Id.ToString());
                });
                BllResult<Role> result = _permissionService.InsertOrUpdateRoleAndPermissions(role, permissionList);
                var response = new Response();
                if (result.Success)
                {
                    _logService.LogOperation(Title.RoleAdd, ModuleConst.Role, $"角色新增保存成功.数据:{JsonConvert.SerializeObject(role)}", result.Code.ToString(), User.UserCode);
                }
                else
                {
                    response.ResponseError(result.Msg);
                    _logService.LogOperation(Title.RoleAdd, ModuleConst.Role, $"角色新增保存失败.数据:{JsonConvert.SerializeObject(role)},详情:{result.Msg}", result.Code.ToString(), User.UserCode);
                }
                return JsonHelper.Instance.Serialize(response);
            });
        }

        /// <summary>
        /// 修改数据
        /// </summary>
        /// <param name="Table_entity">修改实例</param>
        /// <returns></returns>
        [HttpPost]
        [XSSFilter]
        [ServiceFilter(typeof(OperLogFilter))]
        public string Upd(WebRole Table_entity)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                Table_entity.UpdateBy = User.UserCode;
                List<string> idList = new List<string>(Table_entity.MenuAuthoritys.Split(','));
                List<Permission> permissionList = _permissionService.GetAllPermission().Data.FindAll(item =>
                {
                    return idList.Contains(item.Id.ToString());
                });
                BllResult<Role> result = _permissionService.InsertOrUpdateRoleAndPermissions(Table_entity, permissionList);
                var response = new Response();
                if (result.Success)
                {
                    _logService.LogOperation(Title.RoleEdit, ModuleConst.Role, $"角色编辑保存成功.数据:{JsonConvert.SerializeObject(Table_entity)}", result.Code.ToString(), User.UserCode);
                }
                else
                {
                    response.ResponseError(result.Msg);
                    _logService.LogOperation(Title.RoleEdit, ModuleConst.Role, $"角色编辑保存失败.数据:{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(() =>
            {
                var response = new Response();
                var resultRoles = _permissionService.GetAllRole();
                if (resultRoles.Success)
                {
                    List<int> roleIds = new List<int>(ids);
                    List<Role> roles = resultRoles.Data.FindAll(role =>
                    {
                        return roleIds.Contains(role.Id);
                    });
                    List<Role> roleList = new List<Role>();
                    foreach (Role role in roles)
                    {
                        roleList.Add(new Role() { Id = role.Id, RoleCode = role.RoleCode, RoleName = role.RoleName });
                    }

                    BllResult result = _permissionService.DeleteRoleByIds(roleIds);
                    if (result.Success)
                    {
                        _logService.LogOperation(Title.RoleDelete, ModuleConst.Role, $"角色删除成功.数据:{JsonConvert.SerializeObject(roleList)}", result.Code.ToString(), User.UserCode);
                    }
                    else
                    {
                        response.ResponseError(result.Msg);
                        _logService.LogOperation(Title.RoleDelete, ModuleConst.Role, $"角色删除失败.数据:{JsonConvert.SerializeObject(roleList)}.详情:{result.Msg}", result.Code.ToString(), User.UserCode);
                    }
                }
                else
                {
                    response.ResponseError(resultRoles.Msg);
                }
                return JsonHelper.Instance.Serialize(response);
            });
        }
        #endregion

        #region 导出数据
        /// <summary>
        /// 导出数据
        /// </summary>
        /// <param name="entity">请求条件实例</param>
        /// <returns></returns>
        [HttpPost]
        public string Export(List<string> cols)
        {
            return ExceptionsHelp.Instance.Execute(() =>
            {
                var response = new Response();
                var result = _permissionService.GetAllRole();
                if (result.Success)
                {
                    response.Result = DataTableHelp.ListToDt<Role>(result.Data.FindAll(c => c != null));
                    response.Count = result.Data.Count;
                }
                return JsonHelper.Instance.Serialize(response);
            });
        }
        #endregion

        #region 自定义方法

        #endregion
    }
}