293 lines
16 KiB
PHP
293 lines
16 KiB
PHP
|
|
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8">
|
|
<?php
|
|
error_reporting(E_ALL);
|
|
echo 'starting ...<br>';
|
|
require_once("soap.php");
|
|
$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer
|
|
//$cl->__setLocation('http://172.20.43.10:3615/');
|
|
$cl->__setLocation('http://172.21.11.101:3615/');
|
|
echo 'connected ...<br>';
|
|
echo 'Start: '.date("Y-m-d H:i:s").'<br/><br/>';
|
|
|
|
$scriptDate = date("Y-m-d H:i:s");
|
|
|
|
date_default_timezone_set('Europe/Warsaw');
|
|
require_once("func.php");
|
|
require_once("dbaccess.php");
|
|
$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db');
|
|
mysql_select_db($db_name);
|
|
mysql_query("SET NAMES utf8");
|
|
mysql_query("SET CHARACTER_SET utf8_general_ci");
|
|
|
|
|
|
function convertData($insertDate)
|
|
{
|
|
unset($res);
|
|
//re-contruct to format
|
|
$res = date('Y-m-d H:i:s', strtotime($insertDate));
|
|
|
|
return $res;
|
|
}
|
|
|
|
function time_to_int($inParam)
|
|
{
|
|
unset($outParam);
|
|
$outParam = (float) str_replace(array(' ','-',':'), array('','',''), $inParam);
|
|
|
|
return $outParam;
|
|
}
|
|
|
|
function objectToArray($d) {
|
|
if (is_object($d)) {
|
|
// Gets the properties of the given object
|
|
// with get_object_vars function
|
|
$d = get_object_vars($d);
|
|
}
|
|
|
|
if (is_array($d)) {
|
|
/*
|
|
* Return array converted to object
|
|
* Using __FUNCTION__ (Magic constant)
|
|
* for recursive call
|
|
*/
|
|
return array_map(__FUNCTION__, $d);
|
|
}
|
|
else {
|
|
// Return array
|
|
return $d;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// pobieramy tablice studni
|
|
$ile_zmian=0;
|
|
$well_array=null;
|
|
$wynik = mysql_query("select WLL_NAME from seg_wells,seg_well_pump_eng_rel where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)");
|
|
if($wynik)while ($r = mysql_fetch_array($wynik))
|
|
{
|
|
$well_array[] = $r["WLL_NAME"];
|
|
}
|
|
$wl = $cl->GetWellsDataAsArray($well_array);
|
|
|
|
for($i=0; $i<count($wl["wells"]); $i++)
|
|
{
|
|
unset($deviceInfoArray);
|
|
$deviceInfoArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'");
|
|
|
|
|
|
unset($syndisStatus);
|
|
if ($wl['wells'][$i]['pumpOnOff']['value']==0) $syndisStatus = "OFF";
|
|
elseif ($wl['wells'][$i]['pumpOnOff']['value']==1) $syndisStatus = "ON";
|
|
|
|
// sprawdza, czy nie ma błędnego statusu w historii
|
|
$ilePowtorzen_01 = 20;
|
|
$ilePowtorzen_02 = $ilePowtorzen_01-7;
|
|
unset($isNotrealiableSaved);
|
|
//$isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_WELL_NAME='".$wl['wells'][$i]['well']['id']."' and NOT_AUDIT_END_DATE is null and NOT_LICZ<".$ilePowtorzen_01.")");
|
|
$isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_WELL_NAME='".$wl['wells'][$i]['well']['id']."' and NOT_AUDIT_END_DATE is null)");
|
|
|
|
|
|
// sprawdza, czy w pomiarze nie mamy znacznika MANUAL - wyłącznik wprowadzony z reki
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
if ($wl['wells'][$i]['pumpOnOff']['flag']=="MANUAL")
|
|
{
|
|
mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_END_DATE=now(),NOT_AUDIT_END_DATE=now(),NOT_END_FLAG='MANUAL',NOT_LICZ=100 WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']);
|
|
unset($isNotrealiableSaved);
|
|
|
|
// usuwa wszystkie pomiary starsze nić podany MANUAL
|
|
mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID']." and DRD_AUDIT_USR='SYNDIS' and DRD_AUDIT_DATE>='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."'");
|
|
|
|
//pobiera historię
|
|
unset($hisOnOffArray);
|
|
$hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$wl['wells'][$i]['pumpOnOff']['date']));
|
|
for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++)
|
|
{
|
|
if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) >= time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])) )
|
|
{
|
|
|
|
unset($newOnOffStatus);
|
|
$newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value'];
|
|
if ($newOnOffStatus==1)
|
|
{
|
|
$newOnOffStatus='ON';
|
|
mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
}
|
|
else
|
|
{
|
|
$newOnOffStatus = 'OFF';
|
|
mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
|
|
|
|
|
|
// Jeśli flaga Q jest correct oraz nie czeka na licznik
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
if ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)==0)
|
|
{
|
|
// pobiera ostatni systus pompy
|
|
unset($wellLastStatusArray);
|
|
$wellLastStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID']." and DRD_AUDIT_USR='SYNDIS')");
|
|
|
|
// jeśli nie zwraca żadnych wyników - sprawdza w tabeli historycznej
|
|
if (count($wellLastStatusArray)<=0)
|
|
{
|
|
unset($wellLastStatusArray);
|
|
$wellLastStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det_his where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID']." and DRD_AUDIT_USR='SYNDIS')");
|
|
}
|
|
|
|
|
|
//pobiera historię
|
|
unset($hisOnOffArray);
|
|
$hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$wl['wells'][$i]['pumpOnOff']['date']));
|
|
for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++)
|
|
{
|
|
if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) > time_to_int($wellLastStatusArray[0]['DRD_AUDIT_DATE']) )
|
|
{
|
|
|
|
unset($newOnOffStatus);
|
|
$newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value'];
|
|
if ($newOnOffStatus==1)
|
|
{
|
|
$newOnOffStatus='ON';
|
|
mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
}
|
|
else
|
|
{
|
|
$newOnOffStatus = 'OFF';
|
|
mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
}
|
|
|
|
//wpisuje do tabeli inforację, że trzeba przebudować tabele softspm_rep.rep_002_avg_pump_working
|
|
mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='".$newOnOffStatus."',ISN_DRS_ID='".$wellLastStatusArray[0]['DRD_DRS_ID']."',ISN_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
$ile_zmian++;
|
|
|
|
}
|
|
}
|
|
}
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
|
|
|
|
// Jeśli był zarejestrowany błędny status, a przyszedł poprawny - pobiera historię wyłączników
|
|
// Łata na problemy w SYNDIS
|
|
// sprawdza 15 powtóerzń, aż minie 15*20 sek, aż pobiorą się pomiary ze sterownika do bufora
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)>0 && $isNotrealiableSaved[0]['NOT_LICZ']>$ilePowtorzen_02)
|
|
{
|
|
|
|
// pobiera ostatnio zarejestrowany pomiar wyłącznika
|
|
unset($lasArrayOnOff);
|
|
$lasArrayOnOff = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID']." and DRD_AUDIT_USR='SYNDIS')");
|
|
|
|
//konwertuje date na UTC
|
|
// =========================================
|
|
$getCurMonth = (int) date('m');
|
|
|
|
if ($getCurMonth>3 && $getCurMonth<11)
|
|
$offset = 2 * 60 * 60;
|
|
else
|
|
$offset = 60 * 60;
|
|
// =========================================
|
|
$utcDate = date('Y-m-d\TH:i:s\Z', strtotime($lasArrayOnOff[0]['DRD_AUDIT_DATE'])- $offset);
|
|
|
|
//pobiera historię
|
|
unset($hisOnOffArray);
|
|
$hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$utcDate));
|
|
|
|
//jeśli tablica zwrócona z SYNDIS posiada rekody - są zwracane.
|
|
if (count($hisOnOffArray['probes'])>0 && $isNotrealiableSaved[0]['NOT_DRS_ID']>0)
|
|
{
|
|
unset($onoffTempNewArray);
|
|
|
|
for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++)
|
|
{
|
|
if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) > time_to_int($lasArrayOnOff[0]['DRD_AUDIT_DATE']) )
|
|
{
|
|
unset($newOnOffStatus);
|
|
$newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value'];
|
|
if ($newOnOffStatus==1)
|
|
{
|
|
$newOnOffStatus='ON';
|
|
mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
}
|
|
else
|
|
{
|
|
$newOnOffStatus = 'OFF';
|
|
mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'");
|
|
}
|
|
|
|
mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='".$newOnOffStatus."',ISN_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',ISN_DATE=now()");
|
|
$ile_zmian++;
|
|
}
|
|
}
|
|
|
|
// w tym wariancie nie zaczytujemy listy pomiarów - robi się bałagan
|
|
// =========================================================================
|
|
// =========================================================================
|
|
|
|
|
|
}
|
|
|
|
mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_END_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."',NOT_END_VALUE='".$syndisStatus."',NOT_END_FLAG='CORRECT',NOT_AUDIT_END_DATE=now(),NOT_LICZ_LAST_DATE='".$lasArrayOnOff[0]['DRD_AUDIT_DATE']."' WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']);
|
|
// dodaje do tabeli wpis, że trzeba przeanalizować dane nadmiarowe
|
|
mysql_query("INSERT INTO rep_clean_notrealiable SET CNT_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID'].",CNT_AUDIT_DATE='".$lasArrayOnOff[0]['DRD_AUDIT_DATE']."'");
|
|
|
|
}
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
|
|
|
|
// podbija licznik NOT_LICZ w tabeli rep_soap_syndis_notrealiable_onoff
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)>0 && $isNotrealiableSaved[0]['NOT_LICZ']<$ilePowtorzen_01)
|
|
{
|
|
$newLicznik = $isNotrealiableSaved[0]['NOT_LICZ']+1;
|
|
mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_LICZ=".$newLicznik." WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']);
|
|
}
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
|
|
|
|
// jeśli pomiar jest niewiarygodny a jest już jaiś wpis, to "zeruje licznik", ustawia wartość licznika na 1
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="NOTREALIABLE" && count($isNotrealiableSaved)>0)
|
|
{
|
|
mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_LICZ=1 WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']);
|
|
}
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
|
|
|
|
// brak łączności i brak aktualnie aktywnego wpisu
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="NOTREALIABLE" && count($isNotrealiableSaved)==0)
|
|
{
|
|
// pobiera informacje o studni
|
|
unset($wellArray);
|
|
$wellArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'");
|
|
|
|
mysql_query("INSERT INTO rep_soap_syndis_notrealiable_onoff SET NOT_DRS_ID=".$wellArray[0]['DRS_ID'].",NOT_WELL_ID=".$wellArray[0]['WLL_ID'].",NOT_WELL_NAME='".$wellArray[0]['WLL_NAME']."',NOT_WHEN_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."',NOT_WHEN_VALUE='".$syndisStatus."',NOT_WHEN_FLAG='NOTREALIABLE',NOT_AUDIT_WHEN_DATE=now()");
|
|
}
|
|
// ============================== ============================== ============================== ============================== ============================== ==============================
|
|
|
|
}
|
|
|
|
|
|
//mysql_query("truncate table softspm_rep.rep_002_avg_pump_working");
|
|
//mysql_query("insert into softspm_rep.rep_002_avg_pump_working select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from (select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 union select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507) tb order by DRD_DRS_ID,DRD_AUDIT_DATE,DRD_ID");
|
|
|
|
mysql_close($polacz);
|
|
|
|
echo 'Zmieniono <b>'.$ile_zmian.'</b> stanów załączenia/wyłączenia dla studni.<br/><br/>';
|
|
echo 'Finish: '.date("Y-m-d H:i:s").'<br>';
|
|
|
|
?>
|