using Dapper;
using Estsh.Core.Dapper;
using Estsh.Core.Model.Result;
using Estsh.Core.Models;
using Estsh.Core.Repository.IRepositories;
using System.Collections;
using System.Data;
using System.Text;
/***************************************************************************************************
*
* 更新人:sitong.dong
* 描述:角色管理数据库访问类
* 修改时间:2022.06.22
* 修改日志:系统迭代升级
*
**************************************************************************************************/
namespace Estsh.Core.Repositories
{
///
/// 处理角色模块的业务数据
///
public class RoleRepository : BaseRepository, IRoleRepository
{
public RoleRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext)
{
}
#region 角色管理
///
/// 根据分页条件获取角色列表
///
///
///
///
///
///
public Hashtable getRoleListByPage(int PageSize, int PageIndex, string strWhere, string OrderBy)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
Hashtable result = new Hashtable();
StringBuilder column = new StringBuilder(1024);
column.Append("role_id,role_name,role_desc,enabled");
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@TotalCount", 0, DbType.Int32, ParameterDirection.Output);
parameters.Add("@TotalPage", 0, DbType.Int32, ParameterDirection.Output);
parameters.Add("@Table", "sys_role a");
parameters.Add("@Column", column.ToString());
parameters.Add("@OrderColumn", OrderBy);
parameters.Add("@GroupColumn", "");
parameters.Add("@PageSize", PageSize);
parameters.Add("@CurrentPage", PageIndex);
parameters.Add("@Group", 0);
parameters.Add("@Condition", strWhere);
List list = dbConn.Query("Com_Pagination", parameters, commandType: CommandType.StoredProcedure).ToList();
result.Add("dataList", list);
result.Add("totalCount", parameters.Get("@TotalCount"));
return result;
}
}
///
/// 根据角色ID,获取角色功能树数据
///
///
///
public List getRoleMenuTree(String role_id)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("SELECT m.menu_id ");
SqlStringBuilder.Append(" , m.name ");
SqlStringBuilder.Append(" , m.parent_id ");
SqlStringBuilder.Append(" , (SELECT rp.role_id ");
SqlStringBuilder.Append(" FROM sys_role_privliege rp ");
SqlStringBuilder.Append(" WHERE rp.fun_name = m.menu_id ");
SqlStringBuilder.Append(" AND rp.program = 'web' ");
SqlStringBuilder.Append(" AND rp.role_id = @role_id) AS role_id ");
SqlStringBuilder.Append("FROM sys_web_menu m ");
SqlStringBuilder.Append("WHERE m.enabled = 'Y' ");
DynamicParameters htParams = new DynamicParameters();
htParams.Add("@role_id", role_id);
List result = dbConn.Query(SqlStringBuilder.ToString(), htParams).ToList();
return result;
}
}
///
/// 根据角色ID,获取角色功能树数据
///
///
///
public List getRoleMenuOpTree(String role_id)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("SELECT op.fun_name AS parent_id, op.op_name, op.ruid AS op_id, ");
SqlStringBuilder.Append(" ( SELECT rop.role_id ");
SqlStringBuilder.Append(" FROM sys_role_op_privliege rop ");
SqlStringBuilder.Append(" WHERE rop.menu_id = op.fun_name ");
SqlStringBuilder.Append(" AND rop.op_id = op.ruid ");
SqlStringBuilder.Append(" AND rop.role_id = @role_id ");
SqlStringBuilder.Append(" ) AS role_id ");
SqlStringBuilder.Append("FROM dbo.sys_program_fun_op op ");
SqlStringBuilder.Append("WHERE op.program = 'web' ");
SqlStringBuilder.Append(" AND op.enabled = 'Y' ");
DynamicParameters htParams = new DynamicParameters();
htParams.Add("@role_id", role_id);
List result = dbConn.Query(SqlStringBuilder.ToString(), htParams).ToList();
return result;
}
}
///
/// 根据角色ID获取角色信息
///
///
///
public List getRoleInfoById(String role_id)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder strSql = new StringBuilder();
strSql.Append("SELECT role_id, role_name, role_desc, enabled FROM sys_role where role_id = @role_id ");
DynamicParameters htParams = new DynamicParameters();
htParams.Add("@role_id", role_id);
List result = dbConn.Query(strSql.ToString(), htParams).ToList();
return result;
}
}
///
/// 插入角色数据
///
///
///
public int saveRoleInfo(SysRole htParams, string menuTreeInfo, string opMenuTreeInfo)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
String strQuery = "SELECT role_id FROM sys_role where role_name = @role_name";
DynamicParameters htQuery = new DynamicParameters();
htQuery.Add("@role_name", htParams.RoleName);
List result = dbConn.Query(strQuery, htQuery).ToList();
if (result.Count > 0)
{
return 2;
}
else
{
List sqlStrings = new List();
List parameters = new List();
String menuTree = menuTreeInfo;
String opMenuTree = opMenuTreeInfo;
String createUserId = htParams.CreateUserId.ToString();
//htParams.Remove("@menuTree");
String[] roleArray = menuTree.Split(',');
String[] opRoleArray = opMenuTree.Split(',');
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(" INSERT INTO sys_role(role_name,role_desc,enabled,create_userid,create_time) ");
SqlStringBuilder.Append(" VALUES(@roleName,@roleDesc,@enabled,@createUserId, ");
SqlStringBuilder.Append(" CONVERT(varchar(50), GETDATE(), 21)) ");
int insert = dbConn.Execute(SqlStringBuilder.ToString(), htParams);
object role_id = dbConn.ExecuteScalar(strQuery, htQuery);
DynamicParameters dyParams = new DynamicParameters();
if (insert > 0)
{
SqlStringBuilder.Clear();
SqlStringBuilder.Append("INSERT INTO sys_role_privliege(role_id,program,fun_name,auth_seq,create_userid,create_time) ");
SqlStringBuilder.Append(" VALUES(@role_id,'web',@menu_id,31,@create_userid, ");
SqlStringBuilder.Append(" CONVERT(varchar(50), GETDATE(), 21)) ");
foreach (String menu_id in roleArray)
{
dyParams = new DynamicParameters();
dyParams.Add("@role_id", role_id);
dyParams.Add("@menu_id", menu_id);
dyParams.Add("@create_userid", createUserId);
sqlStrings.Add(SqlStringBuilder.ToString());
parameters.Add(dyParams);
}
SqlStringBuilder.Clear();
SqlStringBuilder.Append("INSERT INTO dbo.sys_role_op_privliege ( role_id, menu_id, op_id, create_userid, create_time ) ");
SqlStringBuilder.Append("VALUES (@role_id, @menu_id, @op_id, @create_userid, CONVERT(varchar(50), GETDATE(), 21)) ");
string opId = "";
string menuId = "";
foreach (String opMenu in opRoleArray)
{
opId = opMenu.Split('|')[0];
menuId = opMenu.Split('|')[1];
dyParams = new DynamicParameters();
dyParams.Add("@role_id", role_id);
dyParams.Add("@menu_id", menuId);
dyParams.Add("@op_id", opId);
dyParams.Add("create_userid", createUserId);
sqlStrings.Add(SqlStringBuilder.ToString());
parameters.Add(dyParams);
}
IDbTransaction transaction = dbConn.BeginTransaction();
try
{
for (int i = 0; i < sqlStrings.Count; i++)
{
dbConn.Execute(sqlStrings[i], parameters[i], transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
return 0;
}
return 1;
}
else
{
return 0;
}
}
}
}
///
/// 更新角色数据
///
///
///
public int updateRoleInfo(SysRole htParams, string menuTreeInfo, string opMenuTreeInfo)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
List sqlStrings = new List();
List parameters = new List();
String menuTree = menuTreeInfo;
String updateUserId = htParams.UpdateUserId.ToString();
String opMenuTree = opMenuTreeInfo;
String role_id = htParams.RoleId.ToString();
//htParams.Remove("@menuTree");
//htParams.Remove("@role_name");
String[] roleArray = menuTree.Split(',');
String[] opRoleArray = opMenuTree.Split(',');
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("UPDATE sys_role ");
SqlStringBuilder.Append("SET ");
SqlStringBuilder.Append(" role_desc = @roleDesc, ");
SqlStringBuilder.Append(" enabled = @enabled, ");
SqlStringBuilder.Append(" update_userid = @updateUserId, ");
SqlStringBuilder.Append(" update_time =CONVERT(varchar(50), GETDATE(), 21) ");
SqlStringBuilder.Append("WHERE ");
SqlStringBuilder.Append(" role_id = @roleId ");
sqlStrings.Add(SqlStringBuilder.ToString());
parameters.Add(htParams);
SqlStringBuilder.Clear();
List dysqlStrings = new List();
List dyparameters = new List();
//SqlStringBuilder.Append(" DELETE FROM sys_role_privliege WHERE role_id = @role_id AND program = 'web' ");
SqlStringBuilder.Append(" DELETE FROM sys_role_privliege WHERE role_id = @role_id ");
DynamicParameters dyParams = new DynamicParameters();
dyParams.Add("@role_id", role_id);
dysqlStrings.Add(SqlStringBuilder.ToString());
dyparameters.Add(dyParams);
SqlStringBuilder.Clear();
SqlStringBuilder.Append(" DELETE FROM sys_role_op_privliege WHERE role_id = @role_id ");
dyParams = new DynamicParameters();
dyParams.Add("@role_id", role_id);
dysqlStrings.Add(SqlStringBuilder.ToString());
dyparameters.Add(dyParams);
SqlStringBuilder.Clear();
SqlStringBuilder.Append("INSERT INTO sys_role_privliege(role_id,program,fun_name,auth_seq,create_userid,create_time) ");
SqlStringBuilder.Append(" VALUES(@role_id,'web',@menu_id,31,@create_userid, ");
SqlStringBuilder.Append(" CONVERT(varchar(50), GETDATE(), 21)) ");
foreach (String menu_id in roleArray)
{
if (menu_id != null && !"".Equals(menu_id.Trim()))
{
dyParams = new DynamicParameters();
dyParams.Add("@role_id", role_id);
dyParams.Add("@menu_id", menu_id);
dyParams.Add("@create_userid", updateUserId);
dysqlStrings.Add(SqlStringBuilder.ToString());
dyparameters.Add(dyParams);
}
}
SqlStringBuilder.Clear();
SqlStringBuilder.Append("INSERT INTO dbo.sys_role_op_privliege ( role_id, menu_id, op_id, create_userid , create_time) ");
SqlStringBuilder.Append("VALUES (@role_id, @menu_id, @op_id, @create_userid, CONVERT(varchar(50), GETDATE(), 21)) ");
string opId = "";
string menuId = "";
foreach (String opMenu in opRoleArray)
{
opId = opMenu.Split('|')[0];
menuId = opMenu.Split('|')[1];
dyParams = new DynamicParameters();
dyParams.Add("@role_id", role_id);
dyParams.Add("@menu_id", menuId);
dyParams.Add("@op_id", opId);
dyParams.Add("@create_userid", updateUserId);
dysqlStrings.Add(SqlStringBuilder.ToString());
dyparameters.Add(dyParams);
}
int ret = 0;
IDbTransaction transaction = dbConn.BeginTransaction();
try
{
for (int i = 0; i < sqlStrings.Count; i++)
{
ret = dbConn.Execute(sqlStrings[i], parameters[i], transaction);
}
for (int i = 0; i < dysqlStrings.Count; i++)
{
ret = dbConn.Execute(dysqlStrings[i], dyparameters[i], transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
return 0;
}
return 1;
}
}
///
/// 删除角色数据
///
///
///
public int deleteRole(String role_id)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
DynamicParameters htparams = new DynamicParameters();
String strQuery = "SELECT 1 FROM sys_role_emp WHERE role_id = @role_id";
htparams.Add("@role_id", role_id);
List exist = dbConn.Query(strQuery, htparams).ToList();
if (exist.Count > 0)
{
return -2;
}
StringBuilder delStr = new StringBuilder();
delStr.Append(" update sys_role set Enabled='N' WHERE role_id = @role_id ");
delStr.Append(" update sys_role_privliege set Enabled='N' WHERE role_id = @role_id1 AND program = 'web' ");
htparams = new DynamicParameters();
htparams.Add("@role_id", role_id);
htparams.Add("@role_id1", role_id);
int ret = dbConn.Execute(delStr.ToString(), htparams);
return ret;
}
}
//启用
public int EnableData(String ids)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
DynamicParameters htparams = new DynamicParameters();
StringBuilder delStr = new StringBuilder();
delStr.Append(" update sys_role set Enabled='Y' WHERE role_id = @role_id ");
delStr.Append(" update sys_role_privliege set Enabled='Y' WHERE role_id = @role_id1 AND program = 'web' ");
htparams = new DynamicParameters();
htparams.Add("@role_id", ids);
htparams.Add("@role_id1", ids);
int ret = dbConn.Execute(delStr.ToString(), htparams);
return ret;
}
}
//禁用
public int DisableData(String ids)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
DynamicParameters htparams = new DynamicParameters();
//String strQuery = "SELECT 1 FROM sys_role_emp WHERE role_id = @role_id";
//htparams.Add("@role_id", ids);
//List exist = dbConn.Query(strQuery, htparams).ToList();
//if (exist.Count > 0)
//{
// return -2;
//}
StringBuilder delStr = new StringBuilder();
delStr.Append(" update sys_role set Enabled='N' WHERE role_id = @role_id ");
delStr.Append(" update sys_role_privliege set Enabled='N' WHERE role_id = @role_id1 AND program = 'web' ");
htparams = new DynamicParameters();
htparams.Add("@role_id", ids);
htparams.Add("@role_id1", ids);
int ret = dbConn.Execute(delStr.ToString(), htparams);
return ret;
}
}
#endregion
}
}