在人力资源树当中,上级对下级员工信息查看修改操作。
来源:互联网 发布:vwap算法 编辑:程序博客网 时间:2024/05/01 20:14
人力资源
在一个树型结构当中,存在对下属员工进行操作,如修改员工的信息等.
员工表字段 EmployeeId PerantId LoginName Name ...
例如
A ——————————————————————1
A_1 ————————————————————2
A_2
A_3
A_3_1 —————————————————3
A_3_2
A_3_3
A_3_4
A_4(B)
A_4_1(C)
A_4_1_1( D) ———————————4
A_4_1_1_1(E) ———————5
A_4_2
A_4_3
A_4_4
。。。。
现在 A 有权力下面所有人进行修查看操作。
而 A_4 的权限只能查看,他下面员工的信息,不能查看A_3、A_2、A_1 的信息及他们各自的下属的信息。
现在 B 员工要对 E 员工进行修改,可是数据库里又没对 B 员工修改下面员工 E 的权限。
如果对 B 进行权限设置,他就得对它下面所有每个员工进行权限分配,这样的话权限表就会非常大了。
最底一层(N)就可以有N-1个人有对他修改的权限,这样不好。
如果要 E 的内容可以由 D、C、B、A 这些人才可以修改,其他人就不行了
要实现 B 有没有对 E 员工进行修改的权限,由两种法子(我认为)
第一就是通过算法,把 B 下属员工全部取出来,然后看 E 在没有在里头。
第二就是通过算法,我把有修改 E 用户信息的员工取一个,跟 B 进行比较是不是到了
如果没有再从 E 的上级的上级取出来跟 B 进行比较,依此类推如果没有 B 的话,它最多取 N-1 次结束。
我个人认为第二种要比第一种好得好。
下面我就把实现第二种的代码如下
private static string connectionString = ConfigurationManager.ConnectionStrings["WaterOfficeConnectionString"].ToString();
private static SqlConnection getSqlConnection()
...{
SqlConnection cn = new SqlConnection();
cn.ConnectionString = connectionString;
cn.Open();
return cn;
}
private static SqlCommand getSqlCommand()
...{
SqlConnection cn = getSqlConnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
return cmd;
}
private static object ExecuteScalar(string executeString)
...{
object obj = null;
SqlCommand cmd = getSqlCommand();
try
...{
cmd.CommandText = executeString;
obj = cmd.ExecuteScalar();
}
finally
...{
cmd.Connection.Close();
}
return obj;
}
private int employeeID(string userName)
...{
string sqlString = "select EmployeeId from employee where LoginName = '" + userName + "'";
int userNameId = int.Parse(ExecuteScalar(sqlString).ToString());
return userNameId;
}
private static int _pId;
/**//// <summary>
/// 员工上一级的ID号
/// </summary>
private static int pId
...{
get ...{ return _pId; }
}
/**//// <summary>
/// 员工上一级的ID号
/// </summary>
/// <param name="pid"></param>
/// <returns></returns>
private static int ParentID(int pid)
...{
int parentId;
string sqlString = "select ParentId,isDel from employee where EmployeeID = " + pid;
SqlCommand cmd = getSqlCommand();
cmd.CommandText = sqlString ;
SqlDataReader sdr = cmd.ExecuteReader();
if (!sdr.Read())
...{
return -404;
}
parentId = sdr.GetInt32(0);
_isDel = sdr.GetBoolean(1);
if (parentId == 0 || _isDel == false)
...{
_pId = parentId;
}
sdr.Close();
cmd.Connection.Close();
return parentId;
}
/**//// <summary>
/// 判断是不是相同,如果员工的上级ID与此管理员ID相同就为 true
/// </summary>
/// <param name="number1">管理员ID</param>
/// <param name="number2">上一级的ID</param>
/// <returns></returns>
private bool isExist(int number1, int number2)
...{
if (number1 == number2)
...{
return true;
}
else
...{
return false;
}
}
/**//// <summary>
/// 看看是不是这个员工的上级员工ID号
/// </summary>
/// <returns></returns>
private bool isEmployeeParentId()
...{
int userId1 = employeeID("userName1") ;
int userId2 = employeeID("userName2");
int parId = ParentID(userId1);
bool temp = true;
while (!isExist(userId2, parId))
...{
if (pId == 0 || parId == -404)
...{
temp = false;
break;
}
parId = ParentID(parId);
}
return temp;
}
我只想到这种法子,第一种的实现我觉得好难,写不出来。
我想一定还会有再好的算法。
- 在人力资源树当中,上级对下级员工信息查看修改操作。
- MSSQL树型结构/获得上级及上上级及获得下级及下下级
- 上级在听取下级的工作汇报时的礼仪要求
- 上级下级交互感悟
- SQL读取树型所有下级或所有上级
- BOM成本计算成最下级算到最上级
- 下级不能比上级工资高吗?
- 对员工表的修改
- HTML相对路径--上级目录及下级目录的写法
- 记住:上级未答应用户的事,下级不可答应!
- HTML相对路径--上级目录及下级目录的写法
- HTML相对路径--上级目录及下级目录的写法
- windows 目录表示(上级目录和下级目录)
- SQL CTE查询所有下级部门/上级部门
- 下级向上级汇报工作时的礼仪要求
- HTML相对路径--上级目录及下级目录的写法
- HTML相对路径 上级目录及下级目录的写法
- windows 目录表示(上级目录和下级目录)
- 《设计模式精解》学习笔记(十)------Strategy(策略)模式
- 面试问题
- 《设计模式精解》学习笔记(十一)------Decorator(装饰)模式
- 基于.Net平台应用程序唯一运行实例实现
- 《设计模式精解》学习笔记(十二)------Singleton(单件)模式
- 在人力资源树当中,上级对下级员工信息查看修改操作。
- 《设计模式精解》学习笔记(十三)------Observer(观察者)模式
- 《设计模式精解》学习笔记(十四)------Template Method(模板方法)模式
- 《设计模式精解》学习笔记(十五)------FactoryMethod(工厂方法)模式
- 做树题目心得体会
- 《设计模式精解》学习笔记(十六)------总结
- Jabber学习笔记 之二
- 设计模式----Builder(生成器)模式
- 设计模式----Prototype(原形)模式