Files
njts-accounting-core/query_accounts.py
2026-03-03 00:01:43 +09:00

108 lines
2.7 KiB
Python

import psycopg2
import sys
# 数据库连接
try:
conn = psycopg2.connect(
host="192.168.0.61",
port=55432,
database="njts_acct",
user="njts_app",
password="njts_app2025"
)
except Exception as e:
print(f"数据库连接失败: {e}")
sys.exit(1)
cur = conn.cursor()
# 查询所有科目
try:
cur.execute("""
SELECT
account_id,
account_code,
account_name,
account_type
FROM accounts
ORDER BY CAST(account_code AS INTEGER)
""")
results = cur.fetchall()
except Exception as e:
print(f"查询失败: {e}")
sys.exit(1)
print("=" * 120)
print("全科目リスト - 科目代码范围分析")
print("=" * 120)
ranges = [
("100-199 (资产-现金预金)", 100, 199),
("200-299 (资产-应收账款)", 200, 299),
("300-399 (资产-有价证券)", 300, 399),
("400-499 (资产-固定资产)", 400, 499),
("500-599 (负债)", 500, 599),
("600-699 (纯资产)", 600, 699),
("700-799 (收益/收入)", 700, 799),
("800-899 (费用)", 800, 899),
("900-999 (其他)", 900, 999),
]
for label, min_code, max_code in ranges:
print(f"\n{label}")
filtered = [(id, code, name, typ) for id, code, name, typ in results
if min_code <= int(code) <= max_code]
if filtered:
for account_id, account_code, account_name, account_type in filtered:
print(f" {account_code:>3s} - {account_name:35s} (ID:{account_id:>3d}, Type:{account_type:10s})")
else:
print(" (无科目)")
# 打印按 account_type 的分类
print("\n" + "=" * 120)
print("按 account_type 分类")
print("=" * 120)
cur.execute("""
SELECT DISTINCT account_type
FROM accounts
ORDER BY account_type
""")
types = cur.fetchall()
for (acc_type,) in types:
print(f"\n{acc_type}")
filtered = [(id, code, name) for id, code, name, typ in results if typ == acc_type]
for account_id, account_code, account_name in filtered:
code_int = int(account_code)
if 700 <= code_int < 800:
category = "收益"
elif 800 <= code_int < 900:
category = "费用"
else:
category = "其他"
print(f" {account_code:>3s} - {account_name:35s} (ID:{account_id:>3d})")
print("\n" + "=" * 120)
print("科目代码范围统计")
print("=" * 120)
code_ranges = {
"700-799": (700, 799),
"800-899": (800, 899),
"505": (505, 505),
}
for label, (min_code, max_code) in code_ranges.items():
count = len([1 for _, code, _, _ in results if min_code <= int(code) <= max_code])
print(f"{label}: {count} 个科目")
cur.close()
conn.close()
print("\n✓ 查询完成")