📄 msgmanager.java
字号:
if(db.getConnection()==null || db.isClosed())
db.setConnection();
Calendar now= Calendar.getInstance();
String nowStr=String.valueOf(now.get(Calendar.YEAR))+"-"+String.valueOf(now.get(Calendar.MONTH)+1)+"-"+
String.valueOf(now.get(Calendar.DAY_OF_MONTH))+" "+String.valueOf(now.get(Calendar.HOUR_OF_DAY))+":"+
String.valueOf(now.get(Calendar.MINUTE))+":"+String.valueOf(now.get(Calendar.SECOND));
for(int i=0;i<ids.length;i++){
if(ids[i]==null)
continue;
sql="update message set isRead=\"1\", readTime=\""+ nowStr+"\" where id=\""+ids[i]+"\"";
db.setSqlQuery(sql);
db.executeUpdate();
}
if(db.getConnection()!=null && !db.isClosed())
db.closeConnection();
}catch(Exception e){
closeDbConnection();
Log.log("Class:MsgManager method:markMessageAsRead(String[]) error:"+e.getMessage()+" sql:"+sql);
}
}
/**
*标记所有短信为已读短信
*调用者:
*@param vid
*/
public void markAllMessagesAsRead(String vid){
try{
Calendar now= Calendar.getInstance();
String nowStr=String.valueOf(now.get(Calendar.YEAR))+"-"+String.valueOf(now.get(Calendar.MONTH)+1)+"-"+
String.valueOf(now.get(Calendar.DAY_OF_MONTH))+" "+String.valueOf(now.get(Calendar.HOUR_OF_DAY))+":"+
String.valueOf(now.get(Calendar.MINUTE))+":"+String.valueOf(now.get(Calendar.SECOND));
sql="update message set isRead=\"1\", readTime=\""+ nowStr+"\" where toId=\""+vid+"\" and isRead<>\"1\"";
if(db.getConnection()==null || db.isClosed())
db.setConnection();
db.setSqlQuery(sql);
db.executeUpdate();
if(db.getConnection()!=null && !db.isClosed())
db.closeConnection();
}catch(Exception e){
closeDbConnection();
Log.log("Class:MsgManager method:markMessageAsRead(String) error:"+e.getMessage()+" sql:"+sql);
}
}
/**
*发送短信息
*调用者:msgManager.jsp(a=3时为浏览者浮动窗口读取短信 a=2浏览者或服务人员发送信息)
*@param message 待发送的短信息
*@return boolean 返回是否发送成功
*/
public boolean sendMsg(Message message){
try{
if(db.getConnection()==null || db.isClosed())
db.setConnection();
//下面的但引号不能变成双引号
sql="insert into message values(null,\'"+message.getType()+"\',\'"+message.getFromId()+"\',\'"+
message.getToId()+"\',\'"+message.getSendTime()+"\',\'"+message.getReadTime()+"\',\'"+
message.getContent()+"\',\'"+message.isRead()+"\')";
db.setSqlQuery(sql);
db.executeUpdate();
if(db.getConnection()!=null && !db.isClosed())
db.closeConnection();
}catch(Exception e){
closeDbConnection();
Log.log("Class:MsgManager method:sendMsg() error:"+e.getMessage()+" sql:"+sql);
return false;
}
return true;
}
/**
*通知网站所有在线服务人员我(浏览者)离线的信息
*/
/**
public void sendSayMeOffPageMsg(String vid,String url){
try{
/////获取该浏览者所浏览网站在线服务人员id
sql="select distinct id from user,site "+
"where user.domainId=site.domainIds and domain=\""+url+"\" and state<>\"OFFLINE\"";
if(db.getConnection()==null || db.isClosed())
db.setConnection();
db.setSqlQuery(sql);
rs=db.getResult();
String[] ids=null;
if(rs!=null && rs.last()){
ids=new String[rs.getRow()];
rs.beforeFirst();
}
for(int i=0;i<ids.length && rs!=null && rs.next();i++)
ids[i]=rs.getString("id");
if(db.getConnection()!=null && !db.isClosed()) //////////////////////////
db.closeConnection();
/////////////////////////////////////////
/////给在线服务人员发离线的信息
Calendar now= Calendar.getInstance();
String nowStr=String.valueOf(now.get(Calendar.YEAR))+"-"+String.valueOf(now.get(Calendar.MONTH)+1)+"-"+
String.valueOf(now.get(Calendar.DAY_OF_MONTH))+" "+String.valueOf(now.get(Calendar.HOUR_OF_DAY))+":"+
String.valueOf(now.get(Calendar.MINUTE))+":"+String.valueOf(now.get(Calendar.SECOND));
for(int i=0;i<ids.length;i++){
//sql="insert into message values(\"\",\"TERMINATE\",\""+vid+"\",\""+
//ids[i]+"\",\""+nowStr+"\",\"0000-00-00 00:00:00\",\" \",\"0\")";
//if(db.getConnection()==null || db.isClosed())
//db.setConnection();
//db.setSqlQuery(sql);
//db.executeUpdate();
sendMsg(new Message("",vid,ids[i],"",nowStr,"0000-00-00 00:00:00","TERMINATE",false) );
}
///////////////////////////////////////
}catch(Exception e){}
}
**/
/**
*访问者或客户端发送我上线的消息
*调用者:webTalk.jsp client.jsp
*@param vid 访问者或客户端id
*@param type 类型(是否为visitor/stuff:是访问者调用或客户端调用)
*@param domain 所在的站点域名
*@param msg 消息内容
*@param msgType 消息类型
*/
public void sendSayMeOnPageInitMsg(String vid,String type,String domain,String msg,String msgType){
if(type!=null && type.equals("visitor")){
//sendMsgToVisitors(vid,type,domain,msg,msgType);
sendMsgToStuff(vid,type,domain,msg,msgType);
String contactMsg=null;
if((contactMsg=getContact(vid))!=null)
sendMsgToStuff(vid,type,domain,contactMsg,"SETNOTE");
}
if(type!=null && type.equals("stuff")){
sendMsgToVisitors(vid,type,domain,msg,msgType);
sendMsgToStuff(vid,type,domain,msg,msgType);
}
}
/**
*访问者或客户端发短信息给所在网站的所有客户端
*调用者:MsgManager.java,webTalkWindow.jsp
*@param vid 发送者id
*@param type 发送者类别(是否为visitor 将表user 分为user和visitor后不再使用)
*@param domain 发送者所在域名
*@param msg 消息内容
*@param msgType 消息类别
*/
public void sendMsgToStuff(String vid,String type,String domain,String msg,String msgType){
try{
String[] ids=null;
//String domainId=new UserManager().getDomainId(vid);
int index=domain.indexOf(",");
if(index>0)
domain=domain.substring(0,index);
sql="select distinct id from user,site "+
"where user.domainId=site.domainIds and domain=\""+domain+
"\" and state<>\"OFFLINE\"";
if(db.getConnection()==null || db.isClosed())
db.setConnection();
db.setSqlQuery(sql);
rs=db.getResult();
if(rs!=null && rs.last()){
ids=new String[rs.getRow()];
rs.beforeFirst();
}
for(int i=0;ids!=null && i<ids.length && rs!=null && rs.next();i++)
ids[i]=rs.getString("id");
if(db.getConnection()!=null && !db.isClosed()) //////////////////////////////
db.closeConnection();
for(int i=0;ids!=null && i<ids.length;i++)
sendMsg(new msg.Message(vid,ids[i],msg,msgType));
}catch(Exception e){
closeDbConnection();
Log.log("Class:MsgManager method:sendMsgToStuff() error:"+e.getMessage()+" sql:"+sql);
}
}
/**
*客户端/访问者发短信息给所在网站的所有客户端
*调用者:MsgManager.java
*@param vid 发送者id
*@param type 发送者类别(是否为visitor /user )
*@param domain 发送者所在域名
*@param msg 消息内容
*@param msgType 消息类别
*/
public void sendMsgToVisitors(String vid,String type,String domain,String msg,String msgType){
try{
String[] ids=null;
//String domainIds="";
String domainIds="";
if(type!=null && type.equals("stuff"))
domainIds=new UserManager().getUserDomainId(vid);
else
domainIds=new UserManager().getVisitorDomainId(vid);
//StringTokenizer st = new StringTokenizer(domainId,",");
//while(st.hasMoreTokens())
// domainIds +=",\""+st.nextToken()+"\"";
//domainIds=domainIds.substring(1);
sql="select id from visitor where domainId in ("+domainIds+") and state<>\"OFFLINE\"";
if(db.getConnection()==null || db.isClosed())
db.setConnection();
db.setSqlQuery(sql);
rs=db.getResult();
if(rs!=null && rs.last()){
ids=new String[rs.getRow()];
rs.beforeFirst();
}
for(int i=0;ids!=null && i<ids.length && rs!=null && rs.next();i++)
ids[i]=rs.getString("id");
if(db.getConnection()!=null && !db.isClosed()) /////////////////////////////
db.closeConnection();
for(int i=0;ids!=null && i<ids.length;i++)
sendMsg(new msg.Message(vid,ids[i],msg,msgType));
}catch(Exception e){
closeDbConnection();
Log.log("Class:MsgManager method:sendMsgToVisitors() error:"+e.getMessage()+" sql:"+sql);
}
}
/**
*通知网站所有在线服务人员和浏览者我(服务人员)我的状态改变的信息
*调用者:msgManager.jsp
*@param vid 访问者id
*@param domain 发送者所在网站域名
*@param state 要改变的状态
*/
public void sendChangeStateMsg(String vid,String domain,String state){
sendMsgToVisitors(vid,"stuff",domain,state,"STATECHANGE");
sendMsgToStuff(vid,"stuff",domain,state,"STATECHANGE");
}
/**
*通知网站所有在线服务人员和浏览者我(服务人员)离线的信息
*调用者:msgManager.jsp
*@param vid 访问者id
*@param type 发送者类型(visitor stuff)
*/
public void sendSayMeLogoffMsg(String vid,String type){
String domain="";
if(type!=null && type.equals("stuff")){
domain=new UserManager().getUserDomain(vid);
int index=domain.indexOf(",");
if(index>0)
domain=domain.substring(0,index);
}
else
domain=new UserManager().getVisitorDomain(vid);
if(type!=null && type.equals("visitor")){
//sendMsgToVisitors(vid,type,domain,msg,msgType);
sendMsgToStuff(vid,type,domain,"OFFLINE","STATECHANGE");
}
if(type!=null && type.equals("stuff")){
sendMsgToVisitors(vid,type,domain,"OFFLINE","STATECHANGE");
sendMsgToStuff(vid,type,domain,"OFFLINE","STATECHANGE");
}
}
/**
*通知网站所有在线服务人员和浏览者我(访问者或客户端)上线的信息
*调用者:webTalk.jsp client.jsp
*@param vid 访问者id
*@param type 发送者类型(visitor stuff)
*@param domain 发送者所在网站域名
*/
public void sendSayMeLogonMsg(String vid,String type,String domain){
if(type!=null && type.equals("visitor")){
//sendMsgToVisitors(vid,type,domain,msg,msgType);
sendMsgToStuff(vid,type,domain,"ONLINE","STATECHANGE");
//以下3行挪到sendSayMeOnPageInitMsg()
//String contactMsg=null;
//if((contactMsg=getContact(vid))!=null)
//sendMsgToStuff(vid,type,domain,contactMsg,"SETNOTE");
}
if(type!=null && type.equals("stuff")){
sendMsgToVisitors(vid,type,domain,"ONLINE","STATECHANGE");
sendMsgToStuff(vid,type,domain,"ONLINE","STATECHANGE");
}
}
/**
*通知我所在群的所有在线服务人员我(客户端)上线的信息
*调用者:client.jsp
*@param vid 客户端id
*/
public void tellGroupsImOnlineMsg(String vid){
try{
sql="select groupId from mygroup where userId=\""+vid+"\"";
if(db.getConnection()==null || db.isClosed())
db.setConnection();
db.setSqlQuery(sql);
rs=db.getResult();
String groupIds="";
if(rs!=null && rs.last())
groupIds +=","+rs.getString("groupId");
if(groupIds.startsWith(","))
groupIds=groupIds.substring(1);
sql="select userId,name,groupId from mygroup,user where mygroup.userId=user.id and groupId in("+
groupIds+") and user.state<>\"OFFLINE\"";
if(db.getConnection()==null || db.isClosed())
db.setConnection();
db.setSqlQuery(sql);
rs=db.getResult();
String t="";
String myName="";
while(rs!=null && rs.next()){
if( (rs.getString("userId")).equals(vid) ){
myName=rs.getString("name");
rs.beforeFirst();
break;
}
}
while(rs!=null && rs.next()){
if( (rs.getString("userId")).equals(vid) )
continue;
t="<U i=\""+vid+"\" t=\"9\" s=\"ONLINE\" v=\"\""+
" dm=\""+rs.getString("groupId")+"\" n=\""+myName+"\"></U>";
sendMsg(new msg.Message(vid,rs.getString("userId"),t,"ONPAGEINIT"));
}
if(db.getConnection()!=null && !db.isClosed()) //////////////////////////////
db.closeConnection();
closeDbConnection();
///////////////////////////////////////
}catch(Exception e){
closeDbConnection();
Log.log("Class:MsgManager method:tellGroupsImOnlineMsg(String vid) error:"+e.getMessage()+" sql:"+sql);
}
}
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -