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

📄 simpleorganizecache.java

📁 基于java的组号查询模块
💻 JAVA
字号:
/**
 * 
 */
package com.lily.dap.service.organize.impl;

import java.util.Iterator;
import java.util.List;

import org.apache.commons.collections.FastHashMap;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;

import com.lily.dap.model.QueryCondition;
import com.lily.dap.model.organize.Department;
import com.lily.dap.model.organize.Group;
import com.lily.dap.model.organize.Person;
import com.lily.dap.model.organize.Post;
import com.lily.dap.model.organize.PostPerson;
import com.lily.dap.service.core.BaseManager;
import com.lily.dap.service.core.exception.NotSupportOperationException;

/**
 * 组织机构缓存类,存放系统组织机构信息,以便于快速检索组织机构信息
 * 并且实现了数据监听
 * 
 * @author zouxuemo
 *
 */
public class SimpleOrganizeCache extends BaseManager implements OrganizeCache, InitializingBean, DisposableBean, ApplicationListener {
	/**
	 * <code>rootDepartment</code> 根部门
	 */
	Department rootDepartment = null;
	
	/**
	 * <code>departmentMap</code> 存放部门的缓存数据信息
	 */
	FastHashMap departmentMap = new FastHashMap();
	/**
	 * <code>postMap</code> 存放岗位的缓存数据信息
	 */
	FastHashMap postMap = new FastHashMap();
	/**
	 * <code>personMap</code> 存放人员的缓存数据信息
	 */
	FastHashMap personMap = new FastHashMap();
	/**
	 * <code>groupMap</code> 存放群组的缓存数据信息
	 */
	FastHashMap groupMap = new FastHashMap();

	/**
	 * @return departmentMap
	 */
	public FastHashMap getDepartmentMap() {
		return departmentMap;
	}

	/**
	 * @return groupMap
	 */
	public FastHashMap getGroupMap() {
		return groupMap;
	}

	/**
	 * @return personMap
	 */
	public FastHashMap getPersonMap() {
		return personMap;
	}

	/**
	 * @return postMap
	 */
	public FastHashMap getPostMap() {
		return postMap;
	}

	/**
	 * @return rootDepartment
	 */
	public Department getRootDepartment() {
		return rootDepartment;
	}

	/* (非 Javadoc)
	 * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
	 */
	public void afterPropertiesSet() throws Exception {
        loadDepartmentData();
        loadPostData();
        loadPersonData();
        loadGroupData();
	}

	/* (非 Javadoc)
	 * @see org.springframework.beans.factory.DisposableBean#destroy()
	 */
	public void destroy() throws Exception {
		rootDepartment = null;
		
		departmentMap.clear();
		postMap.clear();
		personMap.clear();
		groupMap.clear();
	}

	/* (非 Javadoc)
	 * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent)
	 */
	public void onApplicationEvent(ApplicationEvent event) {
		if (!(event instanceof OrganizeNotifyEvent))
			return;
		
		OrganizeNotifyEvent e = (OrganizeNotifyEvent)event;
        String clazz = e.getEventClass();
        
        if ("EVENT_CLASS_DEPARTMENT".equals(clazz)) {
            processDepartmentEvent(e);
        } else if ("EVENT_CLASS_POST".equals(clazz)) {
            processPostEvent(e);
        } else if ("EVENT_CLASS_PERSON".equals(clazz)) {
            processPersonEvent(e);
        } else if ("EVENT_CLASS_GROUP".equals(clazz)) {
            processGroupEvent(e);
        } 
	}
    
    private void loadDepartmentData() {
        List departList = gets(Department.class, new QueryCondition());
        Iterator it = departList.iterator();
        while (it.hasNext()) {
            Department dep = (Department)it.next();
            departmentMap.put(new Long(dep.getId()), dep);
            
            if (dep.getParent_id() == 0)
            	rootDepartment = dep;
        }
        
        if (rootDepartment == null)
        	log.warn("警告-系统没有设置根部门!");
        
        it = departList.iterator();
        while (it.hasNext()) {
            Department dep = (Department)it.next();
            long parent_id = dep.getParent_id();
            if (parent_id > 0 && departmentMap.containsKey(new Long(parent_id))) {
                Department parent = (Department)departmentMap.get(new Long(parent_id));
                parent.getChildDeps().add(dep);
            }
        }
    }
    
