同步小程序与管理端更新,完善抽烟记录和解绑冷静期

This commit is contained in:
2026-10-09 22:15:51 +08:00
parent a68a4ef411
commit b10fc3c4ac
149 changed files with 3794 additions and 589 deletions
+19 -17
View File
@@ -497,7 +497,7 @@ func adminDeleteUser(c *httpapi.Ctx) error {
}
var unbindStatusLabels = map[string]string{
"pending": "待回应", "agreed": "已同意(已解绑)", "rejected": "已拒绝", "cancelled": "已撤销", "expired": "已过期",
"pending": "待对方回应", "cooling": "冷静期", "completed": "解绑完成", "rejected": "已拒绝", "cancelled": "已撤销", "expired": "已过期",
}
func adminUnbindRequests(c *httpapi.Ctx) error {
@@ -506,20 +506,22 @@ func adminUnbindRequests(c *httpapi.Ctx) error {
}
rs, err := c.DB.Query(`
SELECT
ur.id, ur.couple_id, ur.status, ur.created_at, ur.responded_at,
ur.id, ur.couple_id, ur.status, ur.created_at, ur.responded_at, ur.cooling_until, ur.completed_at, ur.cancelled_at,
cancel_user.nickname AS cancelled_by_name,
r.id as requester_id, r.user_id as requester_uid, r.nickname as requester_name, r.avatar as requester_avatar,
c.couple_space_id, c.data_deleted, c.status as couple_status,
u1.nickname as user1_name, u1.user_id as user1_uid,
u2.nickname as user2_name, u2.user_id as user2_uid
FROM unbind_requests ur
JOIN users r ON ur.requester_id = r.id
LEFT JOIN users cancel_user ON ur.cancelled_by = cancel_user.id
JOIN couples c ON ur.couple_id = c.id
LEFT JOIN users u1 ON c.user1_id = u1.id
LEFT JOIN users u2 ON c.user2_id = u2.id
WHERE NOT (c.status = 'active' AND ur.status = 'agreed')
UNION
SELECT
NULL as id, c.id as couple_id, 'agreed' as status, NULL as created_at, NULL as responded_at,
NULL as id, c.id as couple_id, 'completed' as status, NULL as created_at, NULL as responded_at, NULL as cooling_until, NULL as completed_at, NULL as cancelled_at, NULL as cancelled_by_name,
NULL as requester_id, NULL as requester_uid, NULL as requester_name, NULL as requester_avatar,
c.couple_space_id, c.data_deleted, c.status as couple_status,
u1.nickname as user1_name, u1.user_id as user1_uid,
@@ -575,12 +577,17 @@ func adminForceUnbind(c *httpapi.Ctx) error {
if couple == nil {
return c.Err(404, "情侣不存在")
}
if req, _ := c.DB.QueryOne("SELECT id, requester_id, responded_at FROM unbind_requests WHERE couple_id = ? AND status = 'agreed' ORDER BY id DESC LIMIT 1", cid); req == nil {
return c.Err(400, "双方尚未同意解绑,无法执行操作。请先让双方在微信小程序中完成解绑确认")
if err := c.DB.AdvanceUnbindings(); err != nil {
return err
}
users, _ := c.DB.Query("SELECT id, user_id, nickname FROM users WHERE couple_id = ?", cid)
softUnbind(c.DB, cid)
return c.OK(M{"success": true, "msg": "已执行解绑操作(双方已同意),情侣「" + coupleUserNames(users) + "」的关系已解除,所有数据已保留"})
current, err := c.DB.QueryOne("SELECT status FROM couples WHERE id=?", cid)
if err != nil {
return err
}
if current.Str("status") != "unbound" {
return c.Err(409, "需双方同意并等待72小时冷静期结束,不能提前解绑")
}
return c.OK(M{"success": true, "msg": "冷静期已结束,系统已自动解绑并处理共同数据"})
}
func adminRestoreCouple(c *httpapi.Ctx) error {
@@ -595,15 +602,7 @@ func adminRestoreCouple(c *httpapi.Ctx) error {
if couple == nil {
return c.Err(400, "该情侣记录不存在或数据已被删除,无法恢复")
}
u1, u2 := couple.Int("user1_id"), couple.Int("user2_id")
users, _ := c.DB.Query("SELECT id, user_id, nickname FROM users WHERE id IN (?, ?)", u1, u2)
if len(users) < 2 {
return c.Err(400, "用户数据异常,无法恢复情侣关系")
}
c.DB.Exec("UPDATE couples SET status = 'active' WHERE id = ?", cid)
c.DB.Exec("UPDATE users SET couple_id = ?, updated_at = CURRENT_TIMESTAMP WHERE id IN (?, ?)", cid, u1, u2)
c.DB.Exec("DELETE FROM unbind_requests WHERE couple_id = ?", cid)
return c.OK(M{"success": true, "msg": "已恢复情侣关系「" + coupleUserNames(users) + "」,所有数据已恢复"})
return c.Err(409, "旧空间已封存,恢复关系请由双方重新发起绑定,后台不能覆盖当前关系")
}
func adminDeleteCoupleData(c *httpapi.Ctx) error {
@@ -618,6 +617,9 @@ func adminDeleteCoupleData(c *httpapi.Ctx) error {
if couple == nil {
return c.Err(400, "该情侣记录不存在或状态异常,无法删除数据")
}
if couple.Int("data_deleted") == 1 {
return c.OK(M{"success": true, "msg": "共同数据已删除,解绑记录保留"})
}
users, _ := c.DB.Query("SELECT id, user_id, nickname FROM users WHERE id IN (?, ?)", couple.Int("user1_id"), couple.Int("user2_id"))
c.DB.Exec("UPDATE couples SET data_deleted = 1 WHERE id = ?", cid)
executeUnbind(c.DB, cid)