114 lines
3.3 KiB
PHP
114 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Jobs;
|
|
|
|
use App\Models\User;
|
|
use App\Models\UserPerf;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Foundation\Bus\Dispatchable;
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
use RuLong\UserAccount\Models\UserAccountLog;
|
|
use RuLong\UserRelation\Models\UserRelation;
|
|
|
|
/**
|
|
* 业绩奖金
|
|
*/
|
|
class Perf implements ShouldQueue
|
|
{
|
|
use Dispatchable, InteractsWithQueue;
|
|
|
|
/**
|
|
* 队列名称
|
|
* @var string
|
|
*/
|
|
public $queue = 'Bonus';
|
|
|
|
/**
|
|
* 队列执行 延迟时间
|
|
* @var integer
|
|
*/
|
|
// public $delay = 7*24*3600;
|
|
public $delay = 0;
|
|
|
|
/**
|
|
* 最大尝试次数
|
|
* @var integer
|
|
*/
|
|
public $tries = 1;
|
|
|
|
/**
|
|
* 脚本超时时间
|
|
* @var integer
|
|
*/
|
|
public $timeout = 50;
|
|
|
|
protected $user;
|
|
protected $debug;
|
|
protected $timeBetween;
|
|
public function __construct(User $user, $debug = false)
|
|
{
|
|
$this->user = $user->fresh();
|
|
$this->debug = $debug;
|
|
$this->timeBetween = [now()->subMonth()->startOfMonth()->format('Y-m-d H:i:s'), now()->subMonth()->endOfMonth()->format('Y-m-d H:i:s')];
|
|
if ($this->debug) {
|
|
$this->timeBetween = [now()->startOfMonth()->format('Y-m-d H:i:s'), now()->endOfMonth()->format('Y-m-d H:i:s')];
|
|
}
|
|
}
|
|
|
|
public function handle()
|
|
{
|
|
|
|
$userData = self::getUserPerf($this->user);
|
|
|
|
$source = [
|
|
'perf_none' => $perf_none,
|
|
'perf' => $newPerf,
|
|
'oldPerf' => $oldPerf,
|
|
'allPerf' => $allPerf,
|
|
'rate' => $rate,
|
|
'sett_at' => $timeBetween[1],
|
|
];
|
|
$cash = bcadd($newPerf * $rate / 100, 0, 2);
|
|
$childs = UserRelation::where('bloodline', 'like', "%," . $this->user->id . ",%")->pluck('user_id')->toArray() ?: false;
|
|
$childCash = 0;
|
|
if ($childs) {
|
|
$childCash = UserAccountLog::whereIn('user_id', $childs)->where('rule_id', '10')->sum('variable');
|
|
}
|
|
$cash -= $childCash;
|
|
$this->user->rule('perf', $cash, false, $source);
|
|
}
|
|
|
|
public function getUserPerf(User $user)
|
|
{
|
|
$data = [
|
|
'perf' => 0,
|
|
'rate' => 0,
|
|
];
|
|
if ($user) {
|
|
$oldPerf = $user->accountLogs()->where('rule_id', '10')->sum('source->perf') ?: 0; //获取已经结算过的业绩
|
|
$newPerf = UserPerf::whereBetween('created_at', $this->timeBetween)->where('created_at', '>=', $user->activationd_at)->where('user_id', $user->id)->sum('perf') ?: 0; //获取本期计算的业绩
|
|
$allPerf = $oldPerf + $newPerf; //总业绩
|
|
|
|
$rate = 0;
|
|
if ($allPerf >= 10000000) {
|
|
$rate = $user->identity->info->configs['perf_1000'] ?: 0;
|
|
}
|
|
if ($allPerf >= 5000000 && $rate === 0) {
|
|
$rate = $user->identity->info->configs['perf_500'] ?: 0;
|
|
}
|
|
if ($allPerf >= 1000000 && $rate === 0) {
|
|
$rate = $user->identity->info->configs['perf_100'] ?: 0;
|
|
}
|
|
$perf_none = 0;
|
|
if ($oldPerf < 1000000) {
|
|
$perf_none = 1000000 - $oldPerf;
|
|
$newPerf -= $perf_none;
|
|
}
|
|
$data['perf'] = $newPerf;
|
|
$data['rate'] = $rate;
|
|
}
|
|
return $data;
|
|
|
|
}
|
|
}
|