mirror of
https://github.com/kuaifan/dootask.git
synced 2026-06-25 16:52:20 +00:00
- composer: framework ^13.0、php ^8.3、laravel-s ~3.8.0、predis ^2.3、 phpunit ^11.5、tinker ^3、excel ^3.1.69、captcha ^3.5、avatar ^6.5、 ldaprecord-laravel ^4、pinyin ^5.3、notify 锁 ~1.28.0; 移除 fideloper/proxy、fruitcake/laravel-cors、facade/ignition、 laravel/sail、madnest/madzipper、手动钉的 symfony/mailer; symfony/console 锁 ^7.4(LaravelS Portal 与 console 8 的 configure(): void 类型断言不兼容) - $dates 移除:AbstractModel 改 getCasts() 合并默认 datetime 列, 3 个子模型改 $casts - Carbon 3:4 处 diffInSeconds 补 absolute 参数并取整 - LdapRecord v4:config use_ssl/use_tls→use_tls/use_starttls(env 变量名不变), LdapUser::$objectClasses 补类型声明 - Madzipper→原生 ZipArchive(Base::zipAddFiles,4 处调用) - pinyin v5 静态 API(Base::getFirstCharter/cn2pinyin) - laravolt/avatar 6.5:PatchedAvatar 修上游纵向对齐 bug (intervention 4.1.3 枚举无 middle),avatar 响应改 response()->file() - TrustProxies 改框架内置基类,CORS 改 Illuminate\Http\Middleware\HandleCors - Symfony Console 8 兼容:ManticoreSyncLock::handleSignal 新签名, pcntl 回调解耦 - 非 Swoole 运行时守卫:AbstractTask::task / PushTask::push / AbstractData(swoole table),artisan/测试上下文不再炸 Target class [swoole] does not exist - Laravel 11+ change() 丢修饰符:2023_12_07 与 2025_08_10 迁移重申 nullable/default/comment(修复 fresh 安装) - Setting/Ihttp 缺键访问加 ?? 守卫(PHP 8 警告在测试中转异常) - phpunit.xml 迁移 11 schema;UserImportParseTest 改为自建部门数据 验证:8.4 容器内 migrate:fresh --seed 213 全过;php artisan test 145 passed/1 skipped;LaravelS(Swoole 6.2.1) /health 200、登录、 token 认证、WebSocket 握手、Task 投递、头像、图片裁剪冒烟全过 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
73 lines
1.8 KiB
PHP
73 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Module\Table;
|
|
|
|
use App\Models\User;
|
|
use App\Tasks\LineTask;
|
|
use App\Tasks\PushTask;
|
|
use Carbon\Carbon;
|
|
use Hhxsv5\LaravelS\Swoole\Task\Task;
|
|
|
|
class OnlineData extends AbstractData
|
|
{
|
|
/**
|
|
* 上线
|
|
* @param $userid
|
|
* @return float|int|mixed
|
|
*/
|
|
public static function online($userid)
|
|
{
|
|
if (!self::instance()->getTable()) {
|
|
return 0;
|
|
}
|
|
$key = "online::" . $userid;
|
|
$value = self::instance()->getTable()->incr($key, 'value');
|
|
if ($value === 1) {
|
|
// 通知上线
|
|
Task::deliver(new LineTask($userid, true));
|
|
// 推送离线时收到的消息
|
|
Task::deliver(new PushTask("RETRY::" . $userid));
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
/**
|
|
* 离线
|
|
* @param $userid
|
|
* @return float|int|mixed
|
|
*/
|
|
public static function offline($userid)
|
|
{
|
|
if (!self::instance()->getTable()) {
|
|
return 0;
|
|
}
|
|
$key = "online::" . $userid;
|
|
$value = self::instance()->getTable()->decr($key, 'value');
|
|
if ($value === 0) {
|
|
// 更新最后在线时间
|
|
User::whereUserid($userid)->update([
|
|
'line_at' => Carbon::now()
|
|
]);
|
|
// 通知下线
|
|
Task::deliver(new LineTask($userid, false));
|
|
// 清除在线状态
|
|
self::instance()->getTable()->del($key);
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
/**
|
|
* 获取在线状态
|
|
* @param $userid
|
|
* @return int
|
|
*/
|
|
public static function live($userid)
|
|
{
|
|
if (!self::instance()->getTable()) {
|
|
return 0;
|
|
}
|
|
$key = "online::" . $userid;
|
|
return intval(self::instance()->getTable()->get($key));
|
|
}
|
|
}
|