Exemplo n.º 1
0
 static function calculateWindAllPrev(WebSite $allPrevWebSite, Spot $spot, EntityManager $em)
 {
     // Find dataWindPrev with allPrevWebsite and spot
     $dataWindPrevAllPrev = $em->getRepository('LaPoizWindBundle:DataWindPrev')->getWithWebsiteAndSpot($allPrevWebSite, $spot);
     // Delete all old data
     AllPrevGetData::deleteOldData($dataWindPrevAllPrev, $em);
     $arrayEveryDay = array();
     // Pour chaque site de prevision remplis le tableau avec ses prévisions (vent, orientation)
     foreach ($spot->getDataWindPrev() as $dataWindPrev) {
         if ($dataWindPrev->getWebsite()->getNom() !== WebsiteGetData::allPrevName) {
             foreach ($dataWindPrev->getListPrevisionDate() as $previsionDate) {
                 AllPrevGetData::getPrevisionValue($arrayEveryDay, $previsionDate, $dataWindPrev->getWebsite()->getNom());
             }
         }
     }
     // $arrayEveryDay['Y-m-d']['H']['wind/orient'][websiteName]
     //$toto = $arrayEveryDay;
     // Calcul la moyenne pour chaque heure (avec coef pour le spot)
     foreach ($arrayEveryDay as $keyDate => $arrayHours) {
         $previsionDate = new PrevisionDate();
         $previsionDate->setDataWindPrev($dataWindPrevAllPrev);
         $previsionDate->setDatePrev(new \DateTime($keyDate));
         $previsionDate->setCreated(new \DateTime("now"));
         $dataWindPrevAllPrev->addListPrevisionDate($previsionDate);
         foreach ($arrayHours as $keyH => $arrayData) {
             // $arrayData['wind/orient'][websiteName]
             $nbWebsite = count($arrayData['wind']);
             if ($nbWebsite > 0) {
                 $windTotal = 0;
                 foreach ($arrayData['wind'] as $keywebsiteName => $windValue) {
                     $windTotal += $windValue;
                 }
                 $orientTotal = 0;
                 foreach ($arrayData['orient'] as $keywebsiteName => $orientationValue) {
                     $orientTotal += $orientationValue;
                 }
                 $prevision = new Prevision();
                 $prevision->setOrientation($orientTotal / $nbWebsite);
                 // Ne marche pas autour de l'orientation NNE et NNO
                 $prevision->setWind($windTotal / $nbWebsite);
                 $hour = new \DateTime();
                 $hour->setTime($keyH, "00");
                 $prevision->setTime($hour);
                 $prevision->setPrevisionDate($previsionDate);
                 $em->persist($prevision);
             }
         }
         $em->persist($previsionDate);
         $em->persist($dataWindPrevAllPrev);
     }
     $em->flush();
 }
 static function saveDataFromArray($tableauData, $dataWindPrev, $entityManager)
 {
     // $tableauData
     // 2011-12-05 -> 13=>17.5 | 19=>12 | 22=>10
     // 2011-12-06 -> 01=>14.5 | 04=>15 ...
     $now = new \DateTime("now");
     foreach ($tableauData as $date => $lineWindData) {
         $prevDate = new PrevisionDate();
         $prevDate->setCreated($now);
         $prevDate->setDatePrev(new \DateTime($date));
         $windCalculate = array("max" => 0, "min" => 0, "cumul" => 0, "nbPrev" => 0);
         foreach ($lineWindData as $heure => $wind) {
             $prev = new Prevision();
             $prev->setOrientation('?');
             $prev->setWind($wind);
             $hour = new \DateTime();
             $hour->setTime($heure, "00");
             $prev->setTime($hour);
             WindguruGetData::calculateWind($windCalculate, $prev);
             $prev->setPrevisionDate($prevDate);
             $prevDate->addListPrevision($prev);
             $entityManager->persist($prev);
         }
         //TODO: calculate average etc...
         $prevDate->setWindAverage(0);
         if ($windCalculate["nbPrev"] > 0) {
             $prevDate->setWindAverage($windCalculate["max"] / $windCalculate["nbPrev"]);
         }
         $prevDate->setWindMax($windCalculate["max"]);
         $prevDate->setWindMin($windCalculate["min"]);
         $prevDate->setWindGauss(0);
         $prevDate->setWindMiddle(0);
         $prevDate->setDataWindPrev($dataWindPrev);
         $dataWindPrev->addListPrevisionDate($prevDate);
         $entityManager->persist($prevDate);
     }
     $entityManager->persist($dataWindPrev);
     $entityManager->flush();
 }
Exemplo n.º 3
0
 function saveData($tableauData, $dataWindPrev, $entityManager)
 {
     // $tableauData
     // 2011-12-05 -> 13=>[wind=>17.5|orientation=>NNO...] | 19=>[wind=>12|orientation=>NO...] | 22=>...
     $now = new \DateTime("now");
     $result = array();
     foreach ($tableauData as $date => $lineWindData) {
         if ($date !== 'update') {
             $prevDate = new PrevisionDate();
             $prevDate->setCreated($now);
             $prevDate->setDatePrev(new \DateTime($date));
             $windCalculate = array("max" => 0, "min" => 0, "cumul" => 0, "nbPrev" => 0);
             foreach ($lineWindData as $dataPrev) {
                 if (isset($dataPrev["wind"]) && !empty($dataPrev["wind"]) && strlen($dataPrev["wind"]) > 0) {
                     $prev = new Prevision();
                     $prev->setOrientation($dataPrev["orientation"]);
                     $prev->setWind($dataPrev["wind"]);
                     $hour = new \DateTime();
                     if (isset($dataPrev["heure"]) && !empty($dataPrev["heure"]) && strlen($dataPrev["heure"]) > 0) {
                         $hour->setTime($dataPrev["heure"], "00");
                     } else {
                         $hour->setTime("01", "00");
                     }
                     $prev->setTime($hour);
                     if (isset($dataPrev["meteo"])) {
                         $prev->setMeteo($dataPrev["meteo"]);
                     }
                     if (isset($dataPrev["precipitation"])) {
                         $prev->setPrecipitation($dataPrev["precipitation"]);
                     }
                     if (isset($dataPrev["temp"])) {
                         $prev->setTemp($dataPrev["temp"]);
                     }
                     WindFinderGetData::calculateWind($windCalculate, $prev);
                     $prev->setPrevisionDate($prevDate);
                     $prevDate->addListPrevision($prev);
                     $entityManager->persist($prevDate);
                     $entityManager->persist($prev);
                     //$entityManager->flush(); // car sinon les éléments ne sont pas obligatoirement enregistrer dans l'ordre des heures
                 }
             }
             //TODO: calculate average etc...
             $prevDate->setWindAverage(0);
             if ($windCalculate["nbPrev"] > 0) {
                 $prevDate->setWindAverage($windCalculate["max"] / $windCalculate["nbPrev"]);
             }
             $prevDate->setWindMax($windCalculate["max"]);
             $prevDate->setWindMin($windCalculate["min"]);
             $prevDate->setWindGauss(0);
             $prevDate->setWindMiddle(0);
             $prevDate->setDataWindPrev($dataWindPrev);
             $dataWindPrev->addListPrevisionDate($prevDate);
             $entityManager->persist($prevDate);
             $entityManager->flush();
             $result[] = $prevDate;
         } else {
             // last update
             if (isset($lineWindData[0]) && isset($lineWindData[0][0])) {
                 try {
                     $dataWindPrev->setLastUpdate(new \DateTime($lineWindData[0][0]));
                 } catch (\Exception $e) {
                     // DO nothing
                 }
             }
         }
     }
     //$entityManager->persist($dataWindPrev);
     //$entityManager->flush();
     return $result;
 }