品牌实力,信誉保障
我们将为您呈现最专业,最快速,一站式一流服务
YG棋牌
BS百胜棋牌
KY开元棋牌
YB棋牌
LEG乐游棋牌
捕鱼游戏
画质,画面精美,让您身临其境,体验捕鱼游戏的精彩刺激。
街机捕鱼应接不暇,大炮小炮应有尽有。
版权所有 ©2025 博鱼保留所有权
import { NextRequest, NextResponse } from "next/server"
// 数据验证接口
interface AgentSyncData {
username: string
name: string
parentUsername: string | null
level: number
status: "active" | "suspended" | "inactive"
profitSharingRate: number
dailySalaryRate: number
rebateRate: number
memberLevel?: string
memberGroup?: string
balance?: number
}
interface ReportSyncData {
username: string
date: string
在线存款总计: number
手动加款: number
存款总计: number
在线提款总计: number
提款手续费总计: number
手动扣款: number
现金盈利总计: number
现金盈利总计_包含手动扣款: number
彩票下注总计: number
彩票输赢: number
系统彩下注总计: number
系统彩输赢: number
系统六合彩下注总计: number
系统六合彩输赢: number
六合下注总计: number
六合彩输赢: number
其他六合彩下注总计: number
其他六合彩输赢: number
第三方体育下注总计: number
第三方体育输赢: number
真人下注总计: number
真人输赢: number
电子下注总计: number
电子输赢: number
棋牌下注总计: number
棋牌输赢: number
电竞下注总计: number
电竞输赢: number
捕鱼下注总计: number
捕鱼输赢: number
其他加款金额: number
存提款赠送总计: number
代金券金额总计: number
活动中奖总计: number
红包中奖总计: number
彩金扣款金额: number
代理返点合计: number
反水合计: number
}
interface SyncResponse {
success: boolean
message: string
data?: {
agentsProcessed?: number
reportsProcessed?: number
}
errors?: string[]
}
/**
* GET 处理器 - 用于测试连接
*/
export async function GET(request: NextRequest) {
try {
const { searchParams } = new URL(request.url)
const type = searchParams.get("type") || "status"
if (type === "status") {
return NextResponse.json({
success: true,
message: "数据同步 API 正常运行",
timestamp: new Date().toISOString(),
version: "1.0.0",
})
}
return NextResponse.json({
success: false,
message: "不支持的请求类型",
}, { status: 400 })
} catch (error) {
console.error("GET 请求处理错误:", error)
return NextResponse.json({
success: false,
message: "服务器内部错误",
}, { status: 500 })
}
}
/**
* POST 处理器 - 接收同步数据
*/
export async function POST(request: NextRequest) {
try {
// 验证授权
const authHeader = request.headers.get("authorization")
if (!verifyAuth(authHeader)) {
return NextResponse.json({
success: false,
message: "未授权访问",
}, { status: 401 })
}
// 解析请求体
const body = await request.json()
const { type, data } = body
if (!type || !data) {
return NextResponse.json({
success: false,
message: "缺少必要参数: type 或 data",
}, { status: 400 })
}
const response: SyncResponse = {
success: true,
message: "数据同步成功",
data: {},
errors: [],
}
// 处理代理数据
if (type === "agents" || type === "all") {
const agentData = Array.isArray(data.agents) ? data.agents : []
const result = await processAgentData(agentData)
response.data!.agentsProcessed = result.processed
if (result.errors.length > 0) {
response.errors!.push(...result.errors)
}
}
// 处理报表数据
if (type === "reports" || type === "all") {
const reportData = Array.isArray(data.reports) ? data.reports : []
const result = await processReportData(reportData)
response.data!.reportsProcessed = result.processed
if (result.errors.length > 0) {
response.errors!.push(...result.errors)
}
}
// 如果有错误,标记为部分成功
if (response.errors && response.errors.length > 0) {
response.success = false
response.message = "数据同步部分成功,存在错误"
}
// 记录同步日志
await logSyncActivity({
timestamp: new Date(),
type,
success: response.success,
agentsProcessed: response.data?.agentsProcessed || 0,
reportsProcessed: response.data?.reportsProcessed || 0,
errors: response.errors || [],
})
return NextResponse.json(response)
} catch (error) {
console.error("POST 请求处理错误:", error)
return NextResponse.json({
success: false,
message: "数据同步失败",
errors: [error instanceof Error ? error.message : "未知错误"],
}, { status: 500 })
}
}
/**
* 验证授权令牌
*/
function verifyAuth(authHeader: string | null): boolean {
if (!authHeader) {
return false
}
// 移除 Bearer 前缀
const token = authHeader.replace(/^Bearer\s+/i, "")
// 从环境变量获取有效令牌
const validToken = process.env.DATA_SYNC_API_KEY || "demo-api-key-12345"
// 开发环境下允许测试令牌
if (process.env.NODE_ENV === "development" && token === "test-token") {
return true
}
return token === validToken
}
/**
* 处理代理数据
*/
async function processAgentData(data: AgentSyncData[]) {
const result = {
processed: 0,
errors: [] as string[],
}
// 这里应该与现有的代理数据存储集成
// 由于当前系统使用 localStorage,这里仅做验证和格式化
for (const agent of data) {
try {
// 验证必填字段
if (!agent.username || !agent.name) {
result.errors.push(`代理数据缺少必填字段: ${JSON.stringify(agent)}`)
continue
}
// 验证数据类型
if (typeof agent.level !== "number" || agent.level < 1) {
result.errors.push(`代理 ${agent.username} 的层级数据无效`)
continue
}
// 验证比例范围
if (
agent.profitSharingRate < 0 ||
agent.profitSharingRate > 1 ||
agent.dailySalaryRate < 0 ||
agent.dailySalaryRate > 1 ||
agent.rebateRate < 0 ||
agent.rebateRate > 1
) {
result.errors.push(`代理 ${agent.username} 的比例数据超出有效范围 (0-1)`)
continue
}
result.processed++
} catch (error) {
result.errors.push(
`处理代理 ${agent.username} 时出错: ${error instanceof Error ? error.message : "未知错误"}`
)
}
}
return result
}
/**
* 处理报表数据
*/
async function processReportData(data: ReportSyncData[]) {
const result = {
processed: 0,
errors: [] as string[],
}
for (const report of data) {
try {
// 验证必填字段
if (!report.username || !report.date) {
result.errors.push(`报表数据缺少必填字段: ${JSON.stringify(report)}`)
continue
}
// 验证日期格式
const dateRegex = /^\d{4}-\d{2}-\d{2}$/
if (!dateRegex.test(report.date)) {
result.errors.push(`报表 ${report.username}/${report.date} 的日期格式无效`)
continue
}
// 验证数字字段
const numericFields = [
"在线存款总计",
"彩票下注总计",
"彩票输赢",
"真人下注总计",
"真人输赢",
"电子下注总计",
"电子输赢",
]
for (const field of numericFields) {
const value = report[field]
if (typeof value !== "number" || isNaN(value)) {
result.errors.push(
`报表 ${report.username}/${report.date} 的字段 ${field} 不是有效数字`
)
continue
}
}
result.processed++
} catch (error) {
result.errors.push(
`处理报表 ${report.username}/${report.date} 时出错: ${error instanceof Error ? error.message : "未知错误"}`
)
}
}
return result
}
/**
* 记录同步活动日志
*/
async function logSyncActivity(activity: {
timestamp: Date
type: string
success: boolean
agentsProcessed: number
reportsProcessed: number
errors: string[]
}) {