123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
- namespace app\task\service;
- use app\common\service\Basics;
- use app\task\model\Order as OrderModel;
- use app\task\model\UserCoupon as UserCouponModel;
- use app\common\library\helper;
- use app\common\service\goods\source\Factory as FactoryStock;
- class Order extends Basics
- {
- /* @var \app\task\model\Order $model */
- private $model;
- // 自动关闭的订单id集
- private $closeOrderIds = [];
- /**
- * 构造方法
- * Order constructor.
- */
- public function __construct()
- {
- $this->model = new OrderModel;
- }
- /**
- * 未支付订单自动关闭
- * @param int $deadlineTime
- * @param array $where
- * @return bool
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- * @throws \Exception
- */
- public function close($deadlineTime, $where = [])
- {
- // 条件
- $filter = array_merge($where, [
- 'pay_status' => 10,
- 'order_status' => 10,
- 'create_time' => ['<=', $deadlineTime]
- ]);
- // 查询截止时间未支付的订单
- $list = $this->model->getList($filter, ['goods', 'user']);
- $this->closeOrderIds = helper::getArrayColumn($list, 'order_id');
- // 取消订单事件
- if (!empty($this->closeOrderIds)) {
- foreach ($list as &$order) {
- // 回退商品库存
- FactoryStock::getFactory($order['order_source'])->backGoodsStock($order['goods'], false);
- // 回退用户优惠券
- $order['coupon_id'] > 0 && UserCouponModel::setIsUse($order['coupon_id'], 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集
- * @return array
- */
- public function getCloseOrderIds()
- {
- return $this->closeOrderIds;
- }
- }
|