Folder reorganize 1
This commit is contained in:
129
includes/millprojected60min_mssql.php
Normal file
129
includes/millprojected60min_mssql.php
Normal file
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
/**
|
||||
* Mill Projected Total - MSSQL Version (60 minute window)
|
||||
*
|
||||
* Uses SQL Server archive table (row-based storage) instead of MySQL
|
||||
*
|
||||
* Tags:
|
||||
* - WTOTGROUND (ID: 342) - West Mill Total Ground
|
||||
* - CANETOT (ID: 218) - East Mill Total Ground
|
||||
* - TotalGround (ID: 230) - Total Ground Since 5 AM
|
||||
*/
|
||||
|
||||
$servername = "192.168.0.13\\SQLEXPRESS";
|
||||
$username = "opce";
|
||||
$password = "opcelasuca";
|
||||
$dbname = "history";
|
||||
|
||||
try {
|
||||
$pdo = new PDO(
|
||||
"sqlsrv:Server=$servername;Database=$dbname",
|
||||
$username,
|
||||
$password,
|
||||
[
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
]
|
||||
);
|
||||
} catch (PDOException $e) {
|
||||
echo "0";
|
||||
return;
|
||||
}
|
||||
|
||||
// Tag IDs
|
||||
$eastId = 218; // CANETOT
|
||||
$westId = 342; // WTOTGROUND
|
||||
$totalId = 230; // TotalGround
|
||||
|
||||
$query = "
|
||||
DECLARE @now DATETIME = GETDATE();
|
||||
DECLARE @oneHourAgo DATETIME = DATEADD(HOUR, -1, @now);
|
||||
|
||||
-- Calculate hours remaining until 5 AM
|
||||
-- If before 5 AM, time until 5 AM today
|
||||
-- If after 5 AM, time until 5 AM tomorrow
|
||||
DECLARE @hoursRemaining FLOAT;
|
||||
DECLARE @targetTime DATETIME;
|
||||
|
||||
IF CAST(@now AS TIME) < '05:00:00'
|
||||
SET @targetTime = CAST(CAST(@now AS DATE) AS DATETIME) + CAST('05:00:00' AS DATETIME)
|
||||
ELSE
|
||||
SET @targetTime = CAST(DATEADD(DAY, 1, CAST(@now AS DATE)) AS DATETIME) + CAST('05:00:00' AS DATETIME)
|
||||
|
||||
SET @hoursRemaining = DATEDIFF(SECOND, @now, @targetTime) / 3600.0;
|
||||
|
||||
-- Get latest East value
|
||||
DECLARE @eastLatest FLOAT = (
|
||||
SELECT TOP 1 Value
|
||||
FROM dbo.archive
|
||||
WHERE ID = :eastId
|
||||
ORDER BY TimeStamp DESC
|
||||
);
|
||||
|
||||
-- Get East value from ~60 minutes ago
|
||||
DECLARE @eastOld FLOAT = (
|
||||
SELECT TOP 1 Value
|
||||
FROM dbo.archive
|
||||
WHERE ID = :eastId2 AND TimeStamp <= @oneHourAgo
|
||||
ORDER BY TimeStamp DESC
|
||||
);
|
||||
|
||||
-- Get latest West value
|
||||
DECLARE @westLatest FLOAT = (
|
||||
SELECT TOP 1 Value
|
||||
FROM dbo.archive
|
||||
WHERE ID = :westId
|
||||
ORDER BY TimeStamp DESC
|
||||
);
|
||||
|
||||
-- Get West value from ~60 minutes ago
|
||||
DECLARE @westOld FLOAT = (
|
||||
SELECT TOP 1 Value
|
||||
FROM dbo.archive
|
||||
WHERE ID = :westId2 AND TimeStamp <= @oneHourAgo
|
||||
ORDER BY TimeStamp DESC
|
||||
);
|
||||
|
||||
-- Get current total ground
|
||||
DECLARE @totalGround FLOAT = (
|
||||
SELECT TOP 1 Value
|
||||
FROM dbo.archive
|
||||
WHERE ID = :totalId
|
||||
ORDER BY TimeStamp DESC
|
||||
);
|
||||
|
||||
-- Calculate rates (tons per hour)
|
||||
DECLARE @eastRate FLOAT = COALESCE(@eastLatest, 0) - COALESCE(@eastOld, 0);
|
||||
DECLARE @westRate FLOAT = COALESCE(@westLatest, 0) - COALESCE(@westOld, 0);
|
||||
|
||||
-- Handle negative rates (mill reset or bad data)
|
||||
IF @eastRate < 0 SET @eastRate = 0;
|
||||
IF @westRate < 0 SET @westRate = 0;
|
||||
|
||||
-- Calculate projection
|
||||
SELECT ROUND(
|
||||
((@eastRate + @westRate) * @hoursRemaining) + COALESCE(@totalGround, 0),
|
||||
0
|
||||
) AS millprojected;
|
||||
";
|
||||
|
||||
try {
|
||||
$stmt = $pdo->prepare($query);
|
||||
$stmt->execute([
|
||||
':eastId' => $eastId,
|
||||
':eastId2' => $eastId,
|
||||
':westId' => $westId,
|
||||
':westId2' => $westId,
|
||||
':totalId' => $totalId,
|
||||
]);
|
||||
|
||||
$result = $stmt->fetch();
|
||||
$projected = $result ? round($result['millprojected']) : 0;
|
||||
|
||||
} catch (PDOException $e) {
|
||||
$projected = 0;
|
||||
}
|
||||
|
||||
$pdo = null;
|
||||
?>
|
||||
<?php echo $projected; ?>
|
||||
Reference in New Issue
Block a user