/**
  * @param Pantheon $community
  * @param OutputInterface    $output
  */
 private function updateCommunityDateStat(Pantheon $community, OutputInterface $output)
 {
     $this->logger->addInfo(sprintf('Update community "%s" with id %s', $community->getName(), $community->getId()));
     $today = new \DateTime('-4 hour');
     /** @var PantheonDateStat[] $communityDateStat */
     $communityDateStat = $community->getDateStat();
     if (count($communityDateStat) && $communityDateStat->first()->getDate()->format('Y:m:d') == $today->format('Y:m:d')) {
         $this->logger->addInfo(sprintf('Community "%s" with id %s already parsed today', $community->getName(), $community->getId()));
         return;
     }
     $aggregator = array('sumPrestige' => 0, 'maxPrestige' => 0, 'pveSumMobKills' => 0, 'pveSumBossKills' => 0, 'pveSumDeaths' => 0, 'pvpSumTime' => 0, 'pvpSumKills' => 0, 'pvpSumDeaths' => 0, 'pvpSumAssists' => 0);
     /** @var Player $member */
     foreach ($community->getMembers() as $member) {
         if (!count($member->getDateStat())) {
             continue;
         }
         /** @var PlayerDateStat $lastPlayerDateStat */
         $lastPlayerDateStat = $member->getDateStat()->first();
         $aggregator['sumPrestige'] += $lastPlayerDateStat->getMaxPrestige();
         $aggregator['maxPrestige'] = $aggregator['maxPrestige'] < $lastPlayerDateStat->getMaxPrestige() ? $lastPlayerDateStat->getMaxPrestige() : $aggregator['maxPrestige'];
         $aggregator['pvpSumTime'] += $lastPlayerDateStat->getPvpTime();
         //            $aggregator['pveSumTime'] += $lastPlayerDateStat->getPveTime();
         foreach ($member->getRoleStat() as $role) {
             $aggregator['pveSumMobKills'] += $role->getPveMobKills();
             $aggregator['pveSumBossKills'] += $role->getPveBossKills();
             $aggregator['pveSumDeaths'] += $role->getPveDeaths();
             $aggregator['pvpSumKills'] += $role->getPvpKills();
             $aggregator['pvpSumDeaths'] += $role->getPvpDeaths();
             $aggregator['pvpSumAssists'] += $role->getPvpAssists();
         }
     }
     $newPantheonDateStat = new PantheonDateStat();
     $newPantheonDateStat->setPantheon($community)->setDate($today)->setSumPrestige($aggregator['sumPrestige'])->setAvgPrestige(count($community->getMembers()) ? round($aggregator['sumPrestige'] / count($community->getMembers())) : 0)->setMembersCount(count($community->getMembers()))->setMaxPrestige($aggregator['maxPrestige'])->setPveSumMobKills($aggregator['pveSumMobKills'])->setPveSumBossKills($aggregator['pveSumBossKills'])->setPveSumDeaths($aggregator['pveSumDeaths'])->setPvpSumTime($aggregator['pvpSumTime'])->setPvpSumKills($aggregator['pvpSumKills'])->setPvpSumDeaths($aggregator['pvpSumDeaths'])->setPvpSumAssists($aggregator['pvpSumAssists']);
     $this->em->persist($newPantheonDateStat);
 }
 public function findWithDateStatByPantheon(Pantheon $pantheon)
 {
     $dql = '
         select
             p.*,
             pds.*
         from Erliz\\SkyforgeBundle\\Entity\\Player p
             left join (select player, MAX(max_prestige) max_prestige from Erliz\\SkyforgeBundle\\Entity\\PlayerDateStat group by player) m_pds
             left join Erliz\\SkyforgeBundle\\Entity\\PlayerDateStat pds on pds.max_prestige = m_pds.max_prestige and pds.player = p.id
         where p.pantheon = :pantheonId
         group by p.id
         order by pds.max_prestige DESC
     ';
     $params = array(':pantheonId' => $pantheon->getId());
     return new PlayerCollection($this->getEntityManager()->createQuery($dql)->setParameters($params)->useResultCache(true)->setResultCacheLifetime(1800)->getResult(Query::HYDRATE_ARRAY));
 }