Rev 6849 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(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\QueryMapper;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;use Laminas\Mvc\I18n\Translator;use LeadersLinked\Cache\CacheInterface;class DailyPulseSimulateCommand extends Command{/**** @var \Laminas\Db\Adapter\AdapterInterface*/private $adapter;/**** @var \LeadersLinked\Cache\CacheInterface*/private $cache;/**** @var \Laminas\Log\LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var \Laminas\Mvc\I18n\Translator*/private $translator;/**** @param \Laminas\Db\Adapter\AdapterInterface $adapter* @param \LeadersLinked\Cache\CacheInterface $cache* @param \Laminas\Log\LoggerInterface* @param array $config* @param \Laminas\Mvc\I18n\Translator $translator*/public function __construct($adapter, $cache, $logger, $config, $translator){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;$this->translator = $translator;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;}}