diff --git a/app/Console/Commands/Distribution/PreIncomeSettleCommand.php b/app/Console/Commands/Distribution/PreIncomeSettleCommand.php new file mode 100644 index 00000000..3b623057 --- /dev/null +++ b/app/Console/Commands/Distribution/PreIncomeSettleCommand.php @@ -0,0 +1,65 @@ +chunkById(200, function ($preIncomes) use ($walletService) { + $preIncomes->load('user'); + + foreach ($preIncomes as $preIncome) { + try { + DB::beginTransaction(); + + $walletService->changeBalance( + $preIncome->user, + bcmul($preIncome->total_revenue, 100), + WalletLog::ACTION_DISTRIBUTION_PRE_INCOME, + $preIncome->remarks, + $preIncome + ); + + $preIncome->update([ + 'completed_at' => now(), + 'status' => DistributionPreIncome::STATUS_PROCESSED, + ]); + + DB::commit(); + } catch (Throwable $e) { + DB::rollBack(); + + report($e); + } + } + }); + } +} diff --git a/app/Models/DistributionPreIncome.php b/app/Models/DistributionPreIncome.php index ec9931ab..926ad391 100644 --- a/app/Models/DistributionPreIncome.php +++ b/app/Models/DistributionPreIncome.php @@ -73,6 +73,22 @@ class DistributionPreIncome extends Model ]); } + /** + * 仅查询结算中的预收益 + */ + public function scopeProcessing($query) + { + return $query->where('status', static::STATUS_PROCESSING); + } + + /** + * 此预收益的所属的用户 + */ + public function user() + { + return $this->belongsTo(User::class); + } + /** * 此预收益的变更记录 */ diff --git a/app/Models/WalletLog.php b/app/Models/WalletLog.php index 52faee21..6727dc23 100644 --- a/app/Models/WalletLog.php +++ b/app/Models/WalletLog.php @@ -15,6 +15,7 @@ class WalletLog extends Model public const ACTION_WITHDRAW_BANK = 4; public const ACTION_WITHDRAW_BALACNE = 5; public const ACTION_WITHDRAW_FAILED = 6; + public const ACTION_DISTRIBUTION_PRE_INCOME = 10; /** * @var array diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 485f0f56..78c19cef 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -40,6 +40,7 @@ class AppServiceProvider extends ServiceProvider 'after_sale' => \App\Models\AfterSale::class, 'wallet_to_bank_log' => \App\Models\WalletToBankLog::class, 'balance_log' => \App\Models\BalanceLog::class, + 'distribution_pre_income' => \App\Models\DistributionPreIncome::class, ]); JsonResource::withoutWrapping();