⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deptserviceimpl.java

📁 oa办公系统
💻 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 + -