From 0d7002b17343e7503fdf46928c224c9f6b9931af Mon Sep 17 00:00:00 2001 From: Schneider Roland Date: Thu, 11 May 2023 18:20:56 +0200 Subject: [PATCH] improve cutlergyor move --- ...Manager.php => CutlerMovarDoorManager.php} | 89 +++---------------- common/manager/KeyDoorManager.php | 3 +- common/models/DoorManagerLog.php | 2 +- docker/fitness/.env | 2 +- door-api.http | 8 +- rest/controllers/DoorController.php | 6 +- 6 files changed, 22 insertions(+), 88 deletions(-) rename common/manager/{DoorCardPassDoorManager.php => CutlerMovarDoorManager.php} (83%) diff --git a/common/manager/DoorCardPassDoorManager.php b/common/manager/CutlerMovarDoorManager.php similarity index 83% rename from common/manager/DoorCardPassDoorManager.php rename to common/manager/CutlerMovarDoorManager.php index 4fa8264..d80d403 100644 --- a/common/manager/DoorCardPassDoorManager.php +++ b/common/manager/CutlerMovarDoorManager.php @@ -29,7 +29,7 @@ use yii\web\ServerErrorHttpException; * Date: 2018.12.17. * Time: 6:12 */ -class DoorCardPassDoorManager extends BaseObject +class CutlerMovarDoorManager extends BaseObject { /** @@ -139,7 +139,9 @@ class DoorCardPassDoorManager extends BaseObject ); } \Yii::info("$requestId: card loaded in sec " . $stopWatch->split()); - $virtualKey = VirtualKey::findOne(['id_card' => $card->id_card]); + $virtualKey = VirtualKey::find() + ->andWhere(['id_card' => $card->id_card]) + ->orderBy(['id' => SORT_DESC])->one(); \Yii::info("$requestId: virtual key for card loaded in sec " . $stopWatch->split()); } @@ -454,87 +456,18 @@ class DoorCardPassDoorManager extends BaseObject // detect if need to increase usage count for ticket if (!$ctx->verifyOnly) { - $ctx->virtualKey->direction_in_at = Helper::getDateTimeString(); \Yii::info("$ctx->requestId: Setting virtual key direction_in_at"); \Yii::info("$ctx->requestId: Updating virtual key"); $ctx->virtualKey->save(false); - - $allDoorLogToday = DoorManagerLog::findAllEntryForTicketFromTime($ctx->ticket->id_ticket); - $countDoorLogsForTicketSince = count($allDoorLogToday); - // if the current event is the first door log today - if ($countDoorLogsForTicketSince == 0) { - // increase the ticket usage count with 1 - $usageCount = $ticket->usage_count; - $ctx->increasedTicketUsageCount = true; - $ticket->usage_count += 1; - $ticket->save(false); - \Yii::info("$ctx->requestId: First ticket usage today, increasing usage count for card: " . $ctx->card->id_card); - Log::log( - [ - 'type' => Log::$TYPE_TICKET_USAGE_FIRST, - 'message' => 'Bérlet használat(előtte: ' . $usageCount . ' -> utána: ' . $ticket->usage_count, - 'id_ticket' => $ticket->id_ticket, - 'id_door_log' => $doorLog->id_door_log - ] - ); - \Yii::info("$ctx->requestId: Ticket usage count increased after first doorlog of day in sec " . $stopWatch->split()); - $ctx->actions[] = "TICKET_FIRST_USAGE_TODAY"; - - } else { - \Yii::info("$ctx->requestId: more then one door log today for card: " . $ctx->card->id_card); - // we have already a door log for today, other than this - // Now we split the day into 3hour intervalls, starting with the createdAt value of the first event. - // If the actual event happens in an interval, in which still now doorlog event happend, we increase - // the usage count with 1 - // 3 óránként 1-et levonunk - - - if (count($allDoorLogToday) == 0) { - throw new FitnessException( - "$ctx->requestId: Tried to inc ticket usage without prev entry: " . $ctx->identifier . '/' . $ctx->virtualKey->id_card, - FitnessException::TYPE_BAD_REQUEST, - "INVALID_TICKET_USAGE_INCREMENT", - $ctx - ); - } - - $firstInToday = $allDoorLogToday[0]; - \Yii::info("$ctx->requestId: first in today for card: " . $ctx->card->id_card . " was at " . $firstInToday->created_at); - $firstEntryDateTimeToday = DateUtil::parseDateTime($firstInToday->created_at); - $interval = \DateInterval::createFromDateString('3 hours'); - $startOfTomorrow = DateUtil::tomorrowStart(clone $ctx->date); - $daterange = new \DatePeriod($firstEntryDateTimeToday, $interval, $startOfTomorrow); - - $intervals = []; - $intervalStart = null; - foreach ($daterange as $intervalEnd) { - if (isset($intervalStart)) { - $intervals[] = $this->createTicketUsageInterval($intervalStart, $intervalEnd, $allDoorLogToday, $doorLog); - } - $intervalStart = clone $intervalEnd; - } - - if ($intervalStart < $startOfTomorrow) { - $intervals[] = $this->createTicketUsageInterval($intervalStart, $startOfTomorrow, $allDoorLogToday, $doorLog); - } - - $activeInterval = $this->getActiveInterval($intervals, $ctx->createdAt); - if (!isset($activeInterval)) { - throw new ServerErrorHttpException("$ctx->requestId: Active Interval not found"); - } - - $logCountInActiveInterval = count($activeInterval['logs']); - - if ($logCountInActiveInterval == 1) { - $ctx->increasedTicketUsageCount = true; - $ticket->usage_count = $ticket->usage_count + 1; - $ticket->save(false); - \Yii::info("$ctx->requestId: Ticket usage count increased after first IN after first door_log in interval in sec " . $stopWatch->split()); - $ctx->actions[] = "TICKET_INCREASE_USAGE"; - } - } + // increase the ticket usage count with 1 + $usageCount = $ticket->usage_count; + $ctx->increasedTicketUsageCount = true; + $ticket->usage_count += 1; + $ticket->save(false); + \Yii::info("$ctx->requestId: First ticket usage today, increasing usage count for card: " . $ctx->card->id_card); + \Yii::info("$ctx->requestId: Ticket usage count increased after first doorlog of day in sec " . $stopWatch->split()); } $ctx->actions[] = "MOVE_IN"; } diff --git a/common/manager/KeyDoorManager.php b/common/manager/KeyDoorManager.php index 289df66..5354eac 100644 --- a/common/manager/KeyDoorManager.php +++ b/common/manager/KeyDoorManager.php @@ -511,7 +511,7 @@ class KeyDoorManager extends BaseObject } // virtual_key: only one move out is allowed - if (!isset($ctx->virtualKey->direction_out_at)) { + if (isset($ctx->virtualKey->direction_out_at)) { throw new FitnessException( "$ctx->requestId: virtual key already out. Only one move out allowed.", FitnessException::TYPE_BAD_REQUEST, @@ -559,6 +559,7 @@ class KeyDoorManager extends BaseObject (\Exception $e) { $this->doRollback(); Yii::info("$ctx->requestId: rollbacked"); + Yii::error($e->getMessage()); throw new FitnessException( "UNKNOWN_ERROR", FitnessException::UNKNOWN_ERROR, diff --git a/common/models/DoorManagerLog.php b/common/models/DoorManagerLog.php index 4c3dbcf..efab848 100644 --- a/common/models/DoorManagerLog.php +++ b/common/models/DoorManagerLog.php @@ -74,7 +74,7 @@ class DoorManagerLog extends \yii\db\ActiveRecord static function findAllEntryForTicketFromTime($idTicket, $datetime = null){ return DoorManagerLog::find() - ->andWhere(['id_ticket' =>$idTicket]) + ->andWhere(['ticket_id_ticket' =>$idTicket]) ->andWhere(['verify_only' => false]) ->andWhere(['direction' => 'IN']) ->andWhere(['>=' ,'created_at', isset( $datetime ) ? $datetime : date('Y-m-d H:i:s')]) diff --git a/docker/fitness/.env b/docker/fitness/.env index 53b8eac..7ea26a6 100644 --- a/docker/fitness/.env +++ b/docker/fitness/.env @@ -1,3 +1,3 @@ FITNESS_REST_ALLOW_VERIFY_ONLY=true -DOOR_ENTRY_STRATEGY=door_pass +#DOOR_ENTRY_STRATEGY=door_pass FITNESS_WORD_TYPED_LISTENER_ALLOWED_ONLY_FOR_EMPTY_CUSTOMER=0 \ No newline at end of file diff --git a/door-api.http b/door-api.http index 9a52527..2fd0b3a 100644 --- a/door-api.http +++ b/door-api.http @@ -30,7 +30,7 @@ Content-Type: application/json Authorization: Basic ZG9vcl9zeXN0ZW06ZG9vcnN5c3RlbTE= { - "cardNumber": "63f3e0cd399f55.53162649", + "cardNumber": "645d141791b4c0.80321051", "direction": "IN", "device": "Q", "validateOnly": false @@ -44,7 +44,7 @@ Content-Type: application/json Authorization: Basic ZG9vcl9zeXN0ZW06ZG9vcnN5c3RlbTE= { - "cardNumber": "63f3e0cd399f55.53162649", + "cardNumber": "645d141791b4c0.80321051", "direction": "OUT", "device": "Q", "validateOnly": false @@ -58,7 +58,7 @@ Content-Type: application/json Authorization: Basic ZG9vcl9zeXN0ZW06ZG9vcnN5c3RlbTE= { - "cardNumber": "123456", + "cardNumber": "10WMVXMZ", "direction": "IN", "device": "C", "validateOnly": false @@ -72,7 +72,7 @@ Content-Type: application/json Authorization: Basic ZG9vcl9zeXN0ZW06ZG9vcnN5c3RlbTE= { - "cardNumber": "123456", + "cardNumber": "10WMVXMZ", "direction": "OUT", "device": "C", "validateOnly": false diff --git a/rest/controllers/DoorController.php b/rest/controllers/DoorController.php index eb282c1..9b68c8e 100644 --- a/rest/controllers/DoorController.php +++ b/rest/controllers/DoorController.php @@ -2,7 +2,7 @@ namespace rest\controllers; -use common\manager\DoorCardPassDoorManager; +use common\manager\CutlerMovarDoorManager; use common\manager\KeyDoorManager; use rest\models\DoorMoveForm; use Yii; @@ -25,7 +25,7 @@ class DoorController extends RestController return $formModel; } - public function actionMoveMovar() + public function actionMoveCutlerMovar() { $formModel = new DoorMoveForm(); if ($formModel->load(Yii::$app->request->post(),"") ) { @@ -33,7 +33,7 @@ class DoorController extends RestController $keys = array_keys($formModel->getFirstErrors()); throw new BadRequestHttpException("Invalid move request:". $formModel->getFirstErrors()[$keys[0]]); } - $doorManager = new DoorCardPassDoorManager(); + $doorManager = new CutlerMovarDoorManager(); $doorManager->move($formModel->cardNumber,$formModel->device,$formModel->direction, $formModel->validateOnly, $formModel->createdAt, $formModel->date); } return $formModel;