This commit is contained in:
Marsway 2026-02-03 16:31:52 +08:00
parent 0ae1f4150e
commit 57d25c857e
2 changed files with 28 additions and 13 deletions

View File

@ -50,7 +50,7 @@ class HuobanyunClient:
return {} return {}
async def query(self, payload: Dict[str, Any]) -> Dict[str, Any]: 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) return await self._request("POST", url, payload)
async def writeback(self, payload: Dict[str, Any]) -> Dict[str, Any]: async def writeback(self, payload: Dict[str, Any]) -> Dict[str, Any]:

View File

@ -150,24 +150,39 @@ class HuobanyunService:
return {"total": total, "items": mapped_items} return {"total": total, "items": mapped_items}
async def query(self, req: FeishuExternalQueryRequest) -> FeishuExternalQueryResponse: async def query(self, req: FeishuExternalQueryRequest) -> FeishuExternalQueryResponse:
payload = { raw = req.raw or {}
"keyword": req.keyword or "", table_id = (
"page": req.page, raw.get("table_id")
"page_size": req.page_size, or raw.get("tableId")
"filters": {f.key: f.value for f in req.filters}, or raw.get("table")
"raw": req.raw or {}, 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 = 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( parsed = HuobanyunQueryResponse(
total=data.get("total", 0), total=total,
items=[ items=[
{ {
"id": item.get("id", ""), "id": item.get("item_id", ""),
"name": item.get("name", ""), "name": item.get("title", ""),
"value": item.get("value", ""), "value": item.get("title", ""),
"extra": item, "extra": item,
} }
for item in data.get("items", []) for item in items
], ],
) )
return FeishuExternalQueryResponse( return FeishuExternalQueryResponse(