1
0
Files
lkafu/app/Jobs/Perf.php
2020-08-06 14:45:56 +08:00

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;
}
}