From f00813a228f7f35fad893fa212f47336432de18c Mon Sep 17 00:00:00 2001 From: fomichev Date: Fri, 27 Dec 2024 14:57:38 +0300 Subject: [PATCH] =?utf8?q?=D0=A4=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2?= =?utf8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0?= =?utf8?q?=20=D0=B7=D0=B2=D0=BE=D0=BD=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/records/Users.php | 68 +++++++++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 19 deletions(-) diff --git a/erp24/records/Users.php b/erp24/records/Users.php index 1d9d2e34..4936278b 100755 --- a/erp24/records/Users.php +++ b/erp24/records/Users.php @@ -591,37 +591,67 @@ class Users extends \yii\db\ActiveRecord }, $phones); } - $users = UsersTelegram::find() + $salesData = Sales::find() + ->select([ + 'phone', + 'lastSaleDate' => 'MAX(date)', + 'dealsCount' => 'COUNT(*)', + 'totalSum' => 'SUM(summ)' + ]) ->where(['phone' => $phones]) + ->groupBy('phone') + ->asArray() + ->indexBy('phone') + ->all(); + + $memorableDates = UsersEvents::find() + ->select(['phone']) + ->where(['phone' => $phones]) + ->distinct() + ->asArray() + ->indexBy('phone') + ->all(); + + $telegramUsers = UsersTelegram::find() + ->select(['phone', 'first_name', 'username']) + ->where(['phone' => $phones]) + ->asArray() + ->indexBy('phone') + ->all(); + + $usersData = Users::find() + ->select(['phone', 'name']) + ->where(['phone' => $phones]) + ->asArray() + ->indexBy('phone') ->all(); $data = []; - foreach ($users as $user) { - $memorableDateExists = UsersEvents::find() - ->where(['phone' => $user['phone']]) - ->exists() ? 1 : 0; + foreach ($phones as $phone) { + $sales = $salesData[$phone] ?? [ + 'lastSaleDate' => null, + 'dealsCount' => 0, + 'totalSum' => 0, + ]; - $query = Sales::find() - ->select([ - 'lastSaleDate' => 'MAX(date)', - 'dealsCount' => 'COUNT(*)', - 'totalSum' => 'SUM(summ)' - ]) - ->where(['phone' => $user['phone']]) - ->asArray() - ->one(); + $lastDate = $sales['lastSaleDate'] ? date('d-m-Y', strtotime($sales['lastSaleDate'])) : 'нет данных'; + $dealsCount = $sales['dealsCount'] ?? 0; + $totalSum = $sales['totalSum'] ?? 0; + + $memorableDateExists = isset($memorableDates[$phone]) ? 1 : 0; - $lastDate = $query['lastSaleDate'] ? date('d-m-Y', strtotime($query['lastSaleDate'])) : 'нет данных'; - $dealsCount = $query['dealsCount'] ?? 0; - $totalSum = $query['totalSum'] ?? 0; + $name = $telegramUsers[$phone]['first_name'] + ?? $telegramUsers[$phone]['username'] + ?? $usersData[$phone]['name'] + ?? 'нет данных'; $data[] = [ - 'phone' => $user['phone'], + 'phone' => $phone, 'last_date' => $lastDate, 'deals_count' => $dealsCount, 'total_sum' => $totalSum, 'memorable_date' => $memorableDateExists, - 'name' => $user['first_name'] ?? ($user['username'] ?? ''), + 'name' => $name, ]; } -- 2.39.5