diff --git a/app/clients/huobanyun_client.py b/app/clients/huobanyun_client.py index affc3ec..ef9e76d 100644 --- a/app/clients/huobanyun_client.py +++ b/app/clients/huobanyun_client.py @@ -50,7 +50,7 @@ class HuobanyunClient: return {} async def query(self, payload: Dict[str, Any]) -> Dict[str, Any]: - url = f"{self._base_url()}/query" + url = f"{self._base_url()}/openapi/v1/item/list" return await self._request("POST", url, payload) async def writeback(self, payload: Dict[str, Any]) -> Dict[str, Any]: diff --git a/app/services/huobanyun_service.py b/app/services/huobanyun_service.py index ff06573..b7e2787 100644 --- a/app/services/huobanyun_service.py +++ b/app/services/huobanyun_service.py @@ -150,24 +150,39 @@ class HuobanyunService: return {"total": total, "items": mapped_items} async def query(self, req: FeishuExternalQueryRequest) -> FeishuExternalQueryResponse: - payload = { - "keyword": req.keyword or "", - "page": req.page, - "page_size": req.page_size, - "filters": {f.key: f.value for f in req.filters}, - "raw": req.raw or {}, - } + raw = req.raw or {} + table_id = ( + raw.get("table_id") + or raw.get("tableId") + or raw.get("table") + or "2100000015544940" + ) + limit = min(max(req.page_size, 1), 100) + offset = max(req.page - 1, 0) * limit + payload: Dict[str, Any] = {"table_id": table_id, "limit": limit, "offset": offset} + if raw.get("filter"): + payload["filter"] = raw.get("filter") + elif req.keyword: + payload["filter"] = {"and": [{"field": "title", "query": {"eqm": [req.keyword]}}]} + if raw.get("order"): + payload["order"] = raw.get("order") + if raw.get("with_field_config") is not None: + payload["with_field_config"] = raw.get("with_field_config") + data = await self.client.query(payload) + data_block = data.get("data", {}) if isinstance(data, dict) else {} + items = data_block.get("items", []) if isinstance(data_block, dict) else [] + total = data_block.get("filtered", data_block.get("total", len(items))) parsed = HuobanyunQueryResponse( - total=data.get("total", 0), + total=total, items=[ { - "id": item.get("id", ""), - "name": item.get("name", ""), - "value": item.get("value", ""), + "id": item.get("item_id", ""), + "name": item.get("title", ""), + "value": item.get("title", ""), "extra": item, } - for item in data.get("items", []) + for item in items ], ) return FeishuExternalQueryResponse(