6
0
Fork 0

更新渠道补贴结算规则

release
李静 2022-01-26 11:53:05 +08:00
parent 5077e2969f
commit 037a6c3794
4 changed files with 63 additions and 60 deletions

View File

@ -5,14 +5,12 @@ namespace App\Console\Commands\Dealer;
use App\Enums\DealerEarningStatus;
use App\Enums\DealerLvl;
use App\Enums\DealerOrderSettleState;
use App\Enums\DealerOrderStatus;
use App\Models\Dealer;
use App\Models\DealerChannelSubsidyLog;
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;
use Throwable;
@ -43,15 +41,9 @@ class OrderProcessCommand extends Command
while (true) {
$page = 0;
DealerOrder::where(
'settle_state',
DealerOrderSettleState::Pending
)->whereIn('status', [
DealerOrderStatus::Paid,
DealerOrderStatus::Shipped,
DealerOrderStatus::Completed,
])->chunkById(200, function ($orders) use (&$page) {
DealerOrder::settlePending()->chunkById(200, function ($orders) use (&$page) {
$orders->load([
'userInfo',
'dealer.userInfo',
'products.productManageSubsidyRules',
]);
@ -67,14 +59,12 @@ class OrderProcessCommand extends Command
}
$page += 1;
});
}, 'paied_time');
if ($page === 0) {
sleep(60);
} elseif ($page === 1) {
sleep(30);
} else {
sleep(15);
sleep(5);
}
};
@ -226,7 +216,19 @@ class OrderProcessCommand extends Command
// 最后参与渠道补贴的经销商
$last = null;
foreach ($dealer->getRealDealers() as $_dealer) {
while (true) {
if ($last) {
$_dealer = $last->userInfo->realInviterInfo?->dealer;
$_dealer?->setRelation('userInfo', $last->userInfo->realInviterInfo);
} else {
$_dealer = $dealer->userInfo->realInviterInfo?->dealer;
$_dealer?->setRelation('userInfo', $dealer->userInfo->realInviterInfo);
}
if ($_dealer === null) {
break;
}
// 如果经销商等级小于金牌, 那么跳过
if ($_dealer->lvl->value < DealerLvl::Gold->value) {
continue;
@ -496,28 +498,4 @@ class OrderProcessCommand extends Command
}
return null;
}
/**
* 获取给定用户的实际上级经销商
*
* @param \App\Models\UserInfo $userInfo
* @return array
*/
protected function getRealDealers(UserInfo $userInfo): array
{
$ancestors = [];
if (empty($pids = $userInfo->real_parent_ids)) {
return $ancestors;
}
$ancestors = UserInfo::with(['dealer'])
->whereIn('user_id', $pids)
->latest('depth')
->get(['user_id']);
return $ancestors->map(function ($item) {
return $item->dealer;
})->all();
}
}

View File

@ -178,27 +178,6 @@ class Dealer extends Model
})->all();
}
/**
* 获取此用户的所有直属上级经销商
*
* @return array
*/
public function getRealDealers()
{
if (empty($pids = $this->userInfo->real_parent_ids)) {
return [];
}
$ancestors = UserInfo::with(['dealer'])
->whereIn('user_id', $pids)
->latest('depth')
->get(['user_id']);
return $ancestors->map(function ($item) {
return $item->dealer;
})->all();
}
/**
* 获取直属金牌经销商数量
*

View File

@ -48,6 +48,20 @@ class DealerOrder extends Model
'remark',
];
/**
* 仅获取待结算的已付款订单
*/
public function scopeSettlePending($query)
{
return $query->whereNotNull('paied_time')
->where('settle_state', DealerOrderSettleState::Pending)
->whereIn('status', [
DealerOrderStatus::Paid,
DealerOrderStatus::Shipped,
DealerOrderStatus::Completed,
]);
}
/**
* 获取待确认订单
*/

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddPaidTimeIndexToDealerOrdersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('dealer_orders', function (Blueprint $table) {
$table->index('paied_time');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('dealer_orders', function (Blueprint $table) {
$table->dropIndex(['paied_time']);
});
}
}