fuc/src/Models/Invoice.php
2025-02-23 13:30:57 +08:00

85 lines
2.3 KiB
PHP
Executable File

<?php
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Query\Builder;
use function in_array;
use function json_decode;
use function json_encode;
use function time;
/**
* @property int $id 账单ID
* @property int $user_id 归属用户ID
* @property string $order_id 订单ID
* @property string $content 账单内容
* @property float $price 账单金额
* @property string $status 账单状态
* @property int $create_time 创建时间
* @property int $update_time 更新时间
* @property int $pay_time 支付时间
*
* @mixin Builder
*/
final class Invoice extends Model
{
protected $connection = 'default';
protected $table = 'invoice';
/**
* 账单状态
*/
public function status(): string
{
return match ($this->status) {
'unpaid' => '未支付',
'paid_gateway' => '已支付(支付网关)',
'paid_balance' => '已支付(账户余额)',
'paid_admin' => '已支付(管理员)',
'cancelled' => '已取消',
'refunded_balance' => '已退款(账户余额)',
default => '未知',
};
}
public function type(): string
{
return match ($this->type) {
'product' => '商品',
'topup' => '充值',
default => '未知',
};
}
public function refundToBalance(): void
{
if (in_array($this->status, ['paid_gateway', 'paid_balance', 'paid_admin'])) {
$user = (new User())->find($this->user_id);
$user->money += $this->price;
$user->save();
(new UserMoneyLog())->add(
$user->id,
$user->money - $this->price,
$user->money,
$this->price,
'账单 #' . $this->id . ' 退款至账户余额'
);
$content = json_decode($this->content, true);
$content[] = [
'content_id' => count($content),
'name' => '退款至账户余额',
'price' => '-' . $this->price,
];
$this->content = json_encode($content);
$this->status = 'refunded_balance';
$this->update_time = time();
$this->save();
}
}
}