1、客服登录:客服有客服ID,单位ID:   WorkerVO workerVO = (WorkerVO) req.getSession().getAttribute("workerVO");
		if(workerVO==null){
			workerVO = new WorkerVO();
			String workerid = req.getParameter("workerid"); //单位ID
			String userid = req.getParameter("userid"); //用户ID
			if(!StringUtil.isBlank(workerid)){
				boolean b = WorkerLogService.getWorker(workerid, workerVO); //获取单位信息
				
				if(b){	//登陆成功
					workerVO.setStartDate((new Date()).getTime());					
					if(!StringUtil.isBlank(userid)){
						DeptService deptService = new DeptService();
						OrgUserVO userVO = deptService.getOrgUser(userid); //获取用户信息
						workerVO.setUserId(userid);
						if(userVO!=null){
							workerVO.setUserName(userVO.getUserName());
						}
						
					}		
					//1. get map
					// key-userkey  value-workersMap   workersMap<String,Map> ------String 为单位id,
					//--- Map为客服人员集合,Map<String,Object> ,key为客服Id, value为客服人员对象
					//(客服人员ID,客服人员姓名,单位id ,单位名称 ,状态(1在线、2忙碌、3离线),在线——1在咨询中,2空闲,如果状态是不在线:值为0)。
					super.init(config);  
					ServletContext	application=this.getServletContext();  //得到Application对象
					Map<String,Map> workersMap = (Map)application.getAttribute("workersKey");
					
					if(workersMap == null){ //判断Map是否为空
						//初始化
						Map<String,Map> workerMap = new Hashtable<String,Map>();
						Map<String,Object> childWorkerMap = new Hashtable<String, Object>();
						WorkerOnlineVO onlineWorker=new WorkerOnlineVO();
						onlineWorker.setDeptId(workerVO.getDeptNo().toString());//单位Id
						onlineWorker.setDeptName(workerVO.getDeptName());
						onlineWorker.setWorkerUserId(workerVO.getUserId());
						onlineWorker.setWorkerUserName(workerVO.getUserName());
						onlineWorker.setState("1");
						onlineWorker.setConsultate("2");
						childWorkerMap.put(workerVO.getUserId(), onlineWorker);
						workerMap.put(workerVO.getDeptNo().toString(), childWorkerMap);
						application.setAttribute("workersKey", workerMap);
					}else{
						Map<String,Object> childWorkerMap=workersMap.get(workerVO.getDeptNo());
						WorkerOnlineVO workerOnline=(WorkerOnlineVO) childWorkerMap.get(workerVO.getUserId());
						if(workerOnline==null){
							WorkerOnlineVO onlineWorker=new WorkerOnlineVO();
							onlineWorker.setDeptId(workerVO.getDeptNo().toString());
							onlineWorker.setDeptName(workerVO.getDeptName());
							onlineWorker.setWorkerUserId(workerVO.getUserId());
							onlineWorker.setWorkerUserName(workerVO.getUserName());
							onlineWorker.setState("1");
							onlineWorker.setConsultate("2");
							childWorkerMap.put(workerVO.getUserId(), onlineWorker);
							workersMap.put(workerVO.getDeptNo().toString(), childWorkerMap);
							//application.setAttribute("workersKey", workersMap);
						}else{							
							workerOnline.setState("1");
							workerOnline.setConsultate("2");
							childWorkerMap.put(workerVO.getUserId(), workerOnline);
							workersMap.put(workerVO.getDeptNo().toString(), childWorkerMap);
							
//							application.setAttribute("workersKey", workersMap);
						}
					}
					
					req.getSession().setAttribute("workerVO", workerVO);
					OnlineStatusVO.WORKER_QUESTER_MAP.put(workerid, new ArrayList<QuesterVO>());
					OnlineStatusVO.WORKER_VO_MAP.put(workerid, workerVO);
					req.getRequestDispatcher("../worker.jsp").forward(req, res);
				}else{	
					res.sendRedirect("../worker_index.jsp?flag=1");
				}
			}else if(!StringUtil.isBlank(userid)){
				if("1".equals(userid)){
					workerVO.setId("0");
					workerVO.setDeptName("技术支持");
					workerVO.setDeptNo("0");
					workerVO.setState("1");
					workerVO.setUserId(userid);
					req.getSession().setAttribute("workerVO", workerVO);
					OnlineStatusVO.WORKER_QUESTER_MAP.put("0", new ArrayList<QuesterVO>());
					OnlineStatusVO.WORKER_VO_MAP.put("0", workerVO);
					req.getRequestDispatcher("../worker.jsp").forward(req, res);
				}
			}else{
				res.sendRedirect("../worker_index.jsp?flag=1");
			}
			
			
			
			
		}else{ //workerVO != null
			if(StringUtil.isBlank(OnlineStatusVO.WORKER_QUESTER_MAP.get(workerVO.getId()))){
				OnlineStatusVO.WORKER_QUESTER_MAP.put(workerVO.getId(), new ArrayList<QuesterVO>());
			}
			if(StringUtil.isBlank(OnlineStatusVO.WORKER_VO_MAP.get(workerVO.getId()))){
				System.out.println("===OnlineStatusVO.WORKER_VO_MAP.get======");
				OnlineStatusVO.WORKER_VO_MAP.put(workerVO.getId(), workerVO);
			}
			req.getRequestDispatcher("../worker.jsp").forward(req, res);
		}
