+ | $list_number |
+ $dateLabel |
+ $driverShow |
+ " . number_format($b['opening'], 2) . " |
+ " . number_format($b['cashin'], 2) . " |
+ " . number_format($b['cashout'], 2) . " |
+ " . number_format($b['cashrt'], 2) . " |
+ " . number_format($b['balance'], 2) . " |
+ " . number_format($b['gas'], 2) . " |
+
";
+ $list_number--;
}
-// Get Cash In, Return, Gas SUM
-$qry_sum = "SELECT
- SUM(h_balance_in) AS CASHINSUM,
- SUM(h_balance_r) AS CASHRETURNSUM,
- SUM(h_balance_g) AS GASSUM
- FROM tbl_memberhis
- WHERE h_date >= '".substr($APPLYDATE,0,8)."' AND h_date LIKE '".$startYear.$startMonth."%' ". $add_hsubqry
- ;
-//echo "LIST_TOT[$qry_sum]
@@ -369,65 +313,246 @@ addLog ("add", "EXPENSE LIST", "VIEW", $lguserid, $query, $lgno);
-
-
-
diff --git a/public_html/lib/runDailyMemberhis.php b/public_html/lib/runDailyMemberhis.php
new file mode 100644
index 0000000..5c4c587
--- /dev/null
+++ b/public_html/lib/runDailyMemberhis.php
@@ -0,0 +1,274 @@
+";
+}
+
+// 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";
+
+?>
+
+
+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)", "[ $table ] 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", "[ $table ] 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("JDB Error Message !!");
+ $msg = mysqli_errno($this->DBConn) . " : " . mysqli_error($this->DBConn) . "
User Message :
" . $msg . "
Query String :
" . $query;
+ echo("$msg");
+ exit;
+ }
+}
+
+?>
\ No newline at end of file