feat(park): /park/api/screen/data 支持全量数据编辑(动态/区域/产业构成/营收/成立时间等)
ScreenBody 增 intro/feed/zones/industryMix/address/phone/email/region/revenue_total/revenue_tax; update_screen 全量写入 data_json 并 refresh_engine;screen_view 返回 zones/industryMix/feed/region。 TestClient:PUT 名称+两段简介+动态+区域+产业+营收+成立时间 → snapshot 反映。
This commit is contained in:
@@ -164,6 +164,15 @@ class ScreenBody(BaseModel):
|
||||
jobs: int | None = None
|
||||
area: int | None = None
|
||||
founded: int | None = None
|
||||
address: str | None = None
|
||||
phone: str | None = None
|
||||
email: str | None = None
|
||||
revenue_total: float | None = None
|
||||
revenue_tax: float | None = None
|
||||
intro: list[str] | None = None
|
||||
feed: list[dict] | None = None
|
||||
zones: list[dict] | None = None
|
||||
industryMix: list[dict] | None = None
|
||||
|
||||
|
||||
# ==================== 健康 / 设置 / 引导 ====================
|
||||
|
||||
+23
-11
@@ -382,9 +382,11 @@ def screen_view(tenant_id: str) -> dict:
|
||||
"name": t.get("name", ""),
|
||||
"intro": t.get("intro", []),
|
||||
"founded": park.get("founded"), "province_level": park.get("province_level") or park.get("provinceLevel"), "area": park.get("area"),
|
||||
"address": park.get("address"), "phone": park.get("phone"), "email": park.get("email"),
|
||||
"region": park.get("region", ""), "address": park.get("address"), "phone": park.get("phone"), "email": park.get("email"),
|
||||
"capacity": d.get("projects", {}).get("capacity"), "invested": d.get("projects", {}).get("invested"),
|
||||
"jobs": d.get("jobs", {}).get("total"), "revenue_total": d.get("revenue", {}).get("total"), "revenue_tax": d.get("revenue", {}).get("tax"),
|
||||
"zones": d.get("zones", []), "industryMix": d.get("industryMix", []), "feed": d.get("feed", []),
|
||||
"as_of": d.get("as_of", ""),
|
||||
}
|
||||
|
||||
|
||||
@@ -394,20 +396,30 @@ def update_screen(tenant_id: str, payload: dict) -> dict:
|
||||
if payload.get("name"):
|
||||
d["_name"] = payload["name"] # 名称存租户 name 列,见下
|
||||
park = dict(d.get("park", {}))
|
||||
for k in ("founded", "area", "address", "phone", "email"):
|
||||
for k in ("founded", "area", "address", "phone", "email", "region"):
|
||||
if payload.get(k) is not None:
|
||||
park[k] = payload[k]
|
||||
d["park"] = park
|
||||
for k, sub in (("capacity", "projects"), ("invested", "projects"), ("jobs", "jobs"), ("revenue_total", "revenue"), ("revenue_tax", "revenue")):
|
||||
proj = dict(d.get("projects", {}))
|
||||
if payload.get("capacity") is not None:
|
||||
proj["capacity"] = payload["capacity"]
|
||||
if payload.get("invested") is not None:
|
||||
proj["invested"] = payload["invested"]
|
||||
d["projects"] = proj
|
||||
jobs = dict(d.get("jobs", {}))
|
||||
if payload.get("jobs") is not None:
|
||||
jobs["total"] = payload["jobs"]
|
||||
d["jobs"] = jobs
|
||||
rev = dict(d.get("revenue", {}))
|
||||
if payload.get("revenue_total") is not None:
|
||||
rev["total"] = payload["revenue_total"]
|
||||
if payload.get("revenue_tax") is not None:
|
||||
rev["tax"] = payload["revenue_tax"]
|
||||
d["revenue"] = rev
|
||||
# 动态 / 区域 / 产业构成(整表替换,可全量编辑)
|
||||
for k in ("feed", "zones", "industryMix"):
|
||||
if payload.get(k) is not None:
|
||||
s = dict(d.get(sub, {}))
|
||||
target = "total" if sub in ("jobs", "revenue") and k != "revenue_total" and k != "revenue_tax" else ("capacity" if k == "capacity" else "invested" if k == "invested" else ("tax" if k == "revenue_tax" else "total"))
|
||||
if sub == "revenue":
|
||||
target = "total" if k == "revenue_total" else "tax"
|
||||
if sub == "jobs":
|
||||
target = "total"
|
||||
s[target] = payload[k]
|
||||
d[sub] = s
|
||||
d[k] = payload[k]
|
||||
conn = _conn()
|
||||
name = payload.get("name") or t["name"]
|
||||
intro = payload.get("intro") or t.get("intro", [])
|
||||
|
||||
Reference in New Issue
Block a user