From 5039b830be99ae32e9a189eb001dbdc75e3b860b Mon Sep 17 00:00:00 2001 From: fomichev Date: Wed, 5 Feb 2025 21:46:43 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81=D0=B0?= =?utf8?q?=D0=BB=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?utf8?q?=D0=B5=20=D0=B1=D0=BE=D0=BD=D1=83=D1=81=D0=BD=D0=BE=D0=B3=D0=BE?= =?utf8?q?=20=D1=83=D1=80=D0=BE=D0=B2=D0=BD=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/api2/controllers/BonusController.php | 119 ++++++++++----------- 1 file changed, 57 insertions(+), 62 deletions(-) diff --git a/erp24/api2/controllers/BonusController.php b/erp24/api2/controllers/BonusController.php index fd146f18..f94ee3d7 100644 --- a/erp24/api2/controllers/BonusController.php +++ b/erp24/api2/controllers/BonusController.php @@ -1194,10 +1194,40 @@ class BonusController extends BaseController return $this->asJson($mess); } + /** + * Создаёт новую запись в таблице UsersBonusLevels. + * + * @param Users $user + * @param string $bonusLevel + * @param string $check_id + * @param string $check_name + * @param string $createdAt + * @return bool + */ + protected function createBonusHistoryRecord($user, $bonusLevel, $check_id, $check_name, $createdAt) + { + $bonusRecord = new UsersBonusLevels(); + $bonusRecord->phone = $user->phone; + $bonusRecord->user_id = $user->id; + $bonusRecord->bonus_level = $bonusLevel; + $bonusRecord->created_at = $createdAt; + $bonusRecord->check_id = $check_id; + $bonusRecord->check_name = $check_name; + $bonusRecord->active = 1; + + if (!$bonusRecord->save()) { + LogService::apiErrorLog( + json_encode(["error_id" => 100, "error" => $bonusRecord->getErrors()], JSON_UNESCAPED_UNICODE) + ); + return false; + } + return true; + } + /** * Обновляет бонусный уровень пользователя. * - * @param Users $user Модель пользователя. + * @param Users $user Модель пользователя. * @param float $sale_price Текущая сумма покупок. * @param string $check_id Идентификатор чека. * @param string $check_name Имя (номер) чека. @@ -1209,80 +1239,45 @@ class BonusController extends BaseController ->orderBy(['threshold' => SORT_ASC]) ->all(); - $newBonusLevel = null; - + $computedBonusLevel = null; foreach ($bonusLevels as $level) { if ($sale_price > $level->threshold) { - $newBonusLevel = $level->alias; + $computedBonusLevel = $level->alias; } } + $newBonusLevel = $computedBonusLevel ?? 'silver'; - if (empty($user->bonus_level)) { - $existingLevel = UsersBonusLevels::find() - ->where(['or', ['phone' => $user->phone], ['user_id' => $user->id]]) - ->andWhere(['active' => 1]) - ->one(); - - if (!$existingLevel && $newBonusLevel) { - $user->bonus_level = $newBonusLevel; - if (!$user->save()) { - LogService::apiErrorLog( - json_encode(["error_id" => 6.1, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE) - ); - } + $existingHistoryLevel = UsersBonusLevels::find() + ->where(['or', ['phone' => $user->phone], ['user_id' => $user->id]]) + ->andWhere(['active' => 1]) + ->one(); - $bonusRecord = new UsersBonusLevels(); - $bonusRecord->phone = $user->phone; - $bonusRecord->user_id = $user->id; - $bonusRecord->bonus_level = $newBonusLevel; - $bonusRecord->created_at = date('Y-m-d H:i:s'); - $bonusRecord->check_id = $check_id; // используем значения из запроса - $bonusRecord->check_name = $check_name; // используем значения из запроса - $bonusRecord->active = 1; + $now = date('Y-m-d H:i:s'); - if (!$bonusRecord->save()) { - LogService::apiErrorLog( - json_encode(["error_id" => 7.1, "error" => $bonusRecord->getErrors()], JSON_UNESCAPED_UNICODE) - ); - } + if (empty($user->bonus_level) || $user->bonus_level !== $newBonusLevel) { + $user->bonus_level = $newBonusLevel; + if (!$user->save()) { + LogService::apiErrorLog( + json_encode(["error_id" => 6.1, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE) + ); } - } else { - $activeLevel = UsersBonusLevels::find() - ->where(['or', ['phone' => $user->phone], ['user_id' => $user->id]]) - ->andWhere(['active' => 1]) - ->one(); - - if ($newBonusLevel && $activeLevel && $activeLevel->bonus_level !== $newBonusLevel) { - $activeLevel->active = 0; - $activeLevel->updated_at = date('Y-m-d H:i:s'); - if (!$activeLevel->save()) { - LogService::apiErrorLog( - json_encode(["error_id" => 6.2, "error" => $activeLevel->getErrors()], JSON_UNESCAPED_UNICODE) - ); - } - $bonusRecord = new UsersBonusLevels(); - $bonusRecord->phone = $user->phone; - $bonusRecord->user_id = $user->id; - $bonusRecord->bonus_level = $newBonusLevel; - $bonusRecord->created_at = date('Y-m-d H:i:s'); - $bonusRecord->check_id = $check_id; - $bonusRecord->check_name = $check_name; - $bonusRecord->active = 1; - - if (!$bonusRecord->save()) { - LogService::apiErrorLog( - json_encode(["error_id" => 6.3, "error" => $bonusRecord->getErrors()], JSON_UNESCAPED_UNICODE) - ); - } - - $user->bonus_level = $newBonusLevel; - if (!$user->save()) { + if ($existingHistoryLevel) { + $existingHistoryLevel->active = 0; + $existingHistoryLevel->updated_at = $now; + if (!$existingHistoryLevel->save()) { LogService::apiErrorLog( - json_encode(["error_id" => 6.4, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE) + json_encode( + ["error_id" => 6.2, "error" => $existingHistoryLevel->getErrors()], + JSON_UNESCAPED_UNICODE + ) ); } } + + $this->createBonusHistoryRecord($user, $newBonusLevel, $check_id, $check_name, $now); + } elseif (!empty($user->bonus_level) && !$existingHistoryLevel) { + $this->createBonusHistoryRecord($user, $user->bonus_level, $check_id, $check_name, $now); } } -- 2.39.5