6
0
Fork 0

签约经销商采购日志

release
李静 2022-01-14 15:40:50 +08:00
parent aad0551eca
commit 72ecc15f66
4 changed files with 133 additions and 9 deletions

View File

@ -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

View File

@ -20,6 +20,5 @@ class DealerManageSubsidyLog extends Model
'sales_volume',
'total_amount',
'order_completed_at',
'remark',
];
}

View File

@ -0,0 +1,24 @@
<?php
namespace App\Models;
use App\Enums\DealerLvl;
use Illuminate\Database\Eloquent\Model;
class DealerPurchaseLog extends Model
{
protected $casts = [
'lvl' => DealerLvl::class,
'order_completed_at' => 'datetime',
];
protected $fillable = [
'user_id',
'lvl',
'order_id',
'total_amount',
'path',
'remark',
'order_completed_at',
];
}

View File

@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDealerPurchaseLogsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('dealer_purchase_logs', function (Blueprint $table) {
$table->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');
}
}