top.jsp
<%@ page import="java.util.Map" %>
<%@ page import="com.seipher.dto.Phone" %>
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<% response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragrma", "no-cache");
response.setDateHeader("Expires", 0); %>
<head>
<title>logo页面</title>
<script type='text/javascript' src='/dwr/engine.js'></script>
<script type='text/javascript' src='/agent/js/util.js'></script>
<script type='text/javascript' src='/agent/js/s2cp.js'></script>
<script type='text/javascript' src='/dwr/interface/ctiManageDwr.js'></script>
<script type='text/javascript' src='/dwr/interface/userDwr.js'></script>
<script type='text/javascript' src='/dwr/interface/notesDwr.js'></script>
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
body,td,th {
font-size: 12px;
color: #000000;
}
.STYLE1 {color: #FFFFFF}
-->
</style>
<script type="text/javascript">
<%
String sysRole = (String)session.getAttribute("sysRole");
%>
var ext_phone = <%="".equals(session.getAttribute("phone")) || session.getAttribute("phone") == null ? 0 : session.getAttribute("phone")%>;
var sysRole = '<%=sysRole%>';
function mainFrameHref(){
<%if ( "1".equals(sysRole )) {%>
parent.mainFrame.location.href = "/agent/work/userFault.jsp";
<%}%>
<%if ( "2".equals(sysRole )) {%>
parent.mainFrame.location.href = "/agent/realTime/agentState.jsp";
<%}%>
<%if ( "3".equals(sysRole )) {%>
parent.mainFrame.location.href = "/agent/work/workOrder.jsp";
<%}%>
<%if ( "4".equals(sysRole )) {%>
parent.mainFrame.location.href = "/agent/sysAgent/list.jsp";
<%}%>
}
function connectError() {
<%
Map<String,String> map = Phone.getStates();
String status = map.get(session.getAttribute("phone"));
%>
var status = <%=status == null ? "\"\"" : "\""+status+"\""%>;
if(status !=""){
alert(status);
}
}
function testPhone(){
if(ext_phone == null || ext_phone == 0){
//设置主叫号码为可见
var telNum = document.getElementById("telNum");
var telImg = document.getElementById("telImg");
telNum.style.display = "block";
telImg.style.dispay = "";
//显示来电号码
// telImg.innerHTML = "<img src='/agent/images/PH1.gif' width='31' height='36' />";
telNum.innerHTML = "分机未绑定";
}
}
function register() {
ctiManageDwr.updateUserList('<%=session.getId()%>_top', true, registerCallBack);
}
function updateUsers(data) {
}
function registerCallBack(data) {
}
function errorHandle(error) {
window.status = error;
}
dwr.engine.setErrorHandler(errorHandle);
dwr.engine.setWarningHandler(errorHandle);
function active() {
dwr.engine.setActiveReverseAjax(true);
// 激活反转 重要
}
function getAgentState(data) {
}
function getSessionState(data) {
}
function changeAgentState(data) {
}
//来电转接
function incomming(telNumber, phone) {
try {
window.status = "来电号码:" + telNumber + " 转接坐席:" + phone + " 登陆坐席:" + ext_phone;
if (ext_phone == phone) {
// alert(telNumber);
//设置主叫号码为可见
var telNum = document.getElementById("telNum");
var telImg = document.getElementById("telImg");
telNum.style.display = "block";
telImg.style.dispay = "";
//显示来电号码
telImg.innerHTML = "<img src='/agent/images/PH1.gif' width='31' height='36' />";
telNum.innerHTML = telNumber;
parent.mainFrame.setCallTel(telNumber);
}
} catch(ex) {
//alert(ex);
}
}
//开始通话计时
function startTalk(phone) {
try {
if (ext_phone == phone) {
var talkSpan = document.getElementById("talkSpan");
talkSpan.style.display = "block";
//开始通话计时
DoCallTimer();
}
} catch(ex) {
}
}
function quit(){ //点XX的时候会进去
if (event.clientX<document.body.clientWidth && event.clientY<0||event.altKey) {
window.location.href = "clear.jsp";
}
}
//通话计时
var CallTimeLen = "0";
var timekeeping = null;
var minute = "0";
var second = "0";
function DoCallTimer()
{
try {
var talkTime = document.getElementById("talkTime");
CallTimeLen = parseInt(CallTimeLen) + 1;
minute = parseInt(CallTimeLen / 60);
second = CallTimeLen % 60;
if (minute == "0")
{
talkTime.innerText = second + " 秒";
}
else
{
talkTime.innerText = minute + " 分 " + second + " 秒";
}
window.timekeeping = window.setTimeout("DoCallTimer()", 1000);
} catch(ex) {
}
}
//清除时间
function clearTime() {
try {
clearTimeout(window.timekeeping);
CallTimeLen = "0";
} catch(ex) {
}
}
//隐藏主叫号码及通话计时
function hiddenTalk(phone) {
try {
if (ext_phone == phone) {
clearTime();
var telNum = document.getElementById("telNum");
var talkSpan = document.getElementById("talkSpan");
var telImg = document.getElementById("telImg");
telNum.style.display = "none";
talkSpan.style.display = "none";
telImg.innerHTML = " ";
try {
parent.mainFrame.clearCallTel();
} catch(ex) {
}
}
} catch(ex) {
}
}
</script>
</head>
<%--<body onload="active();MM_preloadImages('/agent/images/tqdl_.png','/agent/images/qhyh_.png')">--%>
<%--<body onbeforeunload="quit()" onunload="quit()" onload="register();MM_preloadImages('/agent/images/tqdl_.png','/agent/images/qhyh_.png')">--%>
<body onbeforeunload="quit()" onunload="quit()" onload="register();active();findCmt();connectError();mainFrameHref();MM_preloadImages('/agent/images/tqdl_.png','/agent/images/qhyh_.png')">
<%--<body onbeforeunload="quit()" onunload="quit()" onload="register();active();testPhone();MM_preloadImages('/agent/images/tqdl_.png','/agent/images/qhyh_.png')">--%>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="17%" align="left" background="/softPhone/softImages/top_02.gif">
<img src="/softPhone/softImages/logo.gif" width="199" height="43" alt="" /></td>
<td width="54%" background="/softPhone/softImages/top_02.gif"><table width="85%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td nowrap width="35" height="17" align="left"><img src="/softPhone/softImages/top_tel.gif" width="17" height="17" /></td>
<td nowrap width="33"><strong>保持</strong></td>
<td nowrap width="69"> </td>
<td nowrap colspan="3"> </td>
</tr>
<tr>
<td nowrap width="25" align="center" valign="middle"><img src="/softPhone/softImages/top_jt.gif" width="10" height="10" /></td>
<td nowrap height="17"> </td>
<td nowrap width="69" align="left"><strong>电话号码:</strong></td>
<td nowrap width="81" align="center">13720425172</td>
<td nowrap width="64"><strong><span id="qtqk">其他情况</span></strong></td>
<td nowrap width="259"> </td>
</tr>
</table></td>
<td width="2%" align="left" background="/softPhone/softImages/top_05.gif"><img src="/softPhone/softImages/top_04.gif" width="23" height="43" alt="" /></td>
<td width="27%" align="right" background="/softPhone/softImages/top_05.gif"><table width="10%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table width="220" height="18" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="7%"><img src="/softPhone/softImages/top_ms.gif" width="15" height="11" /></td>
<td width="24%" align="left"><span class="STYLE1" onclick="openWindow()" style="cursor:pointer">在线便签</span></td>
<td width="9%"><img src="/softPhone/softImages/top_xg.gif" onclick="changePwd()" style="cursor:pointer" width="16" height="16" /></td>
<td width="24%" align="left" class="STYLE1"><span onclick="changePwd()" style="cursor:pointer">修改密码</span></td>
<td width="6%"><img src="/softPhone/softImages/top_gb.gif" onclick="quitSys()" style="cursor:pointer" width="15" height="13" /></td>
<td width="30%" class="STYLE1"><span onclick="quitSys()" style="cursor:pointer">退出登录</span></td>
</tr>
<tr><td colspan="6"><span name="info" id="info" style="color:red"></span></td></tr>
</table></td>
</tr>
</table></td>
</tr>
</table>
<span id="span1"> </span>
</body>
</html>
<script type="text/javascript">
function changePwd() {
window.showModelessDialog("/agent/sysAgent/changePwd.jsp", window, "dialogWidth:300px;dialogHeight:200px;status:No;resizable:Yes;center:Yes");
}
function quitSys() {
if (confirm("是否退出本系统?")) {
userDwr.logout(backLogout);
}
}
function backLogout(data) {
window.parent.location = '/agent/login.jsp';
}
function findCmt(){
notesDwr.queryAllUnreadCmt("<%=session.getId()%>",showInfo);
}
function showInfo(data){
if(data.length>0){
document.getElementById("info").innerHTML = "您有" + data.length + "条未读消息";
}else{
document.getElementById("info").innerHTML = "";
}
}
function openWindow(){
window.open("/agent/notes/onlineUser.jsp","","width=600px,height=350px,toolbar=0,menubar=0");
}
</script>
chat.jsp
<%@ page contentType="text/html;charset=utf-8" language="java" isELIgnored="false" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>即时通信</title>
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
body,td,th {
font-size: 12px;
color: #006699;
}
.STYLE1 {color: #000000}
-->
</style>
<script type='text/javascript' src='/dwr/util.js'></script>
<script type='text/javascript' src='/dwr/engine.js'></script>
<script type='text/javascript' src='/agent/js/s2cp.js'></script>
<script type='text/javascript' src='/agent/js/util.js'></script>
<script type="text/javascript" src="/dwr/interface/notesDwr.js"></script>
</head>
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragrma","no-cache");
response.setDateHeader("Expires",0);
%>
<body onbeforeunload="to_remove();" onunload="" onload="userList();updateScriptSession();messageList();reverse();">
<form name="imform" >
<input type="hidden" name="senderId" value="">
<input type="hidden" name="senderName" value="">
<input type="hidden" name="receiverId" value="">
<input type="hidden" name="receiverName" value="">
<input type="hidden" name="receiverPassword" value="">
<table width="592" height="337" border="0" cellpadding="0" cellspacing="0" bgcolor="#C1E1FA" style="border:1px solid #3F87BC;">
<tr>
<td height="21" colspan="5" align="left" valign="middle">
<table width="210" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="43" align="center" valign="middle"><img src="/agent/images/yd.gif" width="16" height="16" /></td>
<td width="167"><strong id="note">与 对话中</strong></td>
</tr>
</table>
</td>
<td width="207" rowspan="6" align="center" valign="top">
<table width="197" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="139"> </td>
<td width="80" align="right" valign="top"><table width="77" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="26" height="18"><img src="/agent/images/zxh.gif" width="26" /></td>
<td width="26"><img src="/agent/images/zdh.gif" width="26" /></td>
<td width="25"><img src="/agent/images/j_gb_t.gif" width="25" /></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="20" colspan="2"> </td>
</tr>
<tr>
<td colspan="2" align="center" valign="top">
<table width="202" border="0" cellspacing="0" cellpadding="0" style="border:1px solid #3F87BA;">
<tr>
<td width="27" height="22" align="center" valign="middle" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "><img src="/agent/images/qlt.gif" width="20" height="17" /></td>
<td width="148" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "> </td>
<td width="25" align="center" valign="middle" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "><img src="/agent/images/ljt_t.gif" width="9" height="9" /></td>
</tr>
<tr>
<td height="93px" valign="top" colspan="3" bgcolor="#FFFFFF">
<table name="onlineUser" id="onlineUser" width="163px" border="0" align="center" cellpadding="0" cellspacing="0">
<span id="online"> </span>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="8" colspan="2"></td>
</tr>
<tr>
<td height="56" colspan="2" align="center" valign="top">
<table width="201" height="161" border="0" cellpadding="0" cellspacing="0" style="border:1px solid #3F87BA;">
<tr>
<td width="26" height="21" align="center" valign="middle" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "><img src="/agent/images/qlt.gif" width="20" height="17" /></td>
<td width="159" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "> </td>
<td width="14" align="center" valign="middle" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "><img src="/agent/images/ljt_t.gif" width="9" height="9" /></td>
</tr>
<tr>
<td height="135" colspan="3" align="center" valign="top" bgcolor="#FFFFFF">
<table width="163" border="0" align="center" cellpadding="0" cellspacing="0">
<span id="users"> </span>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="13" height="15"> </td>
<td width="97">
<table width="97" border="0" cellspacing="0" cellpadding="0">
<tr bgcolor="#C1E1FA">
<td align="center" valign="middle"><img src="/agent/images/ckltjl.gif" alt="" width="15" height="16" /></td>
<td align="left" valign="middle" onclick="showHistory();" style="cursor:pointer">查看聊天记录</td>
</tr>
</table>
</td>
<td width="80" height="15">
<table width="80" border="0" cellspacing="0" cellpadding="0">
<tr bgcolor="#C1E1FA">
<td align="center" valign="middle"><img src="/agent/images/qkltjl.gif" alt="" width="16" height="16" /></td>
<td align="left" valign="middle" onclick="to_clear();" style="cursor:pointer">清空记录</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="201" colspan="5" align="center" valign="top">
<table width="326" height="201" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="201" align="left">
<div name="msg" id="msg" style="color:black;overflow:scroll;overflow-x:hidden;overflow-y:scroll;width:370px;height:201px;background-color:#FFFFFF">
</div>
</td>
</tr>
</table> </td>
</tr>
<tr>
<td height="8" colspan="5" align="center"></td>
</tr>
<tr>
<td height="18" colspan="5" align="center">
<table width="328" border="0" cellspacing="0" cellpadding="0" style="border:1px solid #3F87BC;">
<tr>
<td width="326" bgcolor="#FFFFFF"> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF"><textarea name="message" id="message" cols="44" rows="3" style="border:0px"></textarea></td>
</tr>
</table></td>
</tr>
<tr>
<td colspan="2" align="center" valign="middle">Enter键 换行 Ctrl+Enter键 发送消息</td>
<td height="30" colspan="3" align="center" valign="middle"><table width="154" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="77" align="center" valign="middle"><img src="/agent/images/j_fs.gif" width="65" height="22" style="cursor:pointer" onclick="send();"/></td>
<td width="77" align="center" valign="middle"><img src="/agent/images/j_gb.gif" width="65" height="22" style="cursor:pointer" onclick="to_close();" /></td>
</tr>
</table> </td>
</tr>
</table>
</form>
<script type="text/javascript">
function updateScriptSession(){
notesDwr.bindScriptSession('<%=session.getId()%>',updateScript);
}
function updateScript(){}
function chat(data){
var textarea = document.getElementById("msg");
var history = textarea.innerHTML;
var date = new Date();
var month = date.getMonth()+1;
var sDate = date.getFullYear()+"年"+month+"月"+date.getDate()+"日"+date.getHours()+"时"+date.getMinutes()+"分"+date.getSeconds()+"秒";
var newMsg = history+"<br>"+sDate+data.sender.userName+" 对 "+data.receiver.userName+"说:<br>"+data.message;;
textarea.innerHTML = newMsg;
}
function reverse() {
dwr.engine.setActiveReverseAjax(true);
}
function userList(){
notesDwr.showOnlineUser(showOnline);
}
function showOnline(data){
var users = document.getElementById("online");
users.innerHTML = "";
for (var i = 0; i < data.length; i++) {
if (data[i].sessionid != '<%=session.getId()%>') {
users.innerHTML = users.innerHTML+addCheckBox(data[i].userid, "myCheckBox") + data[i].username;
}else{
document.getElementById("senderId").value = data[i].userid;
document.getElementById("senderName").value = data[i].username;
}
}
}
function addCheckBox(value, name) {
var check = "<input type=\"checkbox\" name=\"" + name + "\" value=\"" + value + "\"/>" ;
return check;
}
<%--function showUserList(data){ --%>
<%--var tab = document.getElementById("onlineUser");--%>
<%--var rowNum=tab.rows.length;--%>
<%--for (var k=0;k<rowNum;k++){--%>
<%--tab.deleteRow(k);--%>
<%--rowNum=rowNum-1;--%>
<%--k=k-1;--%>
<%--}--%>
<%--for(var i=0;i<data.length;i++){--%>
<%--if(data[i].sessionid == '<%=session.getId()%>'){--%>
<%--document.getElementById("senderId").value = data[i].userid;--%>
<%--document.getElementById("senderName").value = data[i].username;--%>
<%--}else{--%>
<%--var tab = document.getElementById("onlineUser");--%>
<%--var row = tab.insertRow(-1);--%>
<%--var username = data[i].username;--%>
<%--var userId = data[i].userid;--%>
<%--var password = data[i].password;--%>
<%--var sendName = document.getElementById("senderName").value;--%>
<%--row.vAlign = "top"--%>
<%--var cell = row.insertCell(-1);--%>
<%--cell.width = "77px";--%>
<%--cell.height = "25px";--%>
<%--cell.align = "left";--%>
<%--cell.vAlign = "top";--%>
<%--//cell.style.cursor = "pointer";--%>
<%--var p = document.createElement("p");--%>
<%--var c=document.createElement("input");--%>
<%--c.setAttribute("type","checkbox") ;--%>
<%--c.setAttribute("name","myCheckBox");--%>
<%--c.setAttribute("id","myCheckBox");--%>
<%--c.setAttribute("value",data[i].userid);--%>
<%--p.appendChild(c);--%>
<%--var text = document.createTextNode(data[i].username);--%>
<%--p.appendChild(text);--%>
<%--cell.appendChild(p);--%>
<%--}--%>
<%--}--%>
<%--}--%>
function messageList(){
document.getElementById("msg").innerHTML = "";
notesDwr.queryAllUnreadMessage('<%=session.getId()%>',showMessage);
}
function show(){}
function showMessage(data){
var textarea = document.getElementById("msg");
if(data){
var text = "";
for(var i=0;i<data.length;i++){
var date = data[i].date;
var month = date.getMonth()+1;
var dd = date.getFullYear()+"年"+month+"月"+date.getDate()+"日"+date.getHours()+"时"+date.getMinutes()+"分"+date.getSeconds()+"秒";
text += "<br>"+dd+data[i].sender.userName+" 对 "+data[i].receiver.userName+"说:<br>"+data[i].message;
textarea.innerHTML = text;
}
}
document.forms[0].message.focus();
}
function sc() {
var e=document.getElementById("msg");
e.scrollTop=e.scrollHeight;
}
var s=setInterval("sc()",200);
function send(){
var num = checkNum("myCheckBox");
if(num==0){
alert("请选择交谈对象!");
}else{
var text = document.getElementById("message").innerHTML;
if(text == ""){
alert("不能发送空消息!");
return ;
}else {
if(num ==1){
var checkbox = getSingleCheckBox("myCheckBox");
var username = checkbox.nextSibling.nodeValue;
var sendName = document.getElementById("senderName").value;
document.getElementById("note").innerHTML = sendName+" 与 "+username+" 对话中";
}
var ids = getCheckValue("myCheckBox");
var name = document.getElementById("receiverName").innerHTML;
var textarea = document.getElementById("msg");
var recMsg = textarea.innerHTML;
var date = new Date();
var month = date.getMonth()+1;
var dd = date.getFullYear()+"年"+month+"月"+date.getDate()+"日"+date.getHours()+"时"+date.getMinutes()+"分"+date.getSeconds()+"秒";
textarea.innerHTML = recMsg+"<br>"+dd+" 对 "+name+"说:<br>"+text;
notesDwr.sender('<%=session.getId()%>',ids,text);
}
document.getElementById("message").innerHTML = "";
}
}
function to_close(){
window.document.location.href = "/agent/notes/clear.jsp" ;
window.close();
}
function to_remove(){
if(event.clientX<document.body.clientWidth && event.clientY<0||event.altKey){
window.document.location.href = "/agent/notes/clear.jsp" ;
}
}
function noAction(){ }
function to_clear(){
document.getElementById("msg").innerHTML = "";
}
function showHistory(){
var id = document.getElementById("senderId").value;
notesDwr.selectHistory(id,showRecord);
}
function showRecord(records){
if(records.lenght>0){
var text = "";
for(var i=0;i<records.length;i++){
var textarea = document.getElementById("msg");
var date = records[i].date;
var month = date.getMonth()+1;
var dd = date.getFullYear()+"年"+month+"月"+date.getDate()+"日"+date.getHours()+"时"+date.getMinutes()+"分"+date.getSeconds()+"秒";
text += "<br>"+dd+records[i].sender.userName+" 对 "+records[i].receiver.userName+"说:<br>"+records[i].message;
textarea.innerHTML = text;
}
}else{
window.alert("没有聊天记录!");
}
}
function checkNum(name) {
var check = document.getElementsByName(name);
var num = 0;
for (i = 0; i < check.length; i++) {
if (check[i].checked) {
num ++;
}
}
return num;
}
//获得选中的多选框
function getCheckValue(name) {
var select_num = "";
var check = document.getElementsByName(name);
for (i = 0; i < check.length; i++) {
if (check[i].checked) {
if (select_num == "") {
select_num += check[i].value;
} else {
select_num += "," + check[i].value;
}
}
}
return select_num;
}
function getSingleCheckBox(name) {
var select_num = "";
var check = document.getElementsByName(name);
for (var i = 0; i < check.length; i++) {
if (check[i].checked) {
select_num = check[i];
}
}
return select_num;
}
function document.onkeypress(){
switch(event.keyCode){
case 10://CTRL+ENTER
send();
break;
}
}
function document.onkeydown() {
if(event.keyCode==116) {
event.keyCode=0;
event.returnValue = false;
}
}
</script>
</body>
</html>
notesDwr
package com.seipher.dwr.callCenter.notes;
import com.seipher.dto.UserList;
import com.seipher.dto.User;
import com.seipher.dto.ScriptSessionBinding;
import com.seipher.pojo.callCenter.userAndPopedom.Users;
import com.seipher.pojo.callCenter.notes.Notes;
import com.seipher.dao.callCenterInterface.IUserAndPopedom.IUser;
import com.seipher.dao.callCenterInterface.notesInterface.NotesInterface;
import com.seipher.dao.CallCenterFactory;
import com.seipher.utils.PropertyManager;
import net.sf.hibernate.HibernateException;
import java.util.*;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
/**
* Created by IntelliJ IDEA
* Date: 2009-4-25
* Time: 11:00:32
* 在线便签DWR类
* @author txfei
*/
public class NotesDwr {
private static WebContext webContext = null;
//从配置文件中取得在线用户列表页面
String chatPage = PropertyManager.getProperty("chatPage");
/**
* 显示在线用户列表
* @return
*/
public List showOnlineUser(){
System.out.println("提取在线用户 ");
UserList userList = UserList.getUserList();
List<User> allOnlineUser = userList.getUsers();
System.out.println(allOnlineUser.size()+"===在线人数===用户列表 ");
return allOnlineUser;
}
/**
* 发送便签
* @param sessionId
* @param receiverIds
* @param message
* @return
*/
public String sender(String sessionId,String receiverIds,String message){
System.out.println("发送消息");
if (receiverIds == null) {
return "未选中对象";
}
String[] ids = receiverIds.split(",");
for(int k=0;k<ids.length;k++){
System.out.println(ids[k]+"====传过来的接受者id===");
NotesInterface notesInterface = CallCenterFactory.newNotes();
Notes notes = new Notes();
notes.setMessage(message); //构建便签消息
//通过sessionId查找发送者
//通过receiverIds查找所有接收者
//step1
UserList userList = UserList.getUserList();
//新封装的User
List<User> allOnlineUser = userList.getUsers();
User senderOnline = null;
User receiverOnline = null;
for(int i=0;i<allOnlineUser.size();i++){
if(allOnlineUser.get(i).getSessionid().equals(sessionId)){
senderOnline = allOnlineUser.get(i);
System.out.println(senderOnline.getUserid()+"==发送者ID==");
}
if(allOnlineUser.get(i).getUserid().equals(ids[k]+"")){
receiverOnline = allOnlineUser.get(i);
System.out.println(receiverOnline.getUserid()+"==接收者ID==");
}
}
IUser userInterface = CallCenterFactory.newUser();
try {
//获得发送消息者的实例
Users sender = (Users)userInterface.load(Long.valueOf(senderOnline.getUserid()));
notes.setSender(sender); //构建便签发送者
notes.setSenderDept(sender.getDepartment()); //构建便签发送者所在部门
//获得接收者的实例
//新封装的User
Users receiver = (Users)userInterface.load(Long.valueOf(ids[k]));
notes.setReceiver(receiver);// 构建接收者
notes.setReceiverDept(receiver.getDepartment());// 构建接收者所在部门
System.out.println("==notes构建成功==");
//step2开始推
//得到聊天页面的ScriptSession
ScriptSession scriptSession = this.getScriptSession(receiverOnline.getSessionid());
if(scriptSession != null){
System.out.println("==得到scriptsession==");
notes.setState("1");
notesInterface.store(notes); //存入数据库
Util util = new Util(scriptSession);
util.addFunctionCall("chat",notes);
}else{
System.out.println("==得不到scriptsession==");
notes.setState("0");
notesInterface.store(notes); //存入数据库
ScriptSessionBinding scriptSessionBinding = ScriptSessionBinding.getScriptSessionBinding();
Map<String, ScriptSession> map = scriptSessionBinding.getSsm();
System.out.println(receiverOnline.getSessionid()+"_top"+"==top==");
scriptSession = map.get(receiverOnline.getSessionid()+"_top");
Util util = new Util(scriptSession);
util.addFunctionCall("findCmt");
}
} catch (Exception e) {
e.printStackTrace();
return "发送消息出错!";
}
System.out.println("=================");
}
return "success";
}
public List queryAllUnreadCmt(String sessionId){
System.out.println("查询收到的消息数量");
NotesInterface notesInterface = CallCenterFactory.newNotes();
UserList userList = UserList.getUserList();
List<User> userOnline = userList.getUsers();
User receiverOnline = null;
for(int i=0;i<userOnline.size();i++){
if(userOnline.get(i).getSessionid().equals(sessionId)){
receiverOnline = userOnline.get(i);
}
}
List<Notes> list = null;
if(receiverOnline != null){
try {
list = notesInterface.selectCmt(Integer.valueOf(receiverOnline.getUserid()));
} catch (HibernateException e) {
e.printStackTrace();
}
}
return list;
}
public List queryAllUnreadMessage(String sessionId){
System.out.println("查询收到的消息List");
NotesInterface notesInterface = CallCenterFactory.newNotes();
UserList userList = UserList.getUserList();
List<User> userOnline = userList.getUsers();
User receiverOnline = null;
for(int i=0;i<userOnline.size();i++){
//System.out.println(userOnline.get(i).getSessionid()+"=============");
if(userOnline.get(i).getSessionid().equals(sessionId)){
receiverOnline = userOnline.get(i);
}
}
List<Notes> list = null;
if(receiverOnline != null){
try {
//System.out.println(receiverOnline.getUserid()+"====userid=====");
list = notesInterface.selectCmt(Integer.valueOf(receiverOnline.getUserid()));
//System.out.println("====userid=====");
//更新为已经查看
System.out.println("更新状态");
for(int i=0;i<list.size();i++){
Notes note = list.get(i);
note.setState("1");
notesInterface.update(note);
}
//更新提示消息
UpdateNotice(sessionId);
} catch (HibernateException e) {
e.printStackTrace();
}
}
return list;
}
/**
* 更新提示
* @param sessionId
*/
public void UpdateNotice(String sessionId){
System.out.println("更新数量");
ScriptSessionBinding scriptSessionBinding = ScriptSessionBinding.getScriptSessionBinding();
Map<String, ScriptSession> map = scriptSessionBinding.getSsm();
ScriptSession scriptSession = map.get(sessionId+"_top");
System.out.println(scriptSession.getAttribute("sessionId")+"===--0000");
Util util = new Util(scriptSession);
util.addFunctionCall("findCmt");
}
/**
* 绑定ScriptSession 和SessionId
* @param sessionId
*/
public void bindScriptSession(String sessionId){
System.out.println("====bingdchat=======");
ScriptSessionBinding ssb = ScriptSessionBinding.getScriptSessionBinding();
ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
System.out.println(scriptSession+"===是否有scriptSession====");
scriptSession.setAttribute("sessionId", sessionId+"_chat");
Map<String, ScriptSession> map = ssb.getSsm();
map.put(sessionId+"_chat", scriptSession);
System.out.println(scriptSession.getAttribute("sessionId")+"++++++656+++++++");
}
/**
* 根据给定sessionId找到对应的ScriptSession
* @param sessionId
* @return
*/
public ScriptSession getScriptSession(String sessionId) {
System.out.println(sessionId+"==接收者sessionId==");
ScriptSession scriptSession = null;
ScriptSessionBinding ssb = ScriptSessionBinding.getScriptSessionBinding();
Map<String, ScriptSession> map = ssb.getSsm();
Iterator<String> it = map.keySet().iterator();
System.out.println(map.size()+"===map大小===");
while(it.hasNext()){
String sessId = it.next();
System.out.println(sessId+"==map中的sessionId===");
if(sessId.equals(sessionId+"_chat")){
scriptSession = map.get(sessionId+"_chat");
}
}
System.out.println("====成功获取scriptsession====");
return scriptSession;
}
/**
* 移除scriptSession
* @param sessionId
*/
public String removeScriptSession(String sessionId){
ScriptSessionBinding scriptSessionBinding = ScriptSessionBinding.getScriptSessionBinding();
Map<String, ScriptSession> map = scriptSessionBinding.getSsm();
Set<String> set = map.keySet();
for(String str:set){
if(str.equals(sessionId+"_chat")){
map.remove(sessionId+"_chat");
System.out.println("移除一个chat_session");
}
}
return "success";
}
/**
* 查询聊天记录
* @param id
* @return
*/
public List selectHistory(String id){
System.out.println("查询历史记录");
NotesInterface notesInterface = CallCenterFactory.newNotes();
List<Notes> list = null;
try {
list = notesInterface.selectOldRecord(Integer.valueOf(id));
} catch (HibernateException e) {
e.printStackTrace();
}
System.out.println(list.size()+"=====记录数===");
return list;
}
synchronized public static WebContext getWebContext() {
if (webContext == null) {
webContext = WebContextFactory.get();
}
return webContext;
}
synchronized public static WebContext removeWebContext() {
webContext = null;
return webContext;
}
}
ctiDwr
package com.seipher.dwr.callCenter;
import com.seipher.dto.UserList;
import com.seipher.dto.User;
import com.seipher.dto.Phone;
import com.seipher.dto.ScriptSessionBinding;
import com.seipher.utils.PropertyManager;
import java.util.*;
import org.directwebremoting.*;
import org.directwebremoting.proxy.dwr.Util;
import org.directwebremoting.impl.DefaultContainer;
import org.directwebremoting.impl.ContainerUtil;
import org.directwebremoting.extend.ScriptSessionManager;
import org.directwebremoting.extend.RealScriptSession;
import org.directwebremoting.servlet.DwrServlet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
/**
* cit通信控制类
* Created by IntelliJ IDEA
* Date: 2008-7-24
* Time: 15:36:51
*
* @author mengle</a>
*/
public class CtiManageDwr {
private static WebContext webContext = null;
//从配置文件中取得在线用户列表页面
String onlinePage = PropertyManager.getProperty("ctiPage");
String chatPage = PropertyManager.getProperty("chatPage");
private Log log = LogFactory.getFactory().getInstance(this.getClass().getName());
public String getSessionId(int channlHashCode) {
UserList userList = UserList.getUserList();
HashMap map = userList.getClientMap();
String channlCode = Integer.toString(channlHashCode);
User user = (User) map.get(channlCode);
if (user == null) {
log.debug("==========not find user by channHasCode");
return "";
}
return user.getSessionid();
}
/**
* 来电转接
*
* @param channlHashCode
*/
public void incomming(Map valueMap, int channlHashCode) {
try {
String telNumber = (String) valueMap.get("caller_id");
String ext_phone = (String) valueMap.get("ext_phone");
WebContext wctx = WebContextFactory.get();
Collection<ScriptSession> sess = wctx.getScriptSessionsByPage(onlinePage);
for (ScriptSession session : sess) {
// System.out.println("========================incomming.sess:" +
// session.getAttribute("userid") + " &&&ScriptSession==" + session);
ScriptBuffer scriptBuffer = new ScriptBuffer();
scriptBuffer.appendScript("incomming(")
.appendData(telNumber)
.appendScript(",")
.appendData(ext_phone)
.appendScript(");");
log.debug("scriptBuffer=" + scriptBuffer.toString());
// if ( session.equals(scriptSession) ) {
// System.out.println("=============session.equals(scriptSession) !!!!!!!!!!!!!!!!!!!!!!!!");
// session.addScript(scriptBuffer);
// }
session.addScript(scriptBuffer);
}
Map callers = Phone.getCallers();
callers.put(ext_phone, telNumber);
Phone.caller = telNumber;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 改变来电状态
* state=1 开始通话 state=2通话结束
* 用于页面开始计时或停止计时
*
* @param ext_phone
* @param state
*/
public void change_session_state(String ext_phone, String state) {
ServletContext servletContext = WebContextFactory.get().getServletContext();
ServerContext sctx = ServerContextFactory.get(servletContext);
Collection<ScriptSession> sess = sctx.getScriptSessionsByPage(onlinePage);
log.debug("ext_phone:" + ext_phone + " ** state=" + state);
if ("1".equals(state)) {
for (ScriptSession session : sess) {
ScriptBuffer scriptBuffer = new ScriptBuffer();
scriptBuffer.appendScript("startTalk(")
.appendData(ext_phone.trim())
.appendScript(");");
log.debug("change_session_state-->scriptBuffer=" + scriptBuffer.toString());
session.addScript(scriptBuffer);
}
} else if ("2".equals(state)) {
for (ScriptSession session : sess) {
ScriptBuffer scriptBuffer = new ScriptBuffer();
scriptBuffer.appendScript("hiddenTalk(")
.appendData(ext_phone.trim())
.appendScript(");");
log.debug("change_session_state-->scriptBuffer=" + scriptBuffer.toString());
session.addScript(scriptBuffer);
}
Map callers = Phone.getCallers();
callers.remove(ext_phone);
Phone.caller = "";
}
}
/**
* 连接时出错
*
* @param ext_phone
*/
public void connectError(String ext_phone, String status) {
Map states = Phone.getStates();
String errorInfo = "nothing";
if ("1".equals(status)) {
errorInfo = "注册分机号码时出错,请退出重新登陆";
} else if ("2".equals(status)) {
errorInfo = "分机'" + ext_phone + "'已注册,请退出重新登陆";
} else if ("3".equals(status)) {
errorInfo = "与CTI服务器版本不匹配,请退出重新登陆";
} else if ("4".equals(status)) {
errorInfo = "CTI服务器中无效用户名,请退出重新登陆";
}
if (!"nothing".equals(errorInfo)) {
states.put(ext_phone, errorInfo);
}
if ("0".equals(status)) {
states.remove(ext_phone);
}
// Container container = DwrServlet.getContainer();
// ScriptSessionManager ssm = (ScriptSessionManager) container.getBean(ScriptSessionManager.class.getName());
//
// Collection<ScriptSession> sess = ssm.getScriptSessionsByPage(onlinePage);
// for (ScriptSession session : sess) {
// ScriptBuffer scriptBuffer = new ScriptBuffer();
// scriptBuffer.appendScript("connectError(")
// .appendData(ext_phone.trim())
// .appendScript(",")
// .appendData(errorInfo)
// .appendScript(");");
// log.debug("connectError-->scriptBuffer=" + scriptBuffer.toString());
// session.addScript(scriptBuffer);
// }
}
/**
* 根据用户id获得指定用户的页面脚本session
*
* @param userid
* @return
*/
@SuppressWarnings("unchecked")
public ScriptSession getScriptSession(String userid) {
ScriptSession scriptSessions = null;
try {
WebContext wctx = WebContextFactory.get();
Collection<ScriptSession> sess = wctx.getScriptSessionsByPage(onlinePage);
for (ScriptSession session : sess) {
String xuserid = (String) session.getAttribute("userid");
if (xuserid != null && xuserid.equals(userid)) {
scriptSessions = session;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return scriptSessions;
}
public void updateUserList(String userid, boolean flag) {
// HttpServletRequest request = CtiManageDwr.getWebContext().getHttpServletRequest();
if (flag) {
// if (!userExist(userid)) { //如果还未绑定
log.debug("=======做绑定");
System.out.println("updateUserList().sessionid=" + userid);
this.setScriptSessionFlag(userid); //绑定用户和dwr页面session
}
WebContext wctx = WebContextFactory.get();
HttpSession session = wctx.getSession();
String sid = session.getId();
System.out.println(chatPage);
Collection<ScriptSession> sess = wctx.getScriptSessionsByPage(chatPage);
//获得当前浏览 通信 页面的所有脚本session
Iterator<ScriptSession> scripts = sess.iterator();
while(scripts.hasNext()){
ScriptSession scriptSession = scripts.next();
String sessionId = (String)scriptSession.getAttribute("sessionId");
System.out.println(sessionId+"==scriptSession中的sessionId==");
ScriptSessionBinding ssb = ScriptSessionBinding.getScriptSessionBinding();
Map<String, ScriptSession> map = ssb.getSsm();
Iterator<String> it = map.keySet().iterator();
System.out.println(map.size()+"===当前Map人数===");
while(it.hasNext()) {
String sessId = it.next();
System.out.println(sessId+"==map中的sessionId==");
if(sessId.equals(sessionId) && !sessId.equals(sid+"_chat")){
Util util = new Util(scriptSession);
util.addFunctionCall("userList");
System.out.println("推送更新在线用户列表");
}
}
}
}
/**
* 将用户id和页面脚本session绑定
*
* @param userid
*/
public void setScriptSessionFlag(String userid) {
// System.out.println("userid===" + userid);
ScriptSessionBinding ssb = ScriptSessionBinding.getScriptSessionBinding();
ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
scriptSession.setAttribute("userid", userid);
Map<String, ScriptSession> map = ssb.getSsm();
map.put(userid, scriptSession);
// WebContextFactory.get().getScriptSession().setAttribute("userid", userid);
}
public void cleanDwrConnection(String id, ScriptSession session) {
ScriptSession oldSession = getScriptSession(id);
if (oldSession != null && oldSession != session) {
oldSession.invalidate();
oldSession = null;
// System.out.println("=======delete oldSession!!!");
}
}
public void clearScriptSession() {
try {
//获得DWR上下文
HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
ServletContext sc = request.getSession().getServletContext();
ServerContext sctx = ServerContextFactory.get(sc);
//获得当前浏览 index.jsp 页面的所有脚本session
Collection sessions = sctx.getScriptSessionsByPage(onlinePage);
String userid = "";
for (Iterator iterator = sessions.iterator(); iterator.hasNext();) {
ScriptSession scriptSession = (ScriptSession) iterator.next();
userid = (String) scriptSession.getAttribute("userid");
ScriptBuffer scriptBuffer = new ScriptBuffer();
scriptBuffer.appendScript("dialog.showUserList(").appendData(UserList.getUsers())
.appendScript(");");
scriptSession.addScript(scriptBuffer);
if (userid != null && userid.equals(request.getSession().getId())) {
// System.out.println("================dwr_delete_scriptSession: " + request.getSession().getId());
sessions.remove(scriptSession);
scriptSession.removeAttribute("userid");
scriptSession.invalidate();
scriptSession = null;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
synchronized public static WebContext getWebContext() {
if (webContext == null) {
webContext = WebContextFactory.get();
}
return webContext;
}
synchronized public static WebContext removeWebContext() {
webContext = null;
return webContext;
}
}
UserList
package com.seipher.dto;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
/**
* 当前登陆坐席列表
* Created by IntelliJ IDEA
* Date: 2008-7-24
* Time: 9:20:31
*
* @author mengle</a>
*/
public class UserList {
private Log log = LogFactory.getFactory().getInstance(this.getClass().getName());
private static List<User> users = null;
private HashMap<String, User> clientMap = new HashMap<String, User>();
private static UserList userList = null;
public boolean existUser(String userid) {
boolean flag = false;
List<User> result = this.getUsers();
// log.debug("userSize()--->" + result.size());
for (int i = 0; i < result.size(); i++) {
User user = result.get(i);
// log.debug("result===>" + user.getUserid());
if (user.getUserid().equals(userid)) {
flag = true;
break;
}
}
return flag;
}
/**
* 根据session id 找到用户对象
* @param sessionid
* @return
*/
public static User getClientHashCode(String sessionid) {
User user = null;
List<User> result = UserList.getUsers();
for (int i = 0; i < result.size(); i++) {
User userTemp = result.get(i);
if (userTemp.getSessionid().equals(sessionid)) {
user = userTemp;
}
}
return user;
}
public synchronized static List<User> getUsers() {
if (users == null) {
users = new ArrayList<User>();
}
return users;
}
public synchronized static UserList getUserList() {
if (userList == null) {
userList = new UserList();
}
return userList;
}
public HashMap<String, User> getClientMap() {
return clientMap;
}
public void setClientMap(HashMap<String, User> clientMap) {
this.clientMap = clientMap;
}
}
ScriptSessionBinding
package com.seipher.dto;
import org.directwebremoting.ScriptSession;
import java.util.Map;
import java.util.HashMap;
/**
* Created by IntelliJ IDEA
* Date: 2009-4-23
* Time: 10:39:16
*
* @author mengle
*/
public class ScriptSessionBinding {
private static ScriptSessionBinding scriptSessionBinding = null;
private Map<String, ScriptSession> ssm = new HashMap<String, ScriptSession>();
synchronized public static ScriptSessionBinding getScriptSessionBinding() {
if (scriptSessionBinding == null) {
scriptSessionBinding = new ScriptSessionBinding();
}
return scriptSessionBinding;
}
public Map<String, ScriptSession> getSsm() {
return ssm;
}
public void setSsm(Map<String, ScriptSession> ssm) {
this.ssm = ssm;
}
}
UserDwr
package com.seipher.dwr.callCenter.UserAndPopedom;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.beanutils.BeanUtils;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.WebContext;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.proxy.dwr.Util;
import com.seipher.pojo.callCenter.*;
import com.seipher.pojo.callCenter.userAndPopedom.*;
import com.seipher.dao.callCenterInterface.*;
import com.seipher.dao.callCenterInterface.IUserAndPopedom.IUser;
import com.seipher.dao.callCenterInterface.IUserAndPopedom.ISkillGroupDao;
import com.seipher.dao.callCenterInterface.IUserAndPopedom.IFuncPopedomDao;
import com.seipher.dao.CallCenterFactory;
import com.seipher.utils.PageController;
import com.seipher.utils.PropertyManager;
import com.seipher.utils.query.Params;
import com.seipher.utils.query.AutoQuery;
import com.seipher.exception.BaseException;
import com.seipher.dto.*;
import javax.servlet.http.HttpSession;
import java.util.*;
import java.lang.reflect.InvocationTargetException;
import net.virgosoft.framework.HibernateSession;
import net.sf.hibernate.HibernateException;
/**
* Created by IntelliJ IDEA
* Date: 2009-4-16
* Time: 20:49:12
*
* @author rocLiu</a>
*/
public class UsersDwr {
private Log log = LogFactory.getFactory().getInstance(this.getClass().getName());
private String type = "agent";
/**
* 登陆
*
* @param formMap
* @return
*/
public String login(Map formMap, String password) {
WebContext wct = WebContextFactory.get();
HttpSession session = wct.getHttpServletRequest().getSession();
IUser iUsers = CallCenterFactory.newUser();
Users users = null;
try {
users = iUsers.login((String) formMap.get("agentID"),password);
Date now = new Date();
users.setLoginTime(now);
iUsers.update(users);
session.setAttribute("user",users);
} catch (Exception e) {
e.printStackTrace();
}
if (users == null) {
return "登陆失败,请重新输入用户名密码";
}
//判断用户是否已登陆
List<User> result = UserList.getUsers();
UserList userList = UserList.getUserList();
HashMap map = userList.getClientMap();
User user = new User();
user.setSessionid(session.getId());
user.setUserid(users.getId()+"");
user.setUsername(users.getUserName());
user.setPassword(users.getPassword());
for (int i = 0; i < result.size(); i++) {
if (result.get(i).getUserid().equals(user.getUserid())) {
result.remove(user);//清除用户列表中的用户,准备重新绑定
/*map.remove(Integer.toString(user.getClient().hashCode()));
SendCommand sendCommand = new SendCommand();
try {
result.remove(user);
sendCommand.logout(user);
user.getClient().close();
} catch (Exception e) {
e.printStackTrace();
}*/
break;
}
}
UserBinding userBinding = new UserBinding();
userBinding.bindUsersList(user);
//System.out.println("====绑定 用户 ====");
session.setAttribute("userSoftPhoneState","qc");
return "success";
}
/**
* 登出系统
* @return
*/
public String logout(){
WebContext ctx = WebContextFactory.get();
HttpSession session = ctx.getSession(true);
//移除用户
UserList userList = UserList.getUserList();
List<User> result = userList.getUsers();
for(int i=0;i<result.size();i++){
if(result.get(i).getSessionid().equals(session.getId())){
result.remove(result.get(i));
System.out.println("成功移除用户");
}
}
//ScriptSessionBinding ssb1 = ScriptSessionBinding.getScriptSessionBinding();
// Map<String, ScriptSession> map1 = ssb1.getSsm();
// Iterator<String> it1 = map1.keySet().iterator();
//
// while(it1.hasNext()){
// String sid = it1.next();
// for(int j=0;j<result.size();j++){
// if(sid.equals(result.get(j).getSessionid()+"_chat")){
// Util util = new Util(map1.get(sid));
// util.addFunctionCall("userList");
// System.out.println("成功推送==");
// }
// }
// }
//推送到聊天页面用户下线
String chatPage = PropertyManager.getProperty("chatPage");
WebContext wctx = WebContextFactory.get();
System.out.println(chatPage);
Collection<ScriptSession> sess = wctx.getScriptSessionsByPage(chatPage);
//获得当前浏览 通信 页面的所有脚本session
Iterator<ScriptSession> scripts = sess.iterator();
ScriptSessionBinding ssb = ScriptSessionBinding.getScriptSessionBinding();
Map<String, ScriptSession> map = ssb.getSsm();
Iterator<String> it = map.keySet().iterator();
while(scripts.hasNext()){
ScriptSession scriptSession = scripts.next();
String sessionId = (String)scriptSession.getAttribute("sessionId");
while(it.hasNext()) {
String sessId = it.next();
if(sessId.equals(sessionId)){
Util util = new Util(scriptSession);
util.addFunctionCall("userList");
System.out.println("成功推送");
}
}
}
session.invalidate();
return "success";
}
/**
* 多条件组合查询
*
* @param pages
* @param formMap
* @return
*/
public List select(String pages, Map formMap) {
Users user = new Users();
try {
BeanUtils.populate(user, formMap);
} catch (Exception e) {
e.printStackTrace();
}
PageController customerCtrl = null;
Params params = null;
List result = null;
List allRole = null;
customerCtrl = new PageController();
customerCtrl.setPageSize(10);
params = new Params();
params.setTotal(true);
if (user.getUserCode() != null && !user.getUserCode().equals("")) {
params.addParam("userCode", "%" + user.getUserCode() + "%", AutoQuery.STRING, " like ");
}
if (user.getUserName() != null && !user.getUserName().equals("")) {
params.addParam("userName", "%" + user.getUserName() + "%", AutoQuery.STRING, " like ");
}
params.addParam("userState", "1", AutoQuery.STRING);
params.setOrderBy(" order by userCode desc");
params.setFrom("Users");
params.setPageItemNo(customerCtrl.getPageSize());
if ("".equals(pages)) {
if (0 == customerCtrl.getCurrentPage()) {
customerCtrl.setCurrentPage(1);
}
} else {
customerCtrl.setCurrentPage(Integer.parseInt(pages));
}
params.setPageStartNo(customerCtrl.getCurrentPage());
customerCtrl.setParams(params);
AutoQuery aq = new AutoQuery(params);
aq.setSession(HibernateSession.callCenterSession());
allRole = aq.find();
customerCtrl.setTotalPages(aq.getTotalPages());
customerCtrl.setTotalSize(aq.getTotalSize());
if (customerCtrl.getCurrentPage() > customerCtrl.getTotalPages()) {
customerCtrl.setCurrentPage(customerCtrl.getTotalPages());
params.setPageStartNo(customerCtrl.getCurrentPage());
customerCtrl.setParams(params);
allRole = aq.find();
customerCtrl.setTotalPages(aq.getTotalPages());
customerCtrl.setTotalSize(aq.getTotalSize());
}
result = new ArrayList();
System.out.println("result.size====="+result.size());
result.add(customerCtrl);
result.add(allRole);
return result;
}
/**
* 查找系统角色及技能组
*
* @return
*/
public List findRoleGroup() {
List<List> result = new ArrayList<List>();
List allGroup = new ArrayList<SysGroup>();
List allRole = new ArrayList<Role>();
SysRoleInterface sysRoleInterface = CallCenterFactory.newRoleManage();
SysGroupInterface sysGroupInterface = CallCenterFactory.newGroupManage();
try {
allRole = sysRoleInterface.findAll("SysRole");
allGroup = sysGroupInterface.findAll("SysGroup");
} catch (HibernateException e) {
e.printStackTrace();
}
result.add(allRole);
result.add(allGroup);
return result;
}
/**
* 添加坐席人员
*
* @param formMap
* @param password
* @return
*/
public String add(Map formMap,String password,String skillId,String funcId,String agentL){
String message = "";
Users user = new Users();
DepartmentDwr departmentDwr = new DepartmentDwr();
PositionDwr positionDwr = new PositionDwr();
DataPopedomDwr dataPopedomDwr = new DataPopedomDwr();
SkillGroupDwr skillGroupDwr = new SkillGroupDwr();
RoleDwr roleDwr = new RoleDwr();
Department department = null;
Position position = null;
DataPopedom dataPopedom = null;
SkillGroup skillGroup = null;
Role role = null;
String skillIds[] = skillId.split(",");
String funcIds[] = funcId.split(",");
Set skillSet = new HashSet();
Set funcSet = new HashSet();
String[] agentList = agentL.split(",");//所有选择坐席权限
Map map = AgentPopdeomMap.agentMap();
Integer agentPopedom = 0;
for(int i =0;i<agentList.length;i++){
agentPopedom = (Integer) map.get(agentList[i])|agentPopedom;
}
ISkillGroupDao iSkillGroupDao = CallCenterFactory.newSkillGroup();
IFuncPopedomDao iFuncPopedomDao = CallCenterFactory.newFuncPopedom();
if(null!=formMap.get("department")&&!formMap.get("department").equals("请选择")){
department = departmentDwr.getByID((String) formMap.get("department"));
formMap.put("department",department);
}
if(null!=formMap.get("position")&&!formMap.get("position").equals("请选择")){
position = positionDwr.getByID((String)formMap.get("position"));
formMap.put("position",position);
}
if(null!=formMap.get("dataPopedom")&&!formMap.get("dataPopedom").equals("请选择")){
dataPopedom = dataPopedomDwr.getByID((String)formMap.get("dataPopedom"));
formMap.put("dataPopedom",dataPopedom);
}
if(null!=formMap.get("role")&&!formMap.get("role").equals("请选择")){
role = roleDwr.getByID((String)formMap.get("role"));
formMap.put("roleCode",role.getRoleCode());
formMap.put("role",role);
}
for(int i=0;i<skillIds.length;i++){
try {
skillSet.add(iSkillGroupDao.load(new Long(skillIds[i])));
} catch (HibernateException e) {
e.printStackTrace();
}
}
for(int i=0;i<funcIds.length;i++){
try {
funcSet.add(iFuncPopedomDao.load(new Long(funcIds[i])));
} catch (HibernateException e) {
e.printStackTrace();
}
}
formMap.put("skillGroup",skillSet);
formMap.put("funcPopedom",funcSet);
formMap.put("password",password);
formMap.put("agentPopedom",agentPopedom);
try {
BeanUtils.populate(user,formMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
IUser iUser = CallCenterFactory.newUser();
try {
message = iUser.insert(user);
} catch (BaseException e) {
e.printStackTrace();
}
return message;
}
/**
* 根据id得到对象
* @param id
* @return
*/
public Users getByID(String id){
Long userid = new Long(id);
Users users = null;
IUser iUser = CallCenterFactory.newUser();
try {
users = (Users) iUser.load(userid);
} catch (HibernateException e) {
e.printStackTrace();
}
return users;
}
/**
* 更新用户
* @param formMap
* @param skillId
* @param funcId
* @return
*/
public String update(Map formMap,String skillId,String funcId,String agentL){
String message= "";
Users user = this.getByID((String) formMap.get("id"));
DepartmentDwr departmentDwr = new DepartmentDwr();
PositionDwr positionDwr = new PositionDwr();
DataPopedomDwr dataPopedomDwr = new DataPopedomDwr();
SkillGroupDwr skillGroupDwr = new SkillGroupDwr();
RoleDwr roleDwr = new RoleDwr();
Department department = null;
Position position = null;
DataPopedom dataPopedom = null;
SkillGroup skillGroup = null;
Role role = null;
String[] agentList = agentL.split(",");//所有选择坐席权限
Map map = AgentPopdeomMap.agentMap();
Integer agentPopedom = 0;
for(int i =0;i<agentList.length;i++){
agentPopedom = (Integer) map.get(agentList[i])|agentPopedom;
}
IUser iUser = CallCenterFactory.newUser();
IFuncPopedomDao iFuncPopedomDao = CallCenterFactory.newFuncPopedom();
String funcIds[] = funcId.split(",");
Set funcSet = new HashSet();
for(int i=0;i<funcIds.length;i++){
try {
funcSet.add(iFuncPopedomDao.load(new Long(funcIds[i])));
} catch (HibernateException e) {
e.printStackTrace();
}
}
ISkillGroupDao iSkillGroupDao = CallCenterFactory.newSkillGroup();
String skillIds[] = skillId.split(",");
Set skillSet = new HashSet();
for(int i=0;i<skillIds.length;i++){
try {
skillSet.add(iSkillGroupDao.load(new Long(skillIds[i])));
} catch (HibernateException e) {
e.printStackTrace();
}
}
user.setUserCode((String) formMap.get("userCode"));
user.setUserName((String) formMap.get("userName"));
//user.setPassword(password);
user.setDepartment(departmentDwr.getByID((String) formMap.get("department")));
user.setPosition(positionDwr.getByID((String) formMap.get("position")));
user.setDataPopedom(dataPopedomDwr.getByID((String) formMap.get("dataPopedom")));
user.setRole(roleDwr.getByID((String) formMap.get("role")));
user.setRoleCode((roleDwr.getByID((String) formMap.get("role"))).getRoleCode());
user.setSkillGroup(skillSet);
user.setFuncPopedom(funcSet);
user.setAgentPopedom(agentPopedom);
try {
iUser.update(user);
} catch (HibernateException e) {
e.printStackTrace();
message = "update failed";
return message;
}
message = "success";
return message;
}
public String del(String id) {
String message = "";
if(id==null){
return message = "未选中记录";
}
String ids[] = id.split(",");
IUser iUser = CallCenterFactory.newUser();
try {
iUser.batchDel(ids);
} catch (HibernateException e) {
e.printStackTrace();
return message ="批量删除出错";
}
return "成功删除 " + ids.length + " 个用户";
}
/**
* 修改密码
*/
public String changePwd(String pwd){
String message = "success";
WebContext wct = WebContextFactory.get();
HttpSession httpSession = wct.getSession();
Users user = (Users) httpSession.getAttribute("user");
user.setPassword(pwd);
IUser iUser = CallCenterFactory.newUser();
try {
iUser.update(user);
} catch (HibernateException e) {
e.printStackTrace();
return "修改密码出错";
}
return message;
}
/*
*//**
* 查找所有的坐席人员
* 目的是为了生成xml文件
*
* @return
*//*
public List findAll() {
SysAgentInterface sysAgentInterface = CallCenterFactory.newAgentManage();
List loop = null;
List all = new ArrayList();
String sysGroupStr = "";
try {
List result = sysAgentInterface.findAll("SysAgent");
for (int i = 0; i < result.size(); i++) {
SysAgent sysAgent = (SysAgent) result.get(i);
loop = new ArrayList();
loop.add(new ValueObject("agentName", sysAgent.getAgentName()));
loop.add(new ValueObject("agentPWD", sysAgent.getAgentPWD()));
Set groups = sysAgent.getSysGroups();
int j = 0;
for (Iterator iterator = groups.iterator(); iterator.hasNext();) {
SysGroup sysGroup = (SysGroup) iterator.next();
if (j == 0) {
sysGroupStr += sysGroup.getGroupName();
} else {
sysGroupStr += "," + sysGroup.getGroupName();
}
j++;
}
loop.add(new ValueObject("sysGroups", sysGroupStr));
all.add(loop);
sysGroupStr = "";
}
} catch (HibernateException e) {
e.printStackTrace();
}
return all;
}
*/
}
chat.jsp另版
<%@ page contentType="text/html;charset=utf-8" language="java" isELIgnored="false" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>即时通信</title>
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
body,td,th {
font-size: 12px;
color: #006699;
}
.STYLE1 {color: #000000}
-->
</style>
<script type='text/javascript' src='/dwr/util.js'></script>
<script type='text/javascript' src='/dwr/engine.js'></script>
<script type='text/javascript' src='/agent/js/s2cp.js'></script>
<script type='text/javascript' src='/agent/js/util.js'></script>
<script type="text/javascript" src="/dwr/interface/notesDwr.js"></script>
</head>
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragrma","no-cache");
response.setDateHeader("Expires",0);
%>
<body onbeforeunload="to_remove();" onunload="" onload="userList();updateScriptSession();messageList();reverse();">
<form name="imform" >
<input type="hidden" name="senderId" value="">
<input type="hidden" name="senderName" value="">
<input type="hidden" name="senderDept" value="">
<table width="592" height="337" border="0" cellpadding="0" cellspacing="0" bgcolor="#C1E1FA" style="border:1px solid #3F87BC;">
<tr>
<td height="21" colspan="5" align="left" valign="middle">
<table width="210" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="43" align="center" valign="middle"><img src="/agent/images/yd.gif" width="16" height="16" /></td>
<td width="167"><strong id="note"> 对话中</strong></td>
</tr>
</table>
</td>
<td width="207" rowspan="6" align="center" valign="top">
<table width="197" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="139"> </td>
<td width="80" align="right" valign="top"><table width="77" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="26" height="18"><img src="/agent/images/zxh.gif" width="26" /></td>
<td width="26"><img src="/agent/images/zdh.gif" width="26" /></td>
<td width="25"><img src="/agent/images/j_gb_t.gif" width="25" /></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="20" colspan="2"> </td>
</tr>
<tr>
<td colspan="2" align="center" valign="top">
<table width="202" border="0" cellspacing="0" cellpadding="0" style="border:1px solid #3F87BA;">
<tr>
<td width="27" height="22" align="center" valign="middle" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "><img src="/agent/images/qlt.gif" width="20" height="17" /></td>
<td width="148" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "> </td>
<td width="25" align="center" valign="middle" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "><img src="/agent/images/ljt_t.gif" width="9" height="9" /></td>
</tr>
<tr>
<td height="93px" valign="top" colspan="3" bgcolor="#FFFFFF">
<table name="onlineUser" id="onlineUser" width="163px" border="0" align="center" cellpadding="0" cellspacing="0">
<span id="online"> </span>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="8" colspan="2"></td>
</tr>
<tr>
<td height="56" colspan="2" align="center" valign="top">
<table width="201" height="161" border="0" cellpadding="0" cellspacing="0" style="border:1px solid #3F87BA;">
<tr>
<td width="26" height="21" align="center" valign="middle" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "><img src="/agent/images/qlt.gif" width="20" height="17" /></td>
<td width="159" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "> </td>
<td width="14" align="center" valign="middle" bgcolor="#DBEDFB" style="border-bottom:1px solid #3F87BA; "><img src="/agent/images/ljt_t.gif" width="9" height="9" /></td>
</tr>
<tr>
<td height="135" colspan="3" align="center" valign="top" bgcolor="#FFFFFF">
<table width="163" border="0" align="center" cellpadding="0" cellspacing="0">
<span id="users"> </span>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="13" height="15"> </td>
<td width="97">
<table width="97" border="0" cellspacing="0" cellpadding="0">
<tr bgcolor="#C1E1FA">
<td align="center" valign="middle"><img src="/agent/images/ckltjl.gif" alt="" width="15" height="16" /></td>
<td align="left" valign="middle" onclick="showHistory();" style="cursor:pointer">查看聊天记录</td>
</tr>
</table>
</td>
<td width="80" height="15">
<table width="80" border="0" cellspacing="0" cellpadding="0">
<tr bgcolor="#C1E1FA">
<td align="center" valign="middle"><img src="/agent/images/qkltjl.gif" alt="" width="16" height="16" /></td>
<td align="left" valign="middle" onclick="to_clear();" style="cursor:pointer">清空记录</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="201" colspan="5" align="center" valign="top">
<table width="326" height="201" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="201" align="left">
<div name="msg" id="msg" style="color:black;overflow:scroll;overflow-x:hidden;overflow-y:scroll;width:370px;height:201px;background-color:#FFFFFF">
</div>
</td>
</tr>
</table> </td>
</tr>
<tr>
<td height="8" colspan="5" align="center"></td>
</tr>
<tr>
<td height="18" colspan="5" align="center">
<table width="328" border="0" cellspacing="0" cellpadding="0" style="border:1px solid #3F87BC;">
<tr>
<td width="326" bgcolor="#FFFFFF"> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF"><textarea name="message" id="message" cols="44" rows="3" style="border:0px;"></textarea></td>
</tr>
</table></td>
</tr>
<tr>
<td colspan="2" align="center" valign="middle">Enter键 换行 Ctrl+Enter键 发送消息</td>
<td height="30" colspan="3" align="center" valign="middle"><table width="154" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="77" align="center" valign="middle"><img src="/agent/images/j_fs.gif" width="65" height="22" style="cursor:pointer" onclick="send();"/></td>
<td width="77" align="center" valign="middle"><img src="/agent/images/j_gb.gif" width="65" height="22" style="cursor:pointer" onclick="to_close();" /></td>
</tr>
</table> </td>
</tr>
</table>
</form>
<script type="text/javascript">
function updateScriptSession(){
notesDwr.bindScriptSession('<%=session.getId()%>',updateScript);
}
function updateScript(){}
function chat(data){
var textarea = document.getElementById("msg");
var history = textarea.innerHTML;
var date = data.date;
var sec = "";
if(date.getSeconds()<10){
sec = "0"+date.getSeconds();
}else{
sec = date.getSeconds();
}
var sDate = date.getHours()+":"+date.getMinutes()+":"+sec;
var newMsg = history+"<br>"+"<font color='blue'>"+data.sender.userName+"("+data.senderDept.deptName+")"+" "+sDate+" 说:"+"<br>"+data.message;;
textarea.innerHTML = newMsg;
textarea.scrollTop = textarea.scrollHeight;
}
function reverse() {
dwr.engine.setActiveReverseAjax(true);
}
function userList(){
notesDwr.showOnlineUser(showOnline);
}
function showOnline(data){
var users = document.getElementById("online");
users.innerHTML = "";
for (var i = 0; i < data.length; i++) {
if (data[i].sessionid != '<%=session.getId()%>') {
users.innerHTML = users.innerHTML+addCheckBox(data[i].userid, "myCheckBox") + data[i].username;
}else{
document.getElementById("senderId").value = data[i].userid;
document.getElementById("senderName").value = data[i].username;
document.getElementById("senderDept").value = data[i].deptName;
}
}
}
function addCheckBox(value, name) {
var check = "<input type=\"checkbox\" name=\"" + name + "\" value=\"" + value + "\"/>" ;
return check;
}
function messageList(){
document.getElementById("msg").innerHTML = "";
notesDwr.queryAllUnreadMessage('<%=session.getId()%>',showMessage);
}
function showMessage(data){
var textarea = document.getElementById("msg");
if(data){
var text = "";
for(var i=0;i<data.length;i++){
var date = data[i].date;
var sec = "";
if(date.getSeconds()<10){
sec = "0"+date.getSeconds();
}else{
sec = date.getSeconds();
}
var dd = date.getHours()+":"+date.getMinutes()+":"+sec;
text += "<br>"+"<font color='blue'>"+data[i].sender.userName+"("+data[i].senderDept.deptName+")"+" "+dd+" 说"+"<br>"+data[i].message;
textarea.innerHTML = text;
textarea.scrollTop = textarea.scrollHeight;
}
}
document.forms[0].message.focus();
}
function send(){
var num = checkNum("myCheckBox");
if(num==0){
alert("请选择交谈对象!");
}else{
var text = document.getElementById("message").innerHTML;
if(text == ""){
alert("不能发送空消息!");
return ;
}else {
var textarea = document.getElementById("msg");
var sendName = document.getElementById("senderName").value;
var deptName = document.getElementById("senderDept").value;
var ids = getCheckValue("myCheckBox");
var recMsg = textarea.innerHTML;
var date = new Date();
var sec = "";
if(date.getSeconds()<10){
sec = "0"+date.getSeconds();
}else{
sec = date.getSeconds();
}
var dd = date.getHours()+":"+date.getMinutes()+":"+sec;
textarea.innerHTML = recMsg+"<br>"+"<font color='green'>"+sendName+"("+deptName+")"+" "+dd+" 说:"+"<br>"+text;
textarea.scrollTop = textarea.scrollHeight;
notesDwr.sender('<%=session.getId()%>',ids,text,noAction);
}
document.getElementById("message").innerHTML = "";
}
}
function to_close(){
window.document.location.href = "/agent/notes/clear.jsp" ;
window.close();
}
function to_remove(){
if(event.clientX<document.body.clientWidth && event.clientY<0||event.altKey){
window.document.location.href = "/agent/notes/clear.jsp" ;
}
}
function noAction(){ }
function to_clear(){
document.getElementById("msg").innerHTML = "";
}
function showHistory(){
var id = document.getElementById("senderId").value;
notesDwr.selectHistory(id,showRecord);
}
function showRecord(records){
var textarea = document.getElementById("msg");
var username = document.getElementById("senderName").value;
if(records.length>0){
var text = "";
for(var i=0;i<records.length;i++){
var date = records[i].date;
var sec = "";
if(date.getSeconds()<10){
sec = "0"+date.getSeconds();
}else{
sec = date.getSeconds();
}
var dd = date.getHours()+":"+date.getMinutes()+":"+sec;
if(records[i].sender.userName == username){
text += "<br>"+"<font color='green'>"+records[i].sender.userName+"("+records[i].senderDept.deptName+")"+" "+dd+" 说"+"<br>"+records[i].message;
}else{
text += "<br>"+"<font color='blue'>"+records[i].sender.userName+"("+records[i].senderDept.deptName+")"+" "+dd+" 说"+"<br>"+records[i].message;
}
textarea.innerHTML = text;
textarea.scrollTop = textarea.scrollHeight;
}
}else{
window.alert("没有聊天记录!");
}
}
function checkNum(name) {
var check = document.getElementsByName(name);
var num = 0;
for (var i = 0; i < check.length; i++) {
if (check[i].checked) {
num ++;
}
}
return num;
}
//获得选中的多选框
function getCheckValue(name) {
var select_num = "";
var check = document.getElementsByName(name);
for (i = 0; i < check.length; i++) {
if (check[i].checked) {
if (select_num == "") {
select_num += check[i].value;
} else {
select_num += "," + check[i].value;
}
}
}
return select_num;
}
function getSingleCheckBox(name) {
var select_num = "";
var check = document.getElementsByName(name);
for (var i = 0; i < check.length; i++) {
if (check[i].checked) {
select_num = check[i];
}
}
return select_num;
}
function document.onkeypress(){
switch(event.keyCode){
case 10://CTRL+ENTER
send();
break;
}
}
function document.onkeydown() {
if(event.keyCode==116) {
event.keyCode=0;
event.returnValue = false;
}
}
</script>
</body>
</html>
posted on 2009-04-30 08:06
雨飞 阅读(553)
评论(0) 编辑 收藏