Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Добавление в атрибуты точки продаж конкретного товара


Recommended Posts

Добрый день.

Прошу помощи у гуру программистов, так как у самого уже не хватает знаний что бы оптимизировать скрипт.

 

В целом логика скрипта следующая: есть интернет-витрина, в котором на данный момент представлено порядка 31,197 активных на данный момент товаров. И есть 20 точек в которых данные товары продаются, но как вы понимаете товар может находиться не во всех этих точках а только в некоторых, и было принять решение используя функционал движка атрибуты реализовать показ товаров в конкретном магазине.

 

Пример того что в итоге получается здесь: http://postelka.tomsk.ru/tekstil/postelnoe-bele-komplekty (слева атрибут наличие - магазин)

 

Скрипт после своего завершения дает примерно 196,305 записей в таблице атрибутов.

 

Среднее время выполнение скрипта 2-3 часа по крону, делается ночью, что бы не кому не мешать.

Проблема в том что до внедрения этого функционала с атрибутами, данный скрипт отрабатывал за 20 минут и писал в каждый товар сколько товара на каком складе находится, пример тут: http://postelka.tomsk.ru/tekstil/postelnoe-bele-komplekty/komplekt-postelnogo-belya-15-spalnyy-om-feya

 

По всей видимости когда дописывал где-то перемудрил и он делает много лишнего раз так существенно возросло время исполнения.

 

Если есть идеи или советы по оптимизации кода прошу помощи.

 

Изначальное авторство кода не мое, за основу в самом начале был взят код costas'а с одноименного модуля CSVPrice

Позже все переросло вот в такое:

 

Код:

<?php
class ModelModuleCSVPrice extends Model {
	private $CSV_SEPARATOR = ';';
	private $CSV_ENCLOSURE = '"';
	private $data = array();
	
