79 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			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_COMPLETED) {
 | 
						|
                    $order->save([
 | 
						|
                        'status' => OrderModel::STATUS_COMPLETED,
 | 
						|
                        '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);
 | 
						|
    }
 | 
						|
}
 |