Rev 1 | Ir a la última revisión | 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 LeadersLinked\Cache\CacheInterface;use Laminas\Log\LoggerInterface;use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;use LeadersLinked\Mapper\QueryMapper;use LeadersLinked\Model\CompanyMicrolearningUserProgress;class RecalculateMicrolearningProgressCommand extends Command{/**** @var AdapterInterface*/private $adapter;/**** @var CacheInterface*/private $cache;/**** @var LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @param AdapterInterface $adapter* @param CacheInterface $cache* @param LoggerInterface $logger* @param array $config*/public function __construct($adapter, $cache, $logger, $config){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;parent::__construct();}protected function execute(InputInterface $input, OutputInterface $output) : int{/***** INICIO TOPICOS DUPLICADOS *****/$output->writeln('Comenzamos a buscar los registros duplicados de los Tópicos');$queryMapper = QueryMapper::getInstance($this->adapter);$sql = " SELECT DISTINCT(user_id) AS user_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;echo $sql . PHP_EOL;$record_users = $queryMapper->fetchAllUsingParameters($sql);foreach($record_users as $record_user){$user_id = $record_user['user_id'];$sql = " SELECT DISTINCT(topic_id) AS topic_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_TOPIC . "' ";$sql .= " AND user_id = $user_id";echo $sql . PHP_EOL;$records_topic = $queryMapper->fetchAllUsingParameters($sql);foreach($records_topic as $record_topic){$topic_id = $record_topic['topic_id'];$sql = " SELECT id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_TOPIC . "' ";$sql .= " AND user_id = $user_id";$sql .= " AND topic_id = $topic_id";$sql .= " ORDER BY completed DESC LIMIT 0, 1";echo $sql . PHP_EOL;$record = $queryMapper->fetchOneUsingParameters($sql);$id = $record['id'];$sql = " DELETE FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_TOPIC ."' ";$sql .= " AND user_id = $user_id ";$sql .= " AND topic_id = $topic_id ";$sql .= " AND id <> $id ";echo $sql . PHP_EOL;$queryMapper->delete($sql);}}$output->writeln('Terminamos de procesar los registros duplicados de los Tópicos');/***** FIN TOPICOS DUPLICADOS *****//***** INICIO CAPSULAS DUPLICADOS *****/$output->writeln('Comenzamos a buscar los registros duplicados de las Capsulas');$queryMapper = QueryMapper::getInstance($this->adapter);$sql = " SELECT DISTINCT(user_id) AS user_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;echo $sql . PHP_EOL;$record_users = $queryMapper->fetchAllUsingParameters($sql);foreach($record_users as $record_user){$user_id = $record_user['user_id'];$sql = " SELECT DISTINCT(capsule_id) AS capsule_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_CAPSULE . "' ";$sql .= " AND user_id = $user_id";echo $sql . PHP_EOL;$records_capsule = $queryMapper->fetchAllUsingParameters($sql);foreach($records_capsule as $record_capsule){$capsule_id = $record_capsule['capsule_id'];$sql = " SELECT id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_CAPSULE . "' ";$sql .= " AND user_id = $user_id";$sql .= " AND capsule_id = $capsule_id";$sql .= " ORDER BY completed DESC LIMIT 0, 1";echo $sql . PHP_EOL;$record = $queryMapper->fetchOneUsingParameters($sql);$id = $record['id'];$sql = " DELETE FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_CAPSULE ."' ";$sql .= " AND user_id = $user_id ";$sql .= " AND capsule_id = $capsule_id ";$sql .= " AND id <> $id ";echo $sql . PHP_EOL;$queryMapper->delete($sql);}}$output->writeln('Terminamos de procesar los registros duplicados de las Capsulas');/***** FIN CAPSULAS DUPLICADOS *****//***** INICIO DIAPOSITIVAS DUPLICADOS *****/$output->writeln('Comenzamos a buscar los registros duplicados de las Diapositivas');$queryMapper = QueryMapper::getInstance($this->adapter);$sql = " SELECT DISTINCT(user_id) AS user_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;echo $sql . PHP_EOL;$record_users = $queryMapper->fetchAllUsingParameters($sql);foreach($record_users as $record_user){$user_id = $record_user['user_id'];$sql = " SELECT DISTINCT(slide_id) AS slide_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_SLIDE . "' ";$sql .= " AND user_id = $user_id";echo $sql . PHP_EOL;$records_slides = $queryMapper->fetchAllUsingParameters($sql);foreach($records_slides as $record_slide){$slide_id = $record_slide['slide_id'];$sql = " SELECT id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_SLIDE . "' ";$sql .= " AND user_id = $user_id";$sql .= " AND slide_id = $slide_id";$sql .= " ORDER BY completed DESC LIMIT 0, 1";echo $sql . PHP_EOL;$record = $queryMapper->fetchOneUsingParameters($sql);$id = $record['id'];$sql = " DELETE FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_SLIDE ."' ";$sql .= " AND user_id = $user_id ";$sql .= " AND slide_id = $slide_id ";$sql .= " AND id <> $id ";echo $sql . PHP_EOL;$queryMapper->delete($sql);}}$output->writeln('Terminamos de procesar los registros duplicados de las Diapositivas');/***** FIN DIAPOSITIVAS DUPLICADOS *****/$progressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);$slideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);$output->writeln('Recalculo del progreso de los Tópicos');$records = $progressMapper->fetchAllTopics();// print_r($records); exit;foreach($records as $record){ $total_slides = $slideMapper->fetchTotalCountByCompanyIdAndTopicId($record->company_id,$record->topic_id);$view_slides = $progressMapper->fetchCountAllSlideCompletedByUserIdAndTopicId($record->user_id, $record->topic_id);$record->total_slides = $total_slides;$record->view_slides = $view_slides;$record->progress = $total_slides > 0 ? (($view_slides * 100) / $total_slides) : 0;$sql = " UPDATE " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " SET progress = " . $record->progress;$sql .= " , total_slides = " . $total_slides;$sql .= " , view_slides = " . $view_slides;$sql .= " WHERE id = " . $record->id;echo $sql . PHP_EOL;$queryMapper->update($sql);}$output->writeln('Inicio del proceso de Recalculo de las Capsulas');$records = $progressMapper->fetchAllCapsules();foreach($records as $record){$total_slides = $slideMapper->fetchTotalCountByCompanyIdAndTopicIdAndCapsuleId($record->company_id, $record->topic_id, $record->capsule_id);$view_slides = $progressMapper->fetchCountAllSlideCompletedByUserIdAndTopicIdAndCapsuleId($record->user_id, $record->topic_id, $record->capsule_id);$record->total_slides = $total_slides;$record->view_slides = $view_slides;$record->progress = $total_slides > 0 ? (($view_slides * 100) / $total_slides) : 0;$sql = " UPDATE " . CompanyMicrolearningUserProgressMapper::_TABLE;$sql .= " SET progress = " . $record->progress;$sql .= " , total_slides = " . $total_slides;$sql .= " , view_slides = " . $view_slides;$sql .= " WHERE id = " . $record->id;echo $sql . PHP_EOL;$queryMapper->update($sql);//$progressMapper->update($record);}$output->writeln('Fin del proceso de Recalculo');return 0;}}