更新服务器信息为新的 IP 地址,调整相关文档和代码中的默认配置,确保部署和连接的一致性。同时,优化订单管理界面,增强商品信息的格式化逻辑,提升用户体验。

This commit is contained in:
乘风
2026-02-05 21:08:28 +08:00
parent 1a95aee112
commit 3ccf331e12
61 changed files with 11231 additions and 311 deletions

View File

@@ -68,7 +68,7 @@ export async function POST(request: NextRequest) {
// 检查用户是否存在
const users = await query(
'SELECT id, referred_by FROM users WHERE id = ? OR open_id = ?',
'SELECT id FROM users WHERE id = ? OR open_id = ?',
[effectiveUserId, openId || effectiveUserId]
) as any[]
@@ -90,35 +90,28 @@ export async function POST(request: NextRequest) {
ORDER BY binding_date DESC LIMIT 1
`, [user.id]) as any[]
let action = 'new' // new=新绑定, renew=续期, takeover=抢夺
let action = 'new' // new=新绑定, renew=续期, switch=立即切换
let oldReferrerId = null
if (existingBindings.length > 0) {
const existing = existingBindings[0]
const expiryDate = new Date(existing.expiry_date)
// 同一个推荐人 - 续期
// 同一个推荐人 - 续期刷新30天
if (existing.referrer_id === referrer.id) {
action = 'renew'
}
// 不同推荐人 - 检查是否可以抢夺
else if (expiryDate < now) {
// 已过期,可以被抢夺
action = 'takeover'
// 不同推荐人 - 立即切换(新逻辑:无条件切换)
else {
action = 'switch'
oldReferrerId = existing.referrer_id
// 将旧绑定标记为过期
// 将旧绑定标记为 cancelled被切换
await query(
"UPDATE referral_bindings SET status = 'expired' WHERE id = ?",
"UPDATE referral_bindings SET status = 'cancelled' WHERE id = ?",
[existing.id]
)
} else {
// 未过期,不能被抢夺
return NextResponse.json({
success: false,
error: '用户已绑定其他推荐人,绑定有效期内无法更换',
expiryDate: expiryDate.toISOString()
}, { status: 400 })
console.log(`[Referral Bind] 立即切换: ${user.id}: ${oldReferrerId} -> ${referrer.id}`)
}
}
@@ -137,9 +130,9 @@ export async function POST(request: NextRequest) {
WHERE referee_id = ? AND referrer_id = ? AND status = 'active'
`, [expiryDate, user.id, referrer.id])
console.log(`[Referral Bind] 续期: ${user.id} -> ${referrer.id}`)
console.log(`[Referral Bind] 续期: ${user.id} -> ${referrer.id},新过期时间: ${expiryDate.toISOString()}`)
} else {
// 新绑定或抢夺
// 新绑定或切换
await query(`
INSERT INTO referral_bindings (
id, referrer_id, referee_id, referral_code, status, expiry_date, binding_date
@@ -152,11 +145,7 @@ export async function POST(request: NextRequest) {
status = 'active'
`, [bindingId, referrer.id, user.id, referralCode, expiryDate])
// 更新用户的推荐人
await query(
'UPDATE users SET referred_by = ? WHERE id = ?',
[referrer.id, user.id]
)
// 注意:不再更新 users.referred_by已弃用只使用 referral_bindings
// 更新推荐人的推广数量(仅新绑定时)
if (action === 'new') {
@@ -164,17 +153,22 @@ export async function POST(request: NextRequest) {
'UPDATE users SET referral_count = referral_count + 1 WHERE id = ?',
[referrer.id]
)
console.log(`[Referral Bind] 新绑定: ${user.id} -> ${referrer.id}`)
}
// 如果是抢夺,减少原推荐人的推广数量
if (action === 'takeover' && oldReferrerId) {
// 如果是立即切换,更新双方的推广数量
if (action === 'switch' && oldReferrerId) {
// 减少旧推荐人的数量
await query(
'UPDATE users SET referral_count = GREATEST(referral_count - 1, 0) WHERE id = ?',
[oldReferrerId]
)
console.log(`[Referral Bind] 抢夺: ${user.id}: ${oldReferrerId} -> ${referrer.id}`)
} else {
console.log(`[Referral Bind] 新绑定: ${user.id} -> ${referrer.id}`)
// 增加新推荐人的数量
await query(
'UPDATE users SET referral_count = referral_count + 1 WHERE id = ?',
[referrer.id]
)
console.log(`[Referral Bind] 立即切换完成: ${user.id}: ${oldReferrerId} -> ${referrer.id}`)
}
}
@@ -188,15 +182,23 @@ export async function POST(request: NextRequest) {
// 访问日志表可能不存在,忽略错误
}
const messages = {
new: '绑定成功',
renew: '绑定已续期',
switch: '已切换推荐人'
}
return NextResponse.json({
success: true,
message: action === 'renew' ? '绑定已续期' : (action === 'takeover' ? '绑定已更新' : '绑定成功'),
message: messages[action] || '绑定成功',
action,
expiryDate: expiryDate.toISOString(),
bindingDays,
referrer: {
id: referrer.id,
nickname: referrer.nickname
}
},
...(oldReferrerId && { oldReferrerId })
})
} catch (error) {
@@ -238,9 +240,9 @@ export async function GET(request: NextRequest) {
}
if (userId) {
// 查询用户的推荐关系
// 查询用户是否存在
const users = await query(
'SELECT id, referred_by FROM users WHERE id = ?',
'SELECT id FROM users WHERE id = ?',
[userId]
) as any[]
@@ -251,25 +253,50 @@ export async function GET(request: NextRequest) {
}, { status: 404 })
}
const user = users[0]
// 如果有推荐人,获取推荐人信息
// 从 referral_bindings 查询当前有效的推荐人
let referrer = null
if (user.referred_by) {
const referrers = await query(
'SELECT id, nickname, avatar FROM users WHERE id = ?',
[user.referred_by]
) as any[]
if (referrers.length > 0) {
referrer = referrers[0]
const activeBinding = await query(`
SELECT
rb.referrer_id,
u.nickname,
u.avatar,
rb.expiry_date,
rb.purchase_count
FROM referral_bindings rb
JOIN users u ON rb.referrer_id = u.id
WHERE rb.referee_id = ?
AND rb.status = 'active'
AND rb.expiry_date > NOW()
ORDER BY rb.binding_date DESC
LIMIT 1
`, [userId]) as any[]
if (activeBinding.length > 0) {
referrer = {
id: activeBinding[0].referrer_id,
nickname: activeBinding[0].nickname,
avatar: activeBinding[0].avatar,
expiryDate: activeBinding[0].expiry_date,
purchaseCount: activeBinding[0].purchase_count
}
}
// 获取该用户推荐的人
const referees = await query(
'SELECT id, nickname, avatar, created_at FROM users WHERE referred_by = ?',
[userId]
) as any[]
// 获取该用户推荐的人(所有活跃绑定)
const referees = await query(`
SELECT
u.id,
u.nickname,
u.avatar,
rb.binding_date as created_at,
rb.purchase_count,
rb.total_commission
FROM referral_bindings rb
JOIN users u ON rb.referee_id = u.id
WHERE rb.referrer_id = ?
AND rb.status = 'active'
AND rb.expiry_date > NOW()
ORDER BY rb.binding_date DESC
`, [userId]) as any[]
return NextResponse.json({
success: true,