3 changed files with 114 additions and 3 deletions
-
7app/Http/Controllers/Api/OrderController.php
-
6app/Http/Controllers/Api/WxpayController.php
-
104app/Jobs/OrderTimeout.php
@ -0,0 +1,104 @@ |
|||
<?php |
|||
|
|||
namespace App\Jobs; |
|||
|
|||
use App\Common\OrderStatus; |
|||
use App\Models\AgentProduct; |
|||
use App\Models\AgentProductSpec; |
|||
use App\Models\Order; |
|||
use App\Models\Product; |
|||
use App\Models\ProductSpec; |
|||
use Illuminate\Bus\Queueable; |
|||
use Illuminate\Contracts\Queue\ShouldQueue; |
|||
use Illuminate\Foundation\Bus\Dispatchable; |
|||
use Illuminate\Queue\InteractsWithQueue; |
|||
use Illuminate\Queue\SerializesModels; |
|||
use Illuminate\Support\Facades\DB; |
|||
use Illuminate\Support\Facades\Log; |
|||
|
|||
class OrderTimeout implements ShouldQueue |
|||
{ |
|||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; |
|||
|
|||
protected $orderNumber = ''; |
|||
protected $redis = ''; |
|||
|
|||
/** |
|||
* Create a new job instance. |
|||
* |
|||
* @return void |
|||
*/ |
|||
public function __construct($orderNumber, $delay) |
|||
{ |
|||
$this->orderNumber = $orderNumber; |
|||
$this->delay = $delay; |
|||
} |
|||
|
|||
/** |
|||
* Execute the job. |
|||
* |
|||
* @return void |
|||
*/ |
|||
public function handle() |
|||
{ |
|||
//需要处理的订单状态
|
|||
$status_arr = [OrderStatus::UNPAID, OrderStatus::PAY_EARNEST, OrderStatus::OFFLINE_UNPAID]; |
|||
|
|||
//记录最小ID,下次查询时按ID正序查询,只处理大于该ID的订单,避免重复扫描数据库
|
|||
/*$min_id = Order::query() |
|||
->whereIn('status', $status_arr) |
|||
->whereNotNull('timeout') |
|||
->min('id');*/ |
|||
$v = Order::with('orderProductItem') |
|||
// ->where('id', '>=', $min_id)
|
|||
->whereIn('status', $status_arr) |
|||
->whereNotNull('timeout') |
|||
->where('order_no', $this->orderNumber) |
|||
->first(); |
|||
|
|||
if (!empty($v) && !is_null($v->timeout) && strtotime($v->timeout) < time()) { |
|||
DB::beginTransaction(); |
|||
try { |
|||
//取消订单
|
|||
$v->status = OrderStatus::CANCEL; |
|||
$v->save(); |
|||
|
|||
//供应商产品加库存
|
|||
Product::whereIn('id', explode(',', $v->product_ids))->increment('stock', $v->num); |
|||
|
|||
//代理商产品加库存
|
|||
AgentProduct::where('id', $v->agent_product_id)->increment('stock', $v->num); |
|||
|
|||
if (!$v->orderProductItem->isEmpty()) { |
|||
$item = $v->orderProductItem->toArray(); |
|||
|
|||
//供应商产品规格加库存
|
|||
foreach ($item as $v2) { |
|||
if ($v2['product_spec_id']) { |
|||
if (is_array($v2['product_spec_id'])) { |
|||
ProductSpec::whereIn('id', $v2['product_spec_id'])->increment('stock', $v->num); |
|||
} else { |
|||
ProductSpec::where('id', $v2['product_spec_id'])->increment('stock', $v->num); |
|||
} |
|||
} |
|||
} |
|||
|
|||
//代理商产品规格加库存
|
|||
foreach ($item as $v2) { |
|||
if ($v2['agent_product_spec_id']) { |
|||
if (is_array($v2['agent_product_spec_id'])) { |
|||
AgentProductSpec::whereIn('id', $v2['agent_product_spec_id'])->increment('stock', $v->num); |
|||
} else { |
|||
AgentProductSpec::where('id', $v2['agent_product_spec_id'])->increment('stock', $v->num); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
DB::commit(); |
|||
} catch (\Exception $exception) { |
|||
DB::rollBack(); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue