Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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