Mariusz Muszyński пре 8 година
родитељ
комит
67171a05d2
1 измењених фајлова са 41 додато и 18 уклоњено
  1. 41 18
      SE/se-lib/Route/UrlAction/BiAuditGenerate.php

+ 41 - 18
SE/se-lib/Route/UrlAction/BiAuditGenerate.php

@@ -127,15 +127,16 @@ class Route_UrlAction_BiAuditGenerate extends RouteBase {
       <div class="col-sm-2">
         <select name="reloadCache" class="form-control">
           <option value="No" selected>Nie</option>
-          <option value="Part">Częściowe</option>
+<!--          <option value="Part">Częściowe</option>-->
           <option value="Full">Pełne</option>
         </select>
       </div>
     </div>
     <div class="form-group">
       <div class="col-sm-offset-2 col-sm-10">
-        Częściowe odświeżenie wymagane w przypadku, gdy jedynie dodano nowe rekordy w tabelach pracowników/kontrahentów.<br/>
-        Pełne odświeżenie wymagane w przypadku edycji/usunięcia istniejących rekordów w tabelach pracowników/kontrahentów (w zależności od ilości rekordów może trwać znacznie dłużej)
+<!--        Częściowe odświeżenie wymagane w przypadku, gdy jedynie dodano nowe rekordy w tabelach pracowników/kontrahentów.<br/>-->
+        Pełne odświeżenie wymagane w przypadku edycji/usunięcia istniejących rekordów w tabelach pracowników/kontrahentów.<br/>
+        Uwaga! Jeżeli aktywne są inne zadania, te zadanie zostanie wstrzymane do momentu ich ukończenia.
       </div>
     </div>
     <div class="form-group">
@@ -419,15 +420,16 @@ where `REMOTE_PRIMARY_KEY` = '{$this->SOURCE['ID']}'";
       <div class="col-sm-2">
         <select name="reloadCache" class="form-control">
           <option value="No" selected>Nie</option>
-          <option value="Part">Częściowe</option>
+<!--          <option value="Part">Częściowe</option>-->
           <option value="Full">Pełne</option>
         </select>
       </div>
     </div>
     <div class="form-group">
       <div class="col-sm-offset-4 col-sm-8">
-        Częściowe odświeżenie wymagane w przypadku, gdy jedynie dodano nowe rekordy w tabelach pracowników/kontrahentów.<br/>
-        Pełne odświeżenie wymagane w przypadku edycji/usunięcia istniejących rekordów w tabelach pracowników/kontrahentów (w zależności od ilości rekordów może trwać znacznie dłużej)
+<!--        Częściowe odświeżenie wymagane w przypadku, gdy jedynie dodano nowe rekordy w tabelach pracowników/kontrahentów.<br/>-->
+        Pełne odświeżenie wymagane w przypadku edycji/usunięcia istniejących rekordów w tabelach pracowników/kontrahentów.<br/>
+        Uwaga! Jeżeli aktywne są inne zadania, te zadanie zostanie wstrzymane do momentu ich ukończenia.
       </div>
     </div>
     <div class="form-group">
@@ -1031,18 +1033,17 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 			if (!file_exists($tasksDirLocation)) mkdir($tasksDirLocation, 0755, true);
 			if (!file_exists($tasksDirLocation)) throw new Exception('Error during creating temporary directory.');
 
-/*
-			### Wymuszenie częsciowego odświezenia cache
+
+			### Wyłączenie wcześniej używanego mechanizmu wymuszania częściowego odświeżania cache - teraz działa to z automatu
 			$sqlArr = [
-				'BI_analiza_reloadCache' => 'Part',
-				'FILE_STATUS_info' => 'Automatycznie wymuszono częściowe odświeżenie cache',
+				'BI_analiza_reloadCache' => 'No',
 			];
-			$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache not in ('Full', 'Part') and FILE_STATUS = 'TO_GENERATE'";
+			$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache not in ('Part') and 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));
 			}
-*/
+
 
 			### Sprawdzenie czy któryś rekord wymaga odświeżenia cache
 			$doGenerate = true;
@@ -1057,14 +1058,14 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 						$reloadCacheResult = file_get_contents($reloadCacheResultFile);
 						if ($reloadCacheResult == "ok") {
 							$sqlArr = [
-								'FILE_STATUS_info' => 'Odświeżono cache, oczekiwanie na wygenerowanie powiązań',
+								'FILE_STATUS_info' => 'Ukończono pełne Odświeżenie cache, oczekiwanie na wygenerowanie powiązań',
 								'BI_analiza_reloadCache' => 'No',
 							];
 							$doGenerate = true;
 						} else {
 							$sqlArr = [
 								'FILE_STATUS' => 'ERROR',
-								'FILE_STATUS_info' => "Wystąpił błąd podczas odświeżania cache ({$reloadCacheResult})",
+								'FILE_STATUS_info' => "Wystąpił błąd podczas pełnego odświeżania cache ({$reloadCacheResult})",
 							];
 							$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where FILE_STATUS = 'TO_GENERATE'";
 							$result = DB::getPDO()->fetchAll($query);
@@ -1080,7 +1081,7 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 							if (!file_exists($reloadCacheResultFile)) {
 								$sqlArr = [
 									'FILE_STATUS' => 'ERROR',
-									'FILE_STATUS_info' => "Wystąpił nieznany błąd podczas odświeżania cache - nie znaleziono procesu potomnego",
+									'FILE_STATUS_info' => "Wystąpił nieznany błąd podczas pełnego odświeżania cache - nie znaleziono procesu potomnego",
 								];
 								$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where FILE_STATUS = 'TO_GENERATE'";
 								$result = DB::getPDO()->fetchAll($query);
@@ -1095,11 +1096,11 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 					$result2 = DB::getPDO()->fetchValue($query);
 					if ($result2) {
 						$sqlArr = [
-							'FILE_STATUS_info' => 'Wstrzymano odświeżanie cache - oczekiwanie na dokończenie szukania powiązań dla innych rekordów',
+							'FILE_STATUS_info' => 'Wstrzymano pełne 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_STATUS_info' => 'W trakcie pełnego odświeżania cache',
 						];
 
 						$query = "select count(*) from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache = 'Full' and FILE_STATUS = 'TO_GENERATE'";
@@ -1804,9 +1805,31 @@ SQL;
 		];
 
 		try {
+			$query = "select count(*) from `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA` where `FILE_STATUS` = 'IN_PROGRESS' and `BI_analiza_reloadCache` = 'Part' and ID != ${ID}";
+			$sqlArr = [
+				'ID' => $ID,
+				'BI_analiza_reloadCache' => 'Part',
+				'FILE_STATUS_info' => 'Odświeżam częściowo cache',
+			];
+			do {
+				DB::getPDO()->query("lock tables `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA` write");
+				$activeReloadingCache = DB::getPDO()->fetchValue($query);
+				if (!$activeReloadingCache) DB::getDB()->UPDATE_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $sqlArr);
+				DB::getPDO()->query("unlock tables");
+				if ($activeReloadingCache) {
+					BiAuditPowiazania::saveToLog("Czekam na zakończenie częściowego odświeżania cache przez inne zadanie");
+					sleep(30);
+				}
+			} while (!$activeReloadingCache);
+			
 			BiAuditPowiazania::saveToLog("Uruchamiam częściowe odświeżenie cache");
 			self::doReloadCache();
 			BiAuditPowiazania::saveToLog("Odświeżono częściowo cache");
+
+			$sqlArr['BI_analiza_reloadCache'] = 'No';
+			$sqlArr['FILE_STATUS_info'] = 'Zakończono odświeżanie cache i wyzwolono funkcję szukania powiązań';
+			DB::getDB()->UPDATE_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $sqlArr);
+
 			$BiAuditPowiazania = new BiAuditPowiazania($ID, $tasksDirLocation);
 			if (!$BiAuditPowiazania->powiazaniaFound()) throw new Exception("Nie znaleziono żadnych powiązań");
 			//file_put_contents($xmlFile, $BiAuditPowiazania->asXml());
@@ -2005,7 +2028,7 @@ class BiAuditPowiazania {
 		if (!$tasksDirLocation) self::throwException("Wrong directory of tasks location");
 		$this->tasksDirLocation = $tasksDirLocation;
 
-		$query = "select BI_analiza_minDepth, BI_analiza_maxDepth, BI_analiza_onlyTargets from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where ID = '{$ID}' and FILE_STATUS = 'IN_PROGRESS' and BI_analiza_reloadCache not in ('Full', 'Part')";
+		$query = "select BI_analiza_minDepth, BI_analiza_maxDepth, BI_analiza_onlyTargets from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where ID = '{$ID}' and FILE_STATUS = 'IN_PROGRESS' and BI_analiza_reloadCache not in ('Full')";
 		$result = DB::getPDO()->fetchAll($query);
 		if (!$result) self::throwException("Błąd danych");
 		$this->ID = $ID;