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:
Pine
2026-08-24 18:09:23 +08:00
parent 81f4dfd0ad
commit d26d3dc3fa
2 changed files with 32 additions and 11 deletions
+9
View File
@@ -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
View File
@@ -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", [])