quanwei
2025-11-03 ef5d748e3e3331bd20d4065c33e7867c2637d1db
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
 
namespace app\job\service;
 
use app\common\service\product\factory\ProductFactory;
use app\job\model\order\Order as OrderModel;
use app\common\model\plus\coupon\UserCoupon as UserCouponModel;
use app\common\library\helper;
 
class OrderService
{
    // 模型
    private $model;
 
    // 自动关闭的订单id集
    private $closeOrderIds = [];
 
    /**
     * 构造方法
     * Order constructor.
     */
    public function __construct()
    {
        $this->model = new OrderModel;
    }
 
    /**
     * 未支付订单自动关闭
     */
    public function close()
    {
        // 查询截止时间未支付的订单
        $list = $this->model->getCloseList(['product', 'user']);
        $this->closeOrderIds = helper::getArrayColumn($list, 'order_id');
        // 取消订单事件
        if (!empty($this->closeOrderIds)) {
            foreach ($list as &$order) {
                // 回退商品库存
                ProductFactory::getFactory($order['order_source'])->backProductStock($order['product'], false);
                // 回退用户优惠券
                $order['coupon_id'] > 0 && UserCouponModel::setIsUse($order['coupon_id'], false);
                $order['coupon_id_sys'] > 0 && UserCouponModel::setIsUse($order['coupon_id_sys'], false);
                // 回退用户积分
                $describe = "订单取消:{$order['order_no']}";
                $order['points_num'] > 0 && $order->user->setIncPoints($order['points_num'], $describe);
            }
            // 批量更新订单状态为已取消
            return $this->model->onBatchUpdate($this->closeOrderIds, ['order_status' => 20]);
        }
        return true;
    }
 
    /**
     * 获取自动关闭的订单id集
     */
    public function getCloseOrderIds()
    {
        return $this->closeOrderIds;
    }
 
}