	public function update() {
		
		$this->db->query("UPDATE `".DB_PREFIX."setting` SET value='1' WHERE  `group` LIKE  'config' AND  `key` LIKE  'config_maintenance'");
	
		$this->db->query("DELETE FROM `".DB_PREFIX."product_to_sklad`");
		$this->db->query("ALTER TABLE `".DB_PREFIX."product_to_sklad` AUTO_INCREMENT=0");
		$this->db->query("DELETE FROM `".DB_PREFIX."product_special`");
		$this->db->query("ALTER TABLE `".DB_PREFIX."product_special` AUTO_INCREMENT=0");
		$this->db->query("UPDATE `".DB_PREFIX."product` SET stock_status_id=5 WHERE stock_status_id=6 OR stock_status_id=8 OR stock_status_id=7 OR stock_status_id=0 OR stock_status_id=9");
		$this->db->query("UPDATE `".DB_PREFIX."product` SET cost=0,price=0,opt=0,rozn=0,optsp=0,quantity=0,status=0 WHERE stock_status_id=5 OR stock_status_id=6 OR stock_status_id=8 OR stock_status_id=7 OR stock_status_id=0 OR stock_status_id=9");
		$this->db->query("DELETE FROM `".DB_PREFIX."product_attribute` WHERE `attribute_id`=177");
		

		if (($handle = fopen("/var/www/postelka/data/www/postelka.tomsk.ru/import/td.csv", "r")) !== FALSE) {
			$row = 0;
		    
		    while (($data = fgetcsv($handle, 1000, $this->CSV_SEPARATOR, $this->CSV_ENCLOSURE)) !== FALSE) {
				$num = count($data);
				$row++;
				$item = array();
				
				$akciya= "";
				
				for ($c=0; $c < $num; $c++) {
					$item[] = $data[$c];
				}

					$quantity = $item[4];
					$rezerv = $item[5];
					$counts = $quantity-$rezerv;

					if ($counts>0) {
					
						$model = $item[0];
						$price = $item[3]; // Опт1 = 2 ; Розница = 3
						$opt = $item[1];
						$rozn = $item[3];
						$optsp = $opt*0.05+$opt;
						$imagaz = $rozn;
					
						$price = round($price,2);
						$opt = round($opt,2);
						$imagaz = round($imagaz,0);
						$optsp = round($optsp,0);
					
						$sklad_num = $item[7];
						
						$tega = $item[6];
						$tega = iconv("CP1251", "UTF-8", $tega);
					
						if ($tega=='1') {$procent=0.1;}
						elseif ($tega=='2') {$procent=0.2;}
						elseif ($tega=='3') {$procent=0.3;}
						elseif ($tega=='4') {$procent=0.4;}
						elseif ($tega=='5') {$procent=0.5;}
						elseif ($tega=='6') {$procent=0.6;}
						elseif ($tega=='7') {$procent=0.7;}
						elseif ($tega=='8') {$procent=0.0;}
						elseif ($tega=='9') {$procent=0.15;}
						elseif ($tega=='0') {$procent=0.25;}
						elseif ($tega=='ц') {$procent=0.0;}
						elseif ($tega=='А') {$procent=0.0;}
						//elseif ($tega=='е') {
						//if ($sklad_num=='145') {$procent=0.20;}
						//else {$procent=0.0;}
						//}
						//elseif ($tega=='ъ') {
						//if ($sklad_num=='48') {$procent=0.10;}
						//else {$procent=0.0;}
						//}
						else { $procent=0.0; }
						
										$product_id = $this->db->query("SELECT product_id as product_id1 FROM `".DB_PREFIX."product` WHERE model='".$model."'");
										$product_id = $product_id->row['product_id1'];
											if ($product_id) {
											$text_attribute = $this->db->query("SELECT text as text_attribute FROM `".DB_PREFIX."product_attribute` WHERE `attribute_id`=177 AND `product_id`='".$product_id."'");
											$text_attribute = $text_attribute->row['text_attribute'];
										
												if ($text_attribute) {
													if ($sklad_num=='41') { $name_sklad='пр. Фрунзе, 77б - Альбом'; }
													elseif ($sklad_num=='141') { $name_sklad='Асино - ул. Станционная, 40/1'; }
													elseif ($sklad_num=='111') { $name_sklad='ул. Дальне-Ключевская, 6'; }
													elseif ($sklad_num=='43') { $name_sklad='пр. Мира, 21в'; }
													elseif ($sklad_num=='48') { $name_sklad='ул. Красноармейская, 122'; }
													elseif ($sklad_num=='136') { $name_sklad='ул. Иркутский тракт, 110'; }
													elseif ($sklad_num=='79') { $name_sklad='ул. Киевская, 76 (Посуда)'; }
													elseif ($sklad_num=='46') { $name_sklad='ул. Иркутский тракт, 142/3'; }
													elseif ($sklad_num=='145') { $name_sklad='пр. Ленина, 200'; }
													elseif ($sklad_num=='125') { $name_sklad='ул. Нахимова, 15'; }
													elseif ($sklad_num=='93') { $name_sklad='пер. Мариинский, 4'; }
													elseif ($sklad_num=='83') { $name_sklad='пр. Фрунзе, 24 - Марка'; }
													elseif ($sklad_num=='94') { $name_sklad='пр. Мира, 72а'; }
													elseif ($sklad_num=='134') { $name_sklad='ул. Новосибирская, 6'; }
													elseif ($sklad_num=='35') { $name_sklad='ул. Киевская, 76 (Одежда)'; }
													elseif ($sklad_num=='57') { $name_sklad='ул. Иркутский тракт, 76'; }
													elseif ($sklad_num=='143') { $name_sklad='Северск - пр. Коммунистический, 120'; }
													elseif ($sklad_num=='180') { $name_sklad='ул. Елизаровых, 22'; }
													elseif ($sklad_num=='176') { $name_sklad='ул. Междугородная, 28'; }
													elseif ($sklad_num=='98') { $name_sklad='Товар в дороге'; }
													elseif ($sklad_num=='26') { $name_sklad='Оптовый склад'; }
													elseif ($sklad_num=='114') { $name_sklad='ул. Богдана Хмельницкого, 43';
													} else {
													}
													//if ($sklad_num!='26') {
														$this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET text=CONCAT(text,';".$name_sklad."') WHERE `attribute_id`=177 AND `product_id`='".$product_id."'");
													//} else {
													//}
												} else {
													if ($sklad_num=='41') { $name_sklad='пр. Фрунзе, 77б - Альбом'; }
													elseif ($sklad_num=='141') { $name_sklad='Асино - ул. Станционная, 40/1'; }
													elseif ($sklad_num=='111') { $name_sklad='ул. Дальне-Ключевская, 6'; }
													elseif ($sklad_num=='43') { $name_sklad='пр. Мира, 21в'; }
													elseif ($sklad_num=='48') { $name_sklad='ул. Красноармейская, 122'; }
													elseif ($sklad_num=='136') { $name_sklad='ул. Иркутский тракт, 110'; }
													elseif ($sklad_num=='79') { $name_sklad='ул. Киевская, 76 (Посуда)'; }
													elseif ($sklad_num=='46') { $name_sklad='ул. Иркутский тракт, 142/3'; }
													elseif ($sklad_num=='145') { $name_sklad='пр. Ленина, 200'; }
													elseif ($sklad_num=='125') { $name_sklad='ул. Нахимова, 15'; }
													elseif ($sklad_num=='93') { $name_sklad='пер. Мариинский, 4'; }
													elseif ($sklad_num=='83') { $name_sklad='пр. Фрунзе, 24 - Марка'; }
													elseif ($sklad_num=='94') { $name_sklad='пр. Мира, 72а'; }
													elseif ($sklad_num=='134') { $name_sklad='ул. Новосибирская, 6'; }
													elseif ($sklad_num=='35') { $name_sklad='ул. Киевская, 76 (Одежда)'; }
													elseif ($sklad_num=='57') { $name_sklad='ул. Иркутский тракт, 76'; }
													elseif ($sklad_num=='143') { $name_sklad='Северск - пр. Коммунистический, 120'; }
													elseif ($sklad_num=='180') { $name_sklad='ул. Елизаровых, 22'; }
													elseif ($sklad_num=='176') { $name_sklad='ул. Междугородная, 28'; }
													elseif ($sklad_num=='98') { $name_sklad='Товар в дороге'; }
													elseif ($sklad_num=='26') { $name_sklad='Оптовый склад'; }
													elseif ($sklad_num=='114') { $name_sklad='ул. Богдана Хмельницкого, 43';
													} else {
													}
													//if ($sklad_num!='26') {
														$this->db->query("INSERT INTO `".DB_PREFIX."product_attribute` (`product_id`,`attribute_id`,`language_id`,`text`) VALUES ($product_id,177,1,'$name_sklad')");
													//} else {
													//}
												}
											}
						
						if ($procent>0) {
							$akciya=$rozn-$rozn*$procent;
							$akciya=round($akciya,0);
							$imagaz=$akciya;
							
							if ($optsp>$akciya) { $optsp=$akciya; }
							
							$this->db->query("INSERT INTO ".DB_PREFIX."product_to_sklad (product_id,sklad_id,count,opt,imagaz,rozn,zakup,optsp) VALUES ('".(int)$model."','".$sklad_num."','".$counts."','".$opt."','".$imagaz."','".$akciya."','0','".$optsp."')");
						
						} else {
							
							if ($tega=='ц' OR $tega=='А') {
							$imagaz = $rozn;
							} else{
							$imagaz = $rozn-($rozn*0.15);
							$imagaz = round($imagaz,0);
							}
							if ($optsp>$rozn) { $optsp=$rozn; }
						
							$this->db->query("INSERT INTO ".DB_PREFIX."product_to_sklad (product_id,sklad_id,count,opt,imagaz,rozn,zakup,optsp) VALUES ('".(int)$model."','".$sklad_num."','".$counts."','".$opt."','".$imagaz."','".$rozn."','0','".$optsp."')");
					
						}

							if ($procent=="0" OR $akciya==$price) {
								
								$this->db->query("UPDATE ".DB_PREFIX."product SET price='".$price."', quantity=`quantity`+".(int)$counts." , cost='0', opt='".$opt."', optsp='".$optsp."', rozn='".$rozn."', status='1', date_modified=NOW() WHERE `stock_status_id`=5 AND model='" .(int)$model. "'");
							
							} else {

								$this->db->query("UPDATE ".DB_PREFIX."product SET price='".$price."', quantity=`quantity`+".(int)$counts." , cost='0', opt='".$opt."', optsp='".$optsp."', rozn='".$rozn."', status='1', date_modified=NOW() WHERE `stock_status_id`=5 AND model='" .(int)$model. "'");
								
								if ($tega=='е' OR $tega=='ъ') {  /*}
								elseif ($tega=='н') {
									if ($sklad_num=='48') {
										
									} else {
										$product_id = $this->db->query("SELECT product_id as product_id1 FROM `".DB_PREFIX."product` WHERE model='".$model."'");
										$product_id = $product_id->row['product_id1'];
											if ($product_id) {
												$product_special_price = $this->db->query("SELECT MIN(price) as product_special_price1 FROM `".DB_PREFIX."product_special` WHERE product_id='".$product_id."'");
												$product_special_price = $product_special_price->row['product_special_price1'];
												if ($product_special_price!=NULL OR $product_special_price>0) {
													if ($product_special_price>$akciya) {
														$this->db->query("INSERT INTO `".DB_PREFIX."product_special` (`product_special_id`,`product_id`,`customer_group_id`,`priority`,`price`,`date_start`,`date_end`) VALUES (NULL,$product_id,8,1,$akciya,0000-00-00,0000-00-00)");
													} else {
													
													}
												} else {
													$this->db->query("INSERT INTO `".DB_PREFIX."product_special` (`product_special_id`,`product_id`,`customer_group_id`,`priority`,`price`,`date_start`,`date_end`) VALUES (NULL,$product_id,8,1,$akciya,0000-00-00,0000-00-00)");
												}
											}
									}*/
								} else {
											if ($product_id) {
												$product_special_price = $this->db->query("SELECT MIN(price) as product_special_price1 FROM `".DB_PREFIX."product_special` WHERE product_id='".$product_id."'");
												$product_special_price = $product_special_price->row['product_special_price1'];
												if ($product_special_price!=NULL OR $product_special_price>0) {
													if ($product_special_price>$akciya) {
														$this->db->query("INSERT INTO `".DB_PREFIX."product_special` (`product_special_id`,`product_id`,`customer_group_id`,`priority`,`price`,`date_start`,`date_end`) VALUES (NULL,$product_id,8,1,$akciya,0000-00-00,0000-00-00)");
													} else {
													
													}
												} else {
													$this->db->query("INSERT INTO `".DB_PREFIX."product_special` (`product_special_id`,`product_id`,`customer_group_id`,`priority`,`price`,`date_start`,`date_end`) VALUES (NULL,$product_id,8,1,$akciya,0000-00-00,0000-00-00)");
												}
											}
								}
							}
					
					}
					
					unset($item);
			
			}
		    fclose($handle);
		}
		
		$this->db->query("UPDATE `".DB_PREFIX."setting` SET value='0' WHERE  `group` LIKE  'config' AND  `key` LIKE  'config_maintenance'");
		
	}
}
?>

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.