Files
votianng/html/include/autoranking_main.php
2026-03-29 10:34:57 +02:00

177 lines
7.0 KiB
PHP

<?php
/*=======================================================================
*
* autoranking_main.php
*
* Autor: Marc Vollmann
*
=======================================================================*/
include_once ("../include/mcglobal.inc.php");
$standalone = "1"; // has to be set before including "ranking.inc.php"
include_once ("../include/ranking.inc.php");
include_once ("../include/inc_autoranking.inc.php");
// if (isRunning(3)):
// exit();
// endif;
// Execution-Time for script
set_time_limit(0);
// $path = getParameterValue("0", "PATH_DOCROOT", "0");
$dirName = dirname(__FILE__);
$dirName = str_replace("\\", "/", $dirName);
$lastSlashPos = strrpos($dirName,"/");
$path = substr($dirName, 0, $lastSlashPos);
// Get single job for autoranking with the zipcode of the startaddress and other informations
function getLockedCouriersByAutoranking ($limit = "") {
global $db;
$retArray = array();
$limitClause = "";
if ($limit != "" && is_numeric($limit)) : $limitClause = "LIMIT 0," . $limit; endif;
$sqlquery = "SELECT cr.cr_id, cr.cr_ar_jb_id FROM courier AS cr WHERE cr.cr_ar_jb_id > '0' ORDER BY cr.cr_ar_jb_id " . $limitClause;
$result = $db->dbQ($sqlquery);
while ($row = $result->fetch_assoc()):
$retArray[] = array($row["cr_id"], $row["cr_ar_jb_id"]);
endwhile;
$result->free();
return $retArray;
}
// Endless loop
while (TRUE):
// Set execution time for keepalive
$currentTime = getDateTime("0");
updateStmt("keepalive", "ka_process", "autoranking", array("ka_lastexecutiontime", $currentTime),"");
// *******************
// *** Assign jobs ***
// *******************
// Get next job(s) with status 8 for the specified headquarter (no storno)
$jobArray = getAutoRankingJobs(40);
// Loop all jobs (default one)
$lenJobArray = count($jobArray);
for ($i = 0; $i < $lenJobArray; $i++) :
$jobId = $jobArray[$i][0];
$system_result = "";
$cmd = "php " . $path . "/include/autoranking_single.php " . $jobId . " >" . $path . "/log/autoranking.stdout+err 2>&1 &";
$ausgabe = system($cmd, $system_result);
// Set execution time for keepalive
$currentTime = getDateTime("0");
updateStmt("keepalive", "ka_process", "autoranking", array("ka_lastexecutiontime", $currentTime),"");
endfor; // Loop all jobs
// *******************
// *** Revoke jobs ***
// *******************
// Get job(s) to be revoked because timeout
if (!isset($arRevokeJobModeToggler) || $arRevokeJobModeToggler == "") : $arRevokeJobModeToggler = "1"; else : $arRevokeJobModeToggler = ""; endif;
$jobArray = getRevokeJobs(40, $arRevokeJobModeToggler);
$jobArrayLen = count($jobArray);
if ($jobArrayLen > 0) :
for ($i = 0; $i < $jobArrayLen; $i++) :
$jbId = $jobArray[$i][0];
$currentHqId = $jobArray[$i][1];
$jbAutoranking = $jobArray[$i][2];
$logFile = getParameterValue("0", "AUTORANKING_LOGFILE", $currentHqId);
if ($logFile == "") : writeToFile($logFile, "CONSTANT ERR.: AUTORANKING_LOGFILE [HQ: " . $currentHqId . "]"); endif;
// Check REVOKING enabled
$constArRevokingEnabled = getParameterValue("0", "AUTORANKING_REVOCATION_ENABLED", $currentHqId);
if ($constArRevokingEnabled != "") :
$constArRevokeJobMode = getParameterValue("0", "AUTORANKING_REVOKE_JOB_MODE", $currentHqId);
if (($constArRevokeJobMode == "1" && $jbAutoranking != "1") || ($constArRevokeJobMode == "2" && $jbAutoranking != "0")) :
$constArRevokingEnabled = ""; // Do NOT revoke the current job (ATTENTION: $constArRevokingEnabled is set !!!)
endif;
endif;
if ($constArRevokingEnabled == '1') :
$revokedData = revokeJobFromCourier($jbId);
if (count($revokedData) > 0) :
$currentHqId = $revokedData[8];
$crSid = getFieldValueFromId("courier","cr_id",$revokedData[1],"cr_sid");
$crUsrId = getFieldValueFromId("courier","cr_id",$revokedData[1],"usr_id");
// UNLOCK courier regarding autoranking process
updateStmt("courier", "cr_id", $revokedData[1], array("cr_ar_jb_id", "0"), "cr_ar_jb_id = '" . $jbId . "'");
// Write logdata into log database
writeToLogDB("8",$currentHqId,$revokedData[0],$crUsrId,$revokedData[1],$crSid,"",
"CR_VHT_ID=" . $revokedData[3] . "|JB_VHT_ID = " . $revokedData[4] .
"|LOST_RANKING=" . $revokedData[5] . "|JB_STATUS_NEW=" . $revokedData[6] . "|JB_RESERV=" . $revokedData[7]);
// Write logdata into log file
writeToFile($logFile, "Job " . $revokedData[0] . " revoked from courier " . $revokedData[1] .
" [SID: " . $crSid . "] [Time: " . $revokedData[2] . "]" .
" [cr.vht_id = " . $revokedData[3] . "] [jb.vht_id = " . $revokedData[4] . "]" .
" [Lost Ranking: " . $revokedData[5] . "]" .
" [Set Status: " . $revokedData[6] . "]" .
" [Reservation: " . $revokedData[7] . "]");
endif;
endif; // AUTORANKING_REVOCATION_ENABLED
endfor;
endif;
// Set execution time for keepalive
$currentTime = getDateTime("0");
updateStmt("keepalive", "ka_process", "autoranking", array("ka_lastexecutiontime", $currentTime),"");
// ********************************************
// *** Check occupied state of the couriers ***
// ********************************************
$crArray = getLockedCouriersByAutoranking();
// Loop all jobs (default one)
$lenCrArray = count($crArray);
for ($i = 0; $i < $lenCrArray; $i++) :
$crId = $crArray[$i][0];
$jbId = $crArray[$i][1];
$jbFields = getFieldsValueFromId("job", "jb_id", $jbId, array("jb_status","cr_id","cr_id_order"));
if ( ($jbFields[0] > "0") || ($jbFields[1] != "" && $jbFields[1] != $crId) || ($jbFields[2] != $crId) ) :
// UNLOCK courier regarding autoranking process
updateStmt("courier", "cr_id", $crId, array("cr_ar_jb_id", "0"), "cr_ar_jb_id > '0'");
// Write logdata into log file
// writeToFile($logFile, " Courier UNLOCKED - " . "[CR_ID: " . $crId . "] [JB_ID: " . $jbId . "] [JB_STATUS: " . $jbFields[0] . "] [JB_CR_ID: " . $jbFields[1] . "] [JB_CR_ID_ORDER: " . $jbFields[2] . "]");
else :
// Write logdata into log file
// writeToFile($logFile, " Courier NOT UNLOCKED - " . "[CR_ID: " . $crId . "] [JB_ID: " . $jbId . "] [JB_STATUS: " . $jbFields[0] . "] [JB_CR_ID: " . $jbFields[1] . "] [JB_CR_ID_ORDER: " . $jbFields[2] . "]");
endif;
endfor; // Loop all jobs
// Set execution time for keepalive
$currentTime = getDateTime("0");
updateStmt("keepalive", "ka_process", "autoranking", array("ka_lastexecutiontime", $currentTime),"");
sleep(15);
endwhile; // Endless loop
?>