<?php
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//	自動でクラスを参照する
//	関数名	：	__autoload()
//	備考	：	参照先は./class/XXX.phpとする
//	更新	：	2013/03/12 KMK-Teraoka
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
function __autoload($className)
{
	$fPath = "./class/" . str_replace("_", "/", $className) . ".php";
	require_once $fPath;
}

//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// 点が線分のどちら側に存在するかをチェック
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
function getSide($p_, $a_, $b_)
{
	$x = "lon";
	$y = "lat";
	$exter = $p_[$x] * ($a_[$y] - $b_[$y]) + $a_[$x] * ($b_[$y] - $p_[$y]) + $b_[$x] * ($p_[$y] - $a_[$y]);
	if (0 < $exter)
		return 1;
	else if (0 > $exter)
		return -1;
	else
		return 0;
}

//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// 点がエリアに含まれるかをチェック
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
function insideArea($point_, $area_)
{
	$totalSide = 0;
	$linkNum = count($area_);
	$bIndex = 0;
	
	for($iCount = 0; $iCount < $linkNum; $iCount++)
	{
		if ($linkNum > $iCount + 1)
			$bIndex = $iCount + 1;
		else
			$bIndex = 0;
		
		$side = getSide($point_, $area_[$iCount], $area_[$bIndex]);
		if ($side == 0)
			return 1;
		else
			$totalSide += $side;
	}
	if (abs($totalSide) == $linkNum)
		return 1;
	
	return 0;
}

//===============================================
//	CommonUtilities
//	備考		：	
//	更新		：	2013/03/12 KMK-Teraoka
//===============================================
$HOST = "192.168.100.153";
$DB = "ansys";
$USER = "postgres";
$PASS = "am#71ZJ*";
$LOG_FILE = "./log/output.log";

$CONST_ID = 7;
$APPLICATION_ID = 13;
$TERMINAL_TABLE = "qgis.ts_terminal";
$HIS_TABLE = "qgis.ts_his_measure";
$SHIPPING_TABLE = "qgis.concrete_shipping_record";

$CONST_NAME = "岩国飛行場";

$COUNT_START_HI = "00:00";
$COUNT_END_HI = "23:59";

// (PTS周辺)
//$OUT_COUNT_AREA = array(
//	array("lat"	=>	36.907378,	"lon"	=>	139.935339),
//	array("lat"	=>	36.907781,	"lon"	=>	139.936197),
//	array("lat"	=>	36.906588,	"lon"	=>	139.936755),
//	array("lat"	=>	36.906280,	"lon"	=>	139.935972)
//);

// 現場事務所
$OUT_COUNT_AREA = array(
	array("lat"	=>	34.155745,	"lon"	=>	132.218098),
	array("lat"	=>	34.155212,	"lon"	=>	132.221660),
	array("lat"	=>	34.152833,	"lon"	=>	132.221703),
	array("lat"	=>	34.152584,	"lon"	=>	132.217841)
);

// (本館周辺)
//$IN_COUNT_AREA = array(
//	array("lat"	=>	36.908244,	"lon"	=>	139.937539),
//	array("lat"	=>	36.908527,	"lon"	=>	139.938343),
//	array("lat"	=>	36.907532,	"lon"	=>	139.939116),
//	array("lat"	=>	36.907180,	"lon"	=>	139.938215)
//);

// 飛行場全域
//$IN_COUNT_AREA = array(
//	array("lat"	=>	34.159971,	"lon"	=>	132.230157),
//	array("lat"	=>	34.157237,	"lon"	=>	132.247452),
//	array("lat"	=>	34.141823,	"lon"	=>	132.243762),
//	array("lat"	=>	34.143563,	"lon"	=>	132.225909)
//);

// (34.15264715 132.24154332)を中心に直径1km
$IN_COUNT_AREA = array(
	array("lat"	=>	34.157272,	"lon"	=>	132.236208),
	array("lat"	=>	34.157201,	"lon"	=>	132.247323),
	array("lat"	=>	34.149246,	"lon"	=>	132.246851),
	array("lat"	=>	34.149175,	"lon"	=>	132.236852)
);

try
{
	//================================================
	//	データベース接続
	//	備考		：	
	//	更新		：	2013/06/17 KMK-Teraoka
	//================================================
	$conn = pg_connect("
		host	=	". $HOST. "
		dbname	=	". $DB. "
		user	=	". $USER. "
		password=	". $PASS. "
	");
	if (!$conn)
		throw new Exception("データベースへの接続に失敗しました");
	
	//================================================
	//	データ格納配列
	//	備考		：	
	//	更新		：	2013/08/07 KMK-Teraoka
	//================================================
	$shipping = array();
	
	//================================================
	//	日付の取得
	//	備考		：	
	//	更新		：	2013/08/07 KMK-Teraoka
	//================================================
	$shipping["date"] = date("Y-m-d 00:00:00");
	
	//================================================
	//	端末一覧を取得
	//	備考		：	
	//	更新		：	2013/08/07 KMK-Teraoka
	//================================================
	$selTerminalList = "SELECT android_id FROM ". $TERMINAL_TABLE. "";
	$selTerminalList .= " WHERE const_id='". $CONST_ID. "'";
	$selTerminalList .= " AND app_id='". $APPLICATION_ID. "'";
	$selTerminalList .= " AND upddatetime >= '". $shipping["date"]. "'";
	$selTerminalList .= ";";
	if (!($resTerminalList = pg_query($conn, $selTerminalList)))
		throw new Exception("データ取得に失敗<br />". $resTerminalList. "<br />". pg_last_error(). "<br />");
	
	$length = pg_num_rows($resTerminalList);
	for($iCount = 0; $iCount < $length; $iCount++)
	{
		$rowTerminalList = pg_fetch_assoc($resTerminalList, $iCount);
		$shipping["terminal"][$iCount]["android_id"] = $rowTerminalList["android_id"];
	}
	//================================================
	//	出荷、搬入データを集計
	//	備考		：	
	//	更新		：	2013/08/07 KMK-Teraoka
	//================================================
	for($iCount = 0; $iCount < $length; $iCount++)
	{
		$androidId = $shipping["terminal"][$iCount]["android_id"];
		
		$selHistory = "SELECT lat, lon, regdatetime FROM ". $HIS_TABLE. "";
		$selHistory .= " WHERE android_id='". $androidId. "'";
		$selHistory .= " AND const_id='". $CONST_ID."'";
		$selHistory .= " AND app_id='". $APPLICATION_ID. "'";
		$selHistory .= " AND regdatetime >= '". $shipping["date"]. "'";
		$selHistory .= " ORDER BY regdatetime";
		$selHistory .= ";";
		
		print $selHistory. "<br />";
		
		if (!($resHistory = pg_query($conn, $selHistory)))
			throw new Exception("データ取得に失敗<br />". $resHistory. "<br />". pg_last_error(). "<br />");
		
		$passOut = 0;
		$shipping["terminal"][$iCount]["status"] = -1;	// -1:不明、1:往路、2:復路
		$shipping["terminal"][$iCount]["in_count"] = 0;
		$shipping["terminal"][$iCount]["out_count"] = 0;
		$shipping["terminal"][$iCount]["record_count"] = 0;
		
		$hisLength = pg_num_rows($resHistory);
		for($jCount = 0; $jCount < $hisLength; $jCount++)
		{
			$rowHistory = pg_fetch_assoc($resHistory, $jCount);
			if ($passOut == 0)
			{
				if (insideArea(array("lat"	=>	$rowHistory["lat"], "lon"	=>	$rowHistory["lon"]), $OUT_COUNT_AREA) == 1)
				{
					// 出荷
					$passOut = 1;
					$shipping["terminal"][$iCount]["record"][$shipping["terminal"][$iCount]["record_count"]]["date"] = $rowHistory["regdatetime"];
					$shipping["terminal"][$iCount]["record"][$shipping["terminal"][$iCount]["record_count"]]["out_or_in"] = "1";
					$shipping["terminal"][$iCount]["record_count"] = $shipping["terminal"][$iCount]["record_count"] + 1;
					$shipping["terminal"][$iCount]["out_count"] = $shipping["terminal"][$iCount]["out_count"] + 1;
					$$shipping["terminal"][$iCount]["status"] = 0;
					
					print "出荷<br />";
				}
			}
			else
			{
				if (insideArea(array("lat"	=>	$rowHistory["lat"], "lon"	=>	$rowHistory["lon"]), $IN_COUNT_AREA) == 1)
				{
					// 搬入
					$passOut = 0;
					$shipping["terminal"][$iCount]["record"][$shipping["terminal"][$iCount]["record_count"]]["date"] = $rowHistory["regdatetime"];
					$shipping["terminal"][$iCount]["record"][$shipping["terminal"][$iCount]["record_count"]]["out_or_in"] = "2";
					$shipping["terminal"][$iCount]["record_count"] = $shipping["terminal"][$iCount]["record_count"] + 1;
					$shipping["terminal"][$iCount]["in_count"] = $shipping["terminal"][$iCount]["in_count"] + 1;
					$shipping["terminal"][$iCount]["status"] = 1;
					print "搬入<br />";
				}
			}
		}
	}
	
	print $shipping;
	
	//================================================
	//	出荷、搬入データを更新
	//	備考		：	
	//	更新		：	2013/08/07 KMK-Teraoka
	//================================================
//	for($iCount = 0; $iCount < $length; $iCount++)
//	{
//		$androidId = $shipping["terminal"][$iCount]["android_id"];
//		for($jCount = 0; $jCount < $shipping["terminal"][$iCount]["record_count"]; $jCount++)
//		{
//			$selRecord = "SELECT count(*) FROM ". $SHIPPING_TABLE. "";
//			$selRecord .= " WHERE record_date='". $shipping["terminal"][$iCount]["record"][$jCount]["date"]. "'";
//			$selRecord .= " AND android_id='". $androidId. "'";
//			$selRecord .= " AND status='". $shipping["terminal"][$iCount]["record"][$jCount]["out_or_in"]. "'";
//			$selRecord .= ";";
//			if (!($resRecord = pg_query($conn, $selRecord)))
//				throw new Exception("データ取得に失敗<br />". $resRecord. "<br />". pg_last_error(). "<br />");
//			$rowRecord = pg_fetch_assoc($resRecord, 0);
//			
//			if ($rowRecord["count"] == 0)
//			{
//				$insRecord = "INSERT INTO ". $SHIPPING_TABLE. "";
//				$insRecord .= " VALUES ('". $shipping["terminal"][$iCount]["record"][$jCount]["date"]. "', '". $CONST_ID. "', '". $APPLICATION_ID. "', '". $androidId. "', '". $shipping["terminal"][$iCount]["record"][$jCount]["out_or_in"]. "', current_timestamp)";
//				$insRecord .= ";";
//				if (!($resRecord = pg_query($conn, $insRecord)))
//					throw new Exception("データ挿入に失敗<br />". $resRecord. "<br />". pg_last_error(). "<br />");
//			}
//		}
//	}
}
catch(Exception $exc)
{
	print "<html>";
	print "<head>";
	print "<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">";
	print "<title>". "コンクリート品質管理システム -出荷、搬入記録-". "</title>";
	print "</head>";
	print "<body>";
	
	print "<font color=\"#FF0000\">";
	print "【スクリプトエラー】<br />";
	print $exc->getMessage(). "<br />";
	print "</font>";
	
	print "<font size=\"3\">";
	print "<form name=\"topForm_2\" method=\"post\" action=\"". "../index.php". "\" style=\"display:inline\">";
	print "<a href=\"javascript:topForm_2.submit()\">トップ画面へ戻る</a>";
	print "</form>";
	print "<br />";
	print "</font>";
	
	print "</body>";
	print "</html>";
}
?>
