23-01-2026
This commit is contained in:
parent
a939cd51ef
commit
a8b395e20d
248 changed files with 29342 additions and 4805 deletions
|
|
@ -1,68 +1,154 @@
|
|||
<?php
|
||||
|
||||
namespace App\Cron;
|
||||
|
||||
use App\User;
|
||||
use App\Models\UserBusiness;
|
||||
use App\Models\UserLevel;
|
||||
use App\Services\HTMLHelper;
|
||||
use App\Models\UserCreditItem;
|
||||
use App\Mail\MailUserLevelUpdate;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use App\Repositories\CreditRepository;
|
||||
|
||||
class UserLevelUpdate
|
||||
{
|
||||
private $month;
|
||||
private $year;
|
||||
|
||||
private $userLevels;
|
||||
|
||||
public function __construct($month, $year)
|
||||
{
|
||||
$this->month = $month;
|
||||
$this->year = $year;
|
||||
// Lade UserLevels für POS-Vergleich (wird für Prüfung benötigt)
|
||||
$this->userLevels = UserLevel::where('active', 1)->orderBy('pos')->get()->keyBy('id');
|
||||
}
|
||||
|
||||
|
||||
public function getUserBusinessByMonthYear(){
|
||||
return UserBusiness::select('user_businesses.*')
|
||||
/**
|
||||
* Holt alle UserBusiness Einträge die Level-Updates benötigen
|
||||
* Mit Eager Loading für bessere Performance
|
||||
*/
|
||||
public function getUserBusinessByMonthYear()
|
||||
{
|
||||
return UserBusiness::select('user_businesses.*')
|
||||
->with('user') // Eager Loading für User
|
||||
->where('user_businesses.month', '=', $this->month)
|
||||
->where('user_businesses.year', '=', $this->year)
|
||||
->where('user_businesses.next_qual_user_level', '!=', NULL)
|
||||
->get();
|
||||
->whereNotNull('user_businesses.next_qual_user_level')
|
||||
->whereRaw("JSON_LENGTH(user_businesses.next_qual_user_level) > 0")
|
||||
->get();
|
||||
}
|
||||
|
||||
public function makeUserLevelUpdate(UserBusiness $userBusiness, $send_update_mail){
|
||||
/**
|
||||
* Aktualisiert das User-Level basierend auf next_qual_user_level
|
||||
* Berücksichtigt Arrays und einzelne Level-Objekte
|
||||
* Prüft ob das neue Level höher ist als das aktuelle
|
||||
*/
|
||||
public function makeUserLevelUpdate(UserBusiness $userBusiness, $send_update_mail = false)
|
||||
{
|
||||
$ret = false;
|
||||
|
||||
if (!$userBusiness->user) {
|
||||
Log::warning("UserLevelUpdate: UserBusiness {$userBusiness->id} hat kein User-Objekt");
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$nextQualUserLevel = $userBusiness->next_qual_user_level;
|
||||
if(!isset($nextQualUserLevel['hasUpdated']) && $userBusiness->user){
|
||||
$userBusiness->user->m_level = $nextQualUserLevel['id'];
|
||||
|
||||
if (!is_array($nextQualUserLevel) || empty($nextQualUserLevel)) {
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// next_qual_user_level ist ein einzelnes Level-Objekt
|
||||
if (is_array($nextQualUserLevel) && isset($nextQualUserLevel['id'])) {
|
||||
// return wenn bereits aktualisierte Level
|
||||
if (isset($nextQualUserLevel['hasUpdated']) && $nextQualUserLevel['hasUpdated'] == 1) {
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$newLevelId = $nextQualUserLevel['id'];
|
||||
$newLevelPos = null;
|
||||
|
||||
// Lade Level-Objekt für POS-Vergleich
|
||||
$newLevel = $this->userLevels->get($newLevelId);
|
||||
if ($newLevel) {
|
||||
$newLevelPos = $newLevel->pos;
|
||||
}
|
||||
|
||||
// Prüfe ob das neue Level höher ist als das aktuelle
|
||||
$currentUserLevel = null;
|
||||
if ($userBusiness->user->m_level) {
|
||||
$currentUserLevel = $this->userLevels->get($userBusiness->user->m_level);
|
||||
}
|
||||
|
||||
// Nur updaten wenn das neue Level höher ist (POS > aktuelles Level POS)
|
||||
if (!$currentUserLevel || !$newLevelPos) {
|
||||
return $ret;
|
||||
}
|
||||
if ($newLevelPos <= $currentUserLevel->pos) {
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
// Update durchführen wenn ein höheres Level gefunden wurde
|
||||
try {
|
||||
$userBusiness->user->m_level = $newLevel['id'];
|
||||
$userBusiness->user->save();
|
||||
|
||||
// Markiere das Level als aktualisiert in next_qual_user_level
|
||||
$nextQualUserLevel['hasUpdated'] = 1;
|
||||
$userBusiness->next_qual_user_level = $nextQualUserLevel;
|
||||
$userBusiness->save();
|
||||
$ret = $nextQualUserLevel['id'].' '.$nextQualUserLevel['name'];
|
||||
if($send_update_mail){
|
||||
self::sendUpdateMail($userBusiness->user, $userBusiness->total_qual_pp, $nextQualUserLevel['name']);
|
||||
|
||||
$ret = $newLevelId . ' ' . ($newLevel->name ?? 'Unbekannt');
|
||||
|
||||
if ($send_update_mail) {
|
||||
try {
|
||||
$this->sendUpdateMail(
|
||||
$userBusiness->user,
|
||||
$userBusiness->payline_points_qual_kp ?? 0,
|
||||
$newLevel->name ?? 'Unbekannt'
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
Log::warning("UserLevelUpdate: E-Mail konnte nicht gesendet werden für User {$userBusiness->user->id}: " . $e->getMessage());
|
||||
// E-Mail-Fehler sollten das Update nicht verhindern
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Log::info("UserLevelUpdate: User {$userBusiness->user->id} Level aktualisiert zu {$ret}");
|
||||
} catch (\Exception $e) {
|
||||
Log::error("UserLevelUpdate: Fehler beim Update von User {$userBusiness->user->id}: " . $e->getMessage());
|
||||
throw $e;
|
||||
}
|
||||
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
private function sendUpdateMail(User $user, $tp, $to){
|
||||
|
||||
private function sendUpdateMail(User $user, $tp, $to)
|
||||
{
|
||||
$bcc = [];
|
||||
$email = $user->email;
|
||||
if(!$email){
|
||||
if($user->mode === 'test'){
|
||||
}else{
|
||||
if (!$email) {
|
||||
if ($user->mode === 'test') {
|
||||
} else {
|
||||
$email = config('app.checkout_mail');
|
||||
}
|
||||
}
|
||||
if($user->mode === 'test'){
|
||||
if ($user->mode === 'test') {
|
||||
$bcc[] = config('app.checkout_test_mail');
|
||||
}else{
|
||||
} else {
|
||||
$bcc[] = config('app.checkout_mail');
|
||||
}
|
||||
if (\App\Services\Util::isTestSystem()) {
|
||||
$email = config('app.checkout_test_mail');
|
||||
$bcc[] = config('app.checkout_test_mail');
|
||||
}
|
||||
Mail::to($email)->bcc($bcc)->locale($user->getLocale())->send(new MailUserLevelUpdate($tp, $to));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue