$lineListData->painting_cycle]); // Skip if painting_cycle is empty if (empty($lineListData->painting_cycle)) { Log::debug("PaintSystemToMatrixSyncTrigger skipped - painting_cycle is empty"); return ['skipped' => true, 'reason' => 'painting_cycle_empty']; } // Get paint system $paintSystem = DB::table('paint_systems') ->where('paint_cycle', $lineListData->painting_cycle) ->first(); if (!$paintSystem) { Log::debug("No paint system found for paint cycle: {$lineListData->painting_cycle}"); return ['skipped' => true, 'reason' => 'paint_system_not_found']; } // Get color system $colorSystem = DB::table('color_systems') ->where('fluid_code', $lineListData->fluid_code) ->first(); if (!$colorSystem) { Log::debug("No color system found for fluid code: {$lineListData->fluid_code}"); return ['skipped' => true, 'reason' => 'color_system_not_found']; } // Get RAL values $ral1 = $colorSystem->ral_1; $ral2 = $colorSystem->ral_2; $ral3 = $colorSystem->ral_3; // Get Russian color descriptions $ralCodes = j(setting("ral-codes")); $colorRu1 = $this->findRussianColorDescription($ralCodes, $ral1); $colorRu2 = $this->findRussianColorDescription($ralCodes, $ral2); $colorRu3 = $this->findRussianColorDescription($ralCodes, $ral3); // Find paint matrices with matching paint_cycle $paintMatrices = DB::table('paint_matrices') ->where('area', $lineListData->unit) ->where('fluid_code', $lineListData->fluid_code) ->where('paint_cycle', $lineListData->painting_cycle) ->where('line', $lineListData->line_no) ->orderBy('id', 'ASC') // Deadlock prevention ->get(); Log::info("Paint Matrices found", ['count' => $paintMatrices->count()]); $updatedCount = 0; // Process in chunks with TransactionHelper TransactionHelper::chunkTransaction( $paintMatrices, function ($pmChunk) use ($paintSystem, $colorSystem, $ral1, $ral2, $ral3, $colorRu1, $colorRu2, $colorRu3, &$updatedCount) { foreach ($pmChunk as $paintMatrix) { $updateData = [ // Paint System data 'surface_preparation' => $paintSystem->surface_preparation, 'touch_up_of_damaged_parts' => $paintSystem->surface_roughness, 'primer_coat' => $paintSystem->primer_coat_name_1, 'brend_name_1' => $paintSystem->brand_name_1, 'thickness_1' => $paintSystem->thickness_1, 'intermediate_coat' => $paintSystem->primer_coat_name_2, 'brend_name_2' => $paintSystem->brand_name_2, 'thickness_2' => $paintSystem->thickness_2, 'final_coat' => $paintSystem->primer_coat_name_3, 'brend_name_3' => $paintSystem->brand_name_3, 'thickness_3' => $paintSystem->thickness_3, 'total_thickness' => ($paintSystem->thickness_1 ?? 0) + ($paintSystem->thickness_2 ?? 0) + ($paintSystem->thickness_3 ?? 0), // Color System data 'fluid_code_description' => $colorSystem->fluid_code_description, 'design_temperature' => $colorSystem->design_temperature, 'operation_temperature' => $colorSystem->working_temperature, 'ral_code_1' => $ral1, 'ral_code_2' => $ral2, 'ral_code_3' => $ral3, 'colour_1' => $colorRu1, 'colour_2' => $colorRu2, 'colour_3' => $colorRu3, 'updated_at' => now() ]; $result = DB::table('paint_matrices') ->where('id', $paintMatrix->id) ->update($updateData); if ($result) { $updatedCount++; } } return $pmChunk->count(); }, 1, // Chunk size 10000 // 10ms delay ); Log::debug("Paint Systems to Paint Matrices synchronization completed. Updated $updatedCount records."); return [ 'success' => true, 'updated_records' => $updatedCount ]; } /** * Find Russian color description for a RAL code */ protected function findRussianColorDescription($ralCodes, $ralCode): string { if (empty($ralCode) || empty($ralCodes)) { return ''; } foreach ($ralCodes as $entry) { if (isset($entry['ral_code']) && $entry['ral_code'] == $ralCode && isset($entry['ru'])) { return $entry['ru']; } } return ''; } }