File: /var/www/BtPayments/BtPayments-platform/app/Models/Payment/Payment.php
<?php
namespace App\Models\Payment;
use App\Models\Model;
use App\Models\CoinPal\CoinPalNotifyRecord;
use App\Models\CoinPal\CoinPalPaymentRecord;
use App\Models\Merchant;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
class Payment extends Model
{
use HasUlids;
use HasFactory;
use PaymentAttrs;
use PaymentExtend;
use PaymentCallback;
use PaymentCreate;
const FROM_SHOPIFY = 'shopify';
const FROM_WOOCOMMERCE = 'woocommerce';
protected $guarded = [];
protected function casts(): array
{
return [
'order_remark' => 'object',
'order_amount' => 'decimal:8',
'total_paid_amount' => 'decimal:8',
'total_paid_amount_usdt' => 'decimal:8',
'payer_paid_amount' => 'decimal:8',
'payer_due_amount' => 'decimal:8',
];
}
/**
* 关联商户
*/
public function merchant(): BelongsTo
{
return $this->belongsTo(Merchant::class, 'merchant_id');
}
/**
* 关联 PaymentRecord
*/
public function paymentRecord(): HasOne
{
return $this->hasOne(CoinPalPaymentRecord::class, 'payment_id', 'id');
}
/**
* 关联 付款记录
*/
public function notifyRecords(): HasMany
{
return $this->hasMany(CoinPalNotifyRecord::class, 'payment_id', 'id');
}
/**
* scope: 未支付的
*/
public function scopeUnpaid($query)
{
return $query->whereIn('status', [
self::STATUS_CREATED,
self::STATUS_UNPAID,
]);
}
/**
* scope: 不足额支付的
*/
public function scopeUnderpaid($query)
{
return $query
->where('total_paid_amount', '>', 0)
->whereRaw('total_paid_amount < order_amount');
}
/**
* scope: 超额支付的
*/
public function scopeOverpaid($query)
{
return $query
->where('total_paid_amount', '>', 0)
->whereRaw('total_paid_amount > order_amount');
}
}