lip 3 月之前
父节点
当前提交
3709c4ca5a
共有 4 个文件被更改,包括 42 次插入20 次删除
  1. 7 1
      app/admin/controller/Kefu.php
  2. 19 0
      app/admin/model/Admin.php
  3. 15 18
      app/worker/Events.php
  4. 1 1
      config/log.php

+ 7 - 1
app/admin/controller/Kefu.php

@@ -118,7 +118,13 @@ class Kefu extends BaseController
         //通知客服已签到
         $user_id = User::getCsId($admin_id);
         wsSendMsg($user_id,'sign',['is_sign'=>0]);
-        
+
+        $is_online = Admin::isOnline($admin_id);
+        if ($is_online == 0 ) {
+            Admin::setOnline($admin_id, 1);
+            //上线通知
+            wsSendMsg(0,'isOnline',['id'=>$user_id, 'is_online'=>1]);
+        }
         return $this->success([], '签到成功');
     }
 

+ 19 - 0
app/admin/model/Admin.php

@@ -17,4 +17,23 @@ class Admin extends BaseModel
     {
         return $this->hasOne(Department::class, 'id', 'department_id')->field(['id', 'name']);
     }
+
+    public static function inOnline($id)
+    {
+        return self::where('id', $id)->value('is_online');
+    }
+
+    public static function setOnline($id, $is_online)
+    {
+        if ($is_online == 0) {
+            //结束今日的签到
+            $sign = Sign::where('admin_id', $id)->where('created_at', '>=', date('Y-m-d'))->order('id', 'desc')->find();
+            if ($sign && $sign->time == 0) {
+                $sign->time = time() - strtotime($sign->created_at);
+                $sign->updated_at = date('Y-m-d H:i:s');
+                $sign->save();
+            }
+        }
+        return self::where('id', $id)->update(['is_online' => $is_online]);
+    }
 }

+ 15 - 18
app/worker/Events.php

@@ -43,21 +43,6 @@ class Events
             'type'      => 'init',
             'client_id' => $client_id,
         )));
-        
-        if($_SESSION['role'] != 0){
-            $admin_id = $_SESSION['user_id'];
-            $is_online = Admin::where('id',$admin_id)->value('is_online');
-            if ($is_online == 0) {
-                
-                //更新客服上线状态
-                Admin::where('id',$admin_id)->update(['is_online'=>1]);
-                Log::info('客服'.$admin_id.'上线');
-                Gateway::sendToClient($client_id, json_encode(array(
-                    'type'      => 'sign',
-                    'data' => ['is_sign' => 1],
-                )));
-            }
-        }
         self::onlineStatistics();
     }
     /**
@@ -153,6 +138,20 @@ class Events
         }
         $_SESSION['user_id']=$userInfo['user_id'];
         $_SESSION['role']=$userInfo['role'];
+
+        if($_SESSION['role'] != 0){
+            $admin_id = $_SESSION['user_id'];
+            $is_online = Admin::isOnline($admin_id);
+            if ($is_online == 0) {
+                //更新客服上线状态
+                Admin::setOnline($admin_id, 1);
+                Gateway::sendToClient($client_id, json_encode(array(
+                    'type'      => 'sign',
+                    'data' => ['is_sign' => 1],
+                )));
+            }
+        }
+
         self::sendStatus($client_id);
     }
 
@@ -179,9 +178,7 @@ class Events
 
             if($_SESSION['role'] != 0){
                 //更新客服离线状态
-                Admin::where('id',$user_id)->update(['is_online'=>0]);
-                
-                Log::info('客服'.$user_id.'下线');
+                Admin::setOnline($user_id, 0);
             }
         }
         self::onlineStatistics();

+ 1 - 1
config/log.php

@@ -7,7 +7,7 @@ return [
     // 默认日志记录通道
     'default'      => env('log.channel', 'file'),
     // 日志记录级别
-    'level'        => [],
+    'level'        => ['info', 'warning', 'error'],
     // 日志类型记录的通道 ['error'=>'email',...]
     'type_channel' => [],
     // 关闭全局日志写入