From 33442a110affd6efe29c6b33018ae4a05e7fa9c0 Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Sat, 21 Dec 2024 21:32:38 +0100 Subject: [PATCH] Refactor product history retrieval in Cron and Products classes; optimize date handling and query logic --- .vscode/ftp-kr.sync.cache.json | 16 ++++++------- autoload/controls/class.Cron.php | 37 ++++++++++------------------- autoload/factory/class.Products.php | 2 +- 3 files changed, 21 insertions(+), 34 deletions(-) diff --git a/.vscode/ftp-kr.sync.cache.json b/.vscode/ftp-kr.sync.cache.json index b014ed8..768bf22 100644 --- a/.vscode/ftp-kr.sync.cache.json +++ b/.vscode/ftp-kr.sync.cache.json @@ -35,8 +35,8 @@ }, "class.Products.php": { "type": "-", - "size": 6164, - "lmtime": 1734294911481, + "size": 6779, + "lmtime": 1734386753537, "modified": false }, "class.Site.php": { @@ -67,8 +67,8 @@ }, "class.Products.php": { "type": "-", - "size": 3084, - "lmtime": 1733868265361, + "size": 3709, + "lmtime": 1734386591635, "modified": false }, "class.Users.php": { @@ -2563,8 +2563,8 @@ }, "functions.js": { "type": "-", - "size": 3168, - "lmtime": 0, + "size": 3400, + "lmtime": 1734382316193, "modified": false }, "grid": {}, @@ -2712,8 +2712,8 @@ "products": { "main_view.php": { "type": "-", - "size": 3909, - "lmtime": 1733868311355, + "size": 6819, + "lmtime": 1734385931827, "modified": false }, "product_history.php": { diff --git a/autoload/controls/class.Cron.php b/autoload/controls/class.Cron.php index 120b091..15d7f25 100644 --- a/autoload/controls/class.Cron.php +++ b/autoload/controls/class.Cron.php @@ -141,25 +141,12 @@ class Cron $products = $mdb -> select( 'products', 'id', [ 'client_id' => $client_id ] ); foreach ( $products as $product ) { - for ( $i = 0; $i < 30; $i++ ) + $dates = $mdb -> query( 'SELECT id, date_add FROM products_history WHERE product_id = ' . $product . ' AND updated = 1 ORDER BY date_add DESC' ) -> fetchAll( \PDO::FETCH_ASSOC ); + foreach ( $dates as $date ) { - $date_to = date( 'Y-m-d', strtotime( '-' . (1 + $i) . ' days' ) ); - $date_from = date( 'Y-m-d', strtotime( '-' . (31 + $i) . ' days' ) ); - - $data_updated = false; - - if ( $mdb -> count( 'products_history', [ 'AND' => [ 'product_id' => $product, 'date_add[>=]' => $date_from, 'date_add[<=]' => $date_to, 'updated' => 1 ] ] ) > 0 ) - { - $data_updated = true; - } - - if ( $data_updated ) - { - self::cron_product_history_30_save( $product, $date_from, $date_to ); - } + self::cron_product_history_30_save( $product, $date['date_add'] ); + $mdb -> update( 'products_history', [ 'updated' => 0 ], [ 'id' => $date['id'] ] ); } - - // $mdb -> update( 'products_history', [ 'updated' => 0 ], [ 'AND' => [ 'product_id' => $product, 'updated' => 1 ] ] ); } $end_time = microtime(true); @@ -168,11 +155,11 @@ class Cron exit; } - static public function cron_product_history_30_save( $product_id, $date_from, $date_to ) + static public function cron_product_history_30_save( $product_id, $date_to ) { global $mdb; - $data = $mdb -> query( 'SELECT * FROM products_history WHERE product_id = ' . $product_id . ' AND date_add >= \'' . $date_from . '\' AND date_add <= \'' . $date_to . '\' ORDER BY date_add ASC' ) -> fetchAll( \PDO::FETCH_ASSOC ); + $data = $mdb -> query( 'SELECT * FROM products_history WHERE product_id = ' . $product_id . ' AND date_add <= \'' . $date_to . '\' ORDER BY date_add DESC LIMIT 30' ) -> fetchAll( \PDO::FETCH_ASSOC ); // Inicjalizacja tablic do przechowywania danych $offers_data = []; @@ -206,15 +193,15 @@ class Cron { $day_count = count( $offer['days_counted'] ); - $impressions = $offer['impressions'] / $day_count; - $clicks = $offer['clicks'] / $day_count; + $impressions = $offer['impressions']; + $clicks = $offer['clicks']; $ctr = ( $clicks > 0 and $impressions ) ? round( $clicks / $impressions, 4 ) * 100 : 0; - $cost = $offer['cost'] / $day_count; - $conversions = $offer['conversions'] / $day_count; - $conversions_value = $offer['conversions_value'] / $day_count; + $cost = $offer['cost']; + $conversions = $offer['conversions']; + $conversions_value = $offer['conversions_value']; $roas = ( $conversions_value > 0 and $cost ) ? round( $conversions_value / $cost, 2 ) * 100 : 0; - if ( $day_count > 14 ) + if ( $day_count >= 30 ) { if ( $mdb -> count( 'products_history_30', [ 'AND' => [ 'product_id' => $product_id, 'date_add' => $date_to ] ] ) > 0 ) { diff --git a/autoload/factory/class.Products.php b/autoload/factory/class.Products.php index c3f649b..475f517 100644 --- a/autoload/factory/class.Products.php +++ b/autoload/factory/class.Products.php @@ -49,7 +49,7 @@ class Products static public function get_product_history_30( $client_id, $product_id, $start, $limit ) { global $mdb; - return $mdb -> query( 'SELECT * FROM products_history_30 AS ph3 WHERE ph3.product_id = \'' . $product_id . '\' ORDER BY ph3.date_add DESC LIMIT ' . $start . ', ' . $limit ) -> fetchAll( \PDO::FETCH_ASSOC ); + return $mdb -> query( 'SELECT * FROM products_history_30 AS ph3 WHERE ph3.product_id = \'' . $product_id . '\' ORDER BY ph3.date_add ASC LIMIT ' . $start . ', ' . $limit ) -> fetchAll( \PDO::FETCH_ASSOC ); } static public function get_impressions_30( $product_id )