warn('Setting "day-exectute-business-structur" ist leer oder 0. Verwende Standard: Tag 1'); \Log::channel('cron')->warning('BusinessStore: Setting day-exectute-business-structur is empty, using default: 1'); } $presentDay = (int) date('d'); // Logging für Debugging $this->info("BusinessStore: Configured Day: {$executeDay}, Present Day: {$presentDay}"); \Log::channel('cron')->info("BusinessStore: Configured Day: {$executeDay}, Present Day: {$presentDay}"); // Prüfe ob heute der konfigurierte Tag ist if ($executeDay !== $presentDay) { // Erlaubnis zum Überschreiben für Entwicklung/Testing // ENV-Variable BUSINESS_FORCE_EXECUTE=true überschreibt den Check if (env('BUSINESS_FORCE_EXECUTE', false) === true) { $this->warn('⚠️ BUSINESS_FORCE_EXECUTE ist aktiv - Command wird trotz falschem Tag ausgeführt!'); $this->warn('⚠️ Dies sollte NUR auf Test-Servern verwendet werden!'); \Log::channel('cron')->warning('BusinessStore: FORCED execution via BUSINESS_FORCE_EXECUTE'); return true; } // Command sollte heute NICHT laufen $this->info("❌ Command wird NICHT ausgeführt - falscher Tag (erwartet: {$executeDay}, heute: {$presentDay})"); \Log::channel('cron')->info("BusinessStore: NOT EXECUTED - wrong day (expected: {$executeDay}, today: {$presentDay})"); return false; } // Command wird ausgeführt $this->info("✅ Command wird ausgeführt - korrekter Tag ({$presentDay})"); \Log::channel('cron')->info("BusinessStore: EXECUTING - correct day ({$presentDay})"); return true; } /** * Execute the console command. * * @return int */ public function handle() { try { // Prüfe ob Command am richtigen Tag ausgeführt werden soll if (! $this->shouldExecuteToday()) { return 0; } $this->logMemoryUsage('Command Start'); $this->timeStart = microtime(true); // Argumente mit Standardwerten für den Vormonat $this->month = $this->argument('month') ?: (int) date('m', strtotime('-1 month')); $this->year = $this->argument('year') ?: (int) date('Y', strtotime('-1 month')); $this->info('RUN Command BusinessStore on month: '.$this->month.' | year: '.$this->year); \Log::channel('cron')->info('RUN Command BusinessStore on month: '.$this->month.' | year: '.$this->year); $this->logMemoryUsage('Parameters initialized'); // Prozesse ausführen mit Fehlerbehandlung $this->executeWithErrorHandling('Business Structure Storage', function () { $this->storeBusinessStructureUsersDetailMonth(); }); $this->executeWithErrorHandling('Commission Calculation', function () { $this->userBusinessCommissionsToCredit(); }); // Auskommentierte Prozesse bleiben inaktiv // $this->userCreatePaymentCreditsPDF(); // $this->userLevelUpdate(); // $this->storeBusinessStructureUsersDetailPeriod(1, 6); $this->logExecutionTime('COMMAND COMPLETED SUCCESSFULLY'); $this->logMemoryUsage('Command End'); \Log::channel('cron')->info('COMMAND COMPLETED SUCCESSFULLY'); return 0; } catch (\Exception $e) { $this->error('Command failed with error: '.$e->getMessage()); $this->error('Stack trace: '.$e->getTraceAsString()); $this->logExecutionTime('COMMAND FAILED'); return 1; } } private function storeBusinessStructureUsersDetailMonth() { $this->info('storeBusinessStructureUsersDetailMonth month: '.$this->month.' year:'.$this->year); $businessUsersStore = new BusinessUsersStore($this->month, $this->year); $businessUsersStore->storeUserBusinessStructure(); $businessUsersStore->storeBusinessUsersDetail(); $bool = $businessUsersStore->storeBusinessCompleted(); $this->logExecutionTime('END Command storeBusinessStructureUsersDetailMonth: '.$bool); } private function userBusinessCommissionsToCredit() { $this->info('userBusinessCommissionsToCredit month: '.$this->month.' year:'.$this->year); $userPaymentCredits = new UserPaymentCredits($this->month, $this->year); $userBusinesses = $userPaymentCredits->getUserBusinessByMonthYear(); foreach ($userBusinesses as $userBusiness) { $ret = $userPaymentCredits->addUserCreditItem($userBusiness); $this->info('userBusinessCredit: '.$ret->user_id.' : Team: '.$ret->commission_pp_total.' | Shop: '.$ret->commission_shop_sales); } $this->logExecutionTime('END Command userBusinessCommissionsToCredit:'); } private function userCreatePaymentCreditsPDF() { $this->info('userCreatePaymentCreditsPDF month: '.$this->month.' year:'.$this->year); $userPaymentCredits = new UserPaymentCredits($this->month, $this->year); $creditItemUsers = $userPaymentCredits->getUserCreditItemUsersByMonthYear(); foreach ($creditItemUsers as $creditItemUser) { $bool = $userPaymentCredits->makeCreditPaymentPDF($creditItemUser->user_id, $this->sendCreditMail); $this->info('creditsPDF: '.$bool.' user_id: '.$creditItemUser->user_id); } $this->logExecutionTime('END Command userCreatePaymentCreditsPDF:'); } private function userLevelUpdate() { $this->info('userLevelUpdate month: '.$this->month.' year:'.$this->year); $userLevelUpdate = new UserLevelUpdate($this->month, $this->year); $levelUpdateUsers = $userLevelUpdate->getUserBusinessByMonthYear(); foreach ($levelUpdateUsers as $userBusiness) { $ret = $userLevelUpdate->makeUserLevelUpdate($userBusiness, $this->sendUpdateMail); if ($ret) { $this->info('updateLevel: '.$userBusiness->user->id.' | '.$userBusiness->user->email.' | '. 'from: '.$userBusiness->m_level_id.' '.$userBusiness->user_level_name.' | '. 'to: '.$ret); } } $this->logExecutionTime('END Command userLevelUpdate:'); } private function storeBusinessStructureUsersDetailPeriod($from, $to) { for ($i = $from; $i <= $to; $i++) { $this->info('Store Business Structure Users Detail month: '.$i.' year:'.$this->year); $businessUsersStore = new BusinessUsersStore($i, $this->year); $businessUsersStore->storeUserBusinessStructure(); $businessUsersStore->storeBusinessUsersDetail(); $bool = $businessUsersStore->storeBusinessCompleted(); $this->logExecutionTime('Period BusinessStore: '.$bool); } } private function logExecutionTime($message) { $diff = microtime(true) - $this->timeStart; $sec = intval($diff); $micro = $diff - $sec; $this->info($message.' | Time: '.$sec.'sec :'.round($micro * 1000, 4).' ms'); } }