Нет описания

main.js 6.6KB

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