From 72ecc15f662405e56fe78c1c932e3dd55e32bc3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Fri, 14 Jan 2022 15:40:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=BE=E7=BA=A6=E7=BB=8F=E9=94=80=E5=95=86?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/Dealer/OrderProcessCommand.php | 75 +++++++++++++++++-- app/Models/DealerManageSubsidyLog.php | 1 - app/Models/DealerPurchaseLog.php | 24 ++++++ ...0058_create_dealer_purchase_logs_table.php | 42 +++++++++++ 4 files changed, 133 insertions(+), 9 deletions(-) create mode 100644 app/Models/DealerPurchaseLog.php create mode 100644 database/migrations/2022_01_14_150058_create_dealer_purchase_logs_table.php diff --git a/app/Console/Commands/Dealer/OrderProcessCommand.php b/app/Console/Commands/Dealer/OrderProcessCommand.php index 6fed95da..1fb2c503 100644 --- a/app/Console/Commands/Dealer/OrderProcessCommand.php +++ b/app/Console/Commands/Dealer/OrderProcessCommand.php @@ -2,10 +2,14 @@ namespace App\Console\Commands\Dealer; +use App\Enums\DealerLvl; +use App\Enums\DealerOrderSettleState; +use App\Enums\DealerOrderStatus; use App\Models\Dealer; use App\Models\DealerManagerSalesLog; use App\Models\DealerManageSubsidyLog; use App\Models\DealerOrder; +use App\Models\DealerPurchaseLog; use App\Models\UserInfo; use Illuminate\Console\Command; use Illuminate\Support\Facades\DB; @@ -34,7 +38,14 @@ class OrderProcessCommand extends Command */ public function handle() { - DealerOrder::chunkById(200, function ($orders) { + DealerOrder::where( + 'settle_state', + DealerOrderSettleState::Pending + )->whereIn('status', [ + DealerOrderStatus::Paid, + DealerOrderStatus::Shipped, + DealerOrderStatus::Completed, + ])->chunkById(200, function ($orders) { $orders->load([ 'userInfo.dealer', 'products.productManageSubsidyRules', @@ -66,22 +77,68 @@ class OrderProcessCommand extends Command */ protected function handleDealerOrder(DealerOrder $dealerOrder) { - $tz = date('Y-m-d H:i:s'); + $tz = now(); // 获取下单经销商的所有上级经销商 - $dealers = $this->getDealers($userInfo = $dealerOrder->userInfo); + $dealers = $this->getDealers($dealerOrder->userInfo); // 当前链上的全部经销商(含下单经销商) - $chainDealers = [$userInfo->dealer, ...$dealers]; + $chainDealers = [$dealerOrder->userInfo->dealer, ...$dealers]; - // 处理管理者销售业绩 + // 签约经销商的进货日志 + $this->handlePurchaseLogsOfContractedDealer($dealerOrder, $tz); + + // 管理者的销售业绩 $this->handleManagerSalesLogs($dealerOrder, $chainDealers, $tz); - // 分配管理津贴 + + // 一级签约经销商和二级经销商的管理津贴 $this->handleManageSubsidyLogs($dealerOrder, $chainDealers, $tz); + + // 将订单标记为已处理 + // $dealerOrder->forceFill([ + // 'settle_state' => DealerOrderSettleState::Processed, + // ])->save(); } /** - * 分配管理津贴 + * 生成签约经销商的进货日志 + * + * @param \App\Models\DealerOrder $dealerOrder + * @param array $dealers + * @param string $tz + * @return void + */ + protected function handlePurchaseLogsOfContractedDealer(DealerOrder $dealerOrder, string $tz) + { + $dealer = $dealerOrder->userInfo->dealer; + + // 采购业绩是否算自己的业绩 + $valid = true; + + if ($dealer->lvl->value < DealerLvl::Contracted->value) { + // 如果订单金额小于升级签约经销商的金额,则结束 + if ($dealerOrder->total_amount < 26400) { + return; + } + + $valid = false; + } + + $log = new DealerPurchaseLog([ + 'user_id' => $dealer->user_id, + 'lvl' => $dealer->lvl, + 'order_id' => $dealerOrder->id, + 'total_amount' => $dealerOrder->total_amount, + 'path' => $valid ? $dealerOrder->userInfo->full_path : $dealerOrder->userInfo->path, + 'remark' => $valid ? null : '升级签约', + ]); + $log->setCreatedAt($tz); + $log->setUpdatedAt($tz); + $log->save(); + } + + /** + * 分配一级签约经销商和二级经销商的管理津贴 * * @param \App\Models\DealerOrder $dealerOrder * @param array $dealers @@ -90,6 +147,8 @@ class OrderProcessCommand extends Command */ protected function handleManageSubsidyLogs(DealerOrder $dealerOrder, array $dealers, string $tz) { + $logs = []; + foreach ($dealerOrder->products as $product) { if ($product->productManageSubsidyRules->isEmpty()) { continue; @@ -166,7 +225,7 @@ class OrderProcessCommand extends Command } /** - * 处理管理者销售业绩 + * 生成管理者的销售业绩 * * @param \App\Models\DealerOrder $dealerOrder * @param array $dealers diff --git a/app/Models/DealerManageSubsidyLog.php b/app/Models/DealerManageSubsidyLog.php index fee32e16..3098acb5 100644 --- a/app/Models/DealerManageSubsidyLog.php +++ b/app/Models/DealerManageSubsidyLog.php @@ -20,6 +20,5 @@ class DealerManageSubsidyLog extends Model 'sales_volume', 'total_amount', 'order_completed_at', - 'remark', ]; } diff --git a/app/Models/DealerPurchaseLog.php b/app/Models/DealerPurchaseLog.php new file mode 100644 index 00000000..6c0b1f3d --- /dev/null +++ b/app/Models/DealerPurchaseLog.php @@ -0,0 +1,24 @@ + DealerLvl::class, + 'order_completed_at' => 'datetime', + ]; + + protected $fillable = [ + 'user_id', + 'lvl', + 'order_id', + 'total_amount', + 'path', + 'remark', + 'order_completed_at', + ]; +} diff --git a/database/migrations/2022_01_14_150058_create_dealer_purchase_logs_table.php b/database/migrations/2022_01_14_150058_create_dealer_purchase_logs_table.php new file mode 100644 index 00000000..6c86bec9 --- /dev/null +++ b/database/migrations/2022_01_14_150058_create_dealer_purchase_logs_table.php @@ -0,0 +1,42 @@ +id(); + $table->unsignedBigInteger('user_id')->comment('经销商的用户ID'); + $table->unsignedBigInteger('order_id')->comment('订单ID'); + $table->tinyInteger('lvl')->comment('经销商等级'); + $table->unsignedDecimal('total_amount', 10, 2)->default(0)->comment('采购金额(订单金额)'); + $table->text('path')->nullable()->comment('邀请路径'); + $table->string('remark')->nullable()->comment('备注'); + $table->timestamp('order_completed_at')->nullable()->comment('订单完成时间'); + $table->timestamps(); + + $table->unique(['user_id', 'order_id']); + $table->index('order_id'); + $table->index('order_completed_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('dealer_purchase_logs'); + } +}