You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
3.2 KiB
PHP

<?php
include('config.inc.php');
$db = new PDO('mysql:host=' . $config['host'] . ';dbname=' . $config['database'], $config['dbuser'], $config['password'], [
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'"
]);
// $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE , PDO::FETCH_ASSOC );
$filter = isset($_GET['filter']) ? $_GET['filter'] : '';
$dy_mapper = array();
$line_mapper = array();
$line_dy_mapper = array();
$tower_mapper = array();
$tower_line_mapper = array();
$stmt = $db->query("SELECT * FROM dy_level WHERE status=1");
$rows = $stmt->fetchAll();
$stmt = null;
$result = array();
foreach ($rows as $row)
{
$dy_mapper[$row['id']] = count($result);
$row['lines'] = array();
array_push($result, $row);
}
$stmt = $db->query("SELECT * FROM `lines` WHERE status=1");
$rows = $stmt->fetchAll();
$stmt = null;
foreach ($rows as $row)
{
$dy_id = intval($row['dy_level_id']);
if (!isset($dy_mapper[$dy_id]))
{
continue;
}
$line_id = intval($row['id']);
$dy_idx = $dy_mapper[$dy_id];
$line_mapper[$line_id] = count($result[$dy_idx]['lines']);
$line_dy_mapper[$line_id] = $dy_id;
$row['towers'] = array();
array_push($result[$dy_idx]['lines'], $row);
}
$stmt = $db->query("SELECT * FROM towers WHERE status=1");
$rows = $stmt->fetchAll();
$stmt = null;
$towers = array();
foreach ($rows as $row)
{
$line_id = intval($row['line_id']);
if (!isset($line_mapper[$line_id]))
{
continue;
}
$tower_id = intval($row['id']);
$tower_line_mapper[$tower_id] = $line_id;
$dy_id = intval($line_dy_mapper[$line_id]);
$dy_idx = $dy_mapper[$dy_id];
$line_idx = $line_mapper[$line_id];
$tower_mapper[$tower_id] = count($result[$dy_idx]['lines'][$line_idx]['towers']);
$row['terminals'] = array();
array_push($result[$dy_idx]['lines'][$line_idx]['towers'], $row);
}
$sql = "SELECT * FROM terminals WHERE status=1";
if ($filter == 'ws')
{
$sql = "SELECT t1.* FROM terminals AS t1 JOIN terminal_status AS t2 ON t1.id=t2.term_id WHERE t1.status=1 AND t2.ws_update_time <>0";
}
else if ($filter == 'rs')
{
$sql = "SELECT t1.* FROM terminals AS t1 JOIN terminal_status AS t2 ON t1.id=t2.term_id WHERE t1.status=1 AND t2.rs_update_time <>0";
}
else if ($filter == 'bi')
{
$sql = "SELECT * FROM terminals WHERE id IN (SELECT distinct term_id FROM terminal_basic_info_history) AND status=1";
}
else if ($filter == 'gps')
{
$sql = "SELECT * FROM terminals WHERE id IN (SELECT distinct term_id FROM terminal_position_history) AND status=1";
}
$stmt = $db->query($sql);
$rows = $stmt->fetchAll();
$stmt = null;
foreach ($rows as $row)
{
$tower_id = intval($row['tower_id']);
if (!isset($tower_mapper[$tower_id]))
{
continue;
}
$tower_idx = $tower_mapper[$tower_id];
$line_id = $tower_line_mapper[$tower_id];
$line_idx = $line_mapper[$line_id];
$dy_id = $line_dy_mapper[$line_id];
$dy_idx = $dy_mapper[$dy_id];
array_push($result[$dy_idx]['lines'][$line_idx]['towers'][$tower_idx]['terminals'], $row);
}
header ('Content-type: application/json; charset=utf-8');
echo json_encode($result, JSON_UNESCAPED_UNICODE);