İlk temizlik tamamlandı bir önceki projeden

This commit is contained in:
Ümit Tunç
2026-04-28 21:14:25 +03:00
commit f80443aec0
10000 changed files with 959965 additions and 0 deletions
+228
View File
@@ -0,0 +1,228 @@
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class ExecuteSaveTriggerJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* The number of seconds the job can run before timing out.
*
* @var int
*/
public $timeout = 600; // 10 minutes
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 1; // Only try once, no retry on failure
/**
* The maximum number of unhandled exceptions to allow before failing.
*
* @var int
*/
public $maxExceptions = 1;
protected $tableName;
protected $requestData;
protected $key;
protected $values;
protected $beforeData;
protected $action;
/**
* Create a new job instance.
*/
public function __construct(string $tableName, array $requestData, $key = null, $values = null, $beforeData = null, $action = null)
{
$this->tableName = $tableName;
$this->requestData = $requestData;
$this->key = $key;
$this->values = $values;
$this->beforeData = $beforeData;
$this->action = $action;
// Determine queue priority based on table and operation
$queueName = $this->determineQueuePriority($tableName, $values);
// Set the queue for this job
$this->onQueue($queueName);
}
/**
* Determine the queue priority based on table and data
* Material group operations get higher priority
*/
private function determineQueuePriority(string $tableName, $values): string
{
// High priority for material group related operations in weld_logs
if ($tableName === 'weld_logs' && $values) {
$materialGroupFields = [
'steel_grade_p',
'steel_grade_b',
'material_group_p',
'material_group_b',
'ru_material_group_1',
'ru_material_group_2'
];
// Check if any material group field is being updated
foreach ($materialGroupFields as $field) {
if (isset($values[$field])) {
Log::info("High priority queue assigned for material group operation", [
'table' => $tableName,
'field' => $field,
'queue' => 'high-priority-save-trigger'
]);
return 'high-priority-save-trigger';
}
}
}
// Default priority
return 'save-trigger';
}
/**
* Execute the job.
*/
public function handle(): void
{
$startTime = microtime(true);
Log::info("=== ExecuteSaveTriggerJob STARTED ===", [
'table_name' => $this->tableName,
'key' => $this->key,
'action' => $this->action,
'timestamp' => now(),
'memory_start' => memory_get_usage(true) / 1024 / 1024 . ' MB'
]);
$path = app_path("Http/Controllers/SaveTrigger/{$this->tableName}.php");
if (file_exists($path)) {
// Job içinde değişkenleri global olarak erişilebilir hale getir
$tableName = $this->tableName;
$request = $this->requestData;
$key = $this->key;
$values = $this->values;
$beforeData = $this->beforeData;
$action = $this->action;
Log::info("SaveTrigger file found, executing...", [
'path' => $path,
'table' => $tableName
]);
// Include dosyasını çalıştır
include($path);
} else {
Log::warning("SaveTrigger dosyası bulunamadı", [
'expected_path' => $path,
'table_name' => $this->tableName
]);
}
// Dispatch report generation if applicable
$this->dispatchReportGeneration();
$endTime = microtime(true);
$executionTime = $endTime - $startTime;
$memoryUsage = memory_get_peak_usage(true) / 1024 / 1024;
Log::info("=== ExecuteSaveTriggerJob COMPLETED ===", [
'table_name' => $this->tableName,
'key' => $this->key,
'execution_time_seconds' => round($executionTime, 2),
'memory_peak_mb' => round($memoryUsage, 2),
'timestamp' => now()
]);
}
/**
* Check and dispatch report generation for relevant templates
*/
protected function dispatchReportGeneration()
{
try {
// Only proceed if we have a valid key (ID)
$recordId = $this->key['id'] ?? null;
if (!$recordId) {
return;
}
// Find templates that might be related to this table
$templates = \Illuminate\Support\Facades\DB::table("document_templates")
->where("y", "1")
->get();
foreach ($templates as $template) {
$fields = json_decode($template->fields);
if (!isset($fields->editorMaster)) {
continue;
}
$masterSql = $fields->editorMaster;
// Check conditions:
// 1. Contains tableName
// 2. Contains ORDER BY (case insensitive)
if (stripos($masterSql, $this->tableName) !== false && stripos($masterSql, 'ORDER BY') !== false) {
// Clone işleminde rapor oluşturmayı engelle
if($this->action === "clone") {
continue;
}
Log::debug("Dispatching RenderReportJob for template", [
'template_id' => $template->id,
'table' => $this->tableName,
'record_id' => $recordId
]);
\App\Jobs\RenderReportJob::dispatch($template->id, $recordId, $this->tableName);
}
}
} catch (\Exception $e) {
Log::error("Error in dispatchReportGeneration: " . $e->getMessage());
}
}
/**
* Get the job's description for Telescope.
*/
public function getDescription(): string
{
$action = $this->key ? 'Update' : 'Create';
return "Execute Save Trigger for {$this->tableName} table - {$action} operation";
}
/**
* Get the tags that should be assigned to the job.
*/
public function tags(): array
{
$action = $this->action;
return [
"SaveTrigger:{$this->tableName}",
"Action:{$action}",
"Table:{$this->tableName}"
];
}
}