Nenhuma Descrição

main.js 6.6KB

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