修正
This commit is contained in:
126
identify_duplicates_detailed.py
Normal file
126
identify_duplicates_detailed.py
Normal file
@@ -0,0 +1,126 @@
|
||||
import psycopg2
|
||||
|
||||
conn = psycopg2.connect(
|
||||
host="192.168.0.61",
|
||||
port=55432,
|
||||
database="njts_acct",
|
||||
user="njts_app",
|
||||
password="njts_app2025"
|
||||
)
|
||||
|
||||
cur = conn.cursor()
|
||||
|
||||
print("=" * 120)
|
||||
print("【重复仕訳分析】按描述和金额分组")
|
||||
print("=" * 120)
|
||||
|
||||
# 查找疑似重复的记录:相同描述和金额,但日期不同
|
||||
cur.execute("""
|
||||
SELECT
|
||||
je.description,
|
||||
COALESCE(SUM(jl.debit), 0) as debit_total,
|
||||
COALESCE(SUM(jl.credit), 0) as credit_total,
|
||||
COUNT(*) as cnt,
|
||||
STRING_AGG(
|
||||
je.journal_entry_id || '(' || TO_CHAR(je.entry_date, 'YYYY-MM-DD') || ')',
|
||||
' | '
|
||||
ORDER BY je.entry_date
|
||||
) as entries
|
||||
FROM journal_entries je
|
||||
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
|
||||
WHERE je.is_deleted = false
|
||||
AND EXTRACT(YEAR FROM je.entry_date) = 2025
|
||||
AND EXTRACT(MONTH FROM je.entry_date) IN (6, 7, 8)
|
||||
GROUP BY je.description
|
||||
HAVING COUNT(*) > 1
|
||||
ORDER BY cnt DESC
|
||||
""")
|
||||
|
||||
results = cur.fetchall()
|
||||
|
||||
if results:
|
||||
print("\n疑似重复记录(相同描述,多个月份):\n")
|
||||
for row in results:
|
||||
description, debit, credit, cnt, entries = row
|
||||
print(f"【{cnt}件】{description}")
|
||||
print(f" 金額: 借={debit:>10,.0f} 貸={credit:>10,.0f}")
|
||||
print(f" 仕訳: {entries}")
|
||||
print()
|
||||
else:
|
||||
print("未找到疑似重复的记录")
|
||||
|
||||
# 查询6月的所有记录
|
||||
print("\n" + "=" * 120)
|
||||
print("【6月の全仕訳】")
|
||||
print("=" * 120)
|
||||
|
||||
cur.execute("""
|
||||
SELECT
|
||||
je.journal_entry_id,
|
||||
je.entry_date,
|
||||
je.description,
|
||||
COALESCE(SUM(jl.debit), 0) as debit_total,
|
||||
COALESCE(SUM(jl.credit), 0) as credit_total
|
||||
FROM journal_entries je
|
||||
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
|
||||
WHERE je.is_deleted = false
|
||||
AND EXTRACT(YEAR FROM je.entry_date) = 2025
|
||||
AND EXTRACT(MONTH FROM je.entry_date) = 6
|
||||
GROUP BY je.journal_entry_id, je.entry_date, je.description
|
||||
ORDER BY je.journal_entry_id
|
||||
""")
|
||||
|
||||
june_records = cur.fetchall()
|
||||
print(f"\n全{len(june_records)}件:")
|
||||
for row in june_records:
|
||||
entry_id, entry_date, description, debit, credit = row
|
||||
print(f"ID={entry_id:3d} | {entry_date} | 借={debit:>10,.0f} 貸={credit:>10,.0f} | {description[:50]}")
|
||||
|
||||
# 查询只在7月、8月出现但6月没有的相同记录
|
||||
print("\n" + "=" * 120)
|
||||
print("【可能通过复制创建的记录(6月有,7月/8月也有相同金额)】")
|
||||
print("=" * 120)
|
||||
|
||||
cur.execute("""
|
||||
WITH june_records AS (
|
||||
SELECT
|
||||
je.description,
|
||||
COALESCE(SUM(jl.debit), 0) as debit_total,
|
||||
COALESCE(SUM(jl.credit), 0) as credit_total
|
||||
FROM journal_entries je
|
||||
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
|
||||
WHERE je.is_deleted = false
|
||||
AND EXTRACT(YEAR FROM je.entry_date) = 2025
|
||||
AND EXTRACT(MONTH FROM je.entry_date) = 6
|
||||
GROUP BY je.description
|
||||
)
|
||||
SELECT
|
||||
je.journal_entry_id,
|
||||
TO_CHAR(je.entry_date, 'YYYY-MM') as month,
|
||||
je.description,
|
||||
COALESCE(SUM(jl.debit), 0) as debit_total,
|
||||
COALESCE(SUM(jl.credit), 0) as credit_total
|
||||
FROM journal_entries je
|
||||
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
|
||||
INNER JOIN june_records jr ON je.description = jr.description
|
||||
AND COALESCE(SUM(jl.debit), 0) = jr.debit_total
|
||||
AND COALESCE(SUM(jl.credit), 0) = jr.credit_total
|
||||
WHERE je.is_deleted = false
|
||||
AND EXTRACT(YEAR FROM je.entry_date) = 2025
|
||||
AND EXTRACT(MONTH FROM je.entry_date) IN (7, 8)
|
||||
GROUP BY je.journal_entry_id, je.entry_date, je.description
|
||||
ORDER BY je.entry_date, je.journal_entry_id
|
||||
""")
|
||||
|
||||
duplicates = cur.fetchall()
|
||||
|
||||
if duplicates:
|
||||
print(f"\n找到{len(duplicates)}件可能通过复制创建的记录:\n")
|
||||
for row in duplicates:
|
||||
entry_id, month, description, debit, credit = row
|
||||
print(f"ID={entry_id:3d} | {month} | 借={debit:>10,.0f} 貸={credit:>10,.0f} | {description[:50]}")
|
||||
else:
|
||||
print("\n未找到可能通过复制创建的记录")
|
||||
|
||||
cur.close()
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user