更新包裹状态
parent
07fd87fcd1
commit
f0c2fde4ac
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Exceptions;
|
||||
|
||||
class OrderPackageAlreadyCheckedException extends BizException
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('包裹已签收');
|
||||
}
|
||||
}
|
||||
|
|
@ -37,6 +37,7 @@ class OrderPackage extends Model
|
|||
];
|
||||
|
||||
protected $casts = [
|
||||
'checked_at' => 'datetime',
|
||||
'is_failed' => 'bool',
|
||||
];
|
||||
|
||||
|
|
@ -77,4 +78,14 @@ class OrderPackage extends Model
|
|||
{
|
||||
return $this->belongsToMany(OrderProduct::class, 'order_package_products', 'order_package_id', 'order_product_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* 确认此包裹是否已签收
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isChecked()
|
||||
{
|
||||
return in_array($this->status, [static::STATUS_CHECK, static::STATUS_AUTOCHECK]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Services;
|
||||
|
||||
use App\Exceptions\BizException;
|
||||
use App\Exceptions\OrderPackageAlreadyCheckedException;
|
||||
use App\Models\KuaidiLog;
|
||||
use App\Models\OrderPackage;
|
||||
use Illuminate\Support\Arr;
|
||||
|
|
@ -1397,9 +1398,11 @@ class Kuaidi100Service
|
|||
$status = OrderPackage::STATUS_OTHER;
|
||||
}
|
||||
|
||||
//更新包裹状态
|
||||
$orderService = new OrderService();
|
||||
$orderService->updatePackageStatus($package, $status);
|
||||
try {
|
||||
//更新包裹状态
|
||||
(new OrderPackageService())->updatePackageStatus($package, $status);
|
||||
} catch (OrderPackageAlreadyCheckedException $e) {
|
||||
}
|
||||
}
|
||||
//记录物流信息
|
||||
KuaidiLog::updateOrCreate([
|
||||
|
|
|
|||
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Exceptions\OrderPackageAlreadyCheckedException;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderPackage;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class OrderPackageService
|
||||
{
|
||||
/**
|
||||
* 更新包裹状态
|
||||
*
|
||||
* @param \App\Models\OrderPackage $packages
|
||||
* @param int $status
|
||||
* @return void
|
||||
*/
|
||||
public function updatePackageStatus(OrderPackage $package, int $status): void
|
||||
{
|
||||
// 如果不是签收包裹,则直接更新包裹状态
|
||||
if (! in_array($status, [OrderPackage::STATUS_CHECK, OrderPackage::STATUS_AUTOCHECK])) {
|
||||
$package->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)),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue