Proyectos de Subversion LeadersLinked - Services

Rev

Rev 1 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
345 www 2
declare(strict_types = 1);
1 efrain 3
namespace LeadersLinked\Command;
4
 
5
use Symfony\Component\Console\Command\Command;
6
use Symfony\Component\Console\Input\InputInterface;
345 www 7
// use Symfony\Component\Console\Input\InputOption;
1 efrain 8
use Symfony\Component\Console\Output\OutputInterface;
9
use Laminas\Db\Adapter\AdapterInterface;
10
use Laminas\Log\LoggerInterface;
11
use LeadersLinked\Mapper\QueryMapper;
12
use LeadersLinked\Mapper\EngagementMapper;
13
use LeadersLinked\Mapper\EngagementRecordMapper;
14
use LeadersLinked\Mapper\EngagementUserMapper;
15
use LeadersLinked\Mapper\DailyPulseEmojiMapper;
16
use LeadersLinked\Mapper\DailyPulseRecordMapper;
17
use LeadersLinked\Mapper\UserMapper;
18
use LeadersLinked\Model\DailyPulseRecord;
19
use LeadersLinked\Model\EngagementUser;
20
use LeadersLinked\Model\EngagementRecord;
21
use Laminas\Mvc\I18n\Translator;
22
use LeadersLinked\Cache\CacheInterface;
23
 
24
class DailyPulseSimulateCommand extends Command
25
{
345 www 26
 
1 efrain 27
    /**
28
     *
29
     * @var \Laminas\Db\Adapter\AdapterInterface
30
     */
31
    private $adapter;
345 www 32
 
1 efrain 33
    /**
34
     *
35
     * @var \LeadersLinked\Cache\CacheInterface
36
     */
37
    private $cache;
345 www 38
 
1 efrain 39
    /**
40
     *
41
     * @var \Laminas\Log\LoggerInterface
42
     */
43
    private $logger;
345 www 44
 
1 efrain 45
    /**
46
     *
47
     * @var array
48
     */
49
    private $config;
345 www 50
 
1 efrain 51
    /**
52
     *
53
     * @var \Laminas\Mvc\I18n\Translator
54
     */
55
    private $translator;
345 www 56
 
1 efrain 57
    /**
58
     *
59
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
60
     * @param \LeadersLinked\Cache\CacheInterface $cache
345 www 61
     * @param
62
     *            \Laminas\Log\LoggerInterface
1 efrain 63
     * @param array $config
64
     * @param \Laminas\Mvc\I18n\Translator $translator
65
     */
66
    public function __construct($adapter, $cache, $logger, $config, $translator)
67
    {
345 www 68
        $this->adapter = $adapter;
69
        $this->cache = $cache;
70
        $this->logger = $logger;
71
        $this->config = $config;
72
        $this->translator = $translator;
73
 
1 efrain 74
        parent::__construct();
75
    }
345 www 76
 
77
    protected function execute(InputInterface $input, OutputInterface $output): int
1 efrain 78
    {
79
        $output->writeln('Comenzamos a generar Daily Pulse de los últimos 30 días');
80
 
81
        $company_id = 1;
82
        $engagementMapper = EngagementMapper::getInstance($this->adapter);
83
        $engagement = $engagementMapper->fetchOneByCompanyId($company_id);
345 www 84
 
1 efrain 85
        $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
86
        $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
87
 
88
        $dailyPulseEmojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
89
        $emojis_climate = $dailyPulseEmojiMapper->fetchAllActiveTypeClimateOnYourOrganizationByCompanyId($company_id);
90
        $max_emojis_climate = count($emojis_climate) - 1;
345 www 91
 
1 efrain 92
        $emojis_feel = $dailyPulseEmojiMapper->fetchAllActiveTypeHowAreYouFeelByCompanyId($company_id);
93
        $max_emojis_feel = count($emojis_feel) - 1;
345 www 94
 
1 efrain 95
        $dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
345 www 96
 
1 efrain 97
        $endDate = date('Y-m-d');
98
        $startDate = date('Y-m-d', strtotime('-1 MONTH'));
345 www 99
 
100
        $seed = (int) (floor(time() / 86400));
1 efrain 101
        srand($seed);
102
        $min_users = 100;
103
        $max_users = 300;
345 www 104
 
1 efrain 105
        $queryMapper = QueryMapper::getInstance($this->adapter);
345 www 106
 
107
        $output->writeln('$startDate = ' . $startDate);
108
        $output->writeln('$endDate = ' . $endDate);
109
 
1 efrain 110
        $dt = \DateTime::createFromFormat('Y-m-d', $startDate);
111
        do {
112
 
113
            $date = $dt->format('Y-m-d');
345 www 114
 
1 efrain 115
            $limit = rand($min_users, $max_users);
345 www 116
 
117
            $sql = " SELECT id FROM " . UserMapper::_TABLE;
1 efrain 118
            $sql .= " ORDER BY RAND() LIMIT $limit";
345 www 119
 
1 efrain 120
            $output->writeln('$sql = ' . $sql);
345 www 121
 
1 efrain 122
            $user_ids = [];
345 www 123
 
1 efrain 124
            $records = $queryMapper->fetchAllUsingParameters($sql);
345 www 125
            foreach ($records as $record) {
1 efrain 126
                array_push($user_ids, $record['id']);
127
            }
345 www 128
 
1 efrain 129
            $max = count($user_ids);
345 www 130
            for ($i = 0; $i < $max; $i ++) {
1 efrain 131
                $user_id = $user_ids[$i];
345 www 132
 
1 efrain 133
                $idx = rand(0, $max_emojis_feel);
134
                $emoji = $emojis_feel[$idx];
345 www 135
 
1 efrain 136
                $dailyPulse = new DailyPulseRecord();
137
                $dailyPulse->company_id = $company_id;
138
                $dailyPulse->user_id = $user_id;
139
                $dailyPulse->emoji_id = $emoji->id;
140
                $dailyPulse->date = $date;
141
                $dailyPulse->type = DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL;
142
                $dailyPulse->engagement = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
143
                $dailyPulse->points = $emoji->points;
345 www 144
 
1 efrain 145
                $result = $dailyPulseRecordMapper->insert($dailyPulse);
345 www 146
                if ($result) {
147
 
1 efrain 148
                    $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
149
                    $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company_id, $user_id);
345 www 150
 
151
                    if ($engagementUser) {
1 efrain 152
                        $engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_how_are_you_feel : 0);
345 www 153
                        $engagementUserMapper->update($engagementUser);
1 efrain 154
                    } else {
155
                        $engagementUser = new EngagementUser();
156
                        $engagementUser->company_id = $company_id;
157
                        $engagementUser->user_id = $user_id;
158
                        $engagementUser->points = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
345 www 159
                        $engagementUserMapper->insert($engagementUser);
1 efrain 160
                    }
345 www 161
 
1 efrain 162
                    $engagementRecord = new EngagementRecord();
163
                    $engagementRecord->company_id = $company_id;
164
                    $engagementRecord->user_id = $user_id;
165
                    $engagementRecord->date = $date;
166
                    $engagementRecord->points = $engagement->daily_pulse_how_are_you_feel;
167
                    $engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_HOW_ARE_YOU_FEEL;
345 www 168
 
1 efrain 169
                    $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
170
                    $engagementRecordMapper->insert($engagementRecord);
345 www 171
                }
1 efrain 172
            }
345 www 173
 
1 efrain 174
            $percentaje = rand(20, 80);
345 www 175
 
1 efrain 176
            $max = (int) (($percentaje * 100) / $max);
345 www 177
            for ($i = 0; $i < $max; $i ++) {
1 efrain 178
                $user_id = $user_ids[$i];
345 www 179
 
1 efrain 180
                $idx = rand(0, $max_emojis_climate);
181
                $emoji = $emojis_climate[$idx];
345 www 182
 
1 efrain 183
                $dailyPulse = new DailyPulseRecord();
184
                $dailyPulse->company_id = $company_id;
185
                $dailyPulse->user_id = $user_id;
186
                $dailyPulse->emoji_id = $emoji->id;
187
                $dailyPulse->type = DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION;
188
                $dailyPulse->date = $date;
189
                $dailyPulse->engagement = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
190
                $dailyPulse->points = $emoji->points;
345 www 191
 
1 efrain 192
                $result = $dailyPulseRecordMapper->insert($dailyPulse);
345 www 193
                if ($result) {
194
 
1 efrain 195
                    $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
196
                    $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company_id, $user_id);
345 www 197
 
198
                    if ($engagementUser) {
1 efrain 199
                        $engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_climate_on_your_organization : 0);
345 www 200
                        $engagementUserMapper->update($engagementUser);
1 efrain 201
                    } else {
202
                        $engagementUser = new EngagementUser();
203
                        $engagementUser->company_id = $company_id;
204
                        $engagementUser->user_id = $user_id;
205
                        $engagementUser->points = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
345 www 206
                        $engagementUserMapper->insert($engagementUser);
1 efrain 207
                    }
345 www 208
 
1 efrain 209
                    $engagementRecord = new EngagementRecord();
210
                    $engagementRecord->company_id = $company_id;
211
                    $engagementRecord->user_id = $user_id;
212
                    $engagementRecord->date = $date;
213
                    $engagementRecord->points = $engagement->daily_pulse_climate_on_your_organization;
214
                    $engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_CLIMATE_ON_YOUR_ORGANIZATION;
345 www 215
 
1 efrain 216
                    $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
217
                    $engagementRecordMapper->insert($engagementRecord);
218
                }
219
            }
345 www 220
 
1 efrain 221
            $output->writeln('$percentaje = ' . $percentaje);
345 www 222
 
1 efrain 223
            $dt->add(new \DateInterval('P1D'));
345 www 224
        } while ($date < $endDate);
225
 
1 efrain 226
        $output->writeln('Terminamos a generar Daily Pulse de los últimos 30 días');
345 www 227
 
1 efrain 228
        return 0;
229
    }
230
}