From 63ef80be239753243cbf511430e7d769b829547c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Tue, 19 Apr 2022 10:59:18 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=8F=E9=94=80=E5=95=86=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E6=94=B6=E6=AC=BE=E5=90=8E=E5=8D=B3=E5=8F=AF?= =?UTF-8?q?=E7=BB=93=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dealer/ChannelSubsidySettleCommand.php | 126 +----------------- .../Dealer/ManageSubsidySettleCommand.php | 6 +- .../Dealer/ManagerSubsidySettleCommand.php | 6 +- .../Commands/Dealer/OrderSettleCommand.php | 61 +++++---- .../Dealer/PurchaseSubsidySettleCommand.php | 6 +- app/Models/DealerOrder.php | 22 ++- 6 files changed, 62 insertions(+), 165 deletions(-) diff --git a/app/Console/Commands/Dealer/ChannelSubsidySettleCommand.php b/app/Console/Commands/Dealer/ChannelSubsidySettleCommand.php index 607afe68..2945cd53 100644 --- a/app/Console/Commands/Dealer/ChannelSubsidySettleCommand.php +++ b/app/Console/Commands/Dealer/ChannelSubsidySettleCommand.php @@ -3,16 +3,7 @@ namespace App\Console\Commands\Dealer; use App\Admin\Services\DealerEarningService; -use App\Enums\DealerOrderSettleState; -use App\Enums\DealerSalesValueLogType; -use App\Models\Dealer; -use App\Models\DealerChannelSubsidyLog; use App\Models\DealerEarning; -use App\Models\DealerManagerSalesLog; -use App\Models\DealerManageSubsidyLog; -use App\Models\DealerOrder; -use App\Models\DealerPurchaseLog; -use App\Models\DealerSalesValueLog; use Illuminate\Console\Command; use Illuminate\Support\Facades\DB; use Throwable; @@ -69,124 +60,9 @@ class ChannelSubsidySettleCommand extends Command if ($page === 0) { sleep(60); - } elseif ($page === 1) { - sleep(30); } else { - sleep(15); + sleep(30); } } } - - /** - * 处理经销商订单 - * - * @param \App\Models\DealerOrder $order - * @return void - */ - protected function handleDealerOrder(DealerOrder $order) - { - $this->handleManagerSalesLogs($order); - - $this->handleManageSubsidyLogs($order); - - $this->handleChannelSubsidyLogs($order); - - $this->handlePurchaseLogs($order); - - $this->handleOrder($order); - } - - protected function handleManagerSalesLogs(DealerOrder $order) - { - DealerManagerSalesLog::where('order_id', $order->id)->update([ - 'order_completed_at' => $order->shippinged_time, - ]); - } - - protected function handleManageSubsidyLogs(DealerOrder $order) - { - DealerManageSubsidyLog::where('order_id', $order->id)->update([ - 'order_completed_at' => $order->shippinged_time, - ]); - } - - protected function handleChannelSubsidyLogs(DealerOrder $order) - { - $channelSubsidyLogIds = DealerChannelSubsidyLog::where('order_id', $order->id)->get('id')->toArray(); - - DealerChannelSubsidyLog::whereIn('id', $channelSubsidyLogIds)->update([ - 'order_completed_at' => $order->shippinged_time, - ]); - - if ($order->consignor_id !== null) { - DealerEarning::where('earningable_type', 'dealer_channel_subsidy_log')->whereIn('earningable_id', $channelSubsidyLogIds)->update([ - 'settle_at' => now(), - ]); - } - } - - protected function handlePurchaseLogs(DealerOrder $order) - { - DealerPurchaseLog::where('order_id', $order->id)->update([ - 'order_completed_at' => $order->shippinged_time, - ]); - } - - protected function handleOrder(DealerOrder $order) - { - $salesValue = $order->total_amount; - - if (bccomp($salesValue, '0', 2) < 1) { - return; - } - - $salesValueLogs = []; - - if (bccomp($salesValue, '0', 2) === 1) { - $ts = now()->toDateTimeString(); - - $order->dealer->update([ - 'self_sales_value' => DB::raw("self_sales_value+{$salesValue}"), - ]); - - $salesValueLogs[] = [ - 'user_id' => $order->user_id, - 'loggable_type' => $order->getMorphClass(), - 'loggable_id' => $order->id, - 'type' => DealerSalesValueLogType::Personal, - 'change_sales_value' => $salesValue, - 'remark' => '个人进货', - 'created_at' => $ts, - 'updated_at' => $ts, - ]; - - if (count($pids = $order->dealer->userInfo->parent_ids) > 0) { - foreach ($order->dealer->userInfo->parent_ids as $pid) { - $salesValueLogs[] = [ - 'user_id' => $pid, - 'loggable_type' => $order->getMorphClass(), - 'loggable_id' => $order->id, - 'type' => DealerSalesValueLogType::Team, - 'change_sales_value' => $salesValue, - 'remarks' => '团队成员进货', - 'created_at' => $ts, - 'updated_at' => $ts, - ]; - } - - // 更新上级的团队团队业绩 - Dealer::whereIn('user_id', $pids)->update([ - 'team_sales_value' => DB::raw("team_sales_value + {$salesValue}"), - ]); - } - } - - // 保存销售值日志 - DealerSalesValueLog::insert($salesValueLogs); - - // 将订单标记未已结算 - $order->forceFill([ - 'settle_state' => DealerOrderSettleState::Completed, - ])->save(); - } } diff --git a/app/Console/Commands/Dealer/ManageSubsidySettleCommand.php b/app/Console/Commands/Dealer/ManageSubsidySettleCommand.php index 6dcc7444..19096c5e 100644 --- a/app/Console/Commands/Dealer/ManageSubsidySettleCommand.php +++ b/app/Console/Commands/Dealer/ManageSubsidySettleCommand.php @@ -67,10 +67,10 @@ class ManageSubsidySettleCommand extends Command $head = '【'.$startAt->format('Y/m/d').'-'.$endAt->format('Y/m/d').'】'; - $ordersCount = DealerOrder::onlyCompleted() + $ordersCount = DealerOrder::onlyPaidSuccessfully() ->where('settle_state', '!=', DealerOrderSettleState::Completed) - ->whereNotNull('shippinged_time') - ->where('shippinged_time', '<=', $endAt) + ->whereNotNull('paied_time') + ->where('paied_time', '<=', $endAt) ->count(); if ($ordersCount > 0) { diff --git a/app/Console/Commands/Dealer/ManagerSubsidySettleCommand.php b/app/Console/Commands/Dealer/ManagerSubsidySettleCommand.php index 0c0e2f17..9960310b 100644 --- a/app/Console/Commands/Dealer/ManagerSubsidySettleCommand.php +++ b/app/Console/Commands/Dealer/ManagerSubsidySettleCommand.php @@ -43,10 +43,10 @@ class ManagerSubsidySettleCommand extends Command $head = '【'.$startAt->format('Y/m/d').'-'.$endAt->format('Y/m/d').'】'; - $ordersCount = DealerOrder::onlyCompleted() + $ordersCount = DealerOrder::onlyPaidSuccessfully() ->where('settle_state', '!=', DealerOrderSettleState::Completed) - ->whereNotNull('shippinged_time') - ->where('shippinged_time', '<=', $endAt) + ->whereNotNull('paied_time') + ->where('paied_time', '<=', $endAt) ->count(); if ($ordersCount > 0) { diff --git a/app/Console/Commands/Dealer/OrderSettleCommand.php b/app/Console/Commands/Dealer/OrderSettleCommand.php index 7e3a46f8..8bb78505 100644 --- a/app/Console/Commands/Dealer/OrderSettleCommand.php +++ b/app/Console/Commands/Dealer/OrderSettleCommand.php @@ -3,7 +3,6 @@ namespace App\Console\Commands\Dealer; use App\Enums\DealerOrderSettleState; -use App\Enums\DealerOrderStatus; use App\Enums\DealerSalesValueLogType; use App\Models\Dealer; use App\Models\DealerChannelSubsidyLog; @@ -14,6 +13,7 @@ use App\Models\DealerOrder; use App\Models\DealerPurchaseLog; use App\Models\DealerSalesValueLog; use Illuminate\Console\Command; +use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; use Throwable; @@ -43,35 +43,33 @@ class OrderSettleCommand extends Command while (true) { $page = 0; - DealerOrder::where([ - 'status' => DealerOrderStatus::Completed, - 'settle_state' => DealerOrderSettleState::Processed, - ])->whereNotNull('shippinged_time')->chunkById(200, function ($orders) use (&$page) { - $orders->load('dealer.userInfo'); + DealerOrder::onlyPaidSuccessfully() + ->where('settle_state', DealerOrderSettleState::Processed) + ->whereNotNull('paied_time') + ->chunkById(200, function ($orders) use (&$page) { + $orders->load('dealer.userInfo'); - foreach ($orders as $order) { - try { - DB::beginTransaction(); + foreach ($orders as $order) { + try { + DB::beginTransaction(); - $this->handleDealerOrder($order); + $this->handleDealerOrder($order); - DB::commit(); - } catch (Throwable $e) { - DB::rollBack(); + DB::commit(); + } catch (Throwable $e) { + DB::rollBack(); - report($e); + report($e); + } } - } - $page++; - }); + $page++; + }); if ($page === 0) { sleep(60); - } elseif ($page === 1) { - sleep(30); } else { - sleep(15); + sleep(30); } } } @@ -98,14 +96,14 @@ class OrderSettleCommand extends Command protected function handleManagerSalesLogs(DealerOrder $order) { DealerManagerSalesLog::where('order_id', $order->id)->update([ - 'order_completed_at' => $order->shippinged_time, + 'order_completed_at' => $this->getOrderCompletedAt($order), ]); } protected function handleManageSubsidyLogs(DealerOrder $order) { DealerManageSubsidyLog::where('order_id', $order->id)->update([ - 'order_completed_at' => $order->shippinged_time, + 'order_completed_at' => $this->getOrderCompletedAt($order), ]); } @@ -114,7 +112,7 @@ class OrderSettleCommand extends Command $channelSubsidyLogIds = DealerChannelSubsidyLog::where('order_id', $order->id)->get('id')->toArray(); DealerChannelSubsidyLog::whereIn('id', $channelSubsidyLogIds)->update([ - 'order_completed_at' => $order->shippinged_time, + 'order_completed_at' => $this->getOrderCompletedAt($order), ]); if ($order->consignor_id !== null) { @@ -127,7 +125,7 @@ class OrderSettleCommand extends Command protected function handlePurchaseLogs(DealerOrder $order) { DealerPurchaseLog::where('order_id', $order->id)->update([ - 'order_completed_at' => $order->shippinged_time, + 'order_completed_at' => $this->getOrderCompletedAt($order), ]); } @@ -188,4 +186,19 @@ class OrderSettleCommand extends Command 'settle_state' => DealerOrderSettleState::Completed, ])->save(); } + + /** + * 获取订单完成时间 + * + * @param DealerOrder $order + * @return Carbon + */ + protected function getOrderCompletedAt(DealerOrder $order): Carbon + { + if ($order->paied_time->lt('2022-04-19 12:00:00')) { + return now(); + } + + return $order->paied_time; + } } diff --git a/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php b/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php index 3c83ae0d..2a392ca7 100644 --- a/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php +++ b/app/Console/Commands/Dealer/PurchaseSubsidySettleCommand.php @@ -67,10 +67,10 @@ class PurchaseSubsidySettleCommand extends Command $head = '【'.$startAt->format('Y/m/d').'-'.$endAt->format('Y/m/d').'】'; - $ordersCount = DealerOrder::onlyCompleted() + $ordersCount = DealerOrder::onlyPaidSuccessfully() ->where('settle_state', '!=', DealerOrderSettleState::Completed) - ->whereNotNull('shippinged_time') - ->where('shippinged_time', '<=', $endAt) + ->whereNotNull('paied_time') + ->where('paied_time', '<=', $endAt) ->count(); if ($ordersCount > 0) { diff --git a/app/Models/DealerOrder.php b/app/Models/DealerOrder.php index 647eba28..d645bc76 100644 --- a/app/Models/DealerOrder.php +++ b/app/Models/DealerOrder.php @@ -55,18 +55,26 @@ class DealerOrder extends Model 'deposit_status', ]; + /** + * 只查询付款成功的订单 + */ + public function scopeOnlyPaidSuccessfully($builder) + { + return $builder->whereIn('status', [ + DealerOrderStatus::Paid, + DealerOrderStatus::Shipped, + DealerOrderStatus::Completed, + ]); + } + /** * 仅获取待结算的已付款订单 */ public function scopeSettlePending($query) { - return $query->whereNotNull('paied_time') - ->where('settle_state', DealerOrderSettleState::Pending) - ->whereIn('status', [ - DealerOrderStatus::Paid, - DealerOrderStatus::Shipped, - DealerOrderStatus::Completed, - ]); + return $query->onlyPaidSuccessfully() + ->whereNotNull('paied_time') + ->where('settle_state', DealerOrderSettleState::Pending); } /**