query("SELECT id, zkteco_uid FROM hr_employees WHERE zkteco_uid IS NOT NULL AND zkteco_uid != '' AND status = 'active'"); $empMap = []; while ($emp = $empStmt->fetch()) { $empMap[(string)$emp['zkteco_uid']] = $emp['id']; } $insertedCount = 0; foreach ($lines as $line) { $line = trim($line); if (empty($line)) continue; $parts = explode("\t", $line); if (count($parts) >= 2) { $uid = trim($parts[0]); $datetime = trim($parts[1]); if (strlen($datetime) >= 19 && isset($empMap[$uid])) { $emp_id = $empMap[$uid]; $date = substr($datetime, 0, 10); $time = substr($datetime, 11, 8); $chkStmt = db()->prepare("SELECT id, check_in, check_out FROM hr_attendance WHERE employee_id = ? AND date = ?"); $chkStmt->execute([$emp_id, $date]); $existing = $chkStmt->fetch(); if ($existing) { $upd_in = $existing['check_in']; $upd_out = $existing['check_out']; $changed = false; if (empty($upd_in) || $time < $upd_in) { $upd_in = $time; $changed = true; } if ($time > $upd_in && (empty($upd_out) || $time > $upd_out)) { $upd_out = $time; $changed = true; } if ($changed) { $uStmt = db()->prepare("UPDATE hr_attendance SET check_in = ?, check_out = ?, status = 'present' WHERE id = ?"); $uStmt->execute([$upd_in, $upd_out, $existing['id']]); } } else { $iStmt = db()->prepare("INSERT INTO hr_attendance (employee_id, date, check_in, status) VALUES (?, ?, ?, 'present')"); $iStmt->execute([$emp_id, $date, $time]); } $insertedCount++; } } } echo "OK: " . $insertedCount; exit; } else { // Acknowledge OPERLOG or other tables to keep device happy echo "OK"; exit; } }