签约经销商采购日志
parent
aad0551eca
commit
72ecc15f66
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -20,6 +20,5 @@ class DealerManageSubsidyLog extends Model
|
|||
'sales_volume',
|
||||
'total_amount',
|
||||
'order_completed_at',
|
||||
'remark',
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
];
|
||||
}
|
||||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue