274 lines
8.9 KiB
PHP
274 lines
8.9 KiB
PHP
<?php
|
|
|
|
///////////////////////////////////////////////////
|
|
// CRON - 매일 새벽 실행
|
|
//
|
|
// dr_status='A' + dr_type='UCO' 드라이버 중, 대상일에 tbl_memberhis
|
|
// 기록이 없는 사람에게 "무거래" 레코드를 만들어 잔액을 이어준다.
|
|
//
|
|
// 실행:
|
|
// CLI : /usr/local/bin/php -q /var/www/html/lib/runDailyMemberhis.php
|
|
// 웹 : https://goi.ifreshy.com/lib/runDailyMemberhis.php?PUTDAY=20250612
|
|
//
|
|
// 테스트(저장 안 함):
|
|
// 웹 : ...?PUTDAY=20250612&TEST=1
|
|
// CLI : ...runDailyMemberhis.php "0" "2000" "20250612" "TEST"
|
|
///////////////////////////////////////////////////
|
|
|
|
date_default_timezone_set('America/Toronto');
|
|
|
|
$time_start = microtime(true);
|
|
|
|
$mode = (PHP_SAPI === 'cli') ? "SHELL" : "WEB";
|
|
|
|
if ($mode == "SHELL") {
|
|
$GETDIR = "/var/www/html";
|
|
$ROWCNT = $argv[1] ?? "";
|
|
$LIMITCNT = $argv[2] ?? "";
|
|
$getYesterday = $argv[3] ?? date('Ymd');
|
|
$ENT = "\n";
|
|
} else {
|
|
$GETDIR = getenv("DOCUMENT_ROOT");
|
|
$ROWCNT = $_GET['ROWCNT'] ?? "";
|
|
$LIMITCNT = $_GET['LIMITCNT'] ?? "";
|
|
if (!empty($_GET['PUTDAY'])) {
|
|
$getYesterday = $_GET['PUTDAY'];
|
|
} else {
|
|
$getYesterday = date('Ymd');
|
|
}
|
|
$ENT = "<br>";
|
|
}
|
|
|
|
// TEST=1 이면 실제 INSERT 없이 화면 출력만
|
|
$TESTMODE = false;
|
|
if ($mode == "WEB" && !empty($_GET['TEST'])) $TESTMODE = true;
|
|
if ($mode == "SHELL" && (($argv[4] ?? "") == "TEST")) $TESTMODE = true;
|
|
|
|
if ($ROWCNT != "" && $LIMITCNT != "") $add_qry = " LIMIT $ROWCNT, $LIMITCNT";
|
|
else $add_qry = "";
|
|
|
|
echo "####[START][$getYesterday]" . ($TESTMODE ? "[TEST MODE - 저장 안 함]" : "[실제 저장]") . "####$ENT";
|
|
|
|
if (file_exists($GETDIR . "/include/function_class.php")) {
|
|
include_once $GETDIR . "/include/function_class.php";
|
|
}
|
|
if (file_exists($GETDIR . "/include/arrayinfo.php")) {
|
|
include_once $GETDIR . "/include/arrayinfo.php";
|
|
}
|
|
|
|
$hasFunc = class_exists('Func');
|
|
$func = $hasFunc ? new Func() : null;
|
|
$jdb = new JDB();
|
|
|
|
$logName = $GETDIR . "/lib/access.log";
|
|
function writeLogSafe($func, $logName, $msg) {
|
|
if ($func !== null && method_exists($func, 'PwriteLog')) {
|
|
$func->PwriteLog($logName, $msg);
|
|
}
|
|
}
|
|
|
|
writeLogSafe($func, $logName, "ACTION[Cron - Start - Daily Memberhis Fill]");
|
|
|
|
$qry = "SELECT dr_uid
|
|
FROM tbl_driver
|
|
WHERE dr_status = 'A' AND dr_type = 'UCO'
|
|
ORDER BY dr_uid ASC
|
|
$add_qry ";
|
|
$result = $jdb->nQuery($qry, "driver list error");
|
|
echo "[$qry]$ENT";
|
|
|
|
$insertCnt = 0;
|
|
$skipCnt = 0;
|
|
|
|
while ($list = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
|
|
|
|
$druid = $list['dr_uid'];
|
|
|
|
$qry_chk = "SELECT h_uid FROM tbl_memberhis
|
|
WHERE h_druid = '" . $druid . "' AND h_date = '" . $getYesterday . "'
|
|
LIMIT 1 ";
|
|
$rt_chk = $jdb->fQuery($qry_chk, "check error");
|
|
|
|
if (!empty($rt_chk['h_uid'])) {
|
|
echo "[SKIP][druid=$druid] already exists (h_uid=" . $rt_chk['h_uid'] . ")$ENT";
|
|
$skipCnt++;
|
|
continue;
|
|
}
|
|
|
|
// opening = 대상일 이전 가장 최근 레코드의 h_balance_t (없으면 0)
|
|
$qry_prev = "SELECT h_balance_t FROM tbl_memberhis
|
|
WHERE h_druid = '" . $druid . "' AND h_date < '" . $getYesterday . "'
|
|
ORDER BY h_date DESC, h_uid DESC
|
|
LIMIT 1 ";
|
|
$rt_prev = $jdb->fQuery($qry_prev, "prev balance error");
|
|
|
|
$opening = (!empty($rt_prev['h_balance_t'])) ? $rt_prev['h_balance_t'] : 0;
|
|
|
|
unset($columns);
|
|
unset($values);
|
|
$columns = array();
|
|
$values = array();
|
|
|
|
$columns[] = "h_druid"; $values[] = $druid;
|
|
$columns[] = "h_driveruid"; $values[] = "";
|
|
$columns[] = "h_date"; $values[] = $getYesterday;
|
|
$columns[] = "h_balance_o"; $values[] = $opening;
|
|
$columns[] = "h_balance_in"; $values[] = "0";
|
|
$columns[] = "h_balance_out"; $values[] = "0";
|
|
$columns[] = "h_balance_r"; $values[] = "0";
|
|
$columns[] = "h_balance_g"; $values[] = "0";
|
|
$columns[] = "h_balance_e"; $values[] = "0";
|
|
$columns[] = "h_balance_t"; $values[] = $opening;
|
|
$columns[] = "h_createddate"; $values[] = date("YmdHis");
|
|
$columns[] = "h_comment"; $values[] = "";
|
|
|
|
if ($TESTMODE) {
|
|
echo "[TEST/dry-run][druid=$druid][date=$getYesterday][opening=$opening]$ENT";
|
|
} else {
|
|
$jdb->iQuery("tbl_memberhis", $columns, $values);
|
|
echo "[INSERT][druid=$druid][date=$getYesterday][opening=$opening]$ENT";
|
|
}
|
|
$insertCnt++;
|
|
}
|
|
|
|
$funcMsg = "ACTION[Cron - Finished - Daily Memberhis Fill] insert=$insertCnt, skip=$skipCnt\n";
|
|
writeLogSafe($func, $logName, $funcMsg);
|
|
|
|
$time_end = microtime(true);
|
|
$timeStr = "Running Time: " . ($time_end - $time_start)
|
|
. " / INSERT: $insertCnt / SKIP: $skipCnt";
|
|
|
|
echo "####[END][$timeStr]####$ENT";
|
|
|
|
?>
|
|
|
|
|
|
<?php
|
|
|
|
class JDB {
|
|
VAR $HostName = "";
|
|
VAR $UserName = "";
|
|
VAR $UserPass = "";
|
|
VAR $DBName = "";
|
|
VAR $DBConn = "";
|
|
|
|
function __construct() {
|
|
$DB_HOST = "mis-mysql";
|
|
$DB_NAME = "goiintra_db";
|
|
$DB_USER = "goiintra_root";
|
|
$DB_PASSWORD = "L0C2CKN5GHHY";
|
|
|
|
$this->HostName = $DB_HOST;
|
|
$this->UserName = $DB_USER;
|
|
$this->UserPass = $DB_PASSWORD;
|
|
$this->DBName = $DB_NAME;
|
|
|
|
$this->CONNECT();
|
|
}
|
|
|
|
function CONNECT() {
|
|
$this->DBConn = mysqli_connect($this->HostName, $this->UserName, $this->UserPass, $this->DBName);
|
|
if (!$this->DBConn)
|
|
$this->errMsg("Database Connection Error !!!", "");
|
|
else
|
|
if (!(mysqli_select_db($this->DBConn, $this->DBName)))
|
|
$this->errMsg("Database Select Error !!!", "");
|
|
mysqli_query($this->DBConn, "SET NAMES UTF8");
|
|
}
|
|
|
|
function nQuery($query, $msg) {
|
|
if (!($rlt = mysqli_query($this->DBConn, $query)))
|
|
$this->errMsg($msg, $query);
|
|
return $rlt;
|
|
}
|
|
|
|
function mysqli_result($res, $row = 0, $col = 0) {
|
|
$numrows = mysqli_num_rows($res);
|
|
if ($numrows && $row <= ($numrows - 1) && $row >= 0) {
|
|
mysqli_data_seek($res, $row);
|
|
$resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res);
|
|
if (isset($resrow[$col])) {
|
|
return $resrow[$col];
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function rQuery($query, $msg) {
|
|
if (!($rlt = mysqli_query($this->DBConn, $query)))
|
|
$this->errMsg($msg, $query);
|
|
return $this->mysqli_result($rlt, 0, 0);
|
|
}
|
|
|
|
function fQuery($query, $msg) {
|
|
if (!($rlt = mysqli_query($this->DBConn, $query))) $this->errMsg($msg, $query);
|
|
return mysqli_fetch_array($rlt);
|
|
}
|
|
|
|
function numQuery($query, $msg) {
|
|
if (!($rlt = mysqli_query($this->DBConn, $query))) $this->errMsg($msg, $query);
|
|
return mysqli_num_rows($rlt);
|
|
}
|
|
|
|
function iQuery($table, $fields, $values) {
|
|
$fields_count = count($fields);
|
|
$values_count = count($values);
|
|
if ($fields_count != $values_count)
|
|
$this->errMsg("Input Data Error.", "Fields # : $fields_count, Value # : $values_count");
|
|
|
|
$fields_que = "";
|
|
$values_que = "";
|
|
for ($i = 0; $i < $fields_count; $i++) {
|
|
if (0 < $i) {
|
|
$fields_que .= ",";
|
|
$values_que .= ",";
|
|
}
|
|
$fields_que .= $fields[$i];
|
|
$values_que .= "'" . addslashes($values[$i]) . "'";
|
|
}
|
|
$this->nQuery("insert into $table ($fields_que) values ($values_que)", "[ <i>$table</i> ] Table Input Error");
|
|
}
|
|
|
|
function uQuery($table, $fields, $values, $where = "") {
|
|
if (is_array($fields) & is_array($values)) {
|
|
$fields_count = count($fields);
|
|
$values_count = count($values);
|
|
if ($fields_count != $values_count)
|
|
$this->errMsg("Input Data Error.", "Fields # : $fields_count, Value # : $values_count");
|
|
|
|
$sub_que = "";
|
|
for ($i = 0; $i < $fields_count; $i++) {
|
|
if (0 < $i)
|
|
$sub_que .= ",";
|
|
$sub_que .= $fields[$i] . "='" . addslashes($values[$i]) . "'";
|
|
}
|
|
}
|
|
else if (!is_array($fields) & !is_array($values))
|
|
$sub_que = " " . $fields . "='" . addslashes($values) . "' ";
|
|
else
|
|
$this->errMsg("Input Data Error.", "Fields # : $fields_count, Value # : $values_count");
|
|
|
|
if ($where) $sub_que .= " " . $where;
|
|
$this->nQuery("update $table set $sub_que", "[ <i>$table</i> ] Table Input Error");
|
|
}
|
|
|
|
function CLOSE() {
|
|
mysqli_close($this->DBConn);
|
|
$this->DELETE();
|
|
}
|
|
|
|
function DELETE() {
|
|
unset($this->DBConn); unset($this->UserName);
|
|
unset($this->UserPass); unset($this->HostName);
|
|
unset($this->DBName);
|
|
}
|
|
|
|
function errMsg($msg, $query) {
|
|
echo("<b>JDB Error Message !!</b><p>");
|
|
$msg = mysqli_errno($this->DBConn) . " : " . mysqli_error($this->DBConn) . "<p><b>User Message</b> :<br> " . $msg . "<p><b>Query String</b> :<br> " . $query;
|
|
echo("$msg");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
?>
|