1
0
forked from erp-dev/erp

feat: refactor flower.utils to sub package, added some sync api in package, added plate_order sync result model but relation of plate_order was not query (do it next step)

This commit is contained in:
2025-12-17 17:37:39 +08:00
parent 51fad953c3
commit 98d797221a
19 changed files with 1422 additions and 403 deletions

View File

@@ -0,0 +1,109 @@
from __future__ import annotations
from enum import Enum
from typing import Any, Dict, Optional
import aiohttp
# 明道云开放接口:基础配置
MDY_BASE_URL = "https://api.mingdao.com"
MDY_ENDPOINT_GET_FILTER_ROWS = "/v2/open/worksheet/getFilterRows"
# NOTE:
# - 目前项目里 appKey/sign 仍是硬编码(与现有同步代码保持一致)
# - 后续如果要做多环境/更安全配置,建议迁移到环境变量或 Django settings
MDY_APP_KEY = "208e55fea5cea59f"
MDY_SIGN = "MWU0YmViYjkwZmM1ZDIzYzRiN2U3ZGQ4MmE4ZGNkMjc0MWM1ZmQ2ZjkwMjljODE4YmNkZTBhMzA0OTU2YzE2NA=="
class HTTPMethod(Enum):
"""HTTP 请求方法枚举"""
GET = "GET"
POST = "POST"
class MingDaoYunClient:
"""明道云 API 客户端(异步)"""
def __init__(self, app_key: str, sign: str, base_url: str = MDY_BASE_URL):
self.app_key = app_key
self.sign = sign
self.base_url = base_url
async def request(
self,
method: HTTPMethod,
endpoint: str,
data: Optional[Dict[str, Any]] = None,
params: Optional[Dict[str, Any]] = None,
headers: Optional[Dict[str, str]] = None,
) -> Any:
"""通用异步请求函数"""
url = f"{self.base_url}{endpoint}"
default_headers: Dict[str, str] = {
"Content-Type": "application/json",
}
if headers:
default_headers.update(headers)
# 添加认证参数
auth_params = {
"appKey": self.app_key,
"sign": self.sign,
}
async with aiohttp.ClientSession(headers=default_headers) as session:
if method == HTTPMethod.GET:
async with session.get(url, params=params, json=auth_params) as response:
response.raise_for_status()
return await response.json()
if method == HTTPMethod.POST:
payload: Dict[str, Any] = dict(data or {})
payload.update(auth_params)
async with session.post(url, json=payload) as response:
response.raise_for_status()
return await response.json()
raise ValueError(f"Unsupported HTTP method: {method}")
async def get(
self,
endpoint: str,
params: Optional[Dict[str, Any]] = None,
headers: Optional[Dict[str, str]] = None,
) -> Any:
"""发送 GET 请求"""
return await self.request(
method=HTTPMethod.GET,
endpoint=endpoint,
params=params,
headers=headers,
)
async def post(
self,
endpoint: str,
data: Optional[Dict[str, Any]] = None,
params: Optional[Dict[str, Any]] = None,
headers: Optional[Dict[str, str]] = None,
) -> Any:
"""发送 POST 请求"""
return await self.request(
method=HTTPMethod.POST,
endpoint=endpoint,
data=data,
params=params,
headers=headers,
)
def get_default_mingdaoyun_client(base_url: str = MDY_BASE_URL) -> MingDaoYunClient:
"""获取默认配置的明道云客户端(复用项目现有 appKey/sign"""
return MingDaoYunClient(app_key=MDY_APP_KEY, sign=MDY_SIGN, base_url=base_url)