经销商订单确认收款后即可结算
parent
cbe3c38267
commit
63ef80be23
|
|
@ -3,16 +3,7 @@
|
|||
namespace App\Console\Commands\Dealer;
|
||||
|
||||
use App\Admin\Services\DealerEarningService;
|
||||
use App\Enums\DealerOrderSettleState;
|
||||
use App\Enums\DealerSalesValueLogType;
|
||||
use App\Models\Dealer;
|
||||
use App\Models\DealerChannelSubsidyLog;
|
||||
use App\Models\DealerEarning;
|
||||
use App\Models\DealerManagerSalesLog;
|
||||
use App\Models\DealerManageSubsidyLog;
|
||||
use App\Models\DealerOrder;
|
||||
use App\Models\DealerPurchaseLog;
|
||||
use App\Models\DealerSalesValueLog;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Throwable;
|
||||
|
|
@ -69,124 +60,9 @@ class ChannelSubsidySettleCommand extends Command
|
|||
|
||||
if ($page === 0) {
|
||||
sleep(60);
|
||||
} elseif ($page === 1) {
|
||||
sleep(30);
|
||||
} else {
|
||||
sleep(15);
|
||||
sleep(30);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理经销商订单
|
||||
*
|
||||
* @param \App\Models\DealerOrder $order
|
||||
* @return void
|
||||
*/
|
||||
protected function handleDealerOrder(DealerOrder $order)
|
||||
{
|
||||
$this->handleManagerSalesLogs($order);
|
||||
|
||||
$this->handleManageSubsidyLogs($order);
|
||||
|
||||
$this->handleChannelSubsidyLogs($order);
|
||||
|
||||
$this->handlePurchaseLogs($order);
|
||||
|
||||
$this->handleOrder($order);
|
||||
}
|
||||
|
||||
protected function handleManagerSalesLogs(DealerOrder $order)
|
||||
{
|
||||
DealerManagerSalesLog::where('order_id', $order->id)->update([
|
||||
'order_completed_at' => $order->shippinged_time,
|
||||
]);
|
||||
}
|
||||
|
||||
protected function handleManageSubsidyLogs(DealerOrder $order)
|
||||
{
|
||||
DealerManageSubsidyLog::where('order_id', $order->id)->update([
|
||||
'order_completed_at' => $order->shippinged_time,
|
||||
]);
|
||||
}
|
||||
|
||||
protected function handleChannelSubsidyLogs(DealerOrder $order)
|
||||
{
|
||||
$channelSubsidyLogIds = DealerChannelSubsidyLog::where('order_id', $order->id)->get('id')->toArray();
|
||||
|
||||
DealerChannelSubsidyLog::whereIn('id', $channelSubsidyLogIds)->update([
|
||||
'order_completed_at' => $order->shippinged_time,
|
||||
]);
|
||||
|
||||
if ($order->consignor_id !== null) {
|
||||
DealerEarning::where('earningable_type', 'dealer_channel_subsidy_log')->whereIn('earningable_id', $channelSubsidyLogIds)->update([
|
||||
'settle_at' => now(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
protected function handlePurchaseLogs(DealerOrder $order)
|
||||
{
|
||||
DealerPurchaseLog::where('order_id', $order->id)->update([
|
||||
'order_completed_at' => $order->shippinged_time,
|
||||
]);
|
||||
}
|
||||
|
||||
protected function handleOrder(DealerOrder $order)
|
||||
{
|
||||
$salesValue = $order->total_amount;
|
||||
|
||||
if (bccomp($salesValue, '0', 2) < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
$salesValueLogs = [];
|
||||
|
||||
if (bccomp($salesValue, '0', 2) === 1) {
|
||||
$ts = now()->toDateTimeString();
|
||||
|
||||
$order->dealer->update([
|
||||
'self_sales_value' => DB::raw("self_sales_value+{$salesValue}"),
|
||||
]);
|
||||
|
||||
$salesValueLogs[] = [
|
||||
'user_id' => $order->user_id,
|
||||
'loggable_type' => $order->getMorphClass(),
|
||||
'loggable_id' => $order->id,
|
||||
'type' => DealerSalesValueLogType::Personal,
|
||||
'change_sales_value' => $salesValue,
|
||||
'remark' => '个人进货',
|
||||
'created_at' => $ts,
|
||||
'updated_at' => $ts,
|
||||
];
|
||||
|
||||
if (count($pids = $order->dealer->userInfo->parent_ids) > 0) {
|
||||
foreach ($order->dealer->userInfo->parent_ids as $pid) {
|
||||
$salesValueLogs[] = [
|
||||
'user_id' => $pid,
|
||||
'loggable_type' => $order->getMorphClass(),
|
||||
'loggable_id' => $order->id,
|
||||
'type' => DealerSalesValueLogType::Team,
|
||||
'change_sales_value' => $salesValue,
|
||||
'remarks' => '团队成员进货',
|
||||
'created_at' => $ts,
|
||||
'updated_at' => $ts,
|
||||
];
|
||||
}
|
||||
|
||||
// 更新上级的团队团队业绩
|
||||
Dealer::whereIn('user_id', $pids)->update([
|
||||
'team_sales_value' => DB::raw("team_sales_value + {$salesValue}"),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// 保存销售值日志
|
||||
DealerSalesValueLog::insert($salesValueLogs);
|
||||
|
||||
// 将订单标记未已结算
|
||||
$order->forceFill([
|
||||
'settle_state' => DealerOrderSettleState::Completed,
|
||||
])->save();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,10 +67,10 @@ class ManageSubsidySettleCommand extends Command
|
|||
|
||||
$head = '【'.$startAt->format('Y/m/d').'-'.$endAt->format('Y/m/d').'】';
|
||||
|
||||
$ordersCount = DealerOrder::onlyCompleted()
|
||||
$ordersCount = DealerOrder::onlyPaidSuccessfully()
|
||||
->where('settle_state', '!=', DealerOrderSettleState::Completed)
|
||||
->whereNotNull('shippinged_time')
|
||||
->where('shippinged_time', '<=', $endAt)
|
||||
->whereNotNull('paied_time')
|
||||
->where('paied_time', '<=', $endAt)
|
||||
->count();
|
||||
|
||||
if ($ordersCount > 0) {
|
||||
|
|
|
|||
|
|
@ -43,10 +43,10 @@ class ManagerSubsidySettleCommand extends Command
|
|||
|
||||
$head = '【'.$startAt->format('Y/m/d').'-'.$endAt->format('Y/m/d').'】';
|
||||
|
||||
$ordersCount = DealerOrder::onlyCompleted()
|
||||
$ordersCount = DealerOrder::onlyPaidSuccessfully()
|
||||
->where('settle_state', '!=', DealerOrderSettleState::Completed)
|
||||
->whereNotNull('shippinged_time')
|
||||
->where('shippinged_time', '<=', $endAt)
|
||||
->whereNotNull('paied_time')
|
||||
->where('paied_time', '<=', $endAt)
|
||||
->count();
|
||||
|
||||
if ($ordersCount > 0) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
namespace App\Console\Commands\Dealer;
|
||||
|
||||
use App\Enums\DealerOrderSettleState;
|
||||
use App\Enums\DealerOrderStatus;
|
||||
use App\Enums\DealerSalesValueLogType;
|
||||
use App\Models\Dealer;
|
||||
use App\Models\DealerChannelSubsidyLog;
|
||||
|
|
@ -14,6 +13,7 @@ use App\Models\DealerOrder;
|
|||
use App\Models\DealerPurchaseLog;
|
||||
use App\Models\DealerSalesValueLog;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Throwable;
|
||||
|
||||
|
|
@ -43,35 +43,33 @@ class OrderSettleCommand extends Command
|
|||
while (true) {
|
||||
$page = 0;
|
||||
|
||||
DealerOrder::where([
|
||||
'status' => DealerOrderStatus::Completed,
|
||||
'settle_state' => DealerOrderSettleState::Processed,
|
||||
])->whereNotNull('shippinged_time')->chunkById(200, function ($orders) use (&$page) {
|
||||
$orders->load('dealer.userInfo');
|
||||
DealerOrder::onlyPaidSuccessfully()
|
||||
->where('settle_state', DealerOrderSettleState::Processed)
|
||||
->whereNotNull('paied_time')
|
||||
->chunkById(200, function ($orders) use (&$page) {
|
||||
$orders->load('dealer.userInfo');
|
||||
|
||||
foreach ($orders as $order) {
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
foreach ($orders as $order) {
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$this->handleDealerOrder($order);
|
||||
$this->handleDealerOrder($order);
|
||||
|
||||
DB::commit();
|
||||
} catch (Throwable $e) {
|
||||
DB::rollBack();
|
||||
DB::commit();
|
||||
} catch (Throwable $e) {
|
||||
DB::rollBack();
|
||||
|
||||
report($e);
|
||||
report($e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$page++;
|
||||
});
|
||||
$page++;
|
||||
});
|
||||
|
||||
if ($page === 0) {
|
||||
sleep(60);
|
||||
} elseif ($page === 1) {
|
||||
sleep(30);
|
||||
} else {
|
||||
sleep(15);
|
||||
sleep(30);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -98,14 +96,14 @@ class OrderSettleCommand extends Command
|
|||
protected function handleManagerSalesLogs(DealerOrder $order)
|
||||
{
|
||||
DealerManagerSalesLog::where('order_id', $order->id)->update([
|
||||
'order_completed_at' => $order->shippinged_time,
|
||||
'order_completed_at' => $this->getOrderCompletedAt($order),
|
||||
]);
|
||||
}
|
||||
|
||||
protected function handleManageSubsidyLogs(DealerOrder $order)
|
||||
{
|
||||
DealerManageSubsidyLog::where('order_id', $order->id)->update([
|
||||
'order_completed_at' => $order->shippinged_time,
|
||||
'order_completed_at' => $this->getOrderCompletedAt($order),
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
@ -114,7 +112,7 @@ class OrderSettleCommand extends Command
|
|||
$channelSubsidyLogIds = DealerChannelSubsidyLog::where('order_id', $order->id)->get('id')->toArray();
|
||||
|
||||
DealerChannelSubsidyLog::whereIn('id', $channelSubsidyLogIds)->update([
|
||||
'order_completed_at' => $order->shippinged_time,
|
||||
'order_completed_at' => $this->getOrderCompletedAt($order),
|
||||
]);
|
||||
|
||||
if ($order->consignor_id !== null) {
|
||||
|
|
@ -127,7 +125,7 @@ class OrderSettleCommand extends Command
|
|||
protected function handlePurchaseLogs(DealerOrder $order)
|
||||
{
|
||||
DealerPurchaseLog::where('order_id', $order->id)->update([
|
||||
'order_completed_at' => $order->shippinged_time,
|
||||
'order_completed_at' => $this->getOrderCompletedAt($order),
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
@ -188,4 +186,19 @@ class OrderSettleCommand extends Command
|
|||
'settle_state' => DealerOrderSettleState::Completed,
|
||||
])->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单完成时间
|
||||
*
|
||||
* @param DealerOrder $order
|
||||
* @return Carbon
|
||||
*/
|
||||
protected function getOrderCompletedAt(DealerOrder $order): Carbon
|
||||
{
|
||||
if ($order->paied_time->lt('2022-04-19 12:00:00')) {
|
||||
return now();
|
||||
}
|
||||
|
||||
return $order->paied_time;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,10 +67,10 @@ class PurchaseSubsidySettleCommand extends Command
|
|||
|
||||
$head = '【'.$startAt->format('Y/m/d').'-'.$endAt->format('Y/m/d').'】';
|
||||
|
||||
$ordersCount = DealerOrder::onlyCompleted()
|
||||
$ordersCount = DealerOrder::onlyPaidSuccessfully()
|
||||
->where('settle_state', '!=', DealerOrderSettleState::Completed)
|
||||
->whereNotNull('shippinged_time')
|
||||
->where('shippinged_time', '<=', $endAt)
|
||||
->whereNotNull('paied_time')
|
||||
->where('paied_time', '<=', $endAt)
|
||||
->count();
|
||||
|
||||
if ($ordersCount > 0) {
|
||||
|
|
|
|||
|
|
@ -55,18 +55,26 @@ class DealerOrder extends Model
|
|||
'deposit_status',
|
||||
];
|
||||
|
||||
/**
|
||||
* 只查询付款成功的订单
|
||||
*/
|
||||
public function scopeOnlyPaidSuccessfully($builder)
|
||||
{
|
||||
return $builder->whereIn('status', [
|
||||
DealerOrderStatus::Paid,
|
||||
DealerOrderStatus::Shipped,
|
||||
DealerOrderStatus::Completed,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 仅获取待结算的已付款订单
|
||||
*/
|
||||
public function scopeSettlePending($query)
|
||||
{
|
||||
return $query->whereNotNull('paied_time')
|
||||
->where('settle_state', DealerOrderSettleState::Pending)
|
||||
->whereIn('status', [
|
||||
DealerOrderStatus::Paid,
|
||||
DealerOrderStatus::Shipped,
|
||||
DealerOrderStatus::Completed,
|
||||
]);
|
||||
return $query->onlyPaidSuccessfully()
|
||||
->whereNotNull('paied_time')
|
||||
->where('settle_state', DealerOrderSettleState::Pending);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue