Nenhuma Descrição

main.js 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. if (typeof console == "undefined") {
  2. this.console = {
  3. log: function(msg) {}
  4. };
  5. }
  6. // 如果浏览器不支持websocket,会使用这个flash自动模拟websocket协议,此过程对开发者透明
  7. WEB_SOCKET_SWF_LOCATION = "./js/websocket/WebSocketMain.swf";
  8. // 开启flash的websocket debug
  9. WEB_SOCKET_DEBUG = true;
  10. var ws, n = 0,
  11. timer;
  12. var lockReconnect = false; //避免重复连接
  13. var obj = {};
  14. var Statess;
  15. var cls = 0;
  16. var webData;
  17. var dataLength;
  18. let callDate = [];
  19. var lasttime = new Date().getTime();
  20. //坐席分析
  21. agentCount();
  22. setInterval(function(){
  23. agentCount();
  24. },120000)
  25. //坐席数量
  26. function agentCount(){
  27. $.ajax({
  28. url: huayi.config.callcenter_url + "SeatMonitoring/getlist",
  29. data: {
  30. token: $.cookie("token"),
  31. },
  32. async: false,
  33. dataType:'json',
  34. success: function(res) {
  35. dataLength=res.data.length;
  36. }
  37. })
  38. }
  39. Connect()
  40. //创建scoket连接
  41. function createWebSocket() {
  42. try {
  43. Connect();
  44. } catch (e) {
  45. reconnect();
  46. }
  47. }
  48. //连接
  49. function Connect() {
  50. // debugger
  51. ws = new WebSocket("ws://" + huayi.config.socket_ip + ":" + huayi.config.socket_port);
  52. ws.onopen = function() {
  53. console.log(new Date() + " " + "建立连接");
  54. //心跳检测重置
  55. heartCheck.reset().start();
  56. cls = 0;
  57. $(".Login").addClass("active");
  58. lasttime = new Date().getTime();
  59. // debugger
  60. //话务坐席情况
  61. obj = {
  62. "Type": 'GetAgentDetail', //话后处理时长设置,0代表一致话后处理,除非发送置闲 (按照历史习惯,字符串形式)
  63. };
  64. Send();
  65. };
  66. //接收到消息的回调方法
  67. ws.onmessage = function(evt) {
  68. //如果获取到消息,心跳检测重置
  69. //拿到任何消息都说明当前连接是正常的
  70. heartCheck.reset().start();
  71. var myDate = new Date();
  72. webData = JSON.parse(evt.data)[0];
  73. if(webData.Type=='GetAgentDetail'){
  74. const outLine=dataLength - webData.AgentOnlineCount;
  75. callDate = [dataLength, webData.AgentOnlineCount, webData.AgentSpeakCount, webData
  76. .AgentProcessingCount, webData.AgentReposeCount, webData.AgentFreeCount, outLine
  77. ]
  78. chart1(callDate);
  79. }
  80. }
  81. };
  82. //连接关闭的回调方法
  83. ws.onclose = function(evt) {
  84. if (cls == 0) {
  85. cls = 1;
  86. //console.log("连接关闭!");
  87. //layer.confirm('连接关闭!', {
  88. // btn: ['确定']
  89. //});
  90. $(".hwzt").text('连接关闭!');
  91. $("#top-search li i").removeClass("active");
  92. reconnect();
  93. }
  94. };
  95. //连接发生错误的回调方法
  96. ws.onerror = function(evt) {
  97. //产生异常
  98. $(".hwzt").text('连接出现异常!');
  99. console.log(ws);
  100. if (ws == null || ws.readyState != ws.OPEN) {
  101. console.log(new Date() + "开始重连");
  102. reconnect();
  103. }
  104. };
  105. //}
  106. //重连
  107. function reconnect() {
  108. if (lockReconnect) return;
  109. lockReconnect = true;
  110. //没连接上会一直重连,设置延迟避免请求过多
  111. setTimeout(function() {
  112. console.log(new Date() + " " + "重连中……");
  113. createWebSocket("ws://" + huayi.config.socket_ip + ":" + huayi.config.socket_port);
  114. lockReconnect = false;
  115. }, 2000);
  116. }
  117. //发送
  118. function Send() {
  119. if (ws.readyState != ws.OPEN) {
  120. reconnect();
  121. }
  122. if (ws.readyState == ws.OPEN) {
  123. console.log(new Date() + " send " + JSON.stringify(obj));
  124. ws.send(JSON.stringify(obj));
  125. }
  126. }
  127. //心跳检测
  128. var heartCheck = {
  129. timeout: 25000, //25秒
  130. timeoutObj: null,
  131. serverTimeoutObj: null,
  132. reset: function() {
  133. clearTimeout(this.timeoutObj);
  134. clearTimeout(this.serverTimeoutObj);
  135. return this;
  136. },
  137. start: function() {
  138. var self = this;
  139. this.timeoutObj = setTimeout(function() {
  140. //这里发送一个心跳,后端收到后,返回一个心跳消息,
  141. //onmessage拿到返回的心跳就说明连接正常
  142. obj.Type = "Heart";
  143. Send();
  144. self.serverTimeoutObj = setTimeout(function() { //如果超过一定时间还没重置,说明后端主动断开了
  145. ws
  146. .close(); //如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
  147. }, self.timeout)
  148. }, this.timeout)
  149. }
  150. }
  151. function toDub(i) {
  152. return i < 10 ? "0" + i : "" + i;
  153. }
  154. //默认记忆上次是否签入,是否置忙置闲 0表示已签入 空闲,1表示签入置忙,2表示签出
  155. function SetStateCookie(state) {
  156. $.cookie("socket_state", state);
  157. }
  158. function backstageQueue(data) {
  159. console.log("123")
  160. var obj = $("iframe:visible")
  161. // if (obj.attr("data-id") == "index_v1.html") {
  162. window.frames[obj.attr("name")].realTimeMonitorQueue(data.WaitCount);
  163. // }
  164. }
  165. //在线坐席信息
  166. function GetAgentListBack(data) {
  167. console.log(data)
  168. $.ajax({
  169. type: "get",
  170. url: huayi.config.callcenter_url + "SeatMonitoring/GetAgentList",
  171. async: true,
  172. dataType: 'json',
  173. data: {
  174. "token": $.cookie("token")
  175. },
  176. success: function(result) {
  177. var user = result.data;
  178. $(user).each(function(j, m) {
  179. $(data.AgentList).each(function(k, g) {
  180. if (g.AgentID == m.UserCode) {
  181. g.userName = m.UserName;
  182. }
  183. })
  184. })
  185. $(data.AgentList).each(function(k, m) {
  186. var strr = '';
  187. switch (m.State) {
  188. case "0":
  189. strr = "离线";
  190. break; //离线
  191. case "1":
  192. break; //登录中
  193. case "2":
  194. strr = "空闲";
  195. break; //空闲
  196. case "3":
  197. strr = "通话中";
  198. break; //通话中
  199. case "4":
  200. strr = "话后处理中";
  201. break; //话后处理中
  202. case "5":
  203. strr = "忙碌";
  204. break; //小休
  205. case "6":
  206. strr = "振铃";
  207. break; //被请求
  208. case "7":
  209. strr = "注销";
  210. break; //注销
  211. }
  212. var html = '<tr fjh="' + m.AgentExten + '">' +
  213. '<td>' + (m.userName ? '' : m.userName) + '</td>' //姓名
  214. +
  215. '<td>' + m.AgentID + '</td>' //工号
  216. +
  217. '<td>' + m.AgentExten + '</td>' //分机号
  218. +
  219. '<td class=" ' + m.UserCode + 'state">' + strr + '</td>' //状态
  220. +
  221. '</tr>';
  222. $(html).appendTo("#zxTable tbody");
  223. })
  224. }
  225. });
  226. }
  227. //获取当前的日期时间 格式“yyyy-MM-dd HH:mm:ss”
  228. function getNowFormatDate() {
  229. var date = new Date();
  230. var seperator1 = "-";
  231. var seperator2 = ":";
  232. var month = date.getMonth() + 1;
  233. var strDate = date.getDate();
  234. if (month >= 1 && month <= 9) {
  235. month = "0" + month;
  236. }
  237. if (strDate >= 0 && strDate <= 9) {
  238. strDate = "0" + strDate;
  239. }
  240. var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate +
  241. " " + date.getHours() + seperator2 + date.getMinutes() +
  242. seperator2 + date.getSeconds();
  243. return currentdate;
  244. }
  245. var iswebcloase = 1;
  246. window.onunload = function() {
  247. if (iswebcloase) {
  248. iswebcloase = 0;
  249. if (ws.readyState == ws.OPEN) {
  250. obj.Type = 'Logout';
  251. Send();
  252. ws.onclose();
  253. }
  254. }
  255. }
  256. window.onbeforeunload = function() {
  257. if (iswebcloase) {
  258. iswebcloase = 0;
  259. if (ws.readyState == ws.OPEN) {
  260. obj.Type = 'Logout';
  261. Send();
  262. ws.onclose();
  263. }
  264. }
  265. }