CheckCommission.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\CommissionLog;
  4. use Illuminate\Console\Command;
  5. use App\Models\Order;
  6. use App\Models\User;
  7. use Illuminate\Support\Facades\DB;
  8. class CheckCommission extends Command
  9. {
  10. /**
  11. * The name and signature of the console command.
  12. *
  13. * @var string
  14. */
  15. protected $signature = 'check:commission';
  16. /**
  17. * The console command description.
  18. *
  19. * @var string
  20. */
  21. protected $description = '返佣服务';
  22. /**
  23. * Create a new command instance.
  24. *
  25. * @return void
  26. */
  27. public function __construct()
  28. {
  29. parent::__construct();
  30. }
  31. /**
  32. * Execute the console command.
  33. *
  34. * @return mixed
  35. */
  36. public function handle()
  37. {
  38. $this->autoCheck();
  39. $this->autoPayCommission();
  40. }
  41. public function autoCheck()
  42. {
  43. if ((int)config('v2board.commission_auto_check_enable', 1)) {
  44. Order::where('commission_status', 0)
  45. ->where('invite_user_id', '!=', NULL)
  46. ->whereNotIn('status', [0, 2])
  47. ->where('updated_at', '<=', strtotime('-3 day', time()))
  48. ->update([
  49. 'commission_status' => 1
  50. ]);
  51. }
  52. }
  53. public function autoPayCommission()
  54. {
  55. $orders = Order::where('commission_status', 1)
  56. ->where('invite_user_id', '!=', NULL)
  57. ->get();
  58. foreach ($orders as $order) {
  59. DB::beginTransaction();
  60. if (!$this->payHandle($order->invite_user_id, $order)) {
  61. DB::rollBack();
  62. continue;
  63. }
  64. $order->commission_status = 2;
  65. if (!$order->save()) {
  66. DB::rollBack();
  67. continue;
  68. }
  69. DB::commit();
  70. }
  71. }
  72. public function payHandle($inviteUserId, Order $order)
  73. {
  74. $level = 3;
  75. if ((int)config('v2board.commission_distribution_enable', 0)) {
  76. $commissionShareLevels = [
  77. 0 => (int)config('v2board.commission_distribution_l1'),
  78. 1 => (int)config('v2board.commission_distribution_l2'),
  79. 2 => (int)config('v2board.commission_distribution_l3')
  80. ];
  81. } else {
  82. $commissionShareLevels = [
  83. 0 => 100
  84. ];
  85. }
  86. for ($l = 0; $l < $level; $l++) {
  87. $inviter = User::find($inviteUserId);
  88. if (!$inviter) continue;
  89. if (!isset($commissionShareLevels[$l])) continue;
  90. $commissionBalance = $order->commission_balance * ($commissionShareLevels[$l] / 100);
  91. if (!$commissionBalance) continue;
  92. if ((int)config('v2board.withdraw_close_enable', 0)) {
  93. $inviter->balance = $inviter->balance + $commissionBalance;
  94. } else {
  95. $inviter->commission_balance = $inviter->commission_balance + $commissionBalance;
  96. }
  97. if (!$inviter->save()) {
  98. DB::rollBack();
  99. return false;
  100. }
  101. if (!CommissionLog::create([
  102. 'invite_user_id' => $inviteUserId,
  103. 'user_id' => $order->user_id,
  104. 'trade_no' => $order->trade_no,
  105. 'order_amount' => $order->total_amount,
  106. 'get_amount' => $commissionBalance
  107. ])) {
  108. DB::rollBack();
  109. return false;
  110. }
  111. $inviteUserId = $inviter->invite_user_id;
  112. // update order actual commission balance
  113. $order->actual_commission_balance = $order->actual_commission_balance + $commissionBalance;
  114. }
  115. return true;
  116. }
  117. }