修复:Agent查询待处理工单始终为空
根因:list_orders 和 query_order_stats 默认按 create_time 过滤 今日范围,但待处理工单可能是昨天或更早创建的,导致全部漏掉。 修复内容: 1. 查询待处理状态工单时跳过时间范围过滤(skip_time_filter) 2. query_order_stats 额外返回 current_pending/current_assigned 表示当前所有未完成工单数(不限时间) 3. _query_orders 新增 tenant_id 过滤(从配置读取) 4. 系统提示词增加查询技巧引导 Agent 正确使用 status 参数
This commit is contained in:
@@ -81,20 +81,29 @@ def _query_orders(
|
||||
end_time=None,
|
||||
limit: int = 100,
|
||||
assignee_name: Optional[str] = None,
|
||||
skip_time_filter: bool = False,
|
||||
):
|
||||
"""查询 IoT 工单(跨库只读)"""
|
||||
from app.models_iot import get_iot_session, IotOpsOrder
|
||||
from app.config import settings
|
||||
db = get_iot_session()
|
||||
try:
|
||||
q = db.query(IotOpsOrder).filter(IotOpsOrder.deleted == 0)
|
||||
# 租户隔离
|
||||
try:
|
||||
tid = int(settings.work_order.tenant_id)
|
||||
q = q.filter(IotOpsOrder.tenant_id == tid)
|
||||
except Exception:
|
||||
pass
|
||||
if order_type and order_type != "ALL":
|
||||
q = q.filter(IotOpsOrder.order_type == order_type)
|
||||
if status:
|
||||
q = q.filter(IotOpsOrder.status == status)
|
||||
if start_time:
|
||||
q = q.filter(IotOpsOrder.create_time >= start_time)
|
||||
if end_time:
|
||||
q = q.filter(IotOpsOrder.create_time < end_time)
|
||||
if not skip_time_filter:
|
||||
if start_time:
|
||||
q = q.filter(IotOpsOrder.create_time >= start_time)
|
||||
if end_time:
|
||||
q = q.filter(IotOpsOrder.create_time < end_time)
|
||||
if assignee_name:
|
||||
q = q.filter(IotOpsOrder.assignee_name.contains(assignee_name))
|
||||
|
||||
@@ -151,6 +160,16 @@ def query_order_stats(time_range: str = "today", order_type: str = "ALL") -> str
|
||||
start_time=start, end_time=end, limit=10000,
|
||||
)
|
||||
|
||||
# 额外统计当前所有未完成工单(不限时间范围)
|
||||
pending_orders, pending_total, _, _ = _query_orders(
|
||||
order_type=order_type if order_type != "ALL" else None,
|
||||
status="PENDING", limit=10000, skip_time_filter=True,
|
||||
)
|
||||
assigned_orders, assigned_total, _, _ = _query_orders(
|
||||
order_type=order_type if order_type != "ALL" else None,
|
||||
status="ASSIGNED", limit=10000, skip_time_filter=True,
|
||||
)
|
||||
|
||||
# 按状态统计
|
||||
status_count = {}
|
||||
for o in orders:
|
||||
@@ -180,6 +199,8 @@ def query_order_stats(time_range: str = "today", order_type: str = "ALL") -> str
|
||||
"by_order_type": {k: v for k, v in type_count.items() if v > 0},
|
||||
"by_alarm_type": {ALARM_TYPE_NAMES.get(t, t): c for t, c in alarm_type_count.items()} if alarm_type_count else {},
|
||||
"false_alarm_count": false_alarm_count,
|
||||
"current_pending": pending_total,
|
||||
"current_assigned": assigned_total,
|
||||
}
|
||||
return json.dumps(result, ensure_ascii=False)
|
||||
|
||||
@@ -215,10 +236,15 @@ def list_orders(
|
||||
if config and assigned_to_me:
|
||||
user_id = config.get("configurable", {}).get("user_id", "")
|
||||
|
||||
# 查待处理工单时不限时间范围(待处理可能是之前创建的)
|
||||
pending_statuses = {"PENDING", "ASSIGNED", "ARRIVED", "PAUSED"}
|
||||
skip_time = status and status in pending_statuses
|
||||
|
||||
orders, total, sec_ext_map, clean_ext_map = _query_orders(
|
||||
order_type=order_type if order_type != "ALL" else None,
|
||||
status=status or None,
|
||||
start_time=start, end_time=end, limit=limit,
|
||||
skip_time_filter=skip_time,
|
||||
)
|
||||
|
||||
items = []
|
||||
|
||||
Reference in New Issue
Block a user