|
|
|
@ -16,62 +16,57 @@ class CancelUnPayOrder implements ShouldQueue
|
|
|
|
|
{
|
|
|
|
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
|
|
|
|
|
|
|
|
|
protected $order;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected $order; // Property to hold the order instance
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create a new job instance.
|
|
|
|
|
*
|
|
|
|
|
* @param Order $order
|
|
|
|
|
* @param Order $order The order that needs to be processed
|
|
|
|
|
*/
|
|
|
|
|
public function __construct(Order $order)
|
|
|
|
|
{
|
|
|
|
|
$this->order = $order;
|
|
|
|
|
$this->order = $order; // Initialize the order property
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Execute the job.
|
|
|
|
|
*
|
|
|
|
|
* This method is called when the job is processed. It checks the status of the order
|
|
|
|
|
* and cancels it if it remains unpaid.
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function handle()
|
|
|
|
|
{
|
|
|
|
|
// 查询数据库最新状态
|
|
|
|
|
// Refresh the order instance from the database to get the latest status
|
|
|
|
|
$nowOrder = $this->order->refresh();
|
|
|
|
|
|
|
|
|
|
// 如果现在还是没有付款,那么则取消订单
|
|
|
|
|
// Check if the current status is UN_PAY (unpaid)
|
|
|
|
|
if ($nowOrder->status == OrderStatusEnum::UN_PAY) {
|
|
|
|
|
|
|
|
|
|
// 如果订单还是没有付款
|
|
|
|
|
// 未付款设置为取消状态,
|
|
|
|
|
// Update the order status to UN_PAY_CANCEL (cancelled due to non-payment)
|
|
|
|
|
$this->order->status = OrderStatusEnum::UN_PAY_CANCEL;
|
|
|
|
|
$this->order->save();
|
|
|
|
|
$this->order->save(); // Save the updated order status
|
|
|
|
|
|
|
|
|
|
// 回退优惠券
|
|
|
|
|
// Process coupon rollback if a coupon was used
|
|
|
|
|
if (
|
|
|
|
|
!is_null($this->order->coupon_id) &&
|
|
|
|
|
$coupon = UserHasCoupon::query()->find($this->order->coupon_id)
|
|
|
|
|
!is_null($this->order->coupon_id) && // Ensure a coupon ID exists
|
|
|
|
|
$coupon = UserHasCoupon::query()->find($this->order->coupon_id) // Find the coupon in the database
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
|
|
// Reset the coupon usage timestamp
|
|
|
|
|
$coupon->used_at = null;
|
|
|
|
|
$coupon->save();
|
|
|
|
|
$coupon->save(); // Save changes to the coupon
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 回滚库存
|
|
|
|
|
// Rollback inventory for each order detail
|
|
|
|
|
$this->order
|
|
|
|
|
->details()
|
|
|
|
|
->with('product')
|
|
|
|
|
->get()
|
|
|
|
|
->details() // Get the order details
|
|
|
|
|
->with('product') // Eager load the associated product
|
|
|
|
|
->get() // Fetch the details
|
|
|
|
|
->map(function (OrderDetail $detail) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 不回滚出售数量
|
|
|
|
|
$product = $detail->product;
|
|
|
|
|
$product->increment('count', $detail->number);
|
|
|
|
|
// For each order detail, increment the product's count by the ordered quantity
|
|
|
|
|
$product = $detail->product; // Get the associated product
|
|
|
|
|
$product->increment('count', $detail->number); // Increase product count
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|