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 @@
没上线
-
@@ -31,12 +25,12 @@
{{ Math.floor((scope.row.data ? scope.row.data.onlineTime : scope.row.onlineTime) / 3600) || '--' }} 分钟
-
+
{{ scope.row.start_work_time | parseTime('{y}-{m}-{d} {h}:{i}') }}
-
+
{{ scope.row.end_work_time | parseTime('{y}-{m}-{d} {h}:{i}') }}
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();
+ });
+ }
}