diff --git a/backend/app/crud/production_work_order.py b/backend/app/crud/production_work_order.py index fb17de4d..ca88446b 100644 --- a/backend/app/crud/production_work_order.py +++ b/backend/app/crud/production_work_order.py @@ -94,7 +94,7 @@ def apply_planned_start_time_step_filter( planned_start_time_end: Optional[str] = None, mine_user_id: Optional[str] = None, ): - """按活跃工单/任务下未完成工艺步骤的计划开始时间过滤。""" + """按工艺步骤计划开始时间过滤;工单/任务/步骤状态由外层检索条件组合控制。""" start = (planned_start_time_start or "").strip() end = (planned_start_time_end or "").strip() if not start and not end: @@ -104,15 +104,9 @@ def apply_planned_start_time_step_filter( BizProductionTaskStep.del_flag == 0, BizProductionTaskStep.tenant_no == tenant_no, BizProductionTaskStep.planned_start_time.isnot(None), - BizProductionTaskStep.step_status != "ywc", BizProductionTask.id == BizProductionTaskStep.task_id, BizProductionTask.del_flag == 0, BizProductionTask.tenant_no == tenant_no, - BizProductionTask.task_status.in_(("dpz", "jxz")), - BizProductionWorkOrder.id == BizProductionTask.work_order_id, - BizProductionWorkOrder.del_flag == 0, - BizProductionWorkOrder.tenant_no == tenant_no, - BizProductionWorkOrder.work_order_status.in_(("dpz", "jxz")), work_order_id_column == BizProductionTask.work_order_id, ] if start: diff --git a/backend/tests/test_production_planned_start_time_filter.py b/backend/tests/test_production_planned_start_time_filter.py new file mode 100644 index 00000000..7c2fe0e7 --- /dev/null +++ b/backend/tests/test_production_planned_start_time_filter.py @@ -0,0 +1,42 @@ +"""计划开始时间筛选:不内置工单/任务/步骤状态限制,交给外层组合条件。""" + +from sqlalchemy import create_engine +from sqlalchemy.dialects import mysql +from sqlalchemy.orm import sessionmaker + +from app.crud.production_work_order import apply_planned_start_time_step_filter +from app.models.models import BizProductionWorkOrder + + +def _compile_planned_start_sql() -> str: + eng = create_engine("sqlite://") + SessionLocal = sessionmaker(bind=eng) + db = SessionLocal() + try: + q = db.query(BizProductionWorkOrder).filter(BizProductionWorkOrder.del_flag == 0) + filtered = apply_planned_start_time_step_filter( + q, + tenant_no="zkxw", + work_order_id_column=BizProductionWorkOrder.id, + planned_start_time_start="2026-10-01", + planned_start_time_end="2026-12-31", + ) + return str( + filtered.statement.compile( + dialect=mysql.dialect(), compile_kwargs={"literal_binds": True} + ) + ) + finally: + db.close() + + +def test_planned_start_filter_keeps_date_bounds_without_status_hardcodes(): + sql = _compile_planned_start_sql().lower() + assert "planned_start_time" in sql + assert "2026-10-01 00:00:00" in sql + assert "2026-12-31 23:59:59" in sql + # 不再在 EXISTS 内强制待配置/进行中或未完成步骤 + assert "work_order_status in (" not in sql + assert "task_status in (" not in sql + assert "step_status !=" not in sql + assert "step_status <>" not in sql