Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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