一键检测重复-仓库管理
This commit is contained in:
@@ -245,6 +245,78 @@ def cookies_summary(
|
||||
}
|
||||
|
||||
|
||||
@router.get("/duplicates")
|
||||
def find_duplicate_cookies(
|
||||
db: Session = Depends(get_db),
|
||||
current: User = Depends(require_permission("cookie:view")),
|
||||
):
|
||||
"""检测 CK 管理中同一账号出现多次的记录,不返回 Cookie 敏感字段。"""
|
||||
query = (
|
||||
db.query(
|
||||
LoginTask.id.label("cookie_id"),
|
||||
LoginTask.account_id.label("account_id"),
|
||||
LoginTask.batch_id.label("batch_id"),
|
||||
LoginTask.finished_at.label("finished_at"),
|
||||
Account.username.label("username"),
|
||||
)
|
||||
.join(Account, LoginTask.account_id == Account.id)
|
||||
.filter(LoginTask.status == "success")
|
||||
)
|
||||
|
||||
# 与 CK 列表保持相同的数据可见范围,客服只能检测自己被分配的账号。
|
||||
if not user_has_permission(current, "login:view_all"):
|
||||
query = query.filter(Account.assigned_to == current.id)
|
||||
|
||||
rows = query.order_by(Account.username.asc(), LoginTask.finished_at.desc(), LoginTask.id.desc()).all()
|
||||
grouped: dict[str, dict] = {}
|
||||
for row in rows:
|
||||
username = (row.username or "").strip()
|
||||
if not username:
|
||||
continue
|
||||
account_key = username.casefold()
|
||||
group = grouped.setdefault(
|
||||
account_key,
|
||||
{
|
||||
"account_key": account_key,
|
||||
"account_names": set(),
|
||||
"account_ids": set(),
|
||||
"cookie_ids": [],
|
||||
"records": [],
|
||||
},
|
||||
)
|
||||
group["account_names"].add(username)
|
||||
group["account_ids"].add(row.account_id)
|
||||
group["cookie_ids"].append(row.cookie_id)
|
||||
group["records"].append({
|
||||
"id": row.cookie_id,
|
||||
"account_id": row.account_id,
|
||||
"batch_id": row.batch_id,
|
||||
"finished_at": _fmt_dt(row.finished_at),
|
||||
})
|
||||
|
||||
duplicate_groups = []
|
||||
for group in grouped.values():
|
||||
if len(group["cookie_ids"]) < 2:
|
||||
continue
|
||||
duplicate_groups.append({
|
||||
"account_key": group["account_key"],
|
||||
"account_names": sorted(group["account_names"]),
|
||||
"cookie_count": len(group["cookie_ids"]),
|
||||
"account_count": len(group["account_ids"]),
|
||||
"cookie_ids": group["cookie_ids"],
|
||||
"account_ids": sorted(group["account_ids"]),
|
||||
"records": group["records"],
|
||||
})
|
||||
duplicate_groups.sort(key=lambda item: (-item["cookie_count"], item["account_key"]))
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"duplicate_groups": len(duplicate_groups),
|
||||
"duplicate_rows": sum(item["cookie_count"] for item in duplicate_groups),
|
||||
"groups": duplicate_groups,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/export")
|
||||
def export_cookies(
|
||||
format: str = "csv",
|
||||
|
||||
Reference in New Issue
Block a user