每次提交订单之后立即就被关闭了?
没有显示任何错误,不知道是不是laravel的bug,env里面设置redis了,tinker里面dd也能打印出来是redis,还需要在config/app里面设置redis的连接吗?代码如下
CloseOrder.php
class CloseOrder implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $order;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Order $order,$delay)
{
$this->order = $order;
$this->delay($this->delay);
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
if($this->order->paid_at){
return;
}
DB::transaction(function (){
$this->order->update(['closed'=>true]);
foreach ($this->order->items as $item){
$item->productSku->increaseStock($item->amount);
}
});
}
}
OrdersController.php
class OrdersController extends Controller
{
public function store(OrderRequest $request){
$user = $request->user();
//开启一个数据库事务
$order = DB::transaction(function () use ($user ,$request){
$address = UserAddress::find($request->input('address_id'));
$address->update(['last_used_at'=>Carbon::now()]);
$order = new Order([
'address' => [ // 将地址信息放入订单中
'address' => $address->full_address,
'zip' => $address->zip,
'contact_name' => $address->contact_name,
'contact_phone' => $address->contact_phone,
],
'remark'=> $request->input('remark'),
'total_amount'=>0,
]);
$order->user()->associate($user);
$order->save();
$total_amount = 0;
$items = $request->input('items');
foreach ($items as $data){
$sku = ProductSku::find($data['sku_id']);
$item = $order->items()->make([
'amount'=> $data['amount'],
'price' => $sku->price,
]);
$item->product()->associate($sku->product);
$item->productSku()->associate($sku);
$item->save();
$total_amount += $sku->price * $data['amount'];
if($sku->decreaseStock($data['amount']) <= 0){
throw new InvalidRequestException('库存不足');
}
}
$order->update(['total_amount'=>$total_amount]);
$skuIds = collect($request->input('items'))->pluck('sku_id');
$user->cartItems()->whereIn('product_sku_id', $skuIds)->delete();
return $order;
});
$this->dispatch(new CloseOrder($order,config('app.order_ttl')));
return $order;
}
}
推荐文章: