From 617cabbe4ca52d5c1ba0e77d5ed3f840e1b41a6a Mon Sep 17 00:00:00 2001 From: yaosen <741606767@qq.com> Date: Tue, 25 Jun 2024 18:30:50 +0800 Subject: [PATCH] a --- admin/src/router/index.js | 2 +- admin/src/views/onlines/online.vue | 10 +--- .../app/admin/controller/IndexController.php | 1 + .../app/admin/controller/WatchController.php | 39 ++++++++++++++ service/composer.json | 3 +- service/composer.lock | 52 ++++++++++++++++++- service/process/Monitor.php | 10 ++++ 7 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 service/app/admin/controller/WatchController.php diff --git a/admin/src/router/index.js b/admin/src/router/index.js index 8fc161e4..459d8b94 100644 --- a/admin/src/router/index.js +++ b/admin/src/router/index.js @@ -98,7 +98,7 @@ export const asyncRoutes = [ component: () => import('@/views/onlines/online.vue'), name: 'onlines', meta: { - title: '客服在线列表', + title: '在线客服列表', roles: ['admin'] } }/*, diff --git a/admin/src/views/onlines/online.vue b/admin/src/views/onlines/online.vue index 401b0e20..4ccd7057 100644 --- a/admin/src/views/onlines/online.vue +++ b/admin/src/views/onlines/online.vue @@ -10,12 +10,6 @@ 没上线 - - + - + diff --git a/service/app/admin/controller/IndexController.php b/service/app/admin/controller/IndexController.php index 84f40d9f..2cd5e6af 100644 --- a/service/app/admin/controller/IndexController.php +++ b/service/app/admin/controller/IndexController.php @@ -17,6 +17,7 @@ class IndexController extends base public function isWork(Request $request) { + Redis::set('CRM:USER:ONLINE:WATCH:' . $request->admin->id, time()); $lastTime = Redis::get('CRM:USER:ONLINE:' . $request->admin->id); $end = Redis::hGet('CRM:USER:ONLINE:END', $request->admin->id); diff --git a/service/app/admin/controller/WatchController.php b/service/app/admin/controller/WatchController.php new file mode 100644 index 00000000..f20aeaab --- /dev/null +++ b/service/app/admin/controller/WatchController.php @@ -0,0 +1,39 @@ +select(); + foreach ($datas as $data) { + $item = []; + $watch = Redis::get('CRM:USER:ONLINE:WATCH:'.$data->id); + + if (empty($data->start_work_time)){ + $item['start_work_time'] = $nowTime; + } + if (($nowTime - $watch) > 0 && ($nowTime - $watch) <= 6*60){ + $item['end_work_time'] = $nowTime; + } + Log::warning('watchIsWork',['data'=>$item]); + if (!empty($item)){ + try { + Admins::where('id', $data->id)->update($item); + } catch (DbException $e) { + Log::error('watchIsWork',['error'=>$e]); + continue; + } + } + } + echo "========watchIsWork end======\n"; + return; + } +} \ No newline at end of file diff --git a/service/composer.json b/service/composer.json index a89a3cfe..82187fdc 100644 --- a/service/composer.json +++ b/service/composer.json @@ -34,7 +34,8 @@ "vlucas/phpdotenv": "^5.5", "qiniu/php-sdk": "^7.12", "webman/console": "^1.3", - "mk-j/php_xlsxwriter": "^0.39.0" + "mk-j/php_xlsxwriter": "^0.39.0", + "workerman/crontab": "^1.0" }, "suggest": { "ext-event": "For better performance. " diff --git a/service/composer.lock b/service/composer.lock index 176d2ce8..25beef5d 100644 --- a/service/composer.lock +++ b/service/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ea0dd6c24e2c79f4af8509724c30fa0f", + "content-hash": "c5d73376efb82db5d880157187b7a430", "packages": [ { "name": "carbonphp/carbon-doctrine-types", @@ -2768,6 +2768,56 @@ }, "time": "2023-04-23T14:40:18+00:00" }, + { + "name": "workerman/crontab", + "version": "v1.0.6", + "source": { + "type": "git", + "url": "https://github.com/walkor/crontab.git", + "reference": "b78f1556f2977715b9cb5653129e6d9cf160d966" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/walkor/crontab/zipball/b78f1556f2977715b9cb5653129e6d9cf160d966", + "reference": "b78f1556f2977715b9cb5653129e6d9cf160d966", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "workerman/workerman": ">=4.0.20" + }, + "type": "library", + "autoload": { + "psr-4": { + "Workerman\\Crontab\\": "./src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "walkor", + "email": "walkor@workerman.net", + "homepage": "http://www.workerman.net", + "role": "Developer" + } + ], + "description": "A crontab written in PHP based on workerman", + "homepage": "http://www.workerman.net", + "keywords": [ + "crontab" + ], + "support": { + "email": "walkor@workerman.net", + "forum": "http://wenda.workerman.net/", + "issues": "https://github.com/walkor/workerman/issues", + "source": "https://github.com/walkor/crontab", + "wiki": "http://doc.workerman.net/" + }, + "time": "2022-10-17T01:59:19+00:00" + }, { "name": "workerman/webman-framework", "version": "v1.5.18", diff --git a/service/process/Monitor.php b/service/process/Monitor.php index 92b37164..67e5fe25 100644 --- a/service/process/Monitor.php +++ b/service/process/Monitor.php @@ -14,10 +14,12 @@ namespace process; +use app\admin\controller\WatchController; use FilesystemIterator; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; use SplFileInfo; +use Workerman\Crontab\Crontab; use Workerman\Timer; use Workerman\Worker; @@ -240,4 +242,12 @@ class Monitor } return $memoryLimit; } + + public function onWorkerStart() + { + // 每秒钟执行一次 + new Crontab('*/1 * * * * *', function(){ + WatchController::watchIsWork(); + }); + } }