belongsTo(User::class);
}
public function goods(): BelongsTo
{
return $this->belongsTo(Goods::class)->withTrashed();
}
public function coupon(): BelongsTo
{
return $this->belongsTo(Coupon::class)->withTrashed();
}
public function payment(): HasOne
{
return $this->hasOne(Payment::class);
}
public function scopeUid($query, $uid = null)
{
return $query->whereUserId($uid ?: Auth::id());
}
public function scopeRecentUnPay($query)
{
return $query->whereStatus(0)->where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-15 minutes')));
}
public function scopeUserPrepay($query, $uid = null)
{
return $query->uid($uid)->whereStatus(3);
}
public function scopeActive($query)
{
return $query->whereIsExpire(0)->whereStatus(2);
}
public function scopeActivePlan($query)
{
return $query->active()->with('goods')->whereHas('goods', static function ($query) {
$query->whereType(2);
});
}
public function scopeActivePackage($query)
{
return $query->active()->with('goods')->whereHas('goods', static function ($query) {
$query->whereType(1);
});
}
public function scopeUserActivePlan($query, $uid = null)
{
return $query->uid($uid)->activePlan();
}
public function scopeUserActivePackage($query, $uid = null)
{
return $query->uid($uid)->activePackage();
}
public function close() // 关闭订单
{
return $this->update(['status' => -1]);
}
public function paid() // 完成订单
{
return $this->update(['status' => 1]);
}
public function complete() // 完成订单
{
return $this->update(['status' => 2]);
}
public function prepay() // 预支付订单
{
return $this->update(['status' => 3]);
}
// 订单状态
public function getStatusLabelAttribute(): string
{
switch ($this->attributes['status']) {
case -1:
$status_label = ''.trans('user.status.closed').'';
break;
case 0:
$status_label = ''.trans('user.status.waiting_payment').'';
break;
case 1:
$status_label = ''.trans('user.status.waiting_confirm').'';
break;
case 2:
if ($this->attributes['goods_id'] === 0) {
$status_label = ''.trans('user.status.completed').'';
} elseif ($this->attributes['is_expire']) {
$status_label = ''.trans('user.status.expired').'';
} else {
$status_label = ''.trans('user.status.using').'';
}
break;
case 3:
$status_label = ''.trans('user.status.prepaid').'';
break;
default:
$status_label = trans('user.unknown');
}
return $status_label;
}
public function getOriginAmountAttribute($value)
{
return $value / 100;
}
public function setOriginAmountAttribute($value)
{
return $this->attributes['origin_amount'] = $value * 100;
}
public function getAmountAttribute($value)
{
return $value / 100;
}
public function setAmountAttribute($value)
{
return $this->attributes['amount'] = $value * 100;
}
// 支付渠道
public function getPayTypeLabelAttribute(): string
{
switch ($this->attributes['pay_type']) {
case 0:
$pay_type_label = trans('common.payment.credit');
break;
case 1:
$pay_type_label = trans('common.payment.alipay');
break;
case 2:
$pay_type_label = '支付宝支付';
break;
case 3:
$pay_type_label = trans('common.payment.wechat');
break;
case 4:
$pay_type_label = trans('common.payment.crypto');
break;
case 5:
$pay_type_label = 'PayPal';
break;
case 6:
$pay_type_label = 'Stripe';
break;
case 7:
trans('common.payment.manual');
break;
default:
$pay_type_label = '';
}
return $pay_type_label;
}
// 支付图标
public function getPayTypeIconAttribute(): string
{
// return '/assets/images/payment/'.config('common.payment.icon')[$this->attributes['pay_type']] ?? 'coin.png';
$base_path = '/assets/images/payment/';
switch ($this->attributes['pay_type']) {
case 1:
$pay_type_icon = $base_path.'alipay.png';
break;
case 2:
$pay_type_icon = $base_path.'alipay-other.png';
break;
case 3:
$pay_type_icon = $base_path.'wechat.png';
break;
case 5:
$pay_type_icon = $base_path.'paypal.png';
break;
case 6:
$pay_type_icon = $base_path.'stripe.png';
break;
default:
$pay_type_icon = $base_path.'coin.png';
}
return $pay_type_icon;
}
// 支付方式
public function getPayWayLabelAttribute(): string
{
//return config('common.payment.labels')[$this->attributes['pay_way']] ?? '未知';
switch ($this->attributes['pay_way']) {
case 'credit':
$pay_way_label = '余额';
break;
case 'youzan':
$pay_way_label = '有赞云';
break;
case 'f2fpay':
$pay_way_label = '支付宝当面付';
break;
case 'codepay':
$pay_way_label = '码支付';
break;
case 'payjs':
$pay_way_label = 'PayJs';
break;
case 'bitpayx':
$pay_way_label = '麻瓜宝';
break;
case 'paypal':
$pay_way_label = 'PayPal';
break;
case 'stripe':
$pay_way_label = 'Stripe';
break;
case 'paybeaver':
$pay_way_label = '海狸支付';
break;
case 'zpay':
$pay_way_label = 'zpay';
break;
case 'epay':
$pay_way_label = '易支付';
break;
case 'theadpay':
$pay_way_label = '平头哥';
break;
case 'epaytt':
$pay_way_label = 'epaytt';
break;
case 'bypay':
$pay_way_label = 'bypay';
break;
default:
$pay_way_label = '未知';
}
return $pay_way_label;
}
}