feat: support multiple managers in DiscreteMaterialPlanCleaner
- Add get_materials_to_delete_by_managers() function in db/materials_to_delete.py - Supports querying by single manager, multiple managers, or all managers - Uses IN clause for multi-manager queries - Refactor DiscreteMaterialPlanCleaner to accept manager_names parameter - Accepts str, List[str], or None (for all managers) - Automatically normalizes parameter types in __init__ - Updates preload_data() with appropriate log messages Co-Authored-By: Claude (glm-5) <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
从数据库查询指定负责人需要删除的物料编码
|
||||
"""
|
||||
|
||||
from typing import List, Dict, Any
|
||||
from typing import List, Dict, Any, Optional
|
||||
from db.connection import get_connection
|
||||
|
||||
|
||||
@@ -49,6 +49,46 @@ def get_all_materials_to_delete() -> List[Dict[str, Any]]:
|
||||
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:
|
||||
"""
|
||||
检查指定物料编码是否需要删除
|
||||
|
||||
Reference in New Issue
Block a user