caipan_shop_admin/app/subscribe/Order.php

79 lines
3.0 KiB
PHP
Executable File

<?php
declare (strict_types = 1);
namespace app\subscribe;
use app\model\Order AS OrderModel;
use app\model\OrderSku;
use app\repository\OrderRepository;
use think\facade\Log;
class Order
{
public function onOrderCheck()
{
Log::info('触发订单检测事件:自动收货、自动过期');
$day = 3;//自动收货时间 发货后N天
// $expiredList = OrderRepository::getInstance()->expiredList();
$needAcceptList = OrderRepository::getInstance()->autoReceiptList($day);
// var_dump($expiredList->isEmpty());
// var_dump($needAcceptList->isEmpty());
// exit;
/*
if (!$expiredList->isEmpty()) {
OrderModel::whereIn('id', $expiredList->column('id'))->save([
'status' => OrderModel::STATUS_EXPIRED,
]);
}
*/
if (!$needAcceptList->isEmpty()) {
// OrderModel::whereIn('id', $needAcceptList->column('id'))->save([
// 'status' => OrderModel::STATUS_COMPLETED,
//// 'completed_at' => date('Y-m-d H:i:s'),
// 'accepted_at' => date('Y-m-d H:i:s'),
// ]);
// TODO 循环处理 后面再改成批量操作
foreach ($needAcceptList as $order) {
OrderRepository::getInstance()->orderAccepted($order['id']);
}
}
}
public function onOrderSpuCheck(string $orderCoding = '')
{
Log::info('触发订单商品核验事件');
// 订单商品核验后[线上|线下核验] 1、是否所有商品均核验且没有实体商品 是则订单完成
Log::info('订单号 '.$orderCoding);
if (!$order = OrderModel::where('coding', $orderCoding)->find()) {
Log::error('订单号不存在 '.$orderCoding);
} else {
$orderSkuList = OrderSku::where('coding', $orderCoding)->select();
$orderSkuCount = $orderSkuList->count();
$virtualCount = $orderSkuList->where('is_virtual', OrderModel::COMMON_ON)
->where('is_check', OrderModel::COMMON_ON)
->count();
Log::info('订单商品数量 '.$orderSkuCount);
Log::info('已核验商品数量 '.$virtualCount);
// 所有产品都是虚拟商品 且 都核验完成则订单设为已完成
if ($virtualCount == $orderSkuCount) {
Log::info('订单设为已完成');
if ($order['status'] != OrderModel::STATUS_ARRIVED) {
$order->save([
'status' => OrderModel::STATUS_ARRIVED,
'accepted_at' => date('Y-m-d H:i:s'),
]);
}
}
}
}
public function onCheckShoppingCart(int $accountId = 0)
{
Log::info('触发时间:检测并清理无效购物车数据 清理用户ID='.$accountId. 'ID=0表示清理所有人');
OrderRepository::getInstance()->checkShoppingCart($accountId);
}
}