38451-vm/admin/binary.php
2026-02-18 09:17:22 +00:00

187 lines
8.4 KiB
PHP

<?php
require_once __DIR__ . '/layout.php';
$db = db();
// Helper to check permissions
if (!hasPermission('view_orders')) {
echo "权限不足";
exit;
}
// Auto-settle expired orders
$db->beginTransaction();
try {
$stmt = $db->prepare("SELECT o.*, u.win_loss_control as user_control FROM binary_orders o JOIN users u ON o.user_id = u.id WHERE o.status = 'pending' AND DATE_ADD(o.created_at, INTERVAL o.duration SECOND) <= NOW()");
$stmt->execute();
$expired = $stmt->fetchAll();
foreach ($expired as $o) {
$result = ($o['control_status'] == 1 || $o['user_control'] == 1) ? 'won' : (($o['control_status'] == 2 || $o['user_control'] == 2) ? 'lost' : ((rand(0, 100) > 50) ? 'won' : 'lost'));
// Get a dummy close price if we don't have one (should match the result)
$close_price = $o['entry_price'];
if ($result === 'won') {
$close_price = ($o['direction'] === 'up' || $o['direction'] === 'buy') ? $o['entry_price'] * 1.01 : $o['entry_price'] * 0.99;
} else {
$close_price = ($o['direction'] === 'up' || $o['direction'] === 'buy') ? $o['entry_price'] * 0.99 : $o['entry_price'] * 1.01;
}
$db->prepare("UPDATE binary_orders SET status = ?, close_price = ?, end_at = NOW() WHERE id = ?")->execute([$result, $close_price, $o['id']]);
if ($result === 'won') {
$win_amount = $o['amount'] + ($o['amount'] * $o['profit_rate'] / 100);
$db->prepare("UPDATE user_balances SET available = available + ? WHERE user_id = ? AND symbol = 'USDT'")->execute([$win_amount, $o['user_id']]);
$db->prepare("INSERT INTO transactions (user_id, type, amount, symbol, status) VALUES (?, 'binary_win', ?, 'USDT', 'completed')")->execute([$o['user_id'], $win_amount]);
} else {
$db->prepare("INSERT INTO transactions (user_id, type, amount, symbol, status) VALUES (?, 'binary_loss', ?, 'USDT', 'completed')")->execute([$o['user_id'], $o['amount']]);
}
}
$db->commit();
} catch (Exception $e) {
$db->rollBack();
}
// Handle Control Update
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
if ($_POST['action'] === 'set_control') {
$id = (int)$_POST['order_id'];
$status = (int)$_POST['control_status'];
$db->prepare("UPDATE binary_orders SET control_status = ? WHERE id = ?")->execute([$status, $id]);
header("Location: binary.php?msg=updated");
exit;
}
}
$title = '秒合约管理';
ob_start();
$user_id = isset($_GET['user_id']) ? (int)$_GET['user_id'] : null;
$sql = "SELECT o.*, u.username, u.uid FROM binary_orders o JOIN users u ON o.user_id = u.id";
$params = [];
if ($admin['is_agent']) {
$sql .= ($params ? " AND" : " WHERE") . " u.agent_id = ?";
$params[] = $admin['id'];
}
if ($user_id) {
$sql .= (strpos($sql, 'WHERE') === false ? " WHERE" : " AND") . " o.user_id = ?";
$params[] = $user_id;
}
$sql .= " ORDER BY o.created_at DESC";
$stmt = $db->prepare($sql);
$stmt->execute($params);
$orders = $stmt->fetchAll();
?>
<div class="d-flex justify-content-between align-items-center mb-4">
<div class="d-flex align-items-center gap-3">
<a href="<?= $user_id ? 'users.php' : 'index.php' ?>" class="btn btn-outline-secondary btn-sm"><i class="bi bi-arrow-left"></i> 返回</a>
<h4 class="mb-0">秒合约下单记录 <?= $user_id ? "(用户ID: $user_id)" : "" ?></h4>
</div>
</div>
<div class="card p-3 mb-4 border-0 shadow-sm card-dismissible card-auto-dismiss" data-card-id="binary_instructions">
<h6 class="fw-bold mb-2"><i class="bi bi-info-circle me-2"></i>管理提示</h6>
<p class="small text-muted mb-0">在此页面您可以实时监控用户的秒合约订单。对于进行中的订单,您可以手动设置“控赢”或“控亏”来干预交易结果。订单到期后系统会自动根据设置或市场价进行结算。</p>
</div>
<?php if (isset($_GET['msg'])): ?>
<div class="alert alert-success mb-4">控制状态已更新!</div>
<?php endif; ?>
<div class="table-container">
<table class="table table-hover align-middle">
<thead>
<tr class="text-muted small">
<th>ID</th>
<th>用户信息</th>
<th>币种/方向</th>
<th>金额/时长</th>
<th>入场价/出场价</th>
<th>盈亏</th>
<th>状态</th>
<th>控制</th>
<th class="text-end">操作</th>
</tr>
</thead>
<tbody>
<?php foreach ($orders as $o): ?>
<tr>
<td><?= $o['id'] ?></td>
<td>
<div><?= htmlspecialchars($o['username']) ?></div>
<code class="small"><?= $o['uid'] ?></code>
</td>
<td>
<span class="fw-bold"><?= $o['symbol'] ?></span>
<br>
<?php
$is_up = in_array($o['direction'], ['buy', 'up', '涨']);
?>
<span class="badge <?= $is_up ? 'bg-success' : 'bg-danger' ?>">
<?= $is_up ? '买涨 ↑' : '买跌 ↓' ?>
</span>
</td>
<td>
<div><?= number_format($o['amount'], 2) ?> USDT</div>
<div class="text-muted small"><?= $o['duration'] ?> 秒</div>
</td>
<td>
<div class="small">入: <?= $o['entry_price'] ?></div>
<div class="small">出: <?= $o['close_price'] ?? '-' ?></div>
</td>
<td>
<?php if ($o['status'] === 'won'): ?>
<span class="text-success fw-bold">+<?= number_format($o['amount'] * $o['profit_rate'] / 100, 2) ?></span>
<?php elseif ($o['status'] === 'lost'): ?>
<span class="text-danger fw-bold">-<?= number_format($o['amount'], 2) ?></span>
<?php else: ?>
<span class="text-muted">-</span>
<?php endif; ?>
</td>
<td>
<?php if ($o['status'] === 'pending'): ?>
<span class="badge bg-warning">进行中</span>
<?php elseif ($o['status'] === 'won'): ?>
<span class="badge bg-success">已盈利</span>
<?php elseif ($o['status'] === 'lost'): ?>
<span class="badge bg-danger">已亏损</span>
<?php else: ?>
<span class="badge bg-secondary">已取消</span>
<?php endif; ?>
</td>
<td>
<?php if ($o['control_status'] == 1): ?>
<span class="badge bg-success">控赢</span>
<?php elseif ($o['control_status'] == 2): ?>
<span class="badge bg-danger">控亏</span>
<?php else: ?>
<span class="badge bg-secondary">正常</span>
<?php endif; ?>
</td>
<td class="text-end">
<?php if ($o['status'] === 'pending'): ?>
<form method="POST" class="d-inline">
<input type="hidden" name="order_id" value="<?= $o['id'] ?>">
<input type="hidden" name="action" value="set_control">
<div class="btn-group btn-group-sm">
<button name="control_status" value="1" class="btn btn-outline-success <?= $o['control_status'] == 1 ? 'active' : '' ?>">赢</button>
<button name="control_status" value="2" class="btn btn-outline-danger <?= $o['control_status'] == 2 ? 'active' : '' ?>">亏</button>
<button name="control_status" value="0" class="btn btn-outline-secondary <?= $o['control_status'] == 0 ? 'active' : '' ?>">改</button>
</div>
</form>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
<?php if (empty($orders)): ?>
<tr><td colspan="9" class="text-center p-5 text-muted">暂无订单记录</td></tr>
<?php endif; ?>
</tbody>
</table>
</div>
<?php
$content = ob_get_clean();
renderAdminPage($content, $title);
?>