Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6749 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php

declare(strict_types=1);

namespace LeadersLinked\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
//use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Laminas\Db\Adapter\AdapterInterface;

use Laminas\Log\LoggerInterface;
use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;
use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;
use LeadersLinked\Mapper\QueryMapper;
use LeadersLinked\Model\CompanyMicrolearningUserProgress;
use LeadersLinked\Mapper\EngagementMapper;
use LeadersLinked\Mapper\EngagementRecordMapper;
use LeadersLinked\Mapper\EngagementUserMapper;
use LeadersLinked\Mapper\DailyPulseEmojiMapper;
use LeadersLinked\Mapper\DailyPulseRecordMapper;
use LeadersLinked\Mapper\UserMapper;
use LeadersLinked\Model\DailyPulseRecord;
use LeadersLinked\Model\EngagementUser;
use LeadersLinked\Model\EngagementRecord;


class DailyPulseSimulateCommand extends Command
{
    /**
     *
     * @var AdapterInterface
     */
    private $adapter;
    
    
    /**
     *
     * @var  LoggerInterface
     */
    private $logger;

    /**
     *
     * @var array
     */
    private $config;
    
    
    /**
     *
     * @param AdapterInterface $adapter
     
     * @param LoggerInterface $logger
     * @param array $config
     */
     public function __construct($adapter, $logger, $config)
    {
        $this->adapter      = $adapter;
        $this->logger       = $logger;
        $this->config       = $config;
        
        parent::__construct();
    }

    
    protected function execute(InputInterface $input, OutputInterface $output) : int
    {
        
        $output->writeln('Comenzamos a generar Daily Pulse de los últimos 30 días');

        
        $company_id = 1;
        $engagementMapper = EngagementMapper::getInstance($this->adapter);
        $engagement = $engagementMapper->fetchOneByCompanyId($company_id);
        
        $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
        $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
        
        

        
        $dailyPulseEmojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
        $emojis_climate = $dailyPulseEmojiMapper->fetchAllActiveTypeClimateOnYourOrganizationByCompanyId($company_id);
        $max_emojis_climate = count($emojis_climate) - 1;
        
        $emojis_feel = $dailyPulseEmojiMapper->fetchAllActiveTypeHowAreYouFeelByCompanyId($company_id);
        $max_emojis_feel = count($emojis_feel) - 1;
        
        
        $dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
        
        
        $endDate = date('Y-m-d');
        $startDate = date('Y-m-d', strtotime('-1 MONTH'));
        
        $seed = (int) (floor(time()/86400));
        srand($seed);
        $min_users = 100;
        $max_users = 300;
        
        $queryMapper = QueryMapper::getInstance($this->adapter);
        
        
        
        $output->writeln('$startDate = ' .  $startDate); 
        $output->writeln('$endDate = ' .  $endDate); 
        
        $dt = \DateTime::createFromFormat('Y-m-d', $startDate);
        do {

            $date = $dt->format('Y-m-d');
            
            $limit = rand($min_users, $max_users);
            
            $sql  = " SELECT id FROM " . UserMapper::_TABLE;
            $sql .= " ORDER BY RAND() LIMIT $limit";
            
            $output->writeln('$sql = ' . $sql);
           
            $user_ids = [];
            
            $records = $queryMapper->fetchAllUsingParameters($sql);
            foreach($records as $record) 
            {
                array_push($user_ids, $record['id']);
            }
  
            $max = count($user_ids);
            for ($i = 0; $i < $max; $i++)
            {
                $user_id = $user_ids[$i];
                
                
                $idx = rand(0, $max_emojis_feel);
                $emoji = $emojis_feel[$idx];
                
                
                
                $dailyPulse = new DailyPulseRecord();
                $dailyPulse->company_id = $company_id;
                $dailyPulse->user_id = $user_id;
                $dailyPulse->emoji_id = $emoji->id;
                $dailyPulse->date = $date;
                $dailyPulse->type = DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL;
                $dailyPulse->engagement = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
                $dailyPulse->points = $emoji->points;
                
                $result = $dailyPulseRecordMapper->insert($dailyPulse);
                if($result) {
                    
                    
                    
                    
                    
                    $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
                    $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company_id, $user_id);
                    
                    if($engagementUser) {
                        $engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_how_are_you_feel : 0);
                        $engagementUserMapper->update( $engagementUser );
                    } else {
                        $engagementUser = new EngagementUser();
                        $engagementUser->company_id = $company_id;
                        $engagementUser->user_id = $user_id;
                        $engagementUser->points = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
                        $engagementUserMapper->insert( $engagementUser );
                    }
                    
                    $engagementRecord = new EngagementRecord();
                    $engagementRecord->company_id = $company_id;
                    $engagementRecord->user_id = $user_id;
                    $engagementRecord->date = $date;
                    $engagementRecord->points = $engagement->daily_pulse_how_are_you_feel;
                    $engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_HOW_ARE_YOU_FEEL;
                    
                    $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
                    $engagementRecordMapper->insert($engagementRecord);
                    
                  
                } 
                
            }
            
            
            $percentaje = rand(20, 80);
            
            $max = (int) (($percentaje * 100) / $max);
            for ($i = 0; $i < $max; $i++)
            {
                $user_id = $user_ids[$i];
                
                
                $idx = rand(0, $max_emojis_climate);
                $emoji = $emojis_climate[$idx];
                
                $dailyPulse = new DailyPulseRecord();
                $dailyPulse->company_id = $company_id;
                $dailyPulse->user_id = $user_id;
                $dailyPulse->emoji_id = $emoji->id;
                $dailyPulse->type = DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION;
                $dailyPulse->date = $date;
                $dailyPulse->engagement = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
                $dailyPulse->points = $emoji->points;
                
                $result = $dailyPulseRecordMapper->insert($dailyPulse);
                if($result) {
                    
                    $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
                    $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company_id, $user_id);
                    
                    if($engagementUser) {
                        $engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_climate_on_your_organization : 0);
                        $engagementUserMapper->update( $engagementUser );
                        
                    } else {
                        $engagementUser = new EngagementUser();
                        $engagementUser->company_id = $company_id;
                        $engagementUser->user_id = $user_id;
                        $engagementUser->points = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
                        $engagementUserMapper->insert( $engagementUser );
                    }
                    
                    $engagementRecord = new EngagementRecord();
                    $engagementRecord->company_id = $company_id;
                    $engagementRecord->user_id = $user_id;
                    $engagementRecord->date = $date;
                    $engagementRecord->points = $engagement->daily_pulse_climate_on_your_organization;
                    $engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_CLIMATE_ON_YOUR_ORGANIZATION;
                    
                    $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
                    $engagementRecordMapper->insert($engagementRecord);
                    

                }
                
            }
            
            
            
            
            $output->writeln('$percentaje = ' . $percentaje);
           
            
            
            
            
            $dt->add(new \DateInterval('P1D'));
            
            
        } while($date < $endDate);
        
       
        $output->writeln('Terminamos a generar Daily Pulse de los últimos 30 días');
        
        
        return 0;
    }
    
    
    
}