Files
GEOVizor_PHP/observation/pscripts/objects.php
2023-11-07 19:51:49 +06:00

232 lines
9.2 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
//Выдираю все объекты на которых установлен терминал и отправляю клиенту
@session_start();
if(!isset($HTTP_RAW_POST_DATA))
{ $HTTP_RAW_POST_DATA = file_get_contents("php://input");
}
$object = json_decode($HTTP_RAW_POST_DATA);
//if($object->active=='') $object->active='null';
//if($object->cnumber=='') $object->cnumber='null'; else $object->cnumber='"%'.$object->cnumber.'%"'; //Гос. номер
//if($object->tnumber=='') $object->tnumber='null'; else $object->tnumber='"%'.$object->tnumber.'%"'; //Номер ТД
//if($object->country_seal_begin=='') $object->country_seal_begin='null'; //Страна пломб.
//if($object->country_seal_end=='') $object->country_seal_end='null'; //Страна распломб.
require_once("../../monitoring/config.php");
require_once("../../resources/metadata/include/tools.php");
$db=connectToDB();
$db->exec("SET TIME ZONE 'UTC';"); //Ниже в коде есть смещение временной зоны под настройки каждого пользователя
$fn=0;
if(isset($_GET['fn'])) { $fn=$_GET['fn']; }
if($fn=='0') //Вернуть список объектов в соответствии с фильтром
{
if(!property_exists($object,'company_id') or $object->company_id=='') $object->company_id='null'; //id компании
if(!property_exists($object,'cnumber') or $object->cnumber=='') $object->cnumber='null'; else $object->cnumber='\'%'.$object->cnumber.'%\''; //Гос. номер
$sql = 'SELECT
o.id,
0 as seq,
o.name,
sl.lat,
sl.lon,
round(cast(sl.speed as numeric),1) speed,
to_char(sl.date+(select timezone from main._users where id='.$_SESSION['USER_ID'].'), \'yyyy.mm.dd HH24:MI:SS\') as date,
\'\' as declaration,
i.file_name as icon_name,
\'\' as active,
t.serial || \' (\' || t.imei || \')\' AS terminal_name,
coalesce(g.geofences,\'\') as geofences
from
main.objects o
LEFT JOIN main.terminals_locations sl ON sl.id=o.terminal_location_id
LEFT JOIN main.terminals t ON t.id = o.terminal_id
LEFT JOIN main.icons i on i.id=o.icon_id
LEFT JOIN (SELECT og.object_id, CAST(array_to_string(array_agg(gg.name), \', \') AS character varying ) AS geofences FROM main.objects_geofences og, main.geofences gg WHERE og.del = FALSE and gg.del=false AND gg.id = og.geofence_id GROUP BY og.object_id) g ON o.id = g.object_id
where
o.del=false
and ('.$object->company_id.' is null or '.$object->company_id.' in (select company_id from main.companies_objects where del=false and object_id=o.id))
and ('.$object->cnumber.' is null or o.name like '.$object->cnumber.')
order by o.name,o.id';
try
{
$res = $db->query($sql);
}catch (Exception $e)
{ echo $e->getMessage();
$res = null;
}
//Массив объектов
$json ='[';
//Перебираю и последовательно отправляю не отправленные пломбы
while ($row = $res->fetch(PDO::FETCH_ASSOC))
{
$json .="\n";
$json .='{';
$json .='"id":"'.$row['id']."\",\n";
$json .='"seq":"'.$row['seq']."\",\n";
$json .='"active":"'.$row['active']."\",\n";
$json .='"name":"'.$row['name']."\",\n";
$json .='"terminal_name":"'.$row['terminal_name']."\",\n";
$json .='"declaration":"'.$row['declaration']."\",\n";
$json .='"icon_name":"'.afterLast($row['icon_name'],'_')."\",\n";
//выбираю показания 3х датчиков для данного объекта (установки)
//$json .="\"bat\":\"0\",\n";
//$json .="\"bat_date\":\"0\",\n";
//$json .="\"tros\":\"0\",\n";
//$json .="\"tros_date\":\"0\",\n";
//$json .="\"box\":\"0\",\n";
//$json .="\"box_date\":\"0\",\n";
$json .='"lat":'.json_encode($row['lat']).",\n";
$json .='"lon":'.json_encode($row['lon']).",\n";
$json .='"speed":'.json_encode($row['speed']).",\n";
$json .='"date":"'.$row['date']."\",\n";
$json .="\"country\":\"KZ\",\n";
$json .='"geofences":"'.$row['geofences']."\",\n";
//Выбираю показания всех датчиков (которые видны)
$json .='"sensors":[';
$sql="
select
obs.id,
obs.name,
round(obr.value::numeric,2) as value,
to_char(obr.date+(select timezone from main._users where id=".$_SESSION['USER_ID']."), 'yyyy.mm.dd HH24:MI:SS') as date,
obs.sensor_type_id,
trst.measurement as terminalsensortype_name
from
main.objects_sensors obs
left join main.sensors_values obr on obr.id=obs.sensor_value_id
left join main.terminals_sensors trs on trs.id=obs.terminal_sensor_id
left join main.sensors_types trst on trst.id=trs.sensor_type_id
where
obs.del=false
and obs.object_id=".$row['id']."
order by obs.name";
try
{
$res2 = $db->query($sql);
}catch (Exception $e)
{ echo $e->getMessage();
$res2 = null;
}
if ($res2->rowCount() > 0) {
while ($row2 = $res2->fetch(PDO::FETCH_ASSOC))
{
$json .='{';
$json .='"id":"'.$row2['id']."\",\n";
$json .='"name":"'.$row2['name']."\",\n";
$json .='"value":"'.$row2['value']."\",\n";
$json .='"type_name":"'.$row2['terminalsensortype_name']."\",\n";
$json .='"date":"'.$row2['date']."\"\n";
$json .='},';
}
$json=substr($json, 0, -1);
}
$json .=']';
$json .='},';
}
if($json[strlen($json) - 1]==','){
$json=substr ( $json , 0, strlen($json)-1 );
}
$json .=']';
header('Content-Type: application/json');
echo $json;
exit;
}else
if($fn=='1') //Вернуть список объектов для обновления полей по переданным ID
{
$sql = 'SELECT
o.id,
0 as seq,
o.name,
sl.lat,
sl.lon,
to_char(sl.date+(select timezone from main._users where id='.$_SESSION['USER_ID'].'), \'yyyy.mm.dd HH24:MI:SS\') as date,
\'\' as declaration,
i.file_name as icon_name,
\'\' as active
from
main.objects o
LEFT JOIN main.terminals_locations sl ON sl.id=o.terminal_location_id
LEFT JOIN main.icons i on i.id=o.icon_id
where
o.del=false
and o.id in '.str_replace("]", ")", str_replace("[", "(", $HTTP_RAW_POST_DATA)).'
order by o.name,o.id';
try
{
$res = $db->query($sql);
}catch (Exception $e)
{ echo $e->getMessage();
$res = null;
}
//Массив объектов
$json ='[';
//Перебираю и последовательно отправляю не отправленные пломбы
while ($row = $res->fetch(PDO::FETCH_ASSOC))
{
$json .="\n";
$json .='{';
$json .='"id":"'.$row['id']."\",\n";
$json .='"lat":"'.$row['lat']."\",\n";
$json .='"lon":"'.$row['lon']."\",\n";
$json .='"date":"'.$row['date']."\",\n";
//Выбираю показания всех датчиков (которые видны)
$json .='"sensors":[';
$sql="
select
obs.id,
round(obr.value::numeric,2) as value,
to_char(obr.date+(select timezone from main._users where id=".$_SESSION['USER_ID']."), 'yyyy.mm.dd HH24:MI:SS') as date
from
main.objects_sensors obs
left join main.sensors_values obr on obr.id=obs.sensor_value_id
left join main.terminals_sensors trs on trs.id=obs.terminal_sensor_id
where
obs.del=false
and obs.object_id=".$row['id']."
order by obs.name";
try
{
$res2 = $db->query($sql);
}catch (Exception $e)
{ echo $e->getMessage();
$res2 = null;
}
if ($res2->rowCount() > 0) {
while ($row2 = $res2->fetch(PDO::FETCH_ASSOC))
{
$json .='{';
$json .='"id":"'.$row2['id']."\",\n";
$json .='"value":"'.$row2['value']."\",\n";
$json .='"date":"'.$row2['date']."\"\n";
$json .='},';
}
$json=substr($json, 0, -1);
}
$json .=']';
$json .='},';
}
if($json[strlen($json) - 1]==','){
$json=substr ( $json , 0, strlen($json)-1 );
}
$json .=']';
header('Content-Type: application/json');
echo $json;
exit;
}