Mariusz Muszyński 8 лет назад
Родитель
Сommit
bd06a36844
1 измененных файлов с 86 добавлено и 26 удалено
  1. 86 26
      SE/se-lib/Route/UrlAction/BiAuditGenerate.php

+ 86 - 26
SE/se-lib/Route/UrlAction/BiAuditGenerate.php

@@ -150,6 +150,13 @@ function toggle(source) {
 		}
 	}
 
+	private function showPowiazania() {
+//		$powiazanieDirLocation = $this->getDirectory('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $this->powiazanie['ID']);
+//		$xmlFile = "{$powiazanieDirLocation}/relations.xml";
+//		echo "<pre>" . htmlentities(file_get_contents($xmlFile)) . "</pre>";
+		echo "Statystyki znalezionych powiązań [TODO]";
+	}
+
 	private function powiazania($ID_BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA) {
 		try {
 			$powiazania = DB::getPDO()->fetchall("select * from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where ID = '{$ID_BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA}'");
@@ -159,6 +166,9 @@ function toggle(source) {
 				case "NONE":
 					$this->initializePowiazania();
 					break;
+				case "GENERATED":
+					$this->showPowiazania();
+					break;
 				default:
 					throw new Exception("Błędny status rekordu");
 			}
@@ -188,6 +198,11 @@ function toggle(source) {
 
 	public function doGenerate() {
 
+		function deleteResultsFromDB($ID) {
+			$query = "delete from row, ref using BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row row join `CRM__#REF_TABLE__25` ref on row.ID=ref.REMOTE_PRIMARY_KEY where ref.PRIMARY_KEY='{$ID}'";
+			DB::getPDO()->query($query);
+		}
+
 		function generatePhpScript($function) {
 			return '<?php
 ini_set("memory_limit", "4G");
@@ -231,9 +246,11 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 
 
 			### Sprawdzenie czy któryś rekord wymaga odświeżenia cache
-			$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache = 'Y'";
+			$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache = 'Y' and FILE_STATUS = 'TO_GENERATE'";
 			$result = DB::getPDO()->fetchAll($query);
 			if ($result) {
+				$sqlArr = [];
+
 				if (file_exists($reloadCachePhpFile)) {
 					if (file_exists($reloadCacheResultFile)) {
 						$reloadCacheResult = file_get_contents($reloadCacheResultFile);
@@ -246,25 +263,33 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 							$sqlArr = [
 								'FILE_STATUS' => 'ERROR',
 								'FILE_STATUS_info' => "Wystąpił błąd podczas odświeżania cache ({$reloadCacheResult})",
-								'BI_analiza_reloadCache' => 'N',
 							];
 							$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where FILE_STATUS = 'TO_GENERATE'";
 							$result = DB::getPDO()->fetchAll($query);
 						}
-						foreach ($result as $row) {
-							DB::getDB()->UPDATE_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', array_merge(['ID' => $row['ID']], $sqlArr));
-						}
 						unlink($reloadCachePhpFile);
 						unlink($reloadCacheResultFile);
-					} else exit;
+					}
 				} else {
 					$query = "select count(*) from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where FILE_STATUS = 'IN_PROGRESS'";
 					$result = DB::getPDO()->fetchValue($query);
-					if ($result) exit;
+					if ($result) {
+						$sqlArr = [
+							'FILE_STATUS_info' => 'Wstrzymano odświeżanie cache - oczekiwanie na dokończenie szukania powiązań dla innych rekordów',
+						];
+					} else {
+						$sqlArr = [
+							'FILE_STATUS_info' => 'W trakcie odświeżania cache',
+						];
+						file_put_contents($reloadCachePhpFile, generatePhpScript('doReloadCache()'));
+						shell_exec('su - root -c "php ' . $reloadCachePhpFile . ' > ' . $reloadCacheLogFile. ' 2>&1 &"');
+					}
+				}
 
-					file_put_contents($reloadCachePhpFile, generatePhpScript('doReloadCache()'));
-					shell_exec('su - root -c "php ' . $reloadCachePhpFile . ' > ' . $reloadCacheLogFile. ' 2>&1 &"');
-					exit;
+				if ($sqlArr) {
+					foreach ($result as $row) {
+						DB::getDB()->UPDATE_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', array_merge(['ID' => $row['ID']], $sqlArr));
+					}
 				}
 			}
 
@@ -279,6 +304,7 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 					'FILE_STATUS_info' => 'W trakcie generowania powiązań',
 				];
 				DB::getDB()->UPDATE_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $sqlArr);
+				deleteResultsFromDB($row['ID']);
 
 				$generatePowiazaniaResultFile = "{$tasksDirLocation}/generatePowiazania-{$row['ID']}.result";
 				$generatePowiazaniaPhpFile = "{$tasksDirLocation}/generatePowiazania-{$row['ID']}.php";
@@ -289,28 +315,51 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 
 
 			### Weryfikacja świeżo wygenerowanych powiązań
-			$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where FILE_STATUS = 'IN_PROGRESS'";
+			$query = "select ID, BI_analiza_depth from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where FILE_STATUS = 'IN_PROGRESS'";
 			$result = DB::getPDO()->fetchAll($query);
 			foreach ($result as $row) {
 				$generatePowiazaniaResultFile = "{$tasksDirLocation}/generatePowiazania-{$row['ID']}.result";
+				$generatePowiazaniaPidFile = "{$tasksDirLocation}/generatePowiazania-{$row['ID']}.pid";
 				if (file_exists($generatePowiazaniaResultFile)) {
-					$generatePowiazaniaResult = file_get_contents($generatePowiazaniaResultFile);
-					if ($generatePowiazaniaResult == "ok") {
+					$error = false;
+					$xmlFile = "{$tasksDirLocation}/generatePowiazania-{$row['ID']}.xml";
+					if (file_exists($xmlFile)) {
+						if (filesize($xmlFile)) {
+							$generatePowiazaniaResult = file_get_contents($generatePowiazaniaResultFile);
+							if ($generatePowiazaniaResult == "ok") {
+								$generatePowiazaniaSqlFile = "{$tasksDirLocation}/generatePowiazania-{$row['ID']}.sql";
+								if (!file_exists($generatePowiazaniaSqlFile)) $error = "Wystąpił nieznany błąd w przetwarzaniu";
+							} else $error = "Wystąpił błąd podczas generowania powiązań ({$generatePowiazaniaResult})";
+						} else $error = "Wystąpił nieznany błąd - plk xml został wygenerowany niepoprawnie";
+					} else $error = "Wystąpił nienzany błąd - nie znaleziono pliku xml";
+
+					if ($error) {
 						$sqlArr = [
-							'FILE_STATUS' => 'GENERATED',
-							'FILE_STATUS_info' => 'Poprawnie wygenerowano powiązania',
+							'FILE_STATUS' => 'ERROR',
+							'FILE_STATUS_info' => $error,
 						];
+						deleteResultsFromDB($row['ID']);
+						if (file_exists($xmlFile)) unlink($xmlFile);
 					} else {
 						$sqlArr = [
-							'FILE_STATUS' => 'ERROR',
-							'FILE_STATUS_info' => "Wystąpił błąd podczas generowania powiązań ({$generatePowiazaniaResult})",
+							'FILE_STATUS' => 'GENERATED',
+							'FILE_STATUS_info' => 'Poprawnie wygenerowano powiązania',
 						];
+						$powiazanieDirLocation = $this->getDirectory('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $row['ID']);
+						$destXmlFile = "{$powiazanieDirLocation}/relations.xml";
+						rename($xmlFile, $destXmlFile);
 					}
 					$sqlArr['ID'] = $row['ID'];
 					DB::getDB()->UPDATE_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $sqlArr);
 					$generatePowiazaniaPhpFile = "{$tasksDirLocation}/generatePowiazania-{$row['ID']}.php";
 					unlink($generatePowiazaniaPhpFile);
+					unlink($generatePowiazaniaPidFile);
 					unlink($generatePowiazaniaResultFile);
+					if (file_exists($generatePowiazaniaSqlFile)) unlink($generatePowiazaniaSqlFile);
+					
+				} elseif (file_exists($generatePowiazaniaPidFile)) {
+					$pid = file_get_contents($generatePowiazaniaPidFile);
+					
 				}
 			}
 
@@ -440,7 +489,11 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 	public function doGeneratePowiazania($ID) {
 		$powiazaniaDirLocation = $this->getMainDirectory();
 		$tasksDirLocation = $powiazaniaDirLocation . "/.tasks";
-		$generatePowiazaniaResultFile = "{$tasksDirLocation}/generatePowiazania-{$ID}.result";
+		$resultFile = "{$tasksDirLocation}/generatePowiazania-{$ID}.result";
+		$xmlFile = "{$tasksDirLocation}/generatePowiazania-{$ID}.xml";
+		$pidFile = "{$tasksDirLocation}/generatePowiazania-{$ID}.pid";
+		$sqlFile = "{$tasksDirLocation}/generatePowiazania-{$ID}.sql";
+		file_put_contents($pidFile, getmypid());
 
 		$tablesConf = [
 			'BI_audit_CEIDG' => ['ID', 'imie', 'nazwisko', 'nip', 'regon', 'firma', 'miejscowosc'],
@@ -467,13 +520,12 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 			$BiAuditPowiazania = new BiAuditPowiazania($powiazanie['BI_analiza_depth']);
 			foreach ($result as $row) $BiAuditPowiazania->findPowiazania($row['ID']);
 
-			$powiazanieDirLocation = $this->getDirectory('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $ID);
-			$xmlFile = "{$powiazanieDirLocation}/relations_id{$ID}_depth{$powiazanie['BI_analiza_depth']}.xml";
-			file_put_contents($xmlFile, $BiAuditPowiazania->asXml());
-
+			if (!$BiAuditPowiazania->powiazaniaFound()) throw new Exception("Nie znaleziono żadnych powiązań");
+			$xml = $BiAuditPowiazania->asXml();
+			file_put_contents($xmlFile, $xml);
+			file_put_contents($sqlFile, mysql_real_escape_string(gzcompress($xml)));
 			$powiazania = $BiAuditPowiazania->asArray('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA');
 			if (!$powiazania) return false;
-			$query = "delete from row, ref using BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row row join `CRM__#REF_TABLE__25` ref on row.ID=ref.REMOTE_PRIMARY_KEY where ref.PRIMARY_KEY=1";
 			DB::getPDO()->query($query);
 			foreach ($powiazania['BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row'] as $row) {
 				$powiazaniaRowSqlArr = [];
@@ -493,11 +545,12 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 				}
 				$powiazaniaRowSqlArr['string_concat_path'] = implode(' / ', $string_concat_path);
 				$id_row = DB::getPDO()->insert("BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row", $powiazaniaRowSqlArr);
-				if (!$id_row) throw new Exception("Błąd bazy danych");				DB::getPDO()->insert('CRM__#REF_TABLE__25', ["PRIMARY_KEY" => $ID, "REMOTE_PRIMARY_KEY" => $id_row]);
+				if (!$id_row) throw new Exception("Błąd bazy danych");
+				DB::getPDO()->insert('CRM__#REF_TABLE__25', ["PRIMARY_KEY" => $ID, "REMOTE_PRIMARY_KEY" => $id_row]);
 			}
-			file_put_contents($generatePowiazaniaResultFile, "ok");
+			file_put_contents($resultFile, "ok");
 		} catch (Exception $e) {
-			file_put_contents($generatePowiazaniaResultFile, $e->getMessage());
+			file_put_contents($resultFile, $e->getMessage());
 		}
 	}
 
@@ -708,16 +761,23 @@ class BiAuditPowiazania {
 	}
 
 	public function asXml() {
+		if (!$this->results) return null;
 		if (!$this->items_results) $this->generateItemsResults();
 		$xmlRoot = "RelatedFeatureRoot";
 		return V::arrayToXML($this->items_results, true, $xmlRoot);
 	}
 
 	public function asArray($subArray = null) {
+		if (!$this->results) return null;
 		if (!$this->items_results) $this->generateItemsResults();
 		if ($subArray) {
 			if (isset($this->items_results[$subArray])) return $this->items_results[$subArray];
 			else return [];
 		} else return $this->items_results;
 	}
+
+	public function powiazaniaFound() {
+		if ($this->results) return true;
+		else return false;
+	}
 }