订单优化
parent
fed5181dc8
commit
21dc7f18c2
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Endpoint\Api\Filters;
|
namespace App\Endpoint\Api\Filters;
|
||||||
|
|
||||||
|
use App\Models\Order;
|
||||||
use EloquentFilter\ModelFilter;
|
use EloquentFilter\ModelFilter;
|
||||||
|
|
||||||
class OrderFilter extends ModelFilter
|
class OrderFilter extends ModelFilter
|
||||||
|
|
@ -10,19 +11,19 @@ class OrderFilter extends ModelFilter
|
||||||
{
|
{
|
||||||
switch ($status) {
|
switch ($status) {
|
||||||
case 'pending':
|
case 'pending':
|
||||||
$this->pending();
|
$this->where('status', Order::STATUS_PENDING);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'unreceived':
|
case 'unreceived':
|
||||||
$this->unreceived();
|
$this->whereIn('status', [Order::STATUS_PAID, Order::STATUS_SHIPPED]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'completed':
|
case 'completed':
|
||||||
$this->completed();
|
$this->where('status', Order::STATUS_COMPLETED);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'cancelled':
|
case 'cancelled':
|
||||||
$this->cancelled();
|
$this->where('status', Order::STATUS_CANCELLED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,6 @@ class StatisticsController extends Controller
|
||||||
{
|
{
|
||||||
$user = $request->user();
|
$user = $request->user();
|
||||||
|
|
||||||
// 如果有已过期的订单,则将过期订单的状态修改为已取消
|
|
||||||
if ($user->orders()->expired()->count()) {
|
|
||||||
$user->orders()->expired()->update([
|
|
||||||
'status' => Order::STATUS_CANCELLED,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$statistics = $user->orders()
|
$statistics = $user->orders()
|
||||||
->selectRaw('count(1) as aggregate, status')
|
->selectRaw('count(1) as aggregate, status')
|
||||||
->groupBy('status')
|
->groupBy('status')
|
||||||
|
|
|
||||||
|
|
@ -71,65 +71,6 @@ class Order extends Model
|
||||||
self::PAY_WAY_BALANCE => '余额',
|
self::PAY_WAY_BALANCE => '余额',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
|
||||||
* 仅查询已过期的订单
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
||||||
* @return \Illuminate\Database\Eloquent\Builder
|
|
||||||
*/
|
|
||||||
public function scopeExpired($query)
|
|
||||||
{
|
|
||||||
return $query->where('status', static::STATUS_PENDING)
|
|
||||||
->where('created_at', '<=', now()->subSeconds(static::expiresAt()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仅查询待付款的订单
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
||||||
* @return \Illuminate\Database\Eloquent\Builder
|
|
||||||
*/
|
|
||||||
public function scopePending($query)
|
|
||||||
{
|
|
||||||
return $query->where('status', static::STATUS_PENDING)
|
|
||||||
->where('created_at', '>', now()->subSeconds(static::expiresAt()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仅查询待收货的订单
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
||||||
* @return \Illuminate\Database\Eloquent\Builder
|
|
||||||
*/
|
|
||||||
public function scopeUnreceived($query)
|
|
||||||
{
|
|
||||||
return $query->where('status', [static::STATUS_PAID, static::STATUS_SHIPPED]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仅查询已完成的订单
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
||||||
* @return \Illuminate\Database\Eloquent\Builder
|
|
||||||
*/
|
|
||||||
public function scopeCompleted($query)
|
|
||||||
{
|
|
||||||
return $query->where('status', static::STATUS_COMPLETED);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仅查询已取消的订单
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
||||||
* @return \Illuminate\Database\Eloquent\Builder
|
|
||||||
*/
|
|
||||||
public function scopeCancelled($query)
|
|
||||||
{
|
|
||||||
return $query->where(function ($query) {
|
|
||||||
$query->expired();
|
|
||||||
})->orWhere('status', static::STATUS_CANCELLED);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 属于此订单的商品
|
* 属于此订单的商品
|
||||||
*/
|
*/
|
||||||
|
|
@ -168,22 +109,6 @@ class Order extends Model
|
||||||
return $this->status === static::STATUS_PENDING;
|
return $this->status === static::STATUS_PENDING;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取订单券优惠金额
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getStatusAttribute()
|
|
||||||
{
|
|
||||||
if ($this->attributes['status'] === static::STATUS_PENDING
|
|
||||||
&& $this->created_at->lte(now()->subSeconds(static::expiresAt()))
|
|
||||||
) {
|
|
||||||
return static::STATUS_CANCELLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->attributes['status'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取订单券优惠金额
|
* 获取订单券优惠金额
|
||||||
*
|
*
|
||||||
|
|
@ -255,16 +180,8 @@ class Order extends Model
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1800;
|
return now()->diffInSeconds(
|
||||||
}
|
$this->created_at->addSeconds(1800), false
|
||||||
|
);
|
||||||
/**
|
|
||||||
* 待付款订单的过期时间(单位:秒)
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public static function expiresAt(): int
|
|
||||||
{
|
|
||||||
return 1800;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue