This repository has been archived on 2024-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
yoshop/source/application/task/service/Order.php
2020-04-25 22:20:29 +08:00

75 lines
2.2 KiB
PHP

<?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;
}
}