Files
playwrite/db/materials_to_delete.py
Misaka 3b7c00377f style: format all Python files with Black
Apply Black formatter to the entire codebase for consistent code style.

Co-Authored-By: Claude (glm-5) <noreply@anthropic.com>
2026-02-26 22:44:03 +08:00

119 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
待删除物料查询组件
从数据库查询指定负责人需要删除的物料编码
"""
from typing import List, Dict, Any, Optional
from db.connection import get_connection
def get_materials_to_delete(manager_name):
"""
根据负责人名称查询待删除物料编码列表
Args:
manager_name: 负责人姓名
Returns:
物料编码列表
"""
query = """
SELECT [MaterialCode]
FROM [dbo].[MaterialsToBeDeleted]
WHERE [ManagerName] = ?
"""
with get_connection() as conn:
results = conn.execute_query(query, (manager_name,))
# 提取物料编码并去除空值
material_codes = [row["MaterialCode"] for row in results if row["MaterialCode"]]
return material_codes
def get_all_materials_to_delete() -> List[Dict[str, Any]]:
"""
获取所有待删除物料记录
Returns:
List[Dict[str, Any]]: 包含MaterialCode和ManagerName的记录列表
"""
query = """
SELECT [MaterialCode], [ManagerName]
FROM [dbo].[MaterialsToBeDeleted]
WHERE [MaterialCode] IS NOT NULL
ORDER BY [ManagerName], [MaterialCode]
"""
with get_connection() as conn:
results = conn.execute_query(query)
return results
def get_materials_to_delete_by_managers(
manager_names: Optional[List[str]] = None,
) -> List[str]:
"""
根据负责人列表查询待删除物料编码
Args:
manager_names: 负责人姓名列表
- None 或空列表:返回所有物料编码
- 有值:返回指定负责人的物料编码
Returns:
物料编码列表
"""
if not manager_names:
# 查询所有物料编码
query = """
SELECT [MaterialCode]
FROM [dbo].[MaterialsToBeDeleted]
WHERE [MaterialCode] IS NOT NULL
"""
with get_connection() as conn:
results = conn.execute_query(query)
material_codes = [
row["MaterialCode"] for row in results if row["MaterialCode"]
]
return material_codes
else:
# 使用 IN 子句查询多个负责人
placeholders = ", ".join(["?"] * len(manager_names))
query = f"""
SELECT [MaterialCode]
FROM [dbo].[MaterialsToBeDeleted]
WHERE [MaterialCode] IS NOT NULL
AND [ManagerName] IN ({placeholders})
"""
with get_connection() as conn:
results = conn.execute_query(query, tuple(manager_names))
material_codes = [
row["MaterialCode"] for row in results if row["MaterialCode"]
]
return material_codes
def should_delete_material(manager_name: str, material_code: str) -> bool:
"""
检查指定物料编码是否需要删除
直接在数据库层面查询,避免将大量数据加载到内存
Args:
manager_name: 负责人姓名
material_code: 物料编码
Returns:
bool: 如果物料需要删除返回 True否则返回 False
"""
query = """
SELECT COUNT(*) as count
FROM [dbo].[MaterialsToBeDeleted]
WHERE [ManagerName] = ?
AND [MaterialCode] = ?
"""
with get_connection() as conn:
results = conn.execute_query(query, (manager_name, material_code))
return results[0]["count"] > 0 if results else False