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;
}
}