签约经销商采购日志
parent
aad0551eca
commit
72ecc15f66
|
|
@ -2,10 +2,14 @@
|
||||||
|
|
||||||
namespace App\Console\Commands\Dealer;
|
namespace App\Console\Commands\Dealer;
|
||||||
|
|
||||||
|
use App\Enums\DealerLvl;
|
||||||
|
use App\Enums\DealerOrderSettleState;
|
||||||
|
use App\Enums\DealerOrderStatus;
|
||||||
use App\Models\Dealer;
|
use App\Models\Dealer;
|
||||||
use App\Models\DealerManagerSalesLog;
|
use App\Models\DealerManagerSalesLog;
|
||||||
use App\Models\DealerManageSubsidyLog;
|
use App\Models\DealerManageSubsidyLog;
|
||||||
use App\Models\DealerOrder;
|
use App\Models\DealerOrder;
|
||||||
|
use App\Models\DealerPurchaseLog;
|
||||||
use App\Models\UserInfo;
|
use App\Models\UserInfo;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
@ -34,7 +38,14 @@ class OrderProcessCommand extends Command
|
||||||
*/
|
*/
|
||||||
public function handle()
|
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([
|
$orders->load([
|
||||||
'userInfo.dealer',
|
'userInfo.dealer',
|
||||||
'products.productManageSubsidyRules',
|
'products.productManageSubsidyRules',
|
||||||
|
|
@ -66,22 +77,68 @@ class OrderProcessCommand extends Command
|
||||||
*/
|
*/
|
||||||
protected function handleDealerOrder(DealerOrder $dealerOrder)
|
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->handleManagerSalesLogs($dealerOrder, $chainDealers, $tz);
|
||||||
// 分配管理津贴
|
|
||||||
|
// 一级签约经销商和二级经销商的管理津贴
|
||||||
$this->handleManageSubsidyLogs($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 \App\Models\DealerOrder $dealerOrder
|
||||||
* @param array $dealers
|
* @param array $dealers
|
||||||
|
|
@ -90,6 +147,8 @@ class OrderProcessCommand extends Command
|
||||||
*/
|
*/
|
||||||
protected function handleManageSubsidyLogs(DealerOrder $dealerOrder, array $dealers, string $tz)
|
protected function handleManageSubsidyLogs(DealerOrder $dealerOrder, array $dealers, string $tz)
|
||||||
{
|
{
|
||||||
|
$logs = [];
|
||||||
|
|
||||||
foreach ($dealerOrder->products as $product) {
|
foreach ($dealerOrder->products as $product) {
|
||||||
if ($product->productManageSubsidyRules->isEmpty()) {
|
if ($product->productManageSubsidyRules->isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -166,7 +225,7 @@ class OrderProcessCommand extends Command
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理管理者销售业绩
|
* 生成管理者的销售业绩
|
||||||
*
|
*
|
||||||
* @param \App\Models\DealerOrder $dealerOrder
|
* @param \App\Models\DealerOrder $dealerOrder
|
||||||
* @param array $dealers
|
* @param array $dealers
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,5 @@ class DealerManageSubsidyLog extends Model
|
||||||
'sales_volume',
|
'sales_volume',
|
||||||
'total_amount',
|
'total_amount',
|
||||||
'order_completed_at',
|
'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