Files
chatroom/app/Jobs/AutoExpireDivorces.php
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
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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'));
});
}
}