update([ 'status'=>$status, ]); return; } // 签收包裹 $this->checkPackage($package, $status === OrderPackage::STATUS_AUTOCHECK); // 如果订单包裹未发完 if ($package->order->isShipped()) { return; } // 如果订单有未作废且未签收的包裹 if (! $package->order->where('is_failed', false)->unchecked()->exists()) { return; } // 自动完成订单 $package->order->update([ 'status' => Order::STATUS_COMPLETED, 'completed_at' => now(), ]); } /** * 签收包裹 * * @param \App\Models\OrderPackage $package * @param bool $auto * @param \Illuminate\Support\Carbon|null $time * @return void * * @throws \App\Exceptions\OrderPackageAlreadyCheckedException */ public function checkPackage(OrderPackage $package, bool $auto = false, ?Carbon $time = null) { if ($package->isChecked()) { throw new OrderPackageAlreadyCheckedException('包裹已签收'); } $package->update([ 'status'=> $auto ? OrderPackage::STATUS_AUTOCHECK : OrderPackage::STATUS_CHECK, 'checked_at' => $time ?: now(), ]); // 更新商品的售后过期时间 $package->orderProducts()->update([ 'after_expire_at'=> $package->checked_at->addDays(config('settings.sale_after_expire_days', 7)), ]); } }