lip 3 месяцев назад
Родитель
Сommit
715f578664

+ 9 - 10
app/admin/command/OperationData.php

@@ -22,17 +22,16 @@ class OperationData extends Command
 
     public function execute(Input $input, Output $output)
     {
-        // //创建机器人客服的数据
-        // $autoTask=Config::autoTask();
-        // if ($autoTask &&!empty($autoTask['user_id'])) {
-        //     $admin_id = User::getAdminId($autoTask['user_id']);
-        //     $exists = KefuWork::where('admin_id', $admin_id)->where("created_at", '>=', date('Y-m-d'))->find();
-        //     if (!$exists) {
-        //         KefuWork::create([
-        //             'admin_id'=>$admin_id,
-        //         ]);
-        //     }
+        //结束前一天客服服务时间(未结束的,今日重新开始)
+        // $list = KefuTime::where('status', 0)->where("created_at", '<', date("Y-m-d"))->order('id', 'desc')->select()->toArray();
+        // foreach($list as $item) {
+        //     KefuTime::where('id', $item['id'])->update([
+        //         'status' => 1,
+        //         'end_time' => time(),
+        //     ]);
+        //     KefuTime::addData($item['admin_id'], $item['type']);
         // }
+
         //统计前一天的接线总数
         $exists = OperationDataModel::where('type', 1)->where("date", date("Y-m-d", strtotime("-1 day")))->find();
         if (!$exists) {

+ 2 - 2
app/admin/command/UserQueue.php

@@ -70,6 +70,8 @@ class UserQueue extends Command
             
             //更新客服接线数量
             User::where('user_id', $cs_uid)->update(['chat_num'=>Db::raw('chat_num+1')]);
+            //客服接线次数更新
+            KefuWork::addNum($admin_id, 'chat_num');
 
             $friend = Friend::where('create_user', $user_id)->order('create_time', 'desc')->find();
             if ($friend) {
@@ -81,8 +83,6 @@ class UserQueue extends Command
                 Message::where(['from_user' => $robot_id, 'to_user' => $user_id])->update(['from_user' => $cs_uid, 'chat_identify' => $chat_identify, 'is_read' => 1]);
             }
 
-            KefuWork::addNum($admin_id, 'chat_num');//客服接线次数更新
-
             Db::commit();
             //通知客服已接线
             wsSendMsg(0,'handleChat',['user_id'=>$user_id]);

+ 7 - 7
app/admin/command/UserTimeout.php

@@ -89,19 +89,19 @@ class UserTimeout extends Command
         if (isset($config['user_inline_finished']) && $config['user_inline_finished'] > 0) {
             $user_inline_finished = $config['user_inline_finished'] * 60;
             //会员离线后自动结束会话时间
-            $list = User::where('is_online', 0)->whereIn('service_status', [0,1,2])
+            $list = User::where('role', 0)
+                    ->where('is_online', 0)
+                    ->whereIn('service_status', [0,1,2])
                     ->where('offline_time', '<=', time() - $user_inline_finished)
                     ->select()
                     ->toArray();
+            $cs_uid = getAutoCsUid();//获取机器人ID
             foreach($list as $user) {
                 try {
                     Db::startTrans();
-                    
-                    User::where('user_id', $user['user_id'])->update(['service_status' => 3, 'service_start' => time()]);
-                    KefuTime::endData($user['cs_uid'], 3); //结束接线时间
-
-                    //更新客服接线数量
-                    User::where('user_id', $user['cs_uid'])->update(['chat_num'=>Db::raw('chat_num-1')]);
+                    //用户转给机器人客服
+                    User::where('user_id', $user['user_id'])->update(['service_status' => 0, 'service_start' => 0, 'cs_uid'=>$cs_uid]);
+                    KefuTime::endData($user['uid'], 3, $user['cs_uid']); //结束接线时间
 
                     Db::commit();
                     

+ 18 - 21
app/admin/controller/Kefu.php

@@ -42,7 +42,7 @@ class Kefu extends BaseController
             $page = $params['page'] ?? 1;
             $limit = $params['limit'] ?? 15;
             $query = KefuWork::alias('kefu_work')->join('admin', 'kefu_work.admin_id = admin.id', 'left')
-                        ->join('user', 'admin.id = user.uid', 'left')
+                        ->join('user', 'kefu_work.admin_id = user.uid', 'left')
                         ->where('kefu_work.created_at', '>=', date('Y-m-d 00:00:00'));
 
             if (isset($params['is_online']) && $params['is_online'] != '') {
@@ -50,8 +50,9 @@ class Kefu extends BaseController
             }
 
             $count = $query->count();
-            $list = $query->field(['distinct admin.id','admin.id as admin_id', 'admin.nickname','user.is_online', 'kefu_work.chat_num','kefu_work.transfer_num','kefu_work.intervention_num','kefu_work.completed_num'])
-                        ->order('admin.id', 'asc')            
+            $list = $query->field([' kefu_work.id', 'admin.nickname','user.is_online', 'kefu_work.chat_num','kefu_work.transfer_num','kefu_work.intervention_num','kefu_work.completed_num'])
+                        ->order('user.is_online', 'desc')    
+                        ->group('kefu_work.id')
                         ->limit($limit)
                         ->page($page)
                         ->select();
@@ -200,6 +201,8 @@ class Kefu extends BaseController
 
             //更新客服接线数量
             User::where('user_id', $cs_uid)->update(['chat_num'=>Db::raw('chat_num+1')]);
+            //客服接线次数更新
+            KefuWork::addNum($this->admin_id, 'chat_num');
 
             $friend = Friend::where('create_user', $user_id)->order('create_time', 'desc')->find();
             if ($friend) {
@@ -211,8 +214,6 @@ class Kefu extends BaseController
                 Message::where(['from_user' => $robot_id, 'to_user' => $user_id])->update(['from_user' => $cs_uid, 'chat_identify' => $chat_identify, 'is_read' => 1]);
             }
 
-            KefuWork::addNum($this->admin_id, 'chat_num');//客服接线次数更新
-
             Db::commit();
             //通知客服已接线
             wsSendMsg(0,'handleChat',['user_id'=>$user_id]);
@@ -244,6 +245,8 @@ class Kefu extends BaseController
             $user->save();
             //更新客服接线数量
             User::where('user_id', $cs_uid)->update(['chat_num'=>Db::raw('chat_num+1')]);
+            //客服接线次数更新
+            KefuWork::addNum($admin_id, 'chat_num');
 
             $friend = Friend::where('create_user', $user_id)->order('create_time', 'desc')->find();
             if ($friend) {
@@ -251,17 +254,12 @@ class Kefu extends BaseController
                 $friend->friend_user_id = $cs_uid;
                 $friend->save();
                 
-                //更新客服接线数量
-                User::where('user_id', $old_cs_uid)->update(['chat_num'=>Db::raw('chat_num-1')]);
-                
                 $chat_identify = $cs_uid . '-' . $user_id;
                 Message::where(['from_user' => $user_id, 'to_user' => $old_cs_uid])->update(['to_user' => $cs_uid, 'chat_identify' => $chat_identify, 'is_read' => 1]);
                 Message::where(['from_user' => $old_cs_uid, 'to_user' => $user_id])->update(['from_user' => $cs_uid, 'chat_identify' => $chat_identify, 'is_read' => 1]);
-                KefuTime::endData($old_cs_uid, 3); //结束接线时间
+                KefuTime::endData($admin_id, 3, $old_cs_uid); //结束接线时间
             }
 
-            KefuWork::addNum($admin_id, 'chat_num');//客服接线次数更新
-
             Db::commit();
             //通知客服已接线
             wsSendMsg(0,'handleChat',['user_id'=>$user_id]);
@@ -307,22 +305,19 @@ class Kefu extends BaseController
             Db::startTrans();
             $user_id = $this->request->param('user_id');
 
-            $user = User::where('user_id', $user_id)->find();
+            $user = User::where('user_id', $user_id)->where('role', 0)->find();
             if (!$user) {
                 return $this->error('用户不存在');
             }
             
             if ($user->service_status != 3) {
-                KefuTime::endData($user->cs_uid, 3); //结束接线时间
+                KefuTime::endData($user->uid, 3, $user->cs_uid); //结束接线时间
                 $old_cs_uid = $user->cs_uid;
-                //更新客服接线数量
-                User::where('user_id', $old_cs_uid)->update(['chat_num'=>Db::raw('chat_num-1')]);
                 
                 //转成机器人聊天
                 $user->service_status = -1;
                 $user->service_time = 0;
-                $autoTask = \app\manage\model\Config::autoTask();
-                $user->cs_uid = isset($autoTask['user_id']) ? $autoTask['user_id'] : 0;
+                $user->cs_uid = getAutoCsUid();//获取机器人ID
                 $user->save();
 
                 $cs_uid = $user->cs_uid;
@@ -334,9 +329,8 @@ class Kefu extends BaseController
                     $friend->save();
                     
                     $chat_identify = $cs_uid . '-' . $user_id;
-                    Message::where(['from_user' => $user_id, 'to_user' => $old_cs_uid])->update(['to_user' => $cs_uid, 'chat_identify' => $chat_identify]);
-                    Message::where(['from_user' => $old_cs_uid, 'to_user' => $user_id])->update(['from_user' => $cs_uid, 'chat_identify' => $chat_identify]);
-                    KefuTime::endData($old_cs_uid, 3); //结束接线时间
+                    Message::where(['from_user' => $user_id, 'to_user' => $old_cs_uid])->update(['to_user' => $cs_uid, 'chat_identify' => $chat_identify, 'is_read' => 1]);
+                    Message::where(['from_user' => $old_cs_uid, 'to_user' => $user_id])->update(['from_user' => $cs_uid, 'chat_identify' => $chat_identify, 'is_read' => 1]);
                 }
 
                 Db::commit();
@@ -355,7 +349,10 @@ class Kefu extends BaseController
                         'content' => Config::getFieldValue('kefu_finished_chat'),
                         'file_id' => 0,
                         'is_group' => 0,
-                        'user_id' => $user->cs_uid,
+                        'user_id' => $cs_uid,
+                        'extends' => json_encode([
+                            'cs_uid' => $old_cs_uid,
+                        ]),
                     ];
                     Message::sendMsg($param, 0);
                 }

+ 12 - 1
app/admin/model/KefuTime.php

@@ -3,6 +3,7 @@
 namespace app\admin\model;
 
 use app\BaseModel;
+use \think\facade\Db;
 
 class KefuTime extends BaseModel
 {
@@ -20,7 +21,17 @@ class KefuTime extends BaseModel
     }
 
     //结束服务时间
-    public static function endData($admin_id, $type) {
+    public static function endData($admin_id, $type, $cs_uid = 0) {
+        //结束接线(需要判断当前没有任何接线的用户,才结束接线时间)
+        if ($type == 3) {
+            //更新客服接线数量
+            User::where('user_id', $cs_uid)->update(['chat_num'=>Db::raw('chat_num-1')]);
+            
+            $count = User::where('cs_uid', $cs_uid)->whereIn('service_status', [1,2])->count();
+            if ($count == 0) {
+                return false;
+            }
+        }
         $exits = KefuTime::where('admin_id', $admin_id)->where('type', $type)->where("created_at", '>=', date("Y-m-d"))->order('id', 'desc')->find();
         if ($exits && $exits->status == 0) {
             $exits->status = 1;

+ 8 - 0
app/common.php

@@ -59,6 +59,14 @@ function ret($code, $msg = "",$data = [],$count=0, $page=0)
     return json($ret);
 }
 
+/**
+ * 获取机器人客服ID
+ */
+function getAutoCsUid(){
+    $autoTask = \app\manage\model\Config::autoTask();
+    return isset($autoTask['user_id']) ? $autoTask['user_id'] : 0;
+}
+
 /**
  * 将秒数转换为 HH:MM:SS 格式的时间字符串
  * @param int $seconds 要转换的秒数(支持正数/0,负数会转为0)

+ 1 - 1
app/enterprise/model/User.php

@@ -808,7 +808,7 @@ class User extends BaseModel
             //结束客服在线时间
             KefuTime::endData($user->uid, 2);
             //结束客服接线时间
-            KefuTime::endData($user->uid, 3);
+            KefuTime::endData($user->uid, 3, $user->cs_uid);
             //结束客服服务时间
             KefuTime::endData($user->uid, 4);
         }