Эх сурвалжийг харах

Merge branch 'master' of http://git.bocai108.com:10180/Ethan/Customer-Service

Jonlin 6 жил өмнө
parent
commit
bf9c44aacf

+ 11 - 11
application/admin/controller/Report.php

@@ -152,13 +152,13 @@ class Report extends Base
             'allChat' => $allChat,
             'allChat' => $allChat,
             'allService' => $allService,
             'allService' => $allService,
             'allQueue' => $allQueue,
             'allQueue' => $allQueue,
-            'transfer' => floor($transfer/2),
-            'reply' => ($allChatLog?sprintf("%.2f",(($reply/($allChatLog-$reply))*100)) : '--'),
-            'waitTime' => ($allService?ceil($alllWaitTime/$allService) : '--'),
-            'serviceTime' => ($allService?ceil($serviceTime/$allService) : '--'),
-            'cpdTime' => ($allService?ceil($cpdTime/$allService) : '--'),
-            'evaluateGood' => (($evaluateGood+$evaluateSecondary+$evaluateBad)?sprintf("%.2f",(($evaluateGood/($evaluateGood+$evaluateSecondary+$evaluateBad))*100)) : '--'),
-            'evaluateGet' => (($evaluateNo+$evaluateGood+$evaluateSecondary+$evaluateBad)?sprintf("%.2f",((($evaluateGood+$evaluateSecondary+$evaluateBad)/($evaluateNo+$evaluateGood+$evaluateSecondary+$evaluateBad))*100)) : '--'),
+            'transfer' => floor($transfer / 2),
+            'reply' => ($allChatLog ? sprintf("%.2f", (($reply / ($allChatLog - $reply)) * 100)) : '--'),
+            'waitTime' => ($allService ? ceil($alllWaitTime / $allService) : '--'),
+            'serviceTime' => ($allService ? ceil($serviceTime / $allService) : '--'),
+            'cpdTime' => ($allService ? ceil($cpdTime / $allService) : '--'),
+            'evaluateGood' => (($evaluateGood + $evaluateSecondary + $evaluateBad) ? sprintf("%.2f", (($evaluateGood / ($evaluateGood + $evaluateSecondary + $evaluateBad)) * 100)) : '--'),
+            'evaluateGet' => (($evaluateNo + $evaluateGood + $evaluateSecondary + $evaluateBad) ? sprintf("%.2f", ((($evaluateGood + $evaluateSecondary + $evaluateBad) / ($evaluateNo + $evaluateGood + $evaluateSecondary + $evaluateBad)) * 100)) : '--'),
             'evaluate' => json_encode([
             'evaluate' => json_encode([
                 'evaluateGood' => $evaluateGood,
                 'evaluateGood' => $evaluateGood,
                 'evaluateSecondary' => $evaluateSecondary,
                 'evaluateSecondary' => $evaluateSecondary,
@@ -178,7 +178,7 @@ class Report extends Base
         $goups = (new GroupsModel)->where(['status' => 1])->select();
         $goups = (new GroupsModel)->where(['status' => 1])->select();
         $serday1 = date("Y-m-d", strtotime('-7 day'));
         $serday1 = date("Y-m-d", strtotime('-7 day'));
         $serday2 = date("Y-m-d", strtotime('-1 day'));
         $serday2 = date("Y-m-d", strtotime('-1 day'));
-        $defday = $serday1 . ',' . $serday2;
+        $defday = $serday1 . ' , ' . $serday2;
         $toExcel = input('param.toExcel', 0);
         $toExcel = input('param.toExcel', 0);
 
 
 
 
@@ -256,14 +256,14 @@ class Report extends Base
         }
         }
 
 
         usort($all_last, function ($a, $b) {
         usort($all_last, function ($a, $b) {
-            return $a['uid'] == $b['uid'] ? 0 : ($a['uid'] > $b['uid'] ? 1 : -1);
+            return $a['uid'] == $b['uid'] ? (($a['day'] > $b['day']) ? 1 : -1) : ($a['uid'] > $b['uid'] ? 1 : -1);
         });
         });
 
 
-
         foreach ($all_last as $key => $val) {
         foreach ($all_last as $key => $val) {
             $all_last[$key]['s1'] = secendToHourMinit($all_last[$key]['s1']);
             $all_last[$key]['s1'] = secendToHourMinit($all_last[$key]['s1']);
             $all_last[$key]['s2'] = secendToHourMinit($all_last[$key]['s2']);
             $all_last[$key]['s2'] = secendToHourMinit($all_last[$key]['s2']);
             $all_last[$key]['s3'] = secendToHourMinit($all_last[$key]['s3']);
             $all_last[$key]['s3'] = secendToHourMinit($all_last[$key]['s3']);
+            $all_last[$key]['all'] = secendToHourMinit($all_last[$key]['all']);
             $all_last[$key]['s1p'] = perDisplay($all_last[$key]['s1p']);
             $all_last[$key]['s1p'] = perDisplay($all_last[$key]['s1p']);
             $all_last[$key]['s2p'] = perDisplay($all_last[$key]['s2p']);
             $all_last[$key]['s2p'] = perDisplay($all_last[$key]['s2p']);
             $all_last[$key]['s3p'] = perDisplay($all_last[$key]['s3p']);
             $all_last[$key]['s3p'] = perDisplay($all_last[$key]['s3p']);
@@ -294,7 +294,7 @@ class Report extends Base
         return $return;
         return $return;
     }
     }
 
 
-
+  
     /**
     /**
      * 时间分割
      * 时间分割
      *
      *

+ 0 - 1
application/admin/view/index/index.html

@@ -352,7 +352,6 @@
     };
     };
     socket.onmessage = function(res) {
     socket.onmessage = function(res) {
         var data = eval("("+res.data+")");
         var data = eval("("+res.data+")");
-        console.log(data)
         switch(data['message_type']){
         switch(data['message_type']){
             // 服务端ping客户端
             // 服务端ping客户端
             case 'monitor':
             case 'monitor':

+ 16 - 3
application/admin/view/kfnotice/add.html

@@ -26,7 +26,8 @@
                         <div class="layui-form-item">
                         <div class="layui-form-item">
                             <label class="layui-form-label">标题</label>
                             <label class="layui-form-label">标题</label>
                             <div class="layui-input-block">
                             <div class="layui-input-block">
-                                <input type="text" name="title" lay-verify="required" lay-reqtext="用户名是必填项,岂能为空?"
+                                <input type="text" name="title" id="title" lay-verify="required"
+                                       lay-reqtext="用户名是必填项,岂能为空?"
                                        placeholder="请输入" autocomplete="off" class="layui-input">
                                        placeholder="请输入" autocomplete="off" class="layui-input">
                             </div>
                             </div>
                         </div>
                         </div>
@@ -64,7 +65,7 @@
 
 
                         <label class="layui-form-label">内容</label>
                         <label class="layui-form-label">内容</label>
                         <div class="layui-input-block">
                         <div class="layui-input-block">
-                            <textarea name="atext" placeholder="请输入内容" lay-verify="required"
+                            <textarea name="atext" id="atext" placeholder="请输入内容" lay-verify="required"
                                       class="layui-textarea"></textarea>
                                       class="layui-textarea"></textarea>
                         </div>
                         </div>
                 </div>
                 </div>
@@ -91,6 +92,8 @@
 <script src="__JS__/jquery.form.js"></script>
 <script src="__JS__/jquery.form.js"></script>
 <script type="text/javascript">
 <script type="text/javascript">
     var ifuid = {$userid};
     var ifuid = {$userid};
+    var laydate;
+
 
 
     function getifuid() {
     function getifuid() {
         return ifuid;
         return ifuid;
@@ -136,6 +139,16 @@
         };
         };
 
 
         $('#commentForm').submit(function () {
         $('#commentForm').submit(function () {
+            if (($("#title").val().length) > 24 || ($("#title").val().length) < 2) {
+                alert("标题长度2-24个字符之间!");
+                return false;
+            }
+
+            if (($("#atext").val().length) > 600 || ($("#atext").val().length) < 2) {
+                alert("内容长度2-600个字符之间!");
+                return false;
+            }
+
             $(this).ajaxSubmit(options);
             $(this).ajaxSubmit(options);
             return false;
             return false;
         });
         });
@@ -158,7 +171,7 @@
     });
     });
 
 
     layui.use('laydate', function () {
     layui.use('laydate', function () {
-        var laydate = layui.laydate;
+        laydate = layui.laydate;
         //日期时间选择器
         //日期时间选择器
         laydate.render({
         laydate.render({
             elem: '#sendtime'
             elem: '#sendtime'

+ 3 - 1
application/admin/view/report/attendancereport.html

@@ -26,7 +26,8 @@
                 <div class="content clearfix m-b">
                 <div class="content clearfix m-b">
                     <div class="form-group">
                     <div class="form-group">
                         <div class="layui-input-inline">
                         <div class="layui-input-inline">
-                            <input type="text" class="layui-input" name="daterang" id="daterang" value="{$dzone}"
+                            <input type="text" class="layui-input" name="daterang"
+                                   id="daterang" value="{$dzone}"
                                    placeholder="时间段"
                                    placeholder="时间段"
                                    readonly="">
                                    readonly="">
                         </div>
                         </div>
@@ -160,6 +161,7 @@
         laydate.render({
         laydate.render({
             elem: '#daterang'
             elem: '#daterang'
             , range: ','
             , range: ','
+            , value: '{$dzone}'
         });
         });
 
 
     });
     });

+ 16 - 14
vendor/GatewayWorker_windows/Applications/whisper/Events.php

@@ -205,8 +205,8 @@ class Events
             Gateway::sendToCurrentClient('{"type":"pong"}');
             Gateway::sendToCurrentClient('{"type":"pong"}');
             return;
             return;
         } else {
         } else {
-            //echo "onMessage: " . $message . "\r\n";
-            //print_r([self::$global->kfList, self::$global->userList, self::$global->uidSimpleList, self::$global->userToKf]);
+            echo "onMessage: " . $message . "\r\n";
+            print_r([self::$global->kfList, self::$global->userList, self::$global->uidSimpleList, self::$global->userToKf]);
         }
         }
 
 
         $message = json_decode($message, true);
         $message = json_decode($message, true);
@@ -985,7 +985,7 @@ class Events
                 'id' => $userId
                 'id' => $userId
             ]
             ]
         ];
         ];
-        Gateway::sendToClient($kfList[$groupId]['KF'.$kf_id]['client_id'], json_encode($del_message, 256));
+        Gateway::sendToClient($kfList[$groupId]['KF' . $kf_id]['client_id'], json_encode($del_message, 256));
         unset($del_message);
         unset($del_message);
     }
     }
 
 
@@ -1791,7 +1791,7 @@ class Events
         //$chatLog = self::$db->query("SELECT `servicelog_id`,MAX(`time_line`) FROM `ws_chat_log` WHERE ".$whereOr." group by `servicelog_id`");
         //$chatLog = self::$db->query("SELECT `servicelog_id`,MAX(`time_line`) FROM `ws_chat_log` WHERE ".$whereOr." group by `servicelog_id`");
         $chatLog = self::$db->query("
         $chatLog = self::$db->query("
                 select * from ws_chat_log as a where  time_line=(
                 select * from ws_chat_log as a where  time_line=(
-                  select max(b.time_line) from ws_chat_log as b where a.servicelog_id = b.servicelog_id and from_id not like 'KF%' and (" . $whereOr . ") group by servicelog_id
+                  select max(b.time_line) from ws_chat_log as b where a.servicelog_id = b.servicelog_id and (" . $whereOr . ") group by servicelog_id
                 )
                 )
             ");
             ");
         $setOvertime = strtotime('-' . (self::$global->overtime['systemconfig_data'] - 60) . ' second');
         $setOvertime = strtotime('-' . (self::$global->overtime['systemconfig_data'] - 60) . ' second');
@@ -1801,10 +1801,10 @@ class Events
         $noResponse = strtotime('-' . (self::$global->noResponse['systemconfig_data']) . ' second');
         $noResponse = strtotime('-' . (self::$global->noResponse['systemconfig_data']) . ' second');
         foreach ($serviceLog as $k => $v) {
         foreach ($serviceLog as $k => $v) {
             // 会话超时关闭.
             // 会话超时关闭.
-            /*if ($v['start_time'] <= $overtime) {
+            if ($v['start_time'] <= $overtime) {
                 $servicelog_id = $v['servicelog_id'];
                 $servicelog_id = $v['servicelog_id'];
                 self::$db->query("update `ws_service_log` set `servicelog_close_type` = 2 where `servicelog_id`= '$servicelog_id'");
                 self::$db->query("update `ws_service_log` set `servicelog_close_type` = 2 where `servicelog_id`= '$servicelog_id'");
-                self::serverClose($v['client_id'], $servicelog_id, $v['user_id'], 'KF'.$v['kf_id'], $v['group_id']);
+                self::serverClose($v['client_id'], $servicelog_id, $v['user_id'], 'KF' . $v['kf_id'], $v['group_id']);
                 // 如果小于设定时间前一分钟则给出提示.
                 // 如果小于设定时间前一分钟则给出提示.
             } elseif ($v['start_time'] <= $setOvertime) {
             } elseif ($v['start_time'] <= $setOvertime) {
                 $chat_message = [
                 $chat_message = [
@@ -1814,13 +1814,15 @@ class Events
                     ]
                     ]
                 ];
                 ];
                 Gateway::sendToClient($v['client_id'], json_encode($chat_message, 256));
                 Gateway::sendToClient($v['client_id'], json_encode($chat_message, 256));
-            }*/
-            // 无效会话关闭.如果没有说一句话.
+            }
+
+            // 访客静默超时.
+            // 如果没有说一句话.
             if (!strlen(array_search($v['servicelog_id'], array_column($chatLog, 'servicelog_id')))) {
             if (!strlen(array_search($v['servicelog_id'], array_column($chatLog, 'servicelog_id')))) {
                 if ($v['start_time'] <= $unoperated) {
                 if ($v['start_time'] <= $unoperated) {
                     $servicelog_id = $v['servicelog_id'];
                     $servicelog_id = $v['servicelog_id'];
                     self::$db->query("update `ws_service_log` set `servicelog_close_type` = 1 where `servicelog_id`= '$servicelog_id'");
                     self::$db->query("update `ws_service_log` set `servicelog_close_type` = 1 where `servicelog_id`= '$servicelog_id'");
-                    self::serverClose($v['client_id'], $servicelog_id, $v['user_id'], 'KF'.$v['kf_id'], $v['group_id']);
+                    self::serverClose($v['client_id'], $servicelog_id, $v['user_id'], 'KF' . $v['kf_id'], $v['group_id']);
                     // 如果小于设定时间前一分钟则给出提示.
                     // 如果小于设定时间前一分钟则给出提示.
                 } elseif ($v['start_time'] <= $setUnoperated) {
                 } elseif ($v['start_time'] <= $setUnoperated) {
                     $chat_message = [
                     $chat_message = [
@@ -1833,16 +1835,16 @@ class Events
                 }
                 }
             }
             }
         }
         }
-        // 双方静默超时.
+        // 访客静默超时.如果说了话
         foreach ($chatLog as $k => $v) {
         foreach ($chatLog as $k => $v) {
             // 如果对话为客服的最后一次对话且时间小于设定时间则结束工单.
             // 如果对话为客服的最后一次对话且时间小于设定时间则结束工单.
-            if ($v['time_line'] <= $overtime) {
+            if ($v['time_line'] <= $unoperated) {
                 $found_key = array_search($v['servicelog_id'], array_column($serviceLog, 'servicelog_id'));
                 $found_key = array_search($v['servicelog_id'], array_column($serviceLog, 'servicelog_id'));
                 $servicelog_id = $v['servicelog_id'];
                 $servicelog_id = $v['servicelog_id'];
-                self::$db->query("update `ws_service_log` set `servicelog_close_type` = 2 where `servicelog_id`= '$servicelog_id'");
-                self::serverClose($serviceLog[$found_key]['client_id'], $servicelog_id, $serviceLog[$found_key]['user_id'], 'KF'.$serviceLog[$found_key]['kf_id'], $serviceLog[$found_key]['group_id']);
+                self::$db->query("update `ws_service_log` set `servicelog_close_type` = 1 where `servicelog_id`= '$servicelog_id'");
+                self::serverClose($serviceLog[$found_key]['client_id'], $servicelog_id, $serviceLog[$found_key]['user_id'], 'KF' . $serviceLog[$found_key]['kf_id'], $serviceLog[$found_key]['group_id']);
                 // 如果对话为客服的最后一次对话且时间小于设定时间前一分钟则给出提示.
                 // 如果对话为客服的最后一次对话且时间小于设定时间前一分钟则给出提示.
-            } elseif ($v['time_line'] <= $setOvertime) {
+            } elseif ($v['time_line'] <= $setUnoperated) {
                 $chat_message = [
                 $chat_message = [
                     'message_type' => 'overtime',
                     'message_type' => 'overtime',
                     'data' => [
                     'data' => [

+ 2 - 1
vendor/GatewayWorker_windows/Applications/whisper/start_gateway.php

@@ -36,7 +36,8 @@ $gateway->startPort = 2900;
 $gateway->registerAddress = '127.0.0.1:1238';
 $gateway->registerAddress = '127.0.0.1:1238';
 
 
 // 心跳间隔
 // 心跳间隔
-//$gateway->pingInterval = 10;
+$gateway->pingInterval = 10;
+$gateway->pingNotResponseLimit = 2;
 // 心跳数据
 // 心跳数据
 //$gateway->pingData = '{"message_type":"ping"}';
 //$gateway->pingData = '{"message_type":"ping"}';