📄 deptserviceimpl.java
字号:
package cn.jx.ecjtu.oa.services.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.sun.jmx.snmp.UserAcl;
import cn.jx.ecjtu.oa.ps.pojo.Company;
import cn.jx.ecjtu.oa.ps.pojo.Dept;
import cn.jx.ecjtu.oa.ps.pojo.LoginUser;
import cn.jx.ecjtu.oa.ps.pojo.Manager;
import cn.jx.ecjtu.oa.services.DeptService;
import cn.jx.ecjtu.oa.services.Node;
import cn.jx.ecjtu.oa.services.RootNode;
import cn.jx.ecjtu.oa.ps.dao.CompanyDao;
import cn.jx.ecjtu.oa.ps.dao.DaoFactory;
import cn.jx.ecjtu.oa.ps.dao.DeptDao;
import cn.jx.ecjtu.oa.ps.dao.LoginUserDao;
import cn.jx.ecjtu.oa.ps.dao.ManagerDao;
/**
*
* DeptService 实现类
*
* @author 王辉
* @version $Revision: 1.15 $
* @since 1.0
*/
public class DeptServiceImpl implements DeptService {
private DeptDao deptDao = (DeptDao) DaoFactory.getDao(DeptDao.class);
private LoginUserDao userDao = (LoginUserDao) DaoFactory
.getDao(LoginUserDao.class);
private ManagerDao managerDao = (ManagerDao) DaoFactory
.getDao(ManagerDao.class);
private CompanyDao companyDao = (CompanyDao) DaoFactory
.getDao(CompanyDao.class);
/**
* 根据部门的 id获取该部门所有的人员
*/
public Map<Integer, List<LoginUser>> getAllUserGroupByDeptID(int dept_id) {
Map<Integer, List<LoginUser>> map = new HashMap<Integer, List<LoginUser>>();
List<LoginUser> listusers = userDao.findUserByDeptId(dept_id);
map.put(dept_id, listusers);
return map;
}
/**
* 获取部门id,部门名称,经理id,经理名字列表
*/
public List<Manager> getManagers() {
List<Dept> listDept = deptDao.findAllDept();
List<Integer> list = new ArrayList<Integer>();
List<Manager> listManager = new ArrayList<Manager>();
Map<Integer, String> userMap=new HashMap<Integer, String>();
for (int i = 0; i < listDept.size(); i++) {
Dept dept = listDept.get(i);
list.add(dept.getManager_id());
}
List<LoginUser> listUser = userDao.findByIds(list);
for(LoginUser user:listUser){
userMap.put(user.getId(), user.getRealName());
}
for (int j = 0; j < listDept.size(); j++) {
Dept dept = listDept.get(j);
Manager manager = new Manager();
manager.setDept_id(dept.getDept_id());
manager.setDept_name(dept.getName());
LoginUser user=new LoginUser();
user=userDao.findById(dept.getManager_id());
if(user!=null){
if(user.getDeptID()==dept.getDept_id()){
String name=userMap.get(dept.getManager_id());
manager.setUser_id(dept.getManager_id());
manager.setUser_name(name);
}
else
{
managerDao.setManager(dept.getDept_id(), 0);
manager.setUser_id(0);
manager.setUser_name(null);
}
}
else{
manager.setUser_id(0);
manager.setUser_name(null);
}
listManager.add(manager);
}
return listManager;
}
private RootNode rootNode;
private boolean isInitTree = false;
private Map<Integer, Node> depts = new Hashtable<Integer, Node>();
/**
* 进行企业内部组织结构的树型数据表达的方法.同时,对组织结构的数据进行缓存
*
* @return
*/
private synchronized void initDeptTree() {
if (!isInitTree) {
rootNode = null;
depts.clear();
Company company = companyDao.findCompanyInfoByID(1);
List<Dept> depts = this.deptDao.findAllDept();
rootNode = new RootNode();
rootNode.setValue(company);
List<Node> currentChildren = getChildren(rootNode, depts);
int levelNode;
do {
levelNode = 0;
List<Node> nextChildren = new ArrayList<Node>();
for (Node node : currentChildren) {
List<Node> chs = getChildren(node, depts);
nextChildren.addAll(chs);
}
levelNode = nextChildren.size();
currentChildren = nextChildren;
} while (levelNode > 0 && depts.size() > 0);
if (depts.size() > 0) {
List<Node> badChildren = new ArrayList<Node>();
for (Dept dept : depts) {
Node node = new Node();
node.setValue(dept);
this.depts.put(dept.getDept_id(), node);
badChildren.add(node);
}
rootNode.setBadChildren(badChildren);
}
this.isInitTree = true;
}
}
/**
* 从所有部门depts中取得上级部门是parentNode的部门
* @param parentNode
* @param depts
* @return children
*/
private List<Node> getChildren(Node parentNode, List<Dept> depts) {
List<Node> children = new ArrayList<Node>();
int parentId = parentNode.getId();
for (Iterator<Dept> it = depts.iterator(); it.hasNext();) {
Dept dept = it.next();
if (dept.getPredept_id() == parentId) {
Node node = new Node();
node.setParent(parentNode);
node.setValue(dept);
this.depts.put(dept.getDept_id(), node);
children.add(node);
it.remove();
}
}
parentNode.setChildren(children);
return children;
}
/**
* 取得树的根节点即公司
*/
public synchronized Node getRootNode() {
if (!isInitTree) {
initDeptTree();
}
return rootNode;
}
/**
* 根据部门ID查询部门信息
*/
public Dept getdeptInfo(int dept_id) {
if(!isInitTree){
this.initDeptTree();
}
return (Dept)((Node)depts.get(dept_id)).getValue();
}
/**
* 删除部门,当有子部门的时候,将子部门的上级部门id,设置为要删除的部门的上级部门id
* 将所属部门的人员的所属部门的id设置为0
*/
public int removeDept(int id) {
if(!isInitTree){
this.initDeptTree();
}
Node toRemove=this.depts.get(id);
if(toRemove==null) return 0;
Dept toRemoveDept=(Dept)toRemove.getValue();
int i=0;
i=deptDao.removeDept(id);
List<Node> children=toRemove.getChildren();
for (Node child : children) {
Dept dept=(Dept)child.getValue();
dept.setPredept_id(toRemoveDept.getPredept_id());
deptDao.updateDept(dept);
}
List<LoginUser> users=new ArrayList<LoginUser>();
users=userDao.findUserByDeptId(id);
for(LoginUser user:users){
user.setDeptID(0);
userDao.updateUser(user);
}
this.isInitTree=false;
return i;
}
/**
* 增加部门
*/
public int saveDept(Dept dept) {
int i=0;
i=deptDao.saveDept(dept);
this.isInitTree=false;
return i;
}
/**
* 设置部门经理
*/
public int setManagers(int dept_id, int user_id) {
int i=0;
i=managerDao.setManager(dept_id, user_id);
this.isInitTree=false;
return i;
}
/**
* 修改部门
*/
public int updateDept(Dept dept) {
int no=0;
no=dept.getDept_id();
Dept old=deptDao.findDeptInfoByID(no);
if(dept.equals(old)) return 0;
deptDao.updateDept(dept);
this.isInitTree=false;
return 1;
}
/**
* 根据公司的id查找公司的信息
*/
public Company getCompanyInfo(int com_id) {
return companyDao.findCompanyInfoByID(com_id);
}
/* (non-Javadoc)
* @see cn.jx.ecjtu.oa.services.CompanyService#updateCompanyinfo(cn.jx.ecjtu.oa.ps.pojo.Company)
*/
/**
* 修改公司的信息
*/
public int updateCompanyInfo(Company com) {
if(!isInitTree){
this.initDeptTree();
}
Company old=(Company)this.rootNode.getValue();
if(com.equals(old)) return 0;
int ret=companyDao.updateCompanyInfo(com);
rootNode.setValue(com);
return ret;
}
/**
* 增加公司信息
*/
public int saveCompanyInfo(Company com) {
int ret= companyDao.saveCompanyInfo(com);
this.isInitTree=false;
return ret;
}
public List<Manager> getManagers(int deptId) {
if(!isInitTree){
this.initDeptTree();
}
Node node=depts.get(deptId);
if(node==null) return new ArrayList<Manager>();
Map<Integer,Manager> map=new HashMap<Integer, Manager>();
Dept dept=(Dept)node.getValue();
map.put(dept.getManager_id(), new Manager(dept.getDept_id(),dept.getName(),dept.getManager_id(),""));
Node parent;
while((parent=node.getParent())!= null){
if(parent instanceof RootNode){
break;
}
else{
Dept d=(Dept)parent.getValue();
if(d!=null){
map.put(d.getManager_id(), new Manager(d.getDept_id(),d.getName(),d.getManager_id(),""));
}
}
}
List<Integer> ids=new ArrayList<Integer>();
ids.addAll(map.keySet());
List<LoginUser> listUser = userDao.findByIds(ids);
for(LoginUser user:listUser){
Manager m=map.get(user.getId());
if(m != null){
m.setUser_name(user.getRealName());
}
}
List<Manager> managers=new ArrayList<Manager>();
managers.addAll(map.values());
return managers;
}
public List<Dept> findAllDepts() {
return deptDao.findAllDept();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -