Files
ProxyPanel/app/Models/Order.php
兔姬桑 66c3c53038 2.4.0 phase 1: 大量代码优化与改写
1. models 关系规范化;
2. 本地-在线 订单处理改写;
3. 优化用户界面节点的查表操作;
4. 半修复 VNet SSR版需要面板主动提交用户信息变动的问题;(节点等级,用户分组,Node信息修改 主动通知节点尚未添加);
5. 简化并提取出了 返利佣金相关处理逻辑;
2020-08-16 12:55:18 +08:00

188 lines
4.2 KiB
PHP

<?php
namespace App\Models;
use Auth;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
/**
* 订单
*/
class Order extends Model {
protected $table = 'order';
protected $dates = ['expired_at'];
protected $fillable = ['expired_at', 'is_expire', 'status'];
public function user(): BelongsTo {
return $this->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($list) { $list->whereType(2); });
}
public function scopeActivePackage($query) {
return $query->active()->with('goods')->whereHas('goods', static function($list) { $list->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 getStatusLabelAttribute(): string {
switch($this->attributes['status']){
case -1:
$status_label = trans('home.invoice_status_closed');
break;
case 1:
$status_label = trans('home.invoice_status_wait_confirm');
break;
case 2:
$status_label = trans('home.invoice_status_payment_confirm');
break;
case 0:
$status_label = trans('home.invoice_status_wait_payment');
break;
default:
$status_label = '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 = '余额';
break;
case 1:
$pay_type_label = '支付宝';
break;
case 2:
$pay_type_label = 'QQ';
break;
case 3:
$pay_type_label = '微信';
break;
case 4:
$pay_type_label = '虚拟货币';
break;
case 5:
$pay_type_label = 'PayPal';
break;
default:
$pay_type_label = '';
}
return $pay_type_label;
}
// 支付图标
public function getPayTypeIconAttribute(): string {
$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.'qq.png';
break;
case 3:
$pay_type_icon = $base_path.'wechat.png';
break;
case 5:
$pay_type_icon = $base_path.'paypal.png';
break;
case 0:
case 4:
default:
$pay_type_icon = $base_path.'coin.png';
}
return $pay_type_icon;
}
// 支付方式
public function getPayWayLabelAttribute(): string {
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;
default:
$pay_way_label = '未知';
}
return $pay_way_label;
}
}