DefaultBll.cs 13.8 KB
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;
using HHECS.Model;

namespace HHECS.Bll
{
    public class DefaultBll : IBll
    {
        public string ConnectStr { get; set; }

        public DefaultBll(string ConnectStr)
        {
            this.ConnectStr = ConnectStr;
        }

        private IDbConnection GetConnection()
        {
            return new SqlConnection(ConnectStr);
        }

        public BllResult<List<MenuOperation>> FindMenuOperation(List<Role> roles)
        {
            try
            {
                using (IDbConnection connection = GetConnection())
                {
                    var list = connection.GetList<MenuOperation>("where id in (select menuOperationId from roleMenuOperation where roleId in @roleIds)", new
                    {
                        roleIds = roles.Select(t => t.Id.Value).ToList().ToArray()
                    }).ToList();
                    if (list.Count() == 0)
                    {
                        return BllResultFactory.Error<List<MenuOperation>>("未找到对应权限");
                    }
                    else
                    {
                        return BllResultFactory.Sucess<List<MenuOperation>>(list, "成功");
                    }
                }
            }
            catch (Exception ex)
            {
                LogExecute.WriteDBExceptionLog(ex);
                return BllResultFactory.Error<List<MenuOperation>>(null, "发生异常");
            }
        }

        public BllResult<List<MenuOperation>> GetAllMenuOperation()
        {
            try
            {
                using(IDbConnection connection = GetConnection())
                {
                    var list = connection.GetList<MenuOperation>().ToList();
                    return BllResultFactory.Sucess<List<MenuOperation>>(list, "成功");
                }
            }
            catch (Exception ex)
            {
                LogExecute.WriteDBExceptionLog(ex);
                return BllResultFactory.Error<List<MenuOperation>>(null, "发生异常");
            }
        }

        public BllResult<User> GetUserWithRoles(string userCode, string password)
        {
            try
            {
                using (IDbConnection connection = GetConnection())
                {
                    var lookup = new Dictionary<int?, User>();
                    connection.Query<User, Role, User>("select u.*,rl.* from [user] u join userRole r on u.id = r.userId join [role] rl on r.roleId = rl.id where u.userCode=@userCode and u.password=@password;", (user, role) =>
                    {
                        List<Role> roles = new List<Role>();
                        User u;
                        if (!lookup.TryGetValue(user.Id, out u))
                        {
                            u = user;
                            lookup.Add(u.Id, u);
                        }
                        u.Roles.Add(role);
                        return u;
                    }, new { userCode, password });
                    var list = lookup.Values.ToList();
                    if (list.Count() == 0)
                    {
                        return BllResultFactory.Error<User>("用户名或密码不正确");
                    }
                    else
                    {
                        return BllResultFactory.Sucess<User>(list[0], "登录成功");
                    }
                }
            }
            catch (Exception ex)
            {
                LogExecute.WriteDBExceptionLog(ex);
                return BllResultFactory.Error<User>(null, "发生异常");
            }
        }

        public BllResult<MenuOperation> SaveMenuOperation(MenuOperation currentMenuOperation)
        {
            try
            {
                using (IDbConnection connection = GetConnection())
                {
                    var a = connection.Insert<MenuOperation>(currentMenuOperation);
                    currentMenuOperation.Id = a;
                    return BllResultFactory.Sucess<MenuOperation>(currentMenuOperation, "成功");
                }
            }
            catch (Exception ex)
            {
                LogExecute.WriteDBExceptionLog(ex);
                return BllResultFactory.Error<MenuOperation>(null, "发生异常");
            }
        }

        public BllResult UpdateMenuOperation(MenuOperation currentMenuOperation)
        {
            try
            {
                using (IDbConnection connection = GetConnection())
                {
                    var a = connection.Update<MenuOperation>(currentMenuOperation);
                    if (a != 0)
                    {
                        return BllResultFactory.Sucess(null, "成功");
                    }
                    else
                    {
                        return BllResultFactory.Error(null, "失败");
                    }
                }
            }
            catch (Exception ex)
            {
                LogExecute.WriteDBExceptionLog(ex);
                return BllResultFactory.Error(null, "发生异常");
            }
        }

        public BllResult DeleteMenuOperationByIds(List<int> ids)
        {
            try
            {
                using (IDbConnection connection = GetConnection())
                {
                    var a = connection.DeleteList<MenuOperation>("where id in @ids",new { ids = ids });
                    if (a != 0)
                    {
                        return BllResultFactory.Sucess(null, "成功");
                    }
                    else
                    {
                        return BllResultFactory.Error(null, "失败");
                    }
                }
            }
            catch (Exception ex)
            {
                LogExecute.WriteDBExceptionLog(ex);
                return BllResultFactory.Error(null, "发生异常");
            }
        }

        public BllResult<List<Role>> GetAllRole()
        {
            try
            {
                using (IDbConnection connection = GetConnection())
                {
                    var a = connection.GetList<Role>().ToList();
                    return BllResultFactory.Sucess<List<Role>>(a, "成功");
                }
            }
            catch (Exception ex)
            {
                LogExecute.WriteDBExceptionLog(ex);
                return BllResultFactory.Error<List<Role>>(null, "发生异常");
            }
        }

        public BllResult<Role> GetRoleById(int id)
        {
            try
            {
                using (IDbConnection connection = GetConnection())
                {
                    var a = connection.Get<Role>(id);
                    return BllResultFactory.Sucess<Role>(a, "成功");
                }
            }
            catch (Exception ex)
            {
                LogExecute.WriteDBExceptionLog(ex);
                return BllResultFactory.Error<Role>(null, "发生异常");
            }
        }

