From: Aleksey Filippov Date: Tue, 25 Jun 2024 07:22:03 +0000 (+0300) Subject: Обновление бонусных балансов X-Git-Tag: 1.3~48^2 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=665911e3d18ca33ef5e5ddb9340276ad21f18a85;p=erp24_rep%2Fyii-erp24%2F.git Обновление бонусных балансов --- diff --git a/erp24/commands/BonusController.php b/erp24/commands/BonusController.php index 72705513..9b142791 100644 --- a/erp24/commands/BonusController.php +++ b/erp24/commands/BonusController.php @@ -536,4 +536,95 @@ class BonusController extends Controller ); } } + + // bonus/update-user-bonus-balance + public function actionUpdateUserBonusBalance () { + echo("\n\r" . "
setUpdateBonusBalance Start " . date("Y-m-d H:i:s")); + + $days = 5; + $days2 = $days + 2; + $dateNow = date('Y-m-d'); + $dateCompare = date('Y-m-d H:i:s', strtotime($dateNow . ' -' . $days2 . ' day')); + + $sales = Sales::find() + ->select(['id', 'phone']) + ->where(['operation' => Sales::OPERATION_SALE]) + ->andWhere(['!=', 'phone', 0]) + ->andWhere(['>', 'date', $dateCompare]) + ->asArray() + ->all(); + + $salesIds = ArrayHelper::getColumn($sales, 'id'); + + $returns = Sales::find() + ->select(['id', 'sales_check']) + ->where(['operation' => Sales::OPERATION_RETURN]) + ->andWhere(['sales_check' => $salesIds]) + ->all(); + + $returnsIds = ArrayHelper::getColumn($returns, 'sales_check'); + foreach ($sales as $sale) { + /** @var $sale Sales */ + if (!in_array($sale['id'], $returnsIds)) { + if (ClientHelper::phoneVerify($sale['phone'])) { + self::updateBonusBalance($sale['phone']); + } + } + } + } + + public static function updateBonusBalance($phone): void + { + $balans = null; + + $user = Users::find() + ->where(['phone' => $phone]) + ->one(); + + if (!empty($user)) { + $plus = 0; + + $plusPrepared = UsersBonus::find() + ->select(['SUM(bonus) as plus', 'phone']) + ->where(['phone' => $phone]) + ->andWhere(['tip' => 'plus']) + ->andWhere(['<=', 'date_start', date('Y-m-d')]) + ->groupBy(['phone']) + ->asArray() + ->one(); + + if (!empty($plusPrepared)) { + $plus = $plusPrepared['plus']; + } + + $minus = 0; + + $minusPrepared = UsersBonus::find() + ->select(['SUM(bonus) as minus', 'phone']) + ->where(['phone' => $phone]) + ->andWhere(['tip' => 'minus']) + ->groupBy(['phone']) + ->asArray() + ->one(); + + if (!empty($minusPrepared)) { + $minus = $minusPrepared['minus']; + } + + $balans = $plus - $minus; + + /** @var Users $user */ + if ($balans != $user->balans) { + $user->balans = $balans; + + $user->save(); + if ($user->getErrors()) { + LogService::apiErrorLog(json_encode(["error_id" => 32, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE)); + } + echo("
n\r\ User phone " . $phone . ' new balans ' . $balans); + } + } else { + echo("
n\r\ User phone " . $phone . ' not found '); + } + } }