From acb960a952552a4d96eca12258e0b7a63c26c0dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Fri, 7 Jan 2022 11:17:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A5=96=E5=8A=B1BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Distribution/PreIncomeJobCommand.php | 8 -------- app/Console/Commands/OrderSettleCommand.php | 3 +++ app/Models/Order.php | 8 ++++++++ app/Services/AfterSaleService.php | 17 +++++++++++------ .../DistributionPreIncomeJobService.php | 5 ----- 5 files changed, 22 insertions(+), 19 deletions(-) diff --git a/app/Console/Commands/Distribution/PreIncomeJobCommand.php b/app/Console/Commands/Distribution/PreIncomeJobCommand.php index e8b6b4aa..2f6e3748 100644 --- a/app/Console/Commands/Distribution/PreIncomeJobCommand.php +++ b/app/Console/Commands/Distribution/PreIncomeJobCommand.php @@ -2,7 +2,6 @@ namespace App\Console\Commands\Distribution; -use App\Exceptions\BizException; use App\Models\DistributionPreIncome; use App\Models\DistributionPreIncomeJob; use App\Models\MerchantMessage; @@ -48,13 +47,6 @@ class PreIncomeJobCommand extends Command DB::rollBack(); report($e); - - if ($e instanceof BizException) { - $job->update([ - 'status' => DistributionPreIncomeJob::STATUS_FAILED, - 'failed_reason' => $e->getMessage(), - ]); - } } //发送商家端预收益进帐消息 diff --git a/app/Console/Commands/OrderSettleCommand.php b/app/Console/Commands/OrderSettleCommand.php index ebf08f26..29700887 100644 --- a/app/Console/Commands/OrderSettleCommand.php +++ b/app/Console/Commands/OrderSettleCommand.php @@ -34,8 +34,11 @@ class OrderSettleCommand extends Command public function handle() { // 只查询可结算的订单,并且没有处理中的售后单 + // 检查订单是否有未执行的分销任务 Order::whereDoesntHave('afterSales', function ($query) { return $query->processing(); + })->whereDoesntHave('distributionPreIncomeJobs', function ($query) { + return $query->pending(); })->settlable()->chunkById(200, function ($orders) { $orders->load(['user', 'afterSales']); diff --git a/app/Models/Order.php b/app/Models/Order.php index 6f0aebb0..a75d05b6 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -213,6 +213,14 @@ class Order extends Model return $this->hasMany(AfterSale::class, 'order_id'); } + /** + * 属于此订单的预收益任务 + */ + public function distributionPreIncomeJobs() + { + return $this->morphMany(DistributionPreIncomeJob::class, 'jobable'); + } + /** * 此订单是否待付款 * diff --git a/app/Services/AfterSaleService.php b/app/Services/AfterSaleService.php index 219696be..62e970df 100644 --- a/app/Services/AfterSaleService.php +++ b/app/Services/AfterSaleService.php @@ -358,7 +358,7 @@ class AfterSaleService if (in_array($afterSale->type, [AfterSale::TYPE_REFUND_AND_RETURN, AfterSale::TYPE_REFUND])) { if ($afterSaleProduct->total_amount > 0) { // 总销售值 - $totalSalesValue = bcmul($afterSaleProduct->sales_value, $afterSaleProduct->quantity); + $totalSalesValue = bcmul($afterSaleProduct->sales_value, $afterSaleProduct->quantity, 2); // 售后变更金额 $amount = $afterSale->amount; @@ -459,11 +459,16 @@ class AfterSaleService 'remarks' => $remarks, ]); - if (! $afterSaleProduct->isGift() && in_array($afterSale->type, [ - AfterSale::TYPE_REFUND_AND_RETURN, - AfterSale::TYPE_REFUND, - AfterSale::TYPE_CHANGE, - ])) { + // 订单未结算 + // 非赠品售后单,且售后单类型是换货、退款、退款退货 + if (! $order->is_settle + && ! $afterSaleProduct->isGift() + && in_array($afterSale->type, [ + AfterSale::TYPE_REFUND_AND_RETURN, + AfterSale::TYPE_REFUND, + AfterSale::TYPE_CHANGE, + ]) + ) { DistributionPreIncomeJob::create([ 'jobable_id' => $afterSale->id, 'jobable_type' => $afterSale->getMorphClass(), diff --git a/app/Services/DistributionPreIncomeJobService.php b/app/Services/DistributionPreIncomeJobService.php index 975954a0..d16ad816 100644 --- a/app/Services/DistributionPreIncomeJobService.php +++ b/app/Services/DistributionPreIncomeJobService.php @@ -2,7 +2,6 @@ namespace App\Services; -use App\Exceptions\BizException; use App\Models\AfterSale; use App\Models\DistributionPreIncome; use App\Models\DistributionPreIncomeJob; @@ -37,10 +36,6 @@ class DistributionPreIncomeJobService case AfterSale::class: $this->runOrderAfterSaleJob($job); break; - - default: - throw new BizException('任务类型不支持'); - break; } $job->update([