src/Controller/FichierMeteoController.php line 101

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