当前位置:网站首页 > 技术博客 > 正文

在线网站客服



第一次写,感觉很乱,后面直接上代码吧,代码也有注释,想看思路的朋友可以看前面。有什么建议和意见欢迎砸过来。

功能:

1、客服需登录进入客服页面。用户无需登录,进入用户页面,直接获取sessionId作为id值。

2、用户进入页面并且发送消息时,客服才会获取到该用户,并在左侧列表显示。

4、每条消息的时间显示在本条消息上方(水平居中)。消息时间间隔不足1分钟,则此不显示时间。

5、每次读取的消息均为最新消息。

6、客服未与其正在聊天的用户发送新消息时应有新消息提示。

7、用户关闭浏览器或长时间无回应时,将用户置为下线。

       客服界面将清空与下线用户的聊天窗口,且下线用户不显示在左侧列表中。

8、用户长时间无回应置为下线后,刷新可继续在线与客服聊天。

9、发送:1)输入框未输入消息时,提示“发送内容不能为空”。

                2)未选择用户时,提示“请选择用户”。

数据库表:

三张表:客服(user),用户(customer),聊天记录(cs_chat_record)。

客服表主要字段:id,name,password,online,currentPeople;

用户表主要字段:id,name,online,headImg;

主要思路:

1、用户进入页面:查看当前用户有没有正在被客服人员接待

①正在被接待:设置用户为在线状态(因为刷新会有下线操作)。

②未被接待:获取所有在线客服每个人正在接待的用户人数,并给该用户分配一个当前接待人数少的客服。

                    修改此客服正在接待的人数,将用户添加到用户表中(设置为在线状态)。

                    将用户和客服均存到session中。

2、客服进入页面:常规验证。

4、用户和客服发送消息时,都先将信息保存到数据库。

5、用户和客服界面,都是一秒刷新一次获取最新消息。

6、客服页面:当前正在沟通的用户列表,每秒获取一次,将不在线的用户在列表清除。

7、长时间无回复的用户置为下线,用到数据库定时器。

9、新消息提醒:保存用户消息将用户头像设置成有红点的,获取消息时将用户头像设置为无红点的。

知识点:

1、获取用户id:getRequest().getSession().getId();

2、获取最新聊天记录时,聊天记录表的id是在前端存储的,一定不要在后台用全局变量存储,方便用户刷新页面时再次获取之前所有聊天记录。

3、c:forEach标签只能在服务器端使用,在页面加载完成后需要用js的for循环。

4、用户列表的显示是foreach循环得到的,为显示用户名的label设置class属性,用户点击切换用户时使用。

    列表用户正在聊天的用户用户名设置为选中状态:$("div#"+id).css('background','#00ffff');

    其他用户取消选中状态:$(".CustomerBG").css('background','#ffffff');

5、循环得到的用户名:<label id='labelId' class='checkLabel' style='font-size: 12pt;'data_id='" +cId +"'>"

            $(document).off("click", ".checkLabel").on("click", ".checkLabel", function(){
                 //点击用户名之后要执行的内容

            });

    2)此方法在$(function(){})内写,不能监听到js中拼接的节点,

            $(".checkLabel").click(function(){

            })

attr:1)$(this).attr("data_id");拿到自定义的属性的值。

        2)$(this).attr("data_id",“value”);给自定义的属性赋值。

    $("#divId").empty();

    $("#divId").html("");

7、地址栏不能拼接时间参数,时间格式有空格,地址以空格为终点。

8、给myclass的span节点的内容加样式。

.myclass span{

}

9、数据库定时器的格式

    DELIMITER $$

        ALTER DEFINER=`root`@`localhost` EVENT `test` ON SCHEDULE EVERY 1 MINUTE STARTS '2018-04-26 18:40:32'             ON     COMPLETION NOT PRESERVE ENABLE DO BEGIN

                    //要执行的SQL语句

           END$$

    DELIMITER ;

10、将30分钟内未发送消息的用户置为下线(觉得不是很容易写,半个多小时才写出来,记录一下)

    UPDATE customer SET online=0

        WHERE id IN

            (SELECT customerId FROM

                     (SELECT customerId,MAX(`time`) maxTime FROM cs_chat_record GROUP BY customerId) temp

                WHERE maxTime <CURRENT_TIMESTAMP - INTERVAL 30 MINUTE);


未解决的问题:

1、每秒一次获取用户列表,页面会有闪烁。

2、火狐浏览器只在关闭页面时执行window.onbeforeunload方法,关闭整个浏览器时不执行。

3、“发送内容不为空”和“请选择用户”的判断都是在后台做的,感觉应该在前端做。

主要代码:

 

用户页:

 

controller:


                            

  • 上一篇: 网站流量监控
  • 下一篇: isight软件下载
  • 版权声明


    相关文章:

  • 网站流量监控2025-01-05 07:00:59
  • html中的form表单2025-01-05 07:00:59
  • 网络数据包的分析2025-01-05 07:00:59
  • 搭建rsyslog日志服务器2025-01-05 07:00:59
  • debian8 源2025-01-05 07:00:59
  • isight软件下载2025-01-05 07:00:59
  • oracle中rownum的含义2025-01-05 07:00:59
  • date_diff2025-01-05 07:00:59
  • 数据结构二叉树遍历例题2025-01-05 07:00:59
  • densenet resnet2025-01-05 07:00:59