fix(backend): 后端日志走查发现 2 个 schema 不一致 bug
- coach_service.py:594 _build_task_groups SQL 查 biz.notes.is_pinned
但表无该字段 → UndefinedColumn 抛错 + 事务终止 + 级联 _build_notes
/ _build_history_months 全部失败(InFailedSqlTransaction)
修复:删除 is_pinned 列,pinned 降级 False(置顶功能未落库,
不影响核心备注展示)。
- customer_service.py:1088 _get_consumption_month_summary SQL 用错
3 个字段(从 v_dwd_assistant_service_log 复制粘贴未适配
v_dwd_settlement_head 字段名差异):
sh.tenant_member_id → sh.member_id
sh.is_delete = 0 → 删除(view 已过滤已撤销订单)
sh.settle_time → sh.create_time
→ 高频 UndefinedColumn,小程序 customer-records 月度 rechargeTotal
恒返回 0,consumption60D 恒返回 null。
走查覆盖(MCP):
- 小程序 customer-records 调 /api/xcx/customers/{id}/consumption-records
修前: rechargeTotal=0, consumption60D=null
修后: rechargeTotal=1009.08, consumption60D=7758.24, daysSinceVisit=31
visitCount=1, consumeTotal=384.02 全部 PASS
发现来源:tmp/20260505_backed_LOG.txt 后端日志 grep
ERROR/Traceback 反复出现 UndefinedColumn。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -589,9 +589,11 @@ def _build_task_groups(
|
|||||||
if task_ids:
|
if task_ids:
|
||||||
try:
|
try:
|
||||||
with conn.cursor() as cur:
|
with conn.cursor() as cur:
|
||||||
|
# 2026-05-05: biz.notes 无 is_pinned 列(SQL 报 UndefinedColumn 触发事务终止 + 级联失败),
|
||||||
|
# 删除该列,pinned 降级 False(置顶功能未落库,不影响核心备注展示)
|
||||||
cur.execute(
|
cur.execute(
|
||||||
"""
|
"""
|
||||||
SELECT task_id, is_pinned, content, created_at
|
SELECT task_id, content, created_at
|
||||||
FROM biz.notes
|
FROM biz.notes
|
||||||
WHERE task_id = ANY(%s)
|
WHERE task_id = ANY(%s)
|
||||||
ORDER BY created_at DESC
|
ORDER BY created_at DESC
|
||||||
@@ -603,9 +605,9 @@ def _build_task_groups(
|
|||||||
if tid not in task_notes_map:
|
if tid not in task_notes_map:
|
||||||
task_notes_map[tid] = []
|
task_notes_map[tid] = []
|
||||||
task_notes_map[tid].append({
|
task_notes_map[tid].append({
|
||||||
"pinned": bool(nr[1]),
|
"pinned": False,
|
||||||
"text": nr[2] or "",
|
"text": nr[1] or "",
|
||||||
"date": nr[3].isoformat() if nr[3] else "",
|
"date": nr[2].isoformat() if nr[2] else "",
|
||||||
})
|
})
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.warning("批量查询任务备注失败", exc_info=True)
|
logger.warning("批量查询任务备注失败", exc_info=True)
|
||||||
|
|||||||
@@ -1085,15 +1085,16 @@ def _get_consumption_month_summary(
|
|||||||
consume_total = float(row[1]) if row[1] else 0.0
|
consume_total = float(row[1]) if row[1] else 0.0
|
||||||
|
|
||||||
# 充值总额(从 settlement_head 的 recharge_card_amount)
|
# 充值总额(从 settlement_head 的 recharge_card_amount)
|
||||||
|
# 2026-05-05: 修字段名,view v_dwd_settlement_head 列名为 member_id / create_time
|
||||||
|
# (不是 tenant_member_id / settle_time);已撤销订单 view 已过滤,无需 is_delete 条件
|
||||||
cur.execute(
|
cur.execute(
|
||||||
"""
|
"""
|
||||||
SELECT COALESCE(SUM(sh.recharge_card_amount), 0)
|
SELECT COALESCE(SUM(sh.recharge_card_amount), 0)
|
||||||
FROM app.v_dwd_settlement_head sh
|
FROM app.v_dwd_settlement_head sh
|
||||||
WHERE sh.tenant_member_id = %s
|
WHERE sh.member_id = %s
|
||||||
AND sh.is_delete = 0
|
|
||||||
AND sh.recharge_card_amount > 0
|
AND sh.recharge_card_amount > 0
|
||||||
AND sh.settle_time >= %s::timestamptz
|
AND sh.create_time >= %s::timestamptz
|
||||||
AND sh.settle_time < %s::timestamptz
|
AND sh.create_time < %s::timestamptz
|
||||||
""",
|
""",
|
||||||
(customer_id, start_date, end_date),
|
(customer_id, start_date, end_date),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user