99 lines
3.6 KiB
Python
99 lines
3.6 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
检查对账单含税金额是否正确更新
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import sqlite3
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
def check_total_amount():
|
|||
|
|
"""检查含税金额更新情况"""
|
|||
|
|
|
|||
|
|
# 连接数据库
|
|||
|
|
conn = sqlite3.connect('server/data.db')
|
|||
|
|
c = conn.cursor()
|
|||
|
|
|
|||
|
|
print("=== 检查对账单含税金额更新情况 ===\n")
|
|||
|
|
|
|||
|
|
# 查询所有对账单记录
|
|||
|
|
c.execute('SELECT id, contract_no, material_name, quantity, unit_price, total_amount FROM reconciliations ORDER BY id DESC LIMIT 20')
|
|||
|
|
records = c.fetchall()
|
|||
|
|
|
|||
|
|
print("最近20条对账单记录:")
|
|||
|
|
print("-" * 80)
|
|||
|
|
print(f"{'ID':<5} {'合同号':<15} {'物料名称':<30} {'数量':<8} {'单价':<8} {'含税金额':<10} {'应计算金额':<10}")
|
|||
|
|
print("-" * 80)
|
|||
|
|
|
|||
|
|
incorrect_count = 0
|
|||
|
|
for record in records:
|
|||
|
|
recon_id, contract_no, material_name, quantity, unit_price, total_amount = record
|
|||
|
|
|
|||
|
|
# 计算应有的含税金额
|
|||
|
|
calculated_amount = quantity * unit_price
|
|||
|
|
|
|||
|
|
# 检查是否一致(考虑浮点数精度)
|
|||
|
|
if abs(total_amount - calculated_amount) > 0.01:
|
|||
|
|
incorrect_count += 1
|
|||
|
|
status = "❌"
|
|||
|
|
else:
|
|||
|
|
status = "✓"
|
|||
|
|
|
|||
|
|
print(f"{recon_id:<5} {contract_no:<15} {material_name[:28]:<30} {quantity:<8} {unit_price:<8} {total_amount:<10} {calculated_amount:<10} {status}")
|
|||
|
|
|
|||
|
|
print("-" * 80)
|
|||
|
|
print(f"\n发现 {incorrect_count} 条记录的含税金额不正确")
|
|||
|
|
|
|||
|
|
# 修复不正确的记录
|
|||
|
|
if incorrect_count > 0:
|
|||
|
|
print("\n正在修复不正确的记录...")
|
|||
|
|
c.execute('SELECT id, quantity, unit_price FROM reconciliations')
|
|||
|
|
all_records = c.fetchall()
|
|||
|
|
|
|||
|
|
fixed_count = 0
|
|||
|
|
for record in all_records:
|
|||
|
|
recon_id, quantity, unit_price = record
|
|||
|
|
correct_amount = quantity * unit_price
|
|||
|
|
|
|||
|
|
# 更新含税金额
|
|||
|
|
c.execute('UPDATE reconciliations SET total_amount=? WHERE id=?', (correct_amount, recon_id))
|
|||
|
|
fixed_count += 1
|
|||
|
|
|
|||
|
|
conn.commit()
|
|||
|
|
print(f"已修复 {fixed_count} 条记录的含税金额")
|
|||
|
|
|
|||
|
|
# 测试刷新单价功能
|
|||
|
|
print("\n\n=== 测试刷新单价功能 ===")
|
|||
|
|
|
|||
|
|
# 找一个有客户订单的合同号进行测试
|
|||
|
|
c.execute("SELECT DISTINCT contract_no FROM reconciliations LIMIT 1")
|
|||
|
|
test_contract = c.fetchone()
|
|||
|
|
|
|||
|
|
if test_contract:
|
|||
|
|
test_contract_no = test_contract[0]
|
|||
|
|
print(f"测试合同号: {test_contract_no}")
|
|||
|
|
|
|||
|
|
# 查看该合同号的对账单记录
|
|||
|
|
c.execute('SELECT id, material_name, unit_price, total_amount, quantity FROM reconciliations WHERE contract_no=?', (test_contract_no,))
|
|||
|
|
test_records = c.fetchall()
|
|||
|
|
|
|||
|
|
print("\n刷新前的记录:")
|
|||
|
|
for record in test_records:
|
|||
|
|
recon_id, material_name, unit_price, total_amount, quantity = record
|
|||
|
|
print(f" ID={recon_id}, 物料={material_name[:30]}..., 单价={unit_price}, 金额={total_amount}, 数量={quantity}")
|
|||
|
|
|
|||
|
|
# 模拟刷新单价(这里只是检查逻辑)
|
|||
|
|
print("\n注意:实际的刷新单价功能需要通过API调用")
|
|||
|
|
|
|||
|
|
conn.close()
|
|||
|
|
|
|||
|
|
print("\n=== 建议检查事项 ===")
|
|||
|
|
print("1. 确认后端刷新单价的SQL语句是否正确")
|
|||
|
|
print("2. 检查前端是否正确调用了calculateTotal函数")
|
|||
|
|
print("3. 验证数据库中的total_amount字段是否被正确更新")
|
|||
|
|
print("4. 查看浏览器控制台是否有JavaScript错误")
|
|||
|
|
|
|||
|
|
if __name__ == '__main__':
|
|||
|
|
check_total_amount()
|