在人力资源树当中,上级对下级员工信息查看修改操作。

人力资源

在一个树型结构当中,存在对下属员工进行操作,如修改员工的信息等.

员工表字段 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;
}


我只想到这种法子,第一种的实现我觉得好难,写不出来。

我想一定还会有再好的算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目中使用的技术: 1、前端:jsp、css、javascript、jQuery(js框架)、jquery.form.js、HTML富文本编辑器、        My97时间控件(添加员工)2、后台:Struts2、动态代理、Mybatis框架、log4J日志框架、jstl 、jstl自定义分页标签、代码机器人、Dwr、POI(实现Excel文件的导入导出)等3、数据库:Mysql4、服务器:Tomcat项目中涉及的功能: 1、项目以及数据库搭建2、用户异步登录、退出3、拦截器功能实现以及整合动态代理4、公告模块的增加、修改、删除、查询以及预览功能实现、文件异步上传5、文档模块的增加、修改、删除、查询以及文档的上传下载6、员工信息的增加、修改、删除、查询以及员工头像异步上传、员工信息导出至Excel文件7、自定义分页标签实现(24种样式随意切换)8、代码机器人使用等等其他实战项目:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771 java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008 java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007 JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543 JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572 JavaWeb项目实战之宿舍管理系统(Java毕业设计含源码)https://edu.csdn.net/course/detail/26721 JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610 java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770 java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989 系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941 Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值