        public void Combine(List<MenuOperation> menuOperations, List<MenuOperation> all)
        {
            foreach (var item in menuOperations)
            {
                item.Children.AddRange(all.FindAll(t => t.ParentId == item.Id));
                if (item.Children.Count > 0)
                {
                    Combine(item.Children, all);
                }
            }
        }

        public void GetMenuOperationIds(List<MenuOperation> menuOperations, List<MenuOperation> all, List<int> ids)
        {
            foreach (var item in menuOperations)
            {
                //item.Children.AddRange();
                ids.AddRange(all.FindAll(t => t.ParentId == item.Id).Select(t => t.Id.Value).ToList());
                if (all.FindAll(t => t.ParentId == item.Id).Count > 0)
                {
                    GetMenuOperationIds(all.FindAll(t => t.ParentId == item.Id), all, ids);
                }
            }
        }

        public BllResult<Role> InsertRoleAndMenuOperations(Role currentRole, List<MenuOperation> list)
        {
            using (IDbConnection connection = GetConnection())
            {
                IDbTransaction tran=null;
                try
                {
                    connection.Open();
                    tran = connection.BeginTransaction();
                    var a = connection.Insert<Role>(currentRole,transaction:tran);
                    currentRole.Id = a;
                    var b = connection.Execute("INSERT INTO [dbo].[roleMenuOperation]([roleId],[menuOperationId]) values (@roleId,@menuOperationId)", list.Select(t => new { roleId =a, menuOperationId = t.Id }), transaction: tran);
                    tran.Commit();
                    return BllResultFactory.Sucess<Role>(currentRole, "成功");

                }
                catch (Exception ex)
                {
                    tran?.Rollback();
                    LogExecute.WriteDBExceptionLog(ex);
                    return BllResultFactory.Error<Role>(null, "发生异常");
                }
            }
        }

        public BllResult<Role> UpdateRoleAndMenuOperations(Role currentRole, List<MenuOperation> list)
        {
            using(IDbConnection connection = GetConnection())
            {
                IDbTransaction tran = null;
                try
                {
                    connection.Open();
                    tran = connection.BeginTransaction();
                    int i = connection.Update<Role>(currentRole, transaction: tran);
                    //删掉原来所有的权限,然后再插入新增的所有权限
                    connection.Execute("delete from roleMenuOperation where roleId = @roleId", new { roleId = currentRole.Id }, transaction: tran);
                    var b = connection.Execute("INSERT INTO [dbo].[roleMenuOperation]([roleId],[menuOperationId]) values (@roleId,@menuOperationId)", list.Select(t => new { roleId = currentRole.Id, menuOperationId = t.Id }), transaction: tran);
                    tran.Commit();
                    return BllResultFactory.Sucess<Role>(currentRole, "成功");
                }
                catch (Exception ex)
                {
                    tran?.Rollback();
                    LogExecute.WriteDBExceptionLog(ex);
                    return BllResultFactory.Error<Role>(null, "发生异常");
                }
            }
        }

        public BllResult<List<User>> GetUserByCondition(string sql)
        {
            using (IDbConnection connection = GetConnection())
            {
                try
                {
                    var result = connection.GetList<User>(sql).ToList();
                    return BllResultFactory.Sucess<List<User>>(result, "成功");
                }
                catch (Exception ex)
                {
                    LogExecute.WriteDBExceptionLog(ex);
                    return BllResultFactory.Error<List<User>>(null, "发生异常");
                }
            }
        }

        public BllResult SetUserDisable(List<int?> list,int enable)
        {
            using (IDbConnection connection = GetConnection())
            {
                try
                {
                    var a = connection.Execute("update [user] set disable = @enalbe where id in @ids;", new { enalbe = enable, ids = list });
                    return BllResultFactory.Sucess("成功");
                }
                catch (Exception ex)
                {
                    LogExecute.WriteDBExceptionLog(ex);
                    return BllResultFactory.Error("发生异常");
                }
            }
        }

        public BllResult<User> SaveUserWithRoles(User currentUser, List<int> RoleIds)
        {
            using (IDbConnection connection = GetConnection())
            {
                IDbTransaction tran = null;
                try
                {
                    connection.Open();
                    tran = connection.BeginTransaction();
                    currentUser.Id = connection.Insert<User>(currentUser, tran);
                    connection.Execute("insert into userRole values (@userId,@roleId);", RoleIds.Select(t => new { userId = currentUser.Id, roleId = t }).ToList(), tran);
                    tran.Commit();
                    return BllResultFactory.Sucess<User>(currentUser,"成功");
                }
                catch (Exception ex)
                {
                    tran?.Rollback();
                    LogExecute.WriteDBExceptionLog(ex);
                    return BllResultFactory.Error<User>("发生异常");
                }
            }
        }

        public BllResult<User> UpdateUserWithRoles(User currentUser, List<int> RoleIds)
        {
            using (IDbConnection connection = GetConnection())
            {
                IDbTransaction transaction = null;
                try
                {
                    connection.Open();
                    transaction = connection.BeginTransaction();
                    connection.Update<User>(currentUser, transaction);
                    //先删再添加
                    connection.Execute("delete from userRole where userId=@userId",new { userId = currentUser.Id},transaction:transaction);
                    //插入
                    connection.Execute("insert into userRole values (@userId,@roleId);", RoleIds.Select(t => new { userId = currentUser.Id, roleId = t }).ToList(), transaction);
                    transaction.Commit();
                    return BllResultFactory.Sucess<User>(currentUser, "成功");
                }
                catch (Exception ex)
                {
                    transaction?.Rollback();
                    LogExecute.WriteDBExceptionLog(ex);
                    return BllResultFactory.Error<User>("发生异常");
                }
            }
        }
    }
}