141 lines
4.7 KiB
PHP
141 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Jobs\TpCreatorJob;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
class TpCreatorController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth');
|
|
}
|
|
|
|
/**
|
|
* Dispatch TP creator jobs to queue
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function dispatchJobs(Request $request)
|
|
{
|
|
$u = u();
|
|
|
|
// Check user authentication
|
|
if(!isset($u->level)) {
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => e2('Permission error')
|
|
], 403);
|
|
}
|
|
|
|
// Validate required parameters
|
|
if(!$request->has('_token') || !$request->has('lines') || !$request->has('documents')) {
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => e2('Missing required parameters')
|
|
], 400);
|
|
}
|
|
|
|
try {
|
|
Log::info('=== TP CREATOR DISPATCH STARTED ===');
|
|
|
|
$lines = j($request->input('lines'));
|
|
$documents = j($request->input('documents'));
|
|
$path = $request->input('path', '');
|
|
$override = filter_var($request->input('override', 'true'), FILTER_VALIDATE_BOOLEAN);
|
|
|
|
Log::info('Parsed data', [
|
|
'lines_count' => count($lines),
|
|
'documents_count' => count($documents),
|
|
'path' => $path,
|
|
'override' => $override
|
|
]);
|
|
|
|
// Validate lines array
|
|
if(!is_array($lines) || count($lines) === 0) {
|
|
throw new \Exception(e2("No lines selected"));
|
|
}
|
|
|
|
// Validate documents array
|
|
if(!is_array($documents) || count($documents) === 0) {
|
|
throw new \Exception(e2("No documents selected"));
|
|
}
|
|
|
|
$jobIds = [];
|
|
|
|
// Dispatch job for each line (Test Package)
|
|
foreach($lines as $lineData) {
|
|
$jobId = uniqid('tp_', true);
|
|
|
|
// Prepare job data
|
|
$jobData = [
|
|
'line_data' => $lineData,
|
|
'documents' => $documents,
|
|
'settings' => [
|
|
'path' => $path,
|
|
'override' => $override,
|
|
'user_id' => $u->id,
|
|
'user_name' => $u->name,
|
|
],
|
|
'job_id' => $jobId
|
|
];
|
|
|
|
// Add job to queue with "pending" status BEFORE dispatch
|
|
$queue = Cache::get('tp-creator-queue', []);
|
|
$queue[$jobId] = [
|
|
'user' => $u,
|
|
'total_registers' => count($documents), // Just a metric
|
|
'line_identifier' => $lineData['test_package_number'] ?? 'unknown',
|
|
'created_at' => now()->toDateTimeString(),
|
|
'status' => 'pending',
|
|
'description' => 'Pending...',
|
|
'progress' => 0
|
|
];
|
|
Cache::put('tp-creator-queue', $queue, now()->addHours(24));
|
|
|
|
// Dispatch the job with user ID
|
|
Log::info('About to dispatch TP job', [
|
|
'job_id' => $jobId,
|
|
'line_identifier' => $lineData['test_package_number'] ?? 'unknown',
|
|
'user_id' => $u->id,
|
|
'status' => 'pending'
|
|
]);
|
|
|
|
TpCreatorJob::dispatch($jobData, $u->id);
|
|
|
|
$jobIds[] = [
|
|
'job_id' => $jobId,
|
|
'line_identifier' => $lineData['test_package_number'] ?? 'unknown'
|
|
];
|
|
}
|
|
|
|
$message = e2("Successfully dispatched :count jobs to queue.", [
|
|
'count' => count($jobIds)
|
|
]);
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => $message,
|
|
'jobs' => $jobIds,
|
|
'total_jobs' => count($jobIds)
|
|
]);
|
|
|
|
} catch (\Throwable $th) {
|
|
Log::error('TP Creator Dispatch - Error', [
|
|
'error' => $th->getMessage(),
|
|
'file' => $th->getFile(),
|
|
'line' => $th->getLine()
|
|
]);
|
|
|
|
return response()->json([
|
|
'status' => 'error',
|
|
'message' => e2('Error dispatching jobs: :error', ['error' => $th->getMessage()])
|
|
], 500);
|
|
}
|
|
}
|
|
}
|