实现原料逻辑删除功能

- 为fabrics表添加is_deleted字段用于标记删除状态
- 修改delete_raw方法实现逻辑删除而非物理删除
- 更新所有查询语句过滤已删除的原料数据
- 更新库存视图过滤已删除的原料和相关记录
- 保留历史数据,支持数据恢复

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-27 19:09:16 +08:00
parent fa70f62099
commit 6322cb0caa
6 changed files with 42 additions and 30 deletions

View File

@@ -145,6 +145,10 @@ class DatabaseManager:
pass
# 添加逻辑删除字段
try:
conn.execute("ALTER TABLE fabrics ADD COLUMN is_deleted INTEGER DEFAULT 0")
except:
pass
try:
conn.execute("ALTER TABLE fabric_stock_in ADD COLUMN is_deleted INTEGER DEFAULT 0")
except:
@@ -223,9 +227,10 @@ class DatabaseManager:
conn.execute('CREATE INDEX IF NOT EXISTS idx_fabric_consumption_date ON fabric_consumption(consume_date)')
# 添加库存计算视图
conn.execute('DROP VIEW IF EXISTS fabric_stock_view')
conn.execute('''
CREATE VIEW IF NOT EXISTS fabric_stock_view AS
SELECT
CREATE VIEW fabric_stock_view AS
SELECT
f.model,
f.category,
f.supplier,
@@ -238,13 +243,16 @@ class DatabaseManager:
LEFT JOIN (
SELECT model, SUM(quantity) as total_in
FROM fabric_stock_in
WHERE is_deleted IS NULL OR is_deleted = 0
GROUP BY model
) stock_in ON f.model = stock_in.model
LEFT JOIN (
SELECT model, SUM(consume_quantity) as total_consumed
FROM fabric_consumption
WHERE is_deleted IS NULL OR is_deleted = 0
GROUP BY model
) consumption ON f.model = consumption.model
WHERE f.is_deleted IS NULL OR f.is_deleted = 0
''')
# 初始化默认密码
@@ -284,8 +292,8 @@ def get_fabric_categories(db_path):
with get_db_connection(db_path) as conn:
cursor = conn.execute("""
SELECT DISTINCT category
FROM fabrics
WHERE category IS NOT NULL AND category != ''
FROM fabrics
WHERE category IS NOT NULL AND category != '' AND (is_deleted IS NULL OR is_deleted = 0)
ORDER BY category
""")
categories = set()
@@ -306,8 +314,8 @@ def get_fabric_types_by_category(db_path, category):
with get_db_connection(db_path) as conn:
cursor = conn.execute("""
SELECT DISTINCT fabric_type
FROM fabrics
WHERE category = ? AND fabric_type IS NOT NULL AND fabric_type != ''
FROM fabrics
WHERE category = ? AND fabric_type IS NOT NULL AND fabric_type != '' AND (is_deleted IS NULL OR is_deleted = 0)
ORDER BY fabric_type
""", (category,))
@@ -325,9 +333,9 @@ def get_fabric_models_by_category_type(db_path, category, fabric_type):
try:
with get_db_connection(db_path) as conn:
cursor = conn.execute("""
SELECT model, color, unit
FROM fabrics
WHERE category = ? OR category = ? OR category LIKE ?
SELECT model, color, unit
FROM fabrics
WHERE (category = ? OR category = ? OR category LIKE ?) AND (is_deleted IS NULL OR is_deleted = 0)
ORDER BY model
""", (category, f"{category}-{fabric_type}", f"{category}-{fabric_type}-%"))