| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- <?php
- namespace app\jobs\order;
- // 自动取消超时订单
- use app\models\Goods;
- use app\models\Order;
- use app\models\OrderDetail;
- use yii\base\BaseObject;
- use yii\queue\JobInterface;
- class OrderCancelJob extends BaseObject implements JobInterface
- {
- public $order_id;
- public function execute($queue)
- {
- try {
- $order_id = $this->order_id;
- $order = Order::findOne($order_id);
- if (intval($order->trade_status) === Order::ORDER_FLOW_DEFAULT && intval($order->is_pay) === Order::IS_PAY_FALSE && $order->pay_type !== Order::PAY_TYPE_COD) {
- $over_time = time() - (15 * 60);
- if ($order->created_at < $over_time) {
- $order->trade_status = Order::ORDER_FLOW_CANCEL;
- if (!$order->save()) {
- throw new \Exception(json_encode($order->errors, JSON_UNESCAPED_UNICODE));
- }
- // 商城商品总库存恢复
- $order_detail_list = OrderDetail::find()->where(['order_id' => $order->id, 'is_delete' => 0])->asArray()->all();
- foreach ($order_detail_list as $order_detail) {
- $goods = Goods::findOne($order_detail['goods_id']);
- $attr_id_list = [];
- foreach (json_decode($order_detail['attr'], true) as $item) {
- array_push($attr_id_list, $item['attr_id']);
- }
- $goods->numAdd($attr_id_list, $order_detail['num']);
- }
- } else {
- \queue_push(new OrderCancelJob(['order_id' => $order_id]), 900);
- }
- }
- } catch (\Exception $e) {
- debug_log([
- 'msg' => $e->getMessage(),
- 'line' => $e->getLine()
- ], 'orderCancelJob.log');
- }
- }
- }
|