Jelajahi Sumber

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

vali 6 tahun lalu
induk
melakukan
29f7fa31ae

+ 4 - 3
application/admin/controller/System.php

@@ -77,13 +77,14 @@ class System extends Base
             }
 
             if(!empty($start) && !empty($end) && $start <= $end){
-                $temp = $temp->whereBetween('time_line', [strtotime($start), strtotime($end . ' 23:59:59')]);
-                $countTmp = $countTmp->whereBetween('time_line', [strtotime($start), strtotime($end . ' 23:59:59')]);
+                $temp = $temp->whereBetween('start_time', [strtotime($start), strtotime($end . ' 23:59:59')]);
+                $countTmp = $countTmp->whereBetween('start_time', [strtotime($start), strtotime($end . ' 23:59:59')]);
             }
 
             $result = $temp->limit($offset, $limit)->order('id', 'desc')->select();
             foreach($result as $key=>$vo){
-                $result[$key]['time_line'] = date('Y-m-d H:i:s', $vo['time_line']);
+                $result[$key]['start_time'] = date('Y-m-d H:i:s', $vo['start_time']);
+                $result[$key]['end_time'] = date('Y-m-d H:i:s', $vo['time_line']);
             }
 
             $return['total'] = $countTmp->count();  //总数据

+ 2 - 1
application/admin/view/system/wordslog.html

@@ -48,7 +48,8 @@
                         <th data-field="from_name">发送者</th>
                         <th data-field="to_name">接受者</th>
                         <th data-field="content">会话内容</th>
-                        <th data-field="time_line">会话时间</th>
+                        <th data-field="start_time">会话开始时间</th>
+                        <th data-field="start_time">会话时间</th>
                         </thead>
                     </table>
                 </div>

+ 30 - 10
application/index/controller/User.php

@@ -65,7 +65,11 @@ class User extends Controller
             'password' => md5($newPassword . config('salt'))
         ];
 
-        db('accounts')->where('id', $user_id)->update($param);
+        try{
+            db('accounts')->where('id', $user_id)->update($param);
+        }catch(\Exception $e){
+            return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
+        }
 
         return json(['code' => 1, 'data' => url('user/index'), 'msg' => '密码修改成功']);
 
@@ -80,6 +84,8 @@ class User extends Controller
             $email = input("param.email/s");
             $content = input("param.content/s");
             $phone = input("param.phone/s");
+            $qq = input("param.qq/s");
+            $wechat = input("param.wechat/s");
 
             $file = request()->file('file');
 
@@ -87,25 +93,33 @@ class User extends Controller
                 return json(['code' => -1, 'data' => '', 'msg' => '用户名称不能为空']);
             }
 
-            if(empty($email)){
-                return json(['code' => -2, 'data' => '', 'msg' => '邮箱不能为空']);
+//            if(empty($email)){
+//                return json(['code' => -2, 'data' => '', 'msg' => '邮箱不能为空']);
+//            }
+
+            if(empty($qq)){
+                return json(['code' => -3, 'data' => '', 'msg' => 'QQ不能为空']);
+            }
+
+            if(empty($wechat)){
+                return json(['code' => -4, 'data' => '', 'msg' => '微信不能为空']);
             }
 
             if(empty($content)){
-                return json(['code' => -3, 'data' => '', 'msg' => '内容不能为空']);
+                return json(['code' => -5, 'data' => '', 'msg' => '内容不能为空']);
             }
 
             if(empty($phone)){
-                return json(['code' => -4, 'data' => '', 'msg' => '电话不能为空']);
+                return json(['code' => -6, 'data' => '', 'msg' => '电话不能为空']);
             }
 
             if(empty($file)){
-                return json(['code' => -5, 'data' => '', 'msg' => '附件不能为空']);
+                return json(['code' => -7, 'data' => '', 'msg' => '附件不能为空']);
             }
             $fileInfo = $file->getInfo();
             /*if($fileInfo['size'] > 1024 * 1024 * 2){
                 // 上传失败获取错误信息
-                return json( ['code' => -6, 'data' => '', 'msg' => '文件超过2M'] );
+                return json( ['code' => -8, 'data' => '', 'msg' => '文件超过2M'] );
             }*/
 
             //检测图片格式
@@ -114,7 +128,7 @@ class User extends Controller
 
             $extArr = explode('|', 'jpg|png|gif|jpeg');
             if(!in_array($ext, $extArr)){
-                return json(['code' => -7, 'data' => '', 'msg' => '只能上传jpg|png|gif|jpeg的文件']);
+                return json(['code' => -9, 'data' => '', 'msg' => '只能上传jpg|png|gif|jpeg的文件']);
             }
 
             // 移动到框架应用根目录/public/uploads/ 目录下
@@ -123,7 +137,7 @@ class User extends Controller
                 $src =  '/uploads' . '/' . date('Ymd') . '/' . $info->getFilename();
             }else{
                 // 上传失败获取错误信息
-                return json(['code' => -8, 'data' => '', 'msg' => $file->getError()]);
+                return json(['code' => -10, 'data' => '', 'msg' => $file->getError()]);
             }
 
             $param = [
@@ -132,11 +146,17 @@ class User extends Controller
                 'content' => $content,
                 'image' => $src,
                 'phone' => $phone,
+                'qq' => $qq,
+                'wechat' => $wechat,
                 'message_status' => 0,
                 'add_time' => time()
             ];
 
-            db('accountsmessage')->insertGetId($param);
+            try{
+                db('accountsmessage')->insertGetId($param);
+            }catch(\Exception $e){
+                return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
+            }
 
             return json(['code' => 1, 'data' => url('user/index'), 'msg' => '留言成功']);
         }

+ 7 - 2
application/service/controller/Message.php

@@ -50,9 +50,14 @@ class Message extends Base
                 'message_status' => 1,
                 'dealWith_time' => time()
             ];
-            db('accountsmessage')->where('message_id', $message_id)->update($param);
 
-            return json(['code' => 1, 'data' => url('message/index'), 'msg' => '处理成功']);
+            try{
+                db('accountsmessage')->where('message_id', $message_id)->update($param);
+            }catch(\Exception $e){
+                return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
+            }
+
+            return json(['code' => 1, 'data' => url('message/index'), 'msg' => '留言处理成功']);
         }
     }
 

+ 3 - 3
application/service/controller/Words.php

@@ -107,7 +107,7 @@ class Words extends Common
 
 
     /**
-     * 快捷语修改
+     * 删除快捷语
      *
      * @access public
      * @return array JsonString
@@ -145,7 +145,7 @@ class Words extends Common
 
 
     /**
-     * 快捷语修改
+     * 新增快捷语
      *
      * @access public
      * @return array JsonString
@@ -182,7 +182,7 @@ class Words extends Common
             return json(['code' => $code, 'data' => [], 'msg' => $msg]);
         }//end try
 
-    }//end deleteWords()
+    }//end addWords()
 
 
 }

+ 77 - 2
vendor/GatewayWorker_windows/Applications/whisper/Events.php

@@ -90,6 +90,80 @@ class Events
             });
 
         }
+
+
+        // 检查对话时效给出.
+        Timer::add(3, function () {
+            // 查询对话时效设置.
+            $systemConfigData = self::$db->query("SELECT `systemconfig_data`,`systemconfig_enName`,`systemconfig_content` FROM `ws_systemconfig`");
+            foreach ($systemConfigData as $k => $v) {
+                if ($v['systemconfig_enName'] == 'overtime') {
+                    self::$global->overtime = $v;
+                } elseif ($v['systemconfig_enName'] == 'unoperated') {
+                    self::$global->unoperated = $v;
+                } elseif ($v['systemconfig_enName'] == 'noResponse') {
+                    self::$global->noResponse = $v;
+                }
+            }
+            // 查询未断开的工单.
+            $serviceLog = self::$db->query("SELECT `servicelog_id`,`client_id`,`start_time` FROM `ws_service_log` WHERE `status`='1' OR `status`='3'");
+            $whereOr = '1=0';
+            foreach ($serviceLog as $k => $v) {
+                if ($k == 0) {
+                    $whereOr = "`servicelog_id`=".$v['servicelog_id'];
+                } else {
+                    $whereOr .= " OR `servicelog_id`=".$v['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("
+                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 (".$whereOr.") group by servicelog_id
+                )
+            ");
+            $setOvertime = strtotime('-'.(self::$global->overtime['systemconfig_data']-60).' second');
+            $overtime = strtotime('-'.(self::$global->overtime['systemconfig_data']).' second');
+            $setUnoperated = strtotime('-'.(self::$global->unoperated['systemconfig_data']-60).' second');
+            $unoperated = strtotime('-'.(self::$global->unoperated['systemconfig_data']).' second');
+            $noResponse = strtotime('-'.(self::$global->noResponse['systemconfig_data']).' second');
+            foreach ($serviceLog as $k => $v) {//注意该循环时间
+                if (!strlen(array_search($v['servicelog_id'], array_column($chatLog, 'servicelog_id')))) {
+                    // 如果小于设定时间则关闭会话.
+                    if ($v['start_time'] <= $unoperated) {
+                        self::serverClose($v['client_id']);
+                    // 如果小于设定时间前一分钟则给出提示.
+                    } elseif ($v['start_time'] <= $setUnoperated) {
+                        $chat_message = [
+                            'message_type' => 'overtime',
+                            'data' => [
+                                'content' => htmlspecialchars(self::$global->unoperated['systemconfig_content']),
+                            ]
+                        ];
+                        Gateway::sendToClient($v['client_id'], json_encode($chat_message));
+                    }
+                }
+            }
+            // 循环检测会话时效.
+            foreach ($chatLog as $k => $v) {
+                $toWho = substr($v['to_id'],0,2);
+                // 如果对话为客服的最后一次对话且时间小于设定时间则结束工单.
+                if ($toWho != 'KF' && $v['time_line'] <= $overtime) {
+                    $found_key = array_search($v['servicelog_id'], array_column($serviceLog, 'servicelog_id'));
+                    self::serverClose($serviceLog[$found_key]['client_id']);
+                // 如果对话为客服的最后一次对话且时间小于设定时间前一分钟则给出提示.
+                } elseif ($toWho != 'KF' && $v['time_line'] <= $setOvertime) {
+                    $chat_message = [
+                        'message_type' => 'overtime',
+                        'data' => [
+                            'content' => htmlspecialchars(self::$global->overtime['systemconfig_content']),
+                        ]
+                    ];
+                    $found_key = array_search($v['servicelog_id'], array_column($serviceLog, 'servicelog_id'));
+                    Gateway::sendToClient($serviceLog[$found_key]['client_id'], json_encode($chat_message));
+                }
+            }
+        });
     }
 
 
@@ -130,8 +204,8 @@ class Events
             Gateway::sendToCurrentClient('{"type":"pong"}');
             return;
         } 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);
@@ -682,6 +756,7 @@ class Events
             ]
         ];
         Gateway::sendToClient($client_id, json_encode($chat_message, 256));
+        Gateway::closeClient($client_id);
         $isServiceUserOut = false;
         // 将会员服务信息,从客服的服务列表中移除
         $old = $kfList = self::$global->kfList;