    private void loadPostData() {
        List postList = gets(Post.class, new QueryCondition());
        Iterator it = postList.iterator();
        while (it.hasNext()) {
            Post post = (Post)it.next();
            postMap.put(new Long(post.getId()), post);
            
            long dep_id = post.getDep_id();
            if (dep_id > 0 && departmentMap.containsKey(new Long(dep_id))) {
                Department parent = (Department)departmentMap.get(new Long(dep_id));
                parent.getPosts().add(post);
            }
        }
    }
    
    private void loadPersonData() {
        List personList = gets(Person.class, new QueryCondition());
        Iterator it = personList.iterator();
        while (it.hasNext()) {
            Person person = (Person)it.next();
            personMap.put(new Long(person.getId()), person);
        }
        
        List postPersonList = gets(PostPerson.class, new QueryCondition());
        it = postPersonList.iterator();
        while (it.hasNext()) {
        	PostPerson pp = (PostPerson)it.next();
        	
            Long person_id = new Long(pp.getPerson_id());
            Long post_id = new Long(pp.getPost_id());
            
            if (postMap.containsKey(post_id) && personMap.containsKey(person_id)) {
                Post post = (Post)postMap.get(post_id);
                Person person = (Person)personMap.get(person_id);
                post.getPersons().add(person);
            }
        }
    }
    
    private void loadGroupData() {
        List groupList = gets(Group.class, new QueryCondition());
        Iterator it = groupList.iterator();
        while (it.hasNext()) {
        	Group group = (Group)it.next();
        	groupMap.put(new Long(group.getId()), group);
        }
    }
    
    private void processDepartmentEvent(OrganizeNotifyEvent event) {
        String name = event.getEventName();
        Department d = (Department)event.getContext1();
        long did = d.getId();
        
        if (OrganizeNotifyEvent.EVENT_ADD_DEPARTMENT.equals(name)) {
        	Department dep = new Department();
        	dep.copy(d);
            departmentMap.put(new Long(dep.getId()), dep);
            
            long parent_id = dep.getParent_id();
            if (parent_id > 0 && departmentMap.containsKey(new Long(parent_id))) {
                Department parent = (Department)departmentMap.get(new Long(parent_id));
                parent.getChildDeps().add(dep);
            }
        } else if (OrganizeNotifyEvent.EVENT_REMOVE_DEPARTMENT.equals(name)) {
            if (departmentMap.containsKey(new Long(did))) {
                Department dep = (Department)departmentMap.remove(new Long(did));
                
                long parent_id = dep.getParent_id();
                if (parent_id > 0 && departmentMap.containsKey(new Long(parent_id))) {
                    Department parent = (Department)departmentMap.get(new Long(parent_id));
                    parent.getChildDeps().remove(dep);
                }
            }
        } else if (OrganizeNotifyEvent.EVENT_MODIFY_DEPARTMENT.equals(name)) {
            if (!departmentMap.containsKey(new Long(did))) {
            	Department dep = new Department();
            	dep.copy(d);
    			
            	departmentMap.put(new Long(dep.getId()), dep);
            } else {
            	Department dep = (Department)departmentMap.get(new Long(did));
            	dep.copy(d);
            }
        }
    }
    
