Files
chatroom/app/Jobs/AutoExpireDivorces.php
T
lkddi 143601c251 功能:婚姻系统第11步(Horizon Jobs + 定时任务)
5个 Job:
- ExpireMarriageProposals:每5分钟扫描超时求婚(广播通知)
- TriggerScheduledWeddings:每5分钟触发定时婚礼(广播庆典)
- AutoExpireDivorces:每小时处理离婚超时自动解除
- ExpireWeddingEnvelopes:每小时清理过期红包
- ProcessMarriageIntimacy:每日00:05全量亲密度时间奖励

console.php 注册5个 Schedule
2026-03-01 15:16:46 +08:00

47 lines
1.4 KiB
PHP

<?php
/**
* 文件功能:扫描协议离婚超时自动升级处理(72h无响应则自动解除)
*
* 每小时执行一次,超时的协议离婚申请自动执行发起方惩罚并解除婚姻。
*
* @author ChatRoom Laravel
*
* @version 1.0.0
*/
namespace App\Jobs;
use App\Events\MarriageDivorced;
use App\Models\Marriage;
use App\Services\MarriageConfigService;
use App\Services\MarriageService;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class AutoExpireDivorces implements ShouldQueue
{
use Queueable;
/**
* 执行 Job:扫描离婚申请超时并自动解除。
*/
public function handle(MarriageService $service, MarriageConfigService $config): void
{
// 超时小时数从配置读取(默认72h)
$timeoutHours = $config->get('divorce_request_timeout', 72);
Marriage::query()
->where('status', 'married')
->where('divorce_type', 'mutual')
->whereNotNull('divorce_requested_at')
->where('divorce_requested_at', '<=', now()->subHours($timeoutHours))
->cursor()
->each(function (Marriage $marriage) use ($service) {
$service->autoExpireDivorce($marriage);
$marriage->refresh();
broadcast(new MarriageDivorced($marriage, 'auto'));
});
}
}