6d0bfae6aa
- 0036 迁移 + ServiceOrder ORM/仓储(service_orders:预约/下单→接单→交付→完成)
- /hall/services/{id}/order 预约下单(禁下自己的单);/hall/orders/bought|selling 双视角
- /hall/orders/{id}/{action} 六动作流转(accept/reject/start/deliver/complete/cancel),
服务方/买方/运营三方权限约束 + 状态机非法流转校验
- /hall/tasks/{id}/win|assign|select|cancel:评标定标/指派/报名选定/取消(仅发包方或运营端)
53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
"""服务订单(OPC 服务大厅:预约/下单 → 接单 → 交付 → 完成)。
|
||
|
||
状态机:pending → accepted → in_progress → delivered → completed
|
||
pending → rejected / cancelled;accepted|in_progress → cancelled(买方取消/卖方拒单)。
|
||
|
||
Revision ID: 0036_service_orders
|
||
Revises: 0035_hall_community
|
||
Create Date: 2026-08-31
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import sqlalchemy as sa
|
||
from alembic import op
|
||
|
||
revision = "0036_service_orders"
|
||
down_revision = "0035_hall_community"
|
||
branch_labels = None
|
||
depends_on = None
|
||
|
||
S = sa.String
|
||
T = sa.Text
|
||
|
||
|
||
def upgrade() -> None:
|
||
op.create_table(
|
||
"service_orders",
|
||
sa.Column("id", S(), primary_key=True),
|
||
sa.Column("service_id", S(), nullable=False),
|
||
sa.Column("opc_id", S(), nullable=True), # 服务提供者
|
||
sa.Column("buyer_id", S(), nullable=True),
|
||
sa.Column("buyer_name", S(), nullable=True, server_default=""),
|
||
sa.Column("contact", S(), nullable=True, server_default=""),
|
||
sa.Column("schedule_at", S(), nullable=True, server_default=""), # 预约时间
|
||
sa.Column("price", sa.Integer(), nullable=True, server_default="0"), # 成交价(元,0=按服务价)
|
||
sa.Column("note", T(), nullable=True), # 需求说明
|
||
sa.Column("status", S(), nullable=True, server_default="pending"),
|
||
sa.Column("accept_at", S(), nullable=True, server_default=""),
|
||
sa.Column("delivered_at", S(), nullable=True, server_default=""),
|
||
sa.Column("completed_at", S(), nullable=True, server_default=""),
|
||
sa.Column("created_at", S(), nullable=True, server_default=""),
|
||
sa.Column("updated_at", S(), nullable=True, server_default=""),
|
||
)
|
||
op.create_index("ix_service_orders_service_id", "service_orders", ["service_id"])
|
||
op.create_index("ix_service_orders_opc_id", "service_orders", ["opc_id"])
|
||
op.create_index("ix_service_orders_buyer_id", "service_orders", ["buyer_id"])
|
||
|
||
|
||
def downgrade() -> None:
|
||
op.drop_index("ix_service_orders_buyer_id", table_name="service_orders")
|
||
op.drop_index("ix_service_orders_opc_id", table_name="service_orders")
|
||
op.drop_index("ix_service_orders_service_id", table_name="service_orders")
|
||
op.drop_table("service_orders")
|