    private void processPostEvent(OrganizeNotifyEvent event) {
        String name = event.getEventName();
        Post p = (Post)event.getContext1();
        long pid = p.getId();
        
        if (OrganizeNotifyEvent.EVENT_ADD_POST.equals(name)) {
            Post post = new Post();
            post.copy(p);
            postMap.put(new Long(post.getId()), post);
            
            long dep_id = post.getDep_id();
            if (dep_id > 0 && departmentMap.containsKey(new Long(dep_id))) {
                Department parent = (Department)departmentMap.get(new Long(dep_id));
                parent.getPosts().add(post);
            }
        } else if (OrganizeNotifyEvent.EVENT_REMOVE_POST.equals(name)) {
            if (postMap.containsKey(new Long(pid))) {
                Post post = (Post)postMap.remove(new Long(pid));
                
                long dep_id = post.getDep_id();
                if (dep_id > 0 && departmentMap.containsKey(new Long(dep_id))) {
                    Department parent = (Department)departmentMap.get(new Long(dep_id));
                    parent.getPosts().remove(post);
                }
            }
        } else if (OrganizeNotifyEvent.EVENT_MODIFY_POST.equals(name)) {
            if (!postMap.containsKey(new Long(pid))) {
            	Post post = new Post();
            	post.copy(p);
    			
            	postMap.put(new Long(post.getId()), post);
            } else {
            	Post post = (Post)postMap.get(new Long(pid));
            	post.copy(p);
            }
        } else if (OrganizeNotifyEvent.EVENT_ADD_POST_HAVE_PERSON.equals(name)) {
        	long post_id = ((Post)event.getContext1()).getId();
        	long person_id = ((Person)event.getContext2()).getId();
            if (postMap.containsKey(new Long(post_id)) && personMap.containsKey(new Long(person_id))) {
                Post post = (Post)postMap.get(new Long(post_id));
                Person person = (Person)personMap.get(new Long(person_id));
                post.getPersons().add(person);
            }
        } else if (OrganizeNotifyEvent.EVENT_REMOVE_POST_HAVE_PERSON.equals(name)) {
            long post_id =  ((Post)event.getContext1()).getId();
            long person_id =  ((Person)event.getContext2()).getId();
            if (postMap.containsKey(new Long(post_id)) && personMap.containsKey(new Long(person_id))) {
                Post post = (Post)postMap.get(new Long(post_id));
                Person person = (Person)personMap.get(new Long(person_id));
                post.getPersons().remove(person);
            }
        }
    }
    
    private void processPersonEvent(OrganizeNotifyEvent event) {
        String name = event.getEventName();
        Person p = (Person)event.getContext1();
        long pid = p.getId();
        
		if (OrganizeNotifyEvent.EVENT_ADD_PERSON.equals(name)) {
			Person person = new Person();
			person.copy(p);
			
            postMap.put(new Long(person.getId()), person);
		} else if (OrganizeNotifyEvent.EVENT_REMOVE_PERSON.equals(name)) {
			if (personMap.containsKey(new Long(pid))) {
				personMap.remove(new Long(pid));
			}
		} else if (OrganizeNotifyEvent.EVENT_MODIFY_PERSON.equals(name)) {
            if (!personMap.containsKey(new Long(pid))) {
            	Person person = new Person();
            	person.copy(p);
    			
                postMap.put(new Long(person.getId()), person);
            } else {
            	Person person = (Person)personMap.get(new Long(pid));
            	person.copy(p);
            }
        }
    }
    
    private void processGroupEvent(OrganizeNotifyEvent event) {
        String name = event.getEventName();
        Group g = (Group)event.getContext1();
        long gid = g.getId();
        
        if (OrganizeNotifyEvent.EVENT_ADD_GROUP.equals(name)) {
        	Group group = new Group();
        	group.copy(g);
			groupMap.put(new Long(group.getId()), group);
        } else if (OrganizeNotifyEvent.EVENT_REMOVE_GROUP.equals(name)) {
            if (groupMap.containsKey(new Long(gid))) {
                groupMap.remove(new Long(gid));
            }
        } else if (OrganizeNotifyEvent.EVENT_MODIFY_GROUP.equals(name)) {
            if (!groupMap.containsKey(new Long(gid))) {
            	Group group = new Group();
            	group.copy(g);
    			
            	groupMap.put(new Long(gid), group);
            } else {
            	Group group = (Group)groupMap.get(new Long(gid));
            	group.copy(g);
            }
        }
    }

	/* (非 Javadoc)
	 * @see com.lily.dap.service.core.BaseManager#onBeforeAdd(java.lang.Object)
	 */
	protected Object onBeforeAdd(Object entity) {
		throw new NotSupportOperationException("接口不允许调用add(...)方法!");
	}

	/* (非 Javadoc)
	 * @see com.lily.dap.service.core.BaseManager#onBeforeModify(java.lang.Object)
	 */
	protected Object onBeforeModify(Object entity) {
		throw new NotSupportOperationException("接口不允许调用modify(...)方法!");
	}

	/* (非 Javadoc)
	 * @see com.lily.dap.service.core.BaseManager#onBeforeRemove(java.lang.Object)
	 */
	protected void onBeforeRemove(Object entity) {
		throw new NotSupportOperationException("接口不允许调用remove(...)方法!");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -