diff --git a/app/services/work_order_client.py b/app/services/work_order_client.py index 971a9b0..e50be9c 100644 --- a/app/services/work_order_client.py +++ b/app/services/work_order_client.py @@ -186,6 +186,97 @@ class WorkOrderClient: logger.error(f"自动结单异常: orderId={order_id}, error={e}") return False + async def confirm_order(self, order_id: str) -> bool: + """确认工单(保安接单)""" + if not self._enabled: + return False + + body = {"orderId": int(order_id) if order_id else 0} + body_json = json.dumps(body, ensure_ascii=False, separators=(",", ":")) + + try: + headers = self._build_headers(body_json) + url = f"{self._base_url}/open-api/ops/security/order/confirm" + + async with httpx.AsyncClient(timeout=self._timeout) as client: + resp = await client.post(url, content=body_json, headers=headers) + data = resp.json() + + if data.get("code") != 0: + logger.error(f"确认工单失败: orderId={order_id}, resp={data}") + return False + + logger.info(f"工单已确认: orderId={order_id}") + return True + + except Exception as e: + logger.error(f"确认工单异常: orderId={order_id}, error={e}") + return False + + async def submit_order( + self, + order_id: str, + result: str, + result_img_urls: Optional[list] = None, + ) -> bool: + """工单提交(保安提交处理结果+图片)""" + if not self._enabled: + return False + + body = { + "orderId": int(order_id) if order_id else 0, + "result": result, + } + if result_img_urls: + body["resultImgUrls"] = result_img_urls + body_json = json.dumps(body, ensure_ascii=False, separators=(",", ":")) + + try: + headers = self._build_headers(body_json) + url = f"{self._base_url}/open-api/ops/security/order/submit" + + async with httpx.AsyncClient(timeout=self._timeout) as client: + resp = await client.post(url, content=body_json, headers=headers) + data = resp.json() + + if data.get("code") != 0: + logger.error(f"工单提交失败: orderId={order_id}, resp={data}") + return False + + logger.info(f"工单已提交: orderId={order_id}") + return True + + except Exception as e: + logger.error(f"工单提交异常: orderId={order_id}, error={e}") + return False + + async def false_alarm(self, order_id: str) -> bool: + """误报标记""" + if not self._enabled: + return False + + body = {"orderId": int(order_id) if order_id else 0} + body_json = json.dumps(body, ensure_ascii=False, separators=(",", ":")) + + try: + headers = self._build_headers(body_json) + url = f"{self._base_url}/open-api/ops/security/order/false-alarm" + + async with httpx.AsyncClient(timeout=self._timeout) as client: + resp = await client.post(url, content=body_json, headers=headers) + data = resp.json() + + if data.get("code") != 0: + logger.error(f"误报标记失败: orderId={order_id}, resp={data}") + return False + + logger.info(f"工单已标记误报: orderId={order_id}") + return True + + except Exception as e: + logger.error(f"误报标记异常: orderId={order_id}, error={e}") + return False + # 全局单例 _work_order_client: Optional[WorkOrderClient] = None