离婚流程全面升级:①发起方专属确认弹窗(含对方拒绝后果+魅力/金币惩罚实时值)②被申请方三选弹窗(同意/不同意/稍后)③不同意=强制离婚申请人赔一半金币④所有惩罚数值从后台实时查询

This commit is contained in:
2026-03-01 19:02:43 +08:00
parent 9b55b5558b
commit 84a4b42f31
7 changed files with 444 additions and 51 deletions
+63
View File
@@ -304,6 +304,69 @@ class MarriageService
return ['ok' => true, 'message' => '协议离婚已完成。'];
}
/**
* 被申请方拒绝协议离婚申请(等同于强制离婚)。
*
* 规则:
* - 婚姻立即以 forced 类型解除
* - 申请人(divorcer)被扣除 divorce_forced_charm 点魅力作为惩罚
* - 申请人一半金币赔偿给被申请方
* - 申请人进入强制离婚冷静期
*
* @param Marriage $marriage 婚姻记录
* @param User $respondent 被申请方(拒绝者)
* @return array{ok: bool, message: string}
*/
public function rejectDivorce(Marriage $marriage, User $respondent): array
{
if ($marriage->status !== 'married' || $marriage->divorce_type !== 'mutual') {
return ['ok' => false, 'message' => '没有待处理的离婚申请。'];
}
if ($marriage->divorcer_id === $respondent->id) {
return ['ok' => false, 'message' => '不能拒绝自己发起的离婚申请。'];
}
if (! $marriage->involves($respondent->id)) {
return ['ok' => false, 'message' => '无权操作此婚姻。'];
}
// 申请方(被拒的一方)
$divorcer = $marriage->user_id === $marriage->divorcer_id
? $marriage->user
: $marriage->partner;
DB::transaction(function () use ($marriage, $divorcer, $respondent) {
$charmPenalty = $this->config->get('divorce_forced_charm', 300);
// 申请人扣魅力
$this->currency->change($divorcer, 'charm', -$charmPenalty, CurrencySource::DIVORCE_CHARM, '拒绝离婚时视为强制离婚,扣除魅力惩罚');
// 申请人一半金币赔偿给对方
$divorcerJjb = $divorcer->fresh()->jjb ?? 0;
if ($divorcerJjb > 0) {
$half = (int) floor($divorcerJjb / 2);
if ($half > 0) {
$this->currency->change($divorcer, 'gold', -$half, CurrencySource::FORCED_DIVORCE_TRANSFER, "协议离婚被拒,赔偿一半金币给 {$respondent->username}");
$this->currency->change($respondent, 'gold', $half, CurrencySource::FORCED_DIVORCE_TRANSFER, "对方协议离婚被拒,获得 {$divorcer->username} 一半金币赔偿");
}
}
// 更新婚姻为强制离婚
$marriage->update([
'status' => 'divorced',
'divorce_type' => 'forced',
'divorcer_id' => $divorcer->id,
'divorced_at' => now(),
'intimacy' => 0,
'level' => 1,
]);
});
$divorcerJjb = $divorcer->fresh()->jjb ?? 0;
$half = (int) floor(($divorcer->jjb ?? 0) / 2);
return ['ok' => true, 'message' => "你已拒绝离婚申请,视为强制离婚,{$divorcer->username} 赔偿了 {$half} 枚金币给你,婚姻已解除。"];
}
/**
* 强制离婚(单方立即生效,发起方金币全转对方)。
*