#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys sys.path.insert(0, 'backend') os.environ['DB_HOST'] = '192.168.0.61' os.environ['DB_NAME'] = 'njts_acct' os.environ['DB_USER'] = 'njts_app' os.environ['DB_PASSWORD'] = 'njts_app2025' os.environ['DB_PORT'] = '55432' from app.core.database import get_connection from decimal import Decimal def D(x): return Decimal(str(x or 0)) with get_connection() as conn: with conn.cursor() as cur: print('\n【 验证试算表的SQL逻辑 】') aid = 41 # account_code='701' 的真实 id date_from = '2025-06-01' date_to = '2025-06-30' print(f"\n1. 当前代码使用的查询 (account_id = {aid}):") sql = """ SELECT COALESCE(SUM(l.debit), 0) AS debit, COALESCE(SUM(l.credit), 0) AS credit FROM journal_lines l JOIN journal_entries j ON j.journal_entry_id = l.journal_entry_id LEFT JOIN journal_entries child ON child.parent_entry_id = j.journal_entry_id WHERE l.account_id = %s AND j.entry_date BETWEEN %s AND %s AND j.is_deleted = false AND child.journal_entry_id IS NULL """ cur.execute(sql, (aid, date_from, date_to)) row = cur.fetchone() print(f" 结果: debit={row['debit']}, credit={row['credit']}") print(f"\n2. 不使用LEFT JOIN过滤的查询 (account_id = {aid}):") sql2 = """ SELECT COALESCE(SUM(l.debit), 0) AS debit, COALESCE(SUM(l.credit), 0) AS credit FROM journal_lines l JOIN journal_entries j ON j.journal_entry_id = l.journal_entry_id WHERE l.account_id = %s AND j.entry_date BETWEEN %s AND %s AND j.is_deleted = false """ cur.execute(sql2, (aid, date_from, date_to)) row = cur.fetchone() print(f" 结果: debit={row['debit']}, credit={row['credit']}") print(f"\n3. 如果错误地用account_code'701'作为account_id会发生什么:") sql3 = """ SELECT COALESCE(SUM(l.debit), 0) AS debit, COALESCE(SUM(l.credit), 0) AS credit FROM journal_lines l JOIN journal_entries j ON j.journal_entry_id = l.journal_entry_id WHERE l.account_id = %s AND j.entry_date BETWEEN %s AND %s AND j.is_deleted = false """ cur.execute(sql3, (701, date_from, date_to)) row = cur.fetchone() print(f" 结果 (account_id=701): debit={row['debit']}, credit={row['credit']}") print(f"\n4. 检查是否有人在代码中硬编码了'701'而不是从accounts表查询:") # 在当前的trial_balance/service.py中查找硬编码的数字 print(" 需要检查代码中是否有 account_id IN (701, ...) 或类似的硬编码")