233 lines
7.9 KiB
Python
233 lines
7.9 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
委外管理系统测试脚本
|
|
用于验证委外工单、发料、入库等功能是否正常工作
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
|
|
# 添加server目录到路径
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'server'))
|
|
|
|
from app import init_db, get_db
|
|
|
|
def test_database_tables():
|
|
"""测试数据库表是否正确创建"""
|
|
print("=" * 60)
|
|
print("测试1: 检查数据库表结构")
|
|
print("=" * 60)
|
|
|
|
# 初始化数据库
|
|
init_db()
|
|
|
|
conn = get_db()
|
|
c = conn.cursor()
|
|
|
|
# 检查委外工单表
|
|
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='outsourcing_orders'")
|
|
if c.fetchone():
|
|
print("✓ 委外工单表 (outsourcing_orders) 创建成功")
|
|
else:
|
|
print("✗ 委外工单表创建失败")
|
|
return False
|
|
|
|
# 检查委外发料表
|
|
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='outsourcing_material_issue'")
|
|
if c.fetchone():
|
|
print("✓ 委外发料表 (outsourcing_material_issue) 创建成功")
|
|
else:
|
|
print("✗ 委外发料表创建失败")
|
|
return False
|
|
|
|
# 检查委外在制库存表
|
|
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='outsourcing_wip_stock'")
|
|
if c.fetchone():
|
|
print("✓ 委外在制库存表 (outsourcing_wip_stock) 创建成功")
|
|
else:
|
|
print("✗ 委外在制库存表创建失败")
|
|
return False
|
|
|
|
# 检查成品入库表
|
|
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='finished_goods_receipt'")
|
|
if c.fetchone():
|
|
print("✓ 成品入库表 (finished_goods_receipt) 创建成功")
|
|
else:
|
|
print("✗ 成品入库表创建失败")
|
|
return False
|
|
|
|
conn.close()
|
|
print("\n所有数据库表创建成功!\n")
|
|
return True
|
|
|
|
def test_table_structure():
|
|
"""测试表结构是否正确"""
|
|
print("=" * 60)
|
|
print("测试2: 检查表结构字段")
|
|
print("=" * 60)
|
|
|
|
conn = get_db()
|
|
c = conn.cursor()
|
|
|
|
# 检查委外工单表字段
|
|
c.execute("PRAGMA table_info(outsourcing_orders)")
|
|
columns = [row[1] for row in c.fetchall()]
|
|
required_columns = ['id', 'order_no', 'customer_order_no', 'product_code',
|
|
'product_name', 'production_qty', 'outsourcing_factory',
|
|
'delivery_date', 'status', 'created_by', 'created_at', 'updated_at']
|
|
|
|
print("\n委外工单表字段:")
|
|
for col in required_columns:
|
|
if col in columns:
|
|
print(f" ✓ {col}")
|
|
else:
|
|
print(f" ✗ {col} (缺失)")
|
|
|
|
# 检查委外发料表字段
|
|
c.execute("PRAGMA table_info(outsourcing_material_issue)")
|
|
columns = [row[1] for row in c.fetchall()]
|
|
required_columns = ['id', 'issue_no', 'outsourcing_order_no', 'material_code',
|
|
'material_name', 'issue_qty', 'unit', 'issue_date',
|
|
'created_by', 'created_at', 'updated_at']
|
|
|
|
print("\n委外发料表字段:")
|
|
for col in required_columns:
|
|
if col in columns:
|
|
print(f" ✓ {col}")
|
|
else:
|
|
print(f" ✗ {col} (缺失)")
|
|
|
|
# 检查成品入库表字段
|
|
c.execute("PRAGMA table_info(finished_goods_receipt)")
|
|
columns = [row[1] for row in c.fetchall()]
|
|
required_columns = ['id', 'receipt_no', 'outsourcing_order_no', 'product_code',
|
|
'product_name', 'receipt_qty', 'receipt_date',
|
|
'created_by', 'created_at', 'updated_at']
|
|
|
|
print("\n成品入库表字段:")
|
|
for col in required_columns:
|
|
if col in columns:
|
|
print(f" ✓ {col}")
|
|
else:
|
|
print(f" ✗ {col} (缺失)")
|
|
|
|
# 检查委外在制库存表字段
|
|
c.execute("PRAGMA table_info(outsourcing_wip_stock)")
|
|
columns = [row[1] for row in c.fetchall()]
|
|
required_columns = ['id', 'outsourcing_order_no', 'material_code',
|
|
'material_name', 'wip_qty', 'unit', 'updated_at']
|
|
|
|
print("\n委外在制库存表字段:")
|
|
for col in required_columns:
|
|
if col in columns:
|
|
print(f" ✓ {col}")
|
|
else:
|
|
print(f" ✗ {col} (缺失)")
|
|
|
|
conn.close()
|
|
print("\n表结构检查完成!\n")
|
|
return True
|
|
|
|
def create_test_data():
|
|
"""创建测试数据"""
|
|
print("=" * 60)
|
|
print("测试3: 创建测试数据")
|
|
print("=" * 60)
|
|
|
|
conn = get_db()
|
|
c = conn.cursor()
|
|
|
|
try:
|
|
# 创建测试BOM数据
|
|
print("\n创建测试BOM数据...")
|
|
test_bom = [
|
|
('AP05', 'AP05物流版', 'R001', '电阻-10K', 1, 'pcs', 100, '供应商A', None, 'system', '2026-03-13', '2026-03-13'),
|
|
('AP05', 'AP05物流版', 'C001', '电容-100uF', 2, 'pcs', 50, '供应商B', None, 'system', '2026-03-13', '2026-03-13'),
|
|
('AP05', 'AP05物流版', 'IC001', '芯片-主控', 1, 'pcs', 1, '供应商C', None, 'system', '2026-03-13', '2026-03-13'),
|
|
]
|
|
|
|
for bom in test_bom:
|
|
c.execute('''INSERT OR IGNORE INTO bom (
|
|
product_code, product_name, material_code, material_name,
|
|
unit_qty, unit, min_package, supplier, remark,
|
|
created_by, created_at, updated_at
|
|
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)''', bom)
|
|
|
|
print("✓ BOM测试数据创建成功")
|
|
|
|
# 创建测试期初库存数据
|
|
print("\n创建测试期初库存数据...")
|
|
test_stock = [
|
|
('R001', '电阻-10K', 500, 'pcs', 100, '供应商A', None, 'system', '2026-03-13', '2026-03-13'),
|
|
('C001', '电容-100uF', 1000, 'pcs', 50, '供应商B', None, 'system', '2026-03-13', '2026-03-13'),
|
|
('IC001', '芯片-主控', 200, 'pcs', 1, '供应商C', None, 'system', '2026-03-13', '2026-03-13'),
|
|
]
|
|
|
|
for stock in test_stock:
|
|
c.execute('''INSERT OR IGNORE INTO initial_stock (
|
|
material_code, material_name, stock_qty, unit, min_package,
|
|
supplier, remark, created_by, created_at, updated_at
|
|
) VALUES (?,?,?,?,?,?,?,?,?,?)''', stock)
|
|
|
|
print("✓ 期初库存测试数据创建成功")
|
|
|
|
# 创建测试客户订单数据
|
|
print("\n创建测试客户订单数据...")
|
|
c.execute('''INSERT OR IGNORE INTO customer_orders (
|
|
order_date, order_no, customer_name, material, quantity, unit_price,
|
|
created_by, created_at, updated_at
|
|
) VALUES (?,?,?,?,?,?,?,?,?)''',
|
|
('2026-03-13', 'CO20260313001', '测试客户', 'AP05物流版', 100, 1000.00,
|
|
'system', '2026-03-13', '2026-03-13'))
|
|
|
|
print("✓ 客户订单测试数据创建成功")
|
|
|
|
conn.commit()
|
|
print("\n所有测试数据创建成功!\n")
|
|
|
|
except Exception as e:
|
|
print(f"\n✗ 创建测试数据失败: {str(e)}\n")
|
|
conn.rollback()
|
|
return False
|
|
finally:
|
|
conn.close()
|
|
|
|
return True
|
|
|
|
def main():
|
|
"""主测试函数"""
|
|
print("\n")
|
|
print("╔" + "=" * 58 + "╗")
|
|
print("║" + " " * 15 + "委外管理系统测试脚本" + " " * 15 + "║")
|
|
print("╚" + "=" * 58 + "╝")
|
|
print("\n")
|
|
|
|
# 运行测试
|
|
success = True
|
|
|
|
if not test_database_tables():
|
|
success = False
|
|
|
|
if not test_table_structure():
|
|
success = False
|
|
|
|
if not create_test_data():
|
|
success = False
|
|
|
|
# 输出测试结果
|
|
print("=" * 60)
|
|
if success:
|
|
print("✓ 所有测试通过!委外管理系统已准备就绪。")
|
|
print("\n下一步操作:")
|
|
print("1. 启动服务器: cd server && python app.py")
|
|
print("2. 访问系统: http://localhost:5000")
|
|
print("3. 进入\"委外管理\"菜单开始使用")
|
|
else:
|
|
print("✗ 部分测试失败,请检查错误信息。")
|
|
print("=" * 60)
|
|
print("\n")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|