[feat]:[FL-84][ATP模型管理改造11]
1. 为AtpAsset模型增加避雷器装设组合配置项(arrester_config) 2. 将release zip上传改为异步处理 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -159,7 +159,9 @@ def upload_atp_asset_release_endpoint(
|
||||
archive: UploadFile = File(...),
|
||||
current_user: CurrentUser = Depends(require_permission("atp.manage")),
|
||||
db: Session = Depends(get_db),
|
||||
) -> AtpAssetReleaseDetail:
|
||||
) -> dict:
|
||||
from ...tasks.atp_asset_tasks import process_release_archive_upload_task
|
||||
|
||||
try:
|
||||
archive_content = archive.file.read()
|
||||
finally:
|
||||
@@ -168,8 +170,7 @@ def upload_atp_asset_release_endpoint(
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return create_release_from_archive(
|
||||
db,
|
||||
task = process_release_archive_upload_task.delay(
|
||||
asset_id=asset_id,
|
||||
release_tag=release_tag,
|
||||
archive_filename=archive.filename or "release.zip",
|
||||
@@ -177,6 +178,8 @@ def upload_atp_asset_release_endpoint(
|
||||
actor_user_id=current_user.user.id,
|
||||
)
|
||||
|
||||
return {"task_id": task.id, "status": "processing"}
|
||||
|
||||
|
||||
@router.get("/releases", response_model=AtpAssetReleaseListResponse)
|
||||
def get_atp_release_list(
|
||||
|
||||
@@ -19,6 +19,7 @@ class AtpAsset(Base):
|
||||
Index("idx_atp_asset_voltage_level", "voltage_level"),
|
||||
Index("idx_atp_asset_tower_type", "tower_type"),
|
||||
Index("idx_atp_asset_scene_type", "scene_type"),
|
||||
Index("idx_atp_asset_arrester_config", "arrester_config"),
|
||||
)
|
||||
|
||||
id: Mapped[str] = mapped_column(String(32), primary_key=True, default=lambda: uuid4().hex)
|
||||
@@ -29,6 +30,7 @@ class AtpAsset(Base):
|
||||
voltage_level: Mapped[str | None] = mapped_column(String(16), index=True)
|
||||
tower_type: Mapped[str | None] = mapped_column(String(64), index=True)
|
||||
scene_type: Mapped[str | None] = mapped_column(String(32), index=True)
|
||||
arrester_config: Mapped[str | None] = mapped_column(String(64), index=True)
|
||||
tags_json: Mapped[list[str]] = mapped_column(JSON, default=list)
|
||||
latest_release_no: Mapped[int] = mapped_column(Integer, default=0)
|
||||
active_release_no: Mapped[int | None] = mapped_column(Integer)
|
||||
|
||||
@@ -21,6 +21,7 @@ class AtpAssetSummary(BaseModel):
|
||||
voltage_level: str | None = None
|
||||
tower_type: str | None = None
|
||||
scene_type: str | None = None
|
||||
arrester_config: str | None = None
|
||||
latest_release_no: int = 0
|
||||
active_release_no: int | None = None
|
||||
active_release_id: str | None = None
|
||||
@@ -52,6 +53,7 @@ class AtpAssetCreateRequest(BaseModel):
|
||||
voltage_level: str | None = Field(default=None, max_length=16)
|
||||
tower_type: str | None = Field(default=None, max_length=64)
|
||||
scene_type: str | None = Field(default=None, max_length=32)
|
||||
arrester_config: str | None = Field(default=None, max_length=64)
|
||||
|
||||
|
||||
class AtpAssetUpdateRequest(BaseModel):
|
||||
@@ -61,6 +63,7 @@ class AtpAssetUpdateRequest(BaseModel):
|
||||
voltage_level: str | None = Field(default=None, max_length=16)
|
||||
tower_type: str | None = Field(default=None, max_length=64)
|
||||
scene_type: str | None = Field(default=None, max_length=32)
|
||||
arrester_config: str | None = Field(default=None, max_length=64)
|
||||
|
||||
|
||||
class AtpAssetReleaseSummary(BaseModel):
|
||||
|
||||
@@ -981,6 +981,30 @@ def create_release_from_archive(
|
||||
raise
|
||||
|
||||
|
||||
def process_release_archive_upload(
|
||||
asset_id: str,
|
||||
release_tag: str | None,
|
||||
archive_filename: str,
|
||||
archive_content: bytes,
|
||||
actor_user_id: str,
|
||||
) -> dict:
|
||||
from ..core.database import SessionLocal
|
||||
|
||||
db = SessionLocal()
|
||||
try:
|
||||
result = create_release_from_archive(
|
||||
db,
|
||||
asset_id=asset_id,
|
||||
release_tag=release_tag,
|
||||
archive_filename=archive_filename,
|
||||
archive_content=archive_content,
|
||||
actor_user_id=actor_user_id,
|
||||
)
|
||||
return result.model_dump()
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
def update_release(
|
||||
db: Session,
|
||||
*,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from ..core.celery_app import celery_app
|
||||
from ..services.atp_asset_service import execute_asset_run_job
|
||||
from ..services.atp_asset_service import execute_asset_run_job, process_release_archive_upload
|
||||
|
||||
|
||||
@celery_app.task(name="app.tasks.atp_asset_tasks.execute_atp_asset_run_job")
|
||||
@@ -11,3 +11,20 @@ def execute_atp_asset_run_job(
|
||||
actor_user_id: str | None,
|
||||
) -> None:
|
||||
execute_asset_run_job(run_id=run_id, payload_data=payload_data, actor_user_id=actor_user_id)
|
||||
|
||||
|
||||
@celery_app.task(name="app.tasks.atp_asset_tasks.process_release_archive_upload")
|
||||
def process_release_archive_upload_task(
|
||||
asset_id: str,
|
||||
release_tag: str | None,
|
||||
archive_filename: str,
|
||||
archive_content: bytes,
|
||||
actor_user_id: str,
|
||||
) -> dict:
|
||||
return process_release_archive_upload(
|
||||
asset_id=asset_id,
|
||||
release_tag=release_tag,
|
||||
archive_filename=archive_filename,
|
||||
archive_content=archive_content,
|
||||
actor_user_id=actor_user_id,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user