📄 simpleorganizecache.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 + -