1、咨询者咨询:单位ID:
	String workerId = req.getParameter("workerId"); //单位ID
		String outmsg = "";
		if(StringUtil.isBlank(workerId)){
			Log.error("---单位Id为空------");
		}else{
			super.init(config);  
			ServletContext	application=this.getServletContext();  		
			Map<String,Map> workersMap = (Map)application.getAttribute("workersKey");
			if(workersMap==null){ //如果workersMap为空
				outmsg="请电话咨询,电话号码为:XXXXX";
			}else{
				Map<String,WorkerOnlineVO> childWorkerMap =workersMap.get(workerId);
				if(childWorkerMap==null){
					outmsg="请电话咨询,电话号码为:XXXXX";
				}else{
					//boolean flagTel=false; //无客服人员在线
					  String  workerUserIdTemp="";
					   Set<String> key = childWorkerMap.keySet();
					   for (Iterator it = key.iterator(); it.hasNext();) {
							WorkerOnlineVO workerOnlineVo =childWorkerMap.get((String)it.next()); 
							//状态(1在线、2忙碌、3离线),在线——1在咨询中,2空闲,如果状态是不在线:值为0
							//安排人员的优先级:在线 --空闲  》在线--咨询中 ,其他条件不符合。
							if(workerOnlineVo.getState().equals("1")&& workerOnlineVo.getConsultate().equals("2")){
								//在线 --空闲  ------------优先级最高
								workerUserIdTemp=workerOnlineVo.getWorkerUserId();
								break;
							 } 
							else if(workerOnlineVo.getState().equals("1")&& workerOnlineVo.getConsultate().equals("1")){
								//在线--咨询中
								if(workerUserIdTemp.equals("")){
									workerUserIdTemp=workerOnlineVo.getWorkerUserId();
								}
							 }
						
				        }
					
					if(workerUserIdTemp.equals("")){
						outmsg="请电话咨询,电话号码为:XXXXX";
					}else{
						WorkerOnlineVO workerOnlineVo = childWorkerMap.get(workerUserIdTemp);
						workerOnlineVo.setState("1");
						workerOnlineVo.setConsultate("1");
						childWorkerMap.put(workerOnlineVo.getWorkerUserId(), workerOnlineVo);
						workersMap.put(workerId, childWorkerMap); //和原来的Map一样
						//application.setAttribute("workersKey", workersMap);
						
						outmsg = "您好,请问有什么可以帮助您的吗?";						
						QuesterVO questerVO = (QuesterVO) req.getSession().getAttribute("questerVO");
						if(questerVO==null || !workerId.equals(questerVO.getWorkerId())){
							OnlineStatusVO.WORKER_USER.put("workerUser", workerOnlineVo);
							questerVO = QuesterLogService.getQuester(workerId); //必须使用人id
							questerVO.setWorkerUserId(workerOnlineVo.getWorkerUserId());
							req.getSession().setAttribute("questerVO", questerVO);							
							OnlineStatusVO.WORKER_QUESTER_MAP.get(workerId).add(questerVO);
							OnlineStatusVO.QUESTER_VO_MAP.put(questerVO.getId(), questerVO);
							req.setAttribute("workerOnlineVo", workerOnlineVo);
							
							
						}
					}
					
					req.setAttribute("outmsg", outmsg);
					req.getRequestDispatcher("/quester.jsp").forward(req, res);
					
				}
			}
		}	
3、中间类:
	public class OnlineStatusVO {
public static Map<String,WorkerVO> WORKER_VO_MAP = new HashMap<String,WorkerVO>();
public static Map<String,QuesterVO> QUESTER_VO_MAP = new HashMap<String,QuesterVO>(); 
	 	public static Map<String, List<QuesterVO>>  WORKER_QUESTER_MAP = new HashMap<String, List<QuesterVO>>();
 	 	 	public static Map<String, WorkerOnlineVO>  WORKER_USER = new HashMap<String, WorkerOnlineVO>();
 	 	 }