src/Controller/FichierMeteoController.php line 99

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\MeteoFranceService;
  4. use App\DTO\StationMeteoDTO;
  5. use App\Form\FichierMeteoType
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use App\Entity\Pluviometrie;
  13. use App\Entity\StationsMeteo;
  14. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  15. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  16. set_time_limit(36000);
  17. class FichierMeteoController extends AbstractController {
  18.     
  19.     
  20.     
  21.     public function __construct(private MeteoFranceService $meteoServiceFichierMeteoType $fichierMeteoType){//, HttpClientInterface $client, CacheInterface $cache, string $apiKey, string $meteoFranceTokenUrl, string $meteoFranceApiUrl) {
  22.         $this->fichierMeteoType $fichierMeteoType;
  23.     }
  24.     #[Route(path'/fichierMeteo'name'fichierMeteo')]
  25.     public function fichierMeteo(Request $requestEntityManagerInterface $em): Response
  26.     {
  27.         ini_set('memory_limit''1024M'); // ou '2G' si besoin
  28.         
  29.         // Créer une instance du DTO pour passer au formulaire
  30.         $stationMeteoDTO = new StationMeteoDTO();
  31.         // Créer le formulaire avec l'objet DTO
  32.         $form $this->createForm(FichierMeteoType::class, $stationMeteoDTO);
  33.         // Gérer la soumission du formulaire
  34.         $form->handleRequest($request);
  35.         if ($form->isSubmitted() && $form->isValid()) {
  36.             // Récupérer les données du formulaire
  37.             $data $form->getData();
  38.             // Tu as directement accès à l'objet StationMeteoDTO ici
  39.             $apikey $data->getApikey();  // Accès via la méthode getter
  40.             $stationAPI $data->getStationAPI();  // Accès via la méthode getter
  41.             $annee $data->getAnnee();
  42.             // Appeler le service pour obtenir les données météo
  43.             $stationsData = [];
  44.             $commandeArray = []; // Initialisation pour éviter l'erreur Undefined variable
  45.             $columnDataArray = []; // Initialisation pour stocker les données des colonnes  
  46.                 $AnneeEtudiee = [
  47.                     'dateDeb' => "{$annee}-01-01T00%3A00%3A00Z",
  48.                     'dateFin' => "{$annee}-12-31T00%3A00%3A00Z",
  49.                 ];
  50.                 $commande $this->meteoService->getStationDataHoraire($stationAPI$AnneeEtudiee$apikey);
  51.                 $commandeArray[$stationAPI][$annee] = $commande;
  52.                 // Pause pour respecter la limite de 50 requêtes par minute
  53.                 usleep(13000000); // 1,2 secondes = 1 200 000 microsecondes
  54.                     $commandeId $commande['elaboreProduitAvecDemandeResponse']['return'];
  55. //                dump($commandeId);
  56.                     $csvString $this->meteoService->getFichierSeul($commandeId);
  57.                     $filePath sys_get_temp_dir() . '/meteo_' $commandeId '.csv';
  58.                     file_put_contents($filePath$csvString);
  59.                     return new BinaryFileResponse($filePath200, [
  60.                         'Content-Type' => 'text/csv',
  61.                     ], falseResponseHeaderBag::DISPOSITION_ATTACHMENTfalse'meteo_' $commandeId '.csv');
  62. // Passer les données au template
  63.             return $this->render('fichierMeteo.html.twig', [
  64.                         'form' => $form->createView(),
  65.             ]);
  66. //            } catch (\Exception $e) {
  67. //                // Gérer les erreurs
  68. //                $this->addFlash('error', 'Erreur : ' . $e->getMessage());
  69. //            }
  70.         }
  71.         // Rendre la vue du formulaire
  72.         return $this->render('fichierMeteo.html.twig', [
  73.                     'form' => $form->createView(),
  74.         ]);
  75.     }
  76.     // Méthode pour obtenir la clé en fonction de l'ID
  77.     public function getKeyById($id)
  78.     {
  79.         // Récupérer le tableau des stations et IDs à partir de StationMeteoType
  80.         $choices $this->stationMeteoType->getStationAPIChoices();
  81.         // Rechercher la clé correspondant à l'ID
  82.         $key array_search($id$choices);
  83.         // Si l'ID est trouvé, retourne la clé, sinon retourne null
  84.         return $key !== false $key null;
  85.     }
  86.     
  87.     public function getSeuilsParDepartement(): array {
  88.     return [
  89.     '01' => ['seuil_jour' => 35'seuil_nuit' => 20],
  90.     '02' => ['seuil_jour' => 33'seuil_nuit' => 18],
  91.     '03' => ['seuil_jour' => 34'seuil_nuit' => 18],
  92.     '04' => ['seuil_jour' => 36'seuil_nuit' => 19],
  93.     '05' => ['seuil_jour' => 34'seuil_nuit' => 18],
  94.     '06' => ['seuil_jour' => 31'seuil_nuit' => 24],
  95.     '07' => ['seuil_jour' => 35'seuil_nuit' => 20],
  96.     '08' => ['seuil_jour' => 33'seuil_nuit' => 18],
  97.     '09' => ['seuil_jour' => 34'seuil_nuit' => 19],
  98.     '10' => ['seuil_jour' => 35'seuil_nuit' => 18],
  99.     '11' => ['seuil_jour' => 35'seuil_nuit' => 22],
  100.     '12' => ['seuil_jour' => 36'seuil_nuit' => 19],
  101.     '13' => ['seuil_jour' => 35'seuil_nuit' => 24],
  102.     '14' => ['seuil_jour' => 31'seuil_nuit' => 18],
  103.     '15' => ['seuil_jour' => 32'seuil_nuit' => 18],
  104.     '16' => ['seuil_jour' => 36'seuil_nuit' => 20],
  105.     '17' => ['seuil_jour' => 35'seuil_nuit' => 20],
  106.     '18' => ['seuil_jour' => 35'seuil_nuit' => 19],
  107.     '19' => ['seuil_jour' => 36'seuil_nuit' => 19],
  108.     '2A' => ['seuil_jour' => 33'seuil_nuit' => 23],
  109.     '2B' => ['seuil_jour' => 33'seuil_nuit' => 23],
  110.     '21' => ['seuil_jour' => 34'seuil_nuit' => 19],
  111.     '22' => ['seuil_jour' => 31'seuil_nuit' => 18],
  112.     '23' => ['seuil_jour' => 34'seuil_nuit' => 20],
  113.     '24' => ['seuil_jour' => 36'seuil_nuit' => 20],
  114.     '25' => ['seuil_jour' => 33'seuil_nuit' => 19],
  115.     '26' => ['seuil_jour' => 36'seuil_nuit' => 21],
  116.     '27' => ['seuil_jour' => 34'seuil_nuit' => 19],
  117.     '28' => ['seuil_jour' => 34'seuil_nuit' => 18],
  118.     '29' => ['seuil_jour' => 32'seuil_nuit' => 19],
  119.     '30' => ['seuil_jour' => 36'seuil_nuit' => 23],
  120.     '31' => ['seuil_jour' => 36'seuil_nuit' => 21],
  121.     '32' => ['seuil_jour' => 36'seuil_nuit' => 20],
  122.     '33' => ['seuil_jour' => 35'seuil_nuit' => 21],
  123.     '34' => ['seuil_jour' => 35'seuil_nuit' => 22],
  124.     '35' => ['seuil_jour' => 34'seuil_nuit' => 20],
  125.     '36' => ['seuil_jour' => 35'seuil_nuit' => 19],
  126.     '37' => ['seuil_jour' => 35'seuil_nuit' => 19],
  127.     '38' => ['seuil_jour' => 34'seuil_nuit' => 19],
  128.     '39' => ['seuil_jour' => 34'seuil_nuit' => 20],
  129.     '40' => ['seuil_jour' => 35'seuil_nuit' => 20],
  130.     '41' => ['seuil_jour' => 35'seuil_nuit' => 19],
  131.     '42' => ['seuil_jour' => 35'seuil_nuit' => 19],
  132.     '43' => ['seuil_jour' => 32'seuil_nuit' => 18],
  133.     '44' => ['seuil_jour' => 34'seuil_nuit' => 20],
  134.     '45' => ['seuil_jour' => 34'seuil_nuit' => 19],
  135.     '46' => ['seuil_jour' => 36'seuil_nuit' => 20],
  136.     '47' => ['seuil_jour' => 36'seuil_nuit' => 20],
  137.     '48' => ['seuil_jour' => 33'seuil_nuit' => 18],
  138.     '49' => ['seuil_jour' => 34'seuil_nuit' => 20],
  139.     '50' => ['seuil_jour' => 31'seuil_nuit' => 18],
  140.     '51' => ['seuil_jour' => 34'seuil_nuit' => 18],
  141.     '52' => ['seuil_jour' => 34'seuil_nuit' => 19],
  142.     '53' => ['seuil_jour' => 34'seuil_nuit' => 20],
  143.     '54' => ['seuil_jour' => 34'seuil_nuit' => 18],
  144.     '55' => ['seuil_jour' => 34'seuil_nuit' => 18],
  145.     '56' => ['seuil_jour' => 32'seuil_nuit' => 18],
  146.     '57' => ['seuil_jour' => 34'seuil_nuit' => 19],
  147.     '58' => ['seuil_jour' => 34'seuil_nuit' => 19],
  148.     '59' => ['seuil_jour' => 33'seuil_nuit' => 18],
  149.     '60' => ['seuil_jour' => 34'seuil_nuit' => 18],
  150.     '61' => ['seuil_jour' => 34'seuil_nuit' => 19],
  151.     '62' => ['seuil_jour' => 33'seuil_nuit' => 18],
  152.     '63' => ['seuil_jour' => 34'seuil_nuit' => 19],
  153.     '64' => ['seuil_jour' => 34'seuil_nuit' => 20],
  154.     '65' => ['seuil_jour' => 34'seuil_nuit' => 19],
  155.     '66' => ['seuil_jour' => 35'seuil_nuit' => 23],
  156.     '67' => ['seuil_jour' => 34'seuil_nuit' => 19],
  157.     '68' => ['seuil_jour' => 35'seuil_nuit' => 19],
  158.     '69' => ['seuil_jour' => 34'seuil_nuit' => 20],
  159.     '70' => ['seuil_jour' => 34'seuil_nuit' => 18],
  160.     '71' => ['seuil_jour' => 34'seuil_nuit' => 20],
  161.     '72' => ['seuil_jour' => 35'seuil_nuit' => 20],
  162.     '73' => ['seuil_jour' => 34'seuil_nuit' => 19],
  163.     '74' => ['seuil_jour' => 34'seuil_nuit' => 19],
  164.     '75' => ['seuil_jour' => 31'seuil_nuit' => 21],
  165.     '76' => ['seuil_jour' => 33'seuil_nuit' => 18],
  166.     '77' => ['seuil_jour' => 34'seuil_nuit' => 18],
  167.     '78' => ['seuil_jour' => 33'seuil_nuit' => 20],
  168.     '79' => ['seuil_jour' => 35'seuil_nuit' => 20],
  169.     '80' => ['seuil_jour' => 33'seuil_nuit' => 18],
  170.     '81' => ['seuil_jour' => 36'seuil_nuit' => 21],
  171.     '82' => ['seuil_jour' => 36'seuil_nuit' => 21],
  172.     '83' => ['seuil_jour' => 35'seuil_nuit' => 23],
  173.     '84' => ['seuil_jour' => 36'seuil_nuit' => 21],
  174.     '85' => ['seuil_jour' => 34'seuil_nuit' => 20],
  175.     '86' => ['seuil_jour' => 34'seuil_nuit' => 20],
  176.     '87' => ['seuil_jour' => 35'seuil_nuit' => 19],
  177.     '88' => ['seuil_jour' => 34'seuil_nuit' => 18],
  178.     '89' => ['seuil_jour' => 35'seuil_nuit' => 19],
  179.     '90' => ['seuil_jour' => 33'seuil_nuit' => 18],
  180.     '91' => ['seuil_jour' => 35'seuil_nuit' => 20],
  181.     '92' => ['seuil_jour' => 31'seuil_nuit' => 21],
  182.     '93' => ['seuil_jour' => 31'seuil_nuit' => 21],
  183.     '94' => ['seuil_jour' => 31'seuil_nuit' => 21],
  184.     '95' => ['seuil_jour' => 35'seuil_nuit' => 20],
  185. ];
  186. }
  187.  
  188.     
  189.     
  190. }