using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Model;
using Common;
using Oracle.DataAccess.Client;
using System.Data.Common;
namespace Dao
{
///
/// 角色菜单权限操作
///
public class SysRoleMenuDao : IDisposable
{
public void Dispose()
{
}
private static SysRoleMenuDao _instance;
public static SysRoleMenuDao Instance
{
get {
if (_instance == null)
{
_instance = new SysRoleMenuDao();
}
return _instance;
}
}
public List LoadInfoList(string roleId, int menuId, int pageSize, int PageIndex, out int recordcount)
{
List list = new List();
recordcount = 0;
try
{
StringBuilder builder = new StringBuilder();
builder.Append("from SYS_ROLE_MENU where 1=1 ");
if (!string.IsNullOrEmpty(roleId))
{
builder.Append(" and ROLE_ID = '" + roleId + "'");
}
if (menuId == -1)
{
builder.Append(" AND (MENU_ID != " + menuId + " OR MENU_ID IS NULL) ");
}
else
{
builder.Append(" AND MENU_ID = " + menuId + " ");
}
using (OracleDataReader reader = OracleHelper.ExecuteReader("select count(*) as count " + builder.ToString(), OracleHelper.Connection))
{
while (reader.Read())
{
recordcount = this.ReadCount(reader);
}
}
using (OracleDataReader reader2 = OracleHelper.ExecuteReader(PubConstant.doOracleSql(PageIndex, pageSize, recordcount, "select * " + builder.ToString()).ToString() + " order by DICT_TYPE, DICT_SORT ", OracleHelper.Connection ))
{
while (reader2.Read())
{
SysRoleMenu o = new SysRoleMenu();
if (this.ReadInfo(reader2, o))
{
list.Add(o);
}
}
}
}
catch (Exception exception)
{
LogHelper.Error(exception);
return list;
}
return list;
}
//根据条件获取数据列表
public List getAllList(SysRoleMenu bean)
{
List list = new List();
try
{
StringBuilder builder = new StringBuilder();
builder.Append("from SYS_ROLE_MENU where 1=1 ");
if (!string.IsNullOrEmpty(bean.RoleId))
{
builder.Append(" and ROLE_ID = '" + bean.RoleId + "'");
}
if (bean.MenuId == -1)
{
builder.Append(" AND (MENU_ID != " + bean.MenuId + " OR MENU_ID IS NULL) ");
}
else
{
builder.Append(" AND MENU_ID = " + bean.MenuId + " ");
}
using (OracleDataReader reader = OracleHelper.ExecuteReader("select * " + builder.ToString() + " ", OracleHelper.Connection))
{
while (reader.Read())
{
SysRoleMenu o = new SysRoleMenu();
if (this.ReadInfo(reader, o))
{
list.Add(o);
}
}
}
}
catch (Exception exception)
{
LogHelper.Error(exception);
return list;
}
return list;
}
//添加信息
public bool Add(SysRoleMenu o)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("INSERT INTO SYS_ROLE_MENU ( ROLE_ID, MENU_ID ) ");
stringBuilder.Append(" VALUES (:ROLE_ID, :MENU_ID ) ");
string sql = stringBuilder.ToString();
return OracleHelper.ExecuteSql(sql,
OracleHelper.Connection,
new OracleParameter(":ROLE_ID", (object)o.RoleId),
new OracleParameter(":MENU_ID", (object)o.MenuId)
) > 0;
}
//删除
public bool Delete(SysRoleMenu o)
{
return OracleHelper.ExecuteSql("delete from SYS_ROLE_MENU where ROLE_ID=:ROLE_ID AND MENU_ID=:MENU_ID", OracleHelper.Connection, new OracleParameter(":ROLE_ID", (object)o.RoleId), new OracleParameter(":MENU_ID", (object)o.MenuId)) > 0;
}
//获取信息
public SysRoleMenu Get(string roleId, int menuId)
{
SysRoleMenu o = new SysRoleMenu();
using (OracleDataReader reader = OracleHelper.ExecuteReader(string.Format("select * from SYS_ROLE_MENU where ROLE_ID=:ROLE_ID AND MENU_ID=:MENU_ID"), OracleHelper.Connection, new OracleParameter(":ROLE_ID", (object)roleId), new OracleParameter(":MENU_ID", (object)menuId) ) )
{
if (((DbDataReader)reader).Read())
{
this.ReadInfo(reader, o);
return o;
}
}
return o;
}
//获取角色权限列表
public Dictionary LoadRoleMenuList(string roleId)
{
StringBuilder builder = new StringBuilder();
builder.Append("SELECT sm.* FROM SYS_MENU sm ");
builder.Append(" LEFT JOIN SYS_ROLE_MENU srm ON srm.MENU_ID = sm.MENU_ID ");
builder.Append(" WHERE srm.ROLE_ID=:ROLE_ID ");
Dictionary dictionary = new Dictionary();
using (OracleDataReader reader = OracleHelper.ExecuteReader(builder.ToString(), OracleHelper.Connection, new OracleParameter(":ROLE_ID", (object)roleId)))
{
while (reader != null && ((DbDataReader)reader).Read())
{
OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
string menuID = oracleReaderWrapper.GetString("MENU_ID", "");
string menuName = oracleReaderWrapper.GetString("MENU_NAME", "");
string remark = oracleReaderWrapper.GetString("REMARK", "");
string parentID = oracleReaderWrapper.GetString("PARENT_ID", "");
int menuLV = oracleReaderWrapper.GetInt("MENU_LV", 0);
SysMenu sysMenu = new SysMenu();
sysMenu.MenuID = menuID;
sysMenu.MenuName = menuName;
sysMenu.Remark = remark;
sysMenu.ParentID = parentID;
sysMenu.MenuLV = menuLV;
dictionary[menuID] = sysMenu;
}
}
return dictionary;
}
//修改角色权限
public void UpdatePermission(string roleId, string[] menuIDArray)
{
List> list = new List>();
string key1 = " DELETE FROM SYS_ROLE_MENU WHERE ROLE_ID=:ROLE_ID ";
OracleParameter[] oracleParameterArray1 = new OracleParameter[1]
{
new OracleParameter(":ROLE_ID", (object) roleId)
};
list.Add(new KeyValuePair(key1, oracleParameterArray1));
OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
if (menuIDArray == null || menuIDArray.Length <= 0)
return;
string key2 = "INSERT INTO SYS_ROLE_MENU(ROLE_ID, MENU_ID) VALUES(:ROLE_ID,:MENU_ID)";
foreach (string menuId in menuIDArray)
{
OracleParameter[] oracleParameterArray2 = new OracleParameter[2]
{
new OracleParameter(":ROLE_ID", (object) roleId),
new OracleParameter(":MENU_ID", (object) menuId)
};
list.Add(new KeyValuePair(key2, oracleParameterArray2));
}
OracleHelper.ExecuteSqlTran(list, OracleHelper.Connection);
}
//统计记录数
private int ReadCount(OracleDataReader reader)
{
OracleReaderWrapper wrapper = new OracleReaderWrapper(reader);
return wrapper.GetInt("count", 0);
}
//数据封装
private bool ReadInfo(OracleDataReader reader, SysRoleMenu o)
{
OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
o.RoleId = oracleReaderWrapper.GetString("ROLE_ID", "");
o.MenuId = oracleReaderWrapper.GetInt("MENU_ID", 1);
return true;
}
}
}