|
|
@@ -1,11 +1,14 @@
|
|
|
"""车辆 ETC/加油充值 Schema"""
|
|
|
from datetime import date, datetime
|
|
|
from decimal import Decimal
|
|
|
-from typing import Optional
|
|
|
+from typing import List, Optional
|
|
|
|
|
|
from pydantic import BaseModel, Field, field_validator
|
|
|
|
|
|
RECHARGE_TYPES = {"etc", "fuel"}
|
|
|
+APPLY_STATUSES = {"draft", "in_approval", "rejected", "disbursed", "cancelled"}
|
|
|
+NODE_ACTION_TYPES = {"approve", "disburse"}
|
|
|
+APPROVAL_STATUSES = {"approved", "rejected", "disbursed"}
|
|
|
|
|
|
|
|
|
class VehicleRechargeApplyCreate(BaseModel):
|
|
|
@@ -31,6 +34,42 @@ class VehicleRechargeApplyUpdate(VehicleRechargeApplyCreate):
|
|
|
pass
|
|
|
|
|
|
|
|
|
+class VehicleRechargeApprovalRead(BaseModel):
|
|
|
+ id: str
|
|
|
+ apply_id: str = Field(..., alias="applyId")
|
|
|
+ approval_round: int = Field(..., alias="approvalRound")
|
|
|
+ node_id: Optional[str] = Field(default=None, alias="nodeId")
|
|
|
+ node_name: Optional[str] = Field(default=None, alias="nodeName")
|
|
|
+ approver_id: str = Field(..., alias="approverId")
|
|
|
+ approver_name: str = Field(..., alias="approverName")
|
|
|
+ approval_status: str = Field(..., alias="approvalStatus")
|
|
|
+ approval_opinion: Optional[str] = Field(default=None, alias="approvalOpinion")
|
|
|
+ approval_time: datetime = Field(..., alias="approvalTime")
|
|
|
+
|
|
|
+ model_config = {"populate_by_name": True}
|
|
|
+
|
|
|
+
|
|
|
+class VehicleRechargeRecordRead(BaseModel):
|
|
|
+ id: str
|
|
|
+ recharge_order_no: str = Field(..., alias="rechargeOrderNo")
|
|
|
+ recharge_date: date = Field(..., alias="rechargeDate")
|
|
|
+ recharge_type: str = Field(..., alias="rechargeType")
|
|
|
+ card_no: Optional[str] = Field(default=None, alias="cardNo")
|
|
|
+ gas_station: Optional[str] = Field(default=None, alias="gasStation")
|
|
|
+ amount: Decimal
|
|
|
+ attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
|
|
|
+ apply_id: Optional[str] = Field(default=None, alias="applyId")
|
|
|
+ apply_no: Optional[str] = Field(default=None, alias="applyNo")
|
|
|
+ license_plate: Optional[str] = Field(default=None, alias="licensePlate")
|
|
|
+ remark: Optional[str] = None
|
|
|
+ create_by: Optional[str] = Field(default=None, alias="createBy")
|
|
|
+ create_by_name: Optional[str] = Field(default=None, alias="createByName")
|
|
|
+ create_time: Optional[datetime] = Field(default=None, alias="createTime")
|
|
|
+ update_time: Optional[datetime] = Field(default=None, alias="updateTime")
|
|
|
+
|
|
|
+ model_config = {"populate_by_name": True}
|
|
|
+
|
|
|
+
|
|
|
class VehicleRechargeApplyRead(BaseModel):
|
|
|
id: str
|
|
|
apply_no: str = Field(..., alias="applyNo")
|
|
|
@@ -42,6 +81,11 @@ class VehicleRechargeApplyRead(BaseModel):
|
|
|
applicant_id: str = Field(..., alias="applicantId")
|
|
|
applicant_name: Optional[str] = Field(default=None, alias="applicantName")
|
|
|
status: str
|
|
|
+ wf_id: Optional[str] = Field(default=None, alias="wfId")
|
|
|
+ current_node: Optional[str] = Field(default=None, alias="currentNode")
|
|
|
+ approval_round: int = Field(default=0, alias="approvalRound")
|
|
|
+ approvals: List[VehicleRechargeApprovalRead] = Field(default_factory=list)
|
|
|
+ record: Optional[VehicleRechargeRecordRead] = None
|
|
|
remark: Optional[str] = None
|
|
|
create_time: Optional[datetime] = Field(default=None, alias="createTime")
|
|
|
update_time: Optional[datetime] = Field(default=None, alias="updateTime")
|
|
|
@@ -67,6 +111,12 @@ class VehicleRechargeApplyOption(BaseModel):
|
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
|
|
|
+class VehicleRechargeOpinionBody(BaseModel):
|
|
|
+ opinion: Optional[str] = None
|
|
|
+
|
|
|
+ model_config = {"populate_by_name": True}
|
|
|
+
|
|
|
+
|
|
|
class VehicleRechargeRecordCreate(BaseModel):
|
|
|
recharge_date: date = Field(..., alias="rechargeDate")
|
|
|
recharge_type: str = Field(..., alias="rechargeType")
|
|
|
@@ -99,27 +149,6 @@ class VehicleRechargeRecordUpdate(VehicleRechargeRecordCreate):
|
|
|
pass
|
|
|
|
|
|
|
|
|
-class VehicleRechargeRecordRead(BaseModel):
|
|
|
- id: str
|
|
|
- recharge_order_no: str = Field(..., alias="rechargeOrderNo")
|
|
|
- recharge_date: date = Field(..., alias="rechargeDate")
|
|
|
- recharge_type: str = Field(..., alias="rechargeType")
|
|
|
- card_no: Optional[str] = Field(default=None, alias="cardNo")
|
|
|
- gas_station: Optional[str] = Field(default=None, alias="gasStation")
|
|
|
- amount: Decimal
|
|
|
- attachment_urls: Optional[str] = Field(default=None, alias="attachmentUrls")
|
|
|
- apply_id: Optional[str] = Field(default=None, alias="applyId")
|
|
|
- apply_no: Optional[str] = Field(default=None, alias="applyNo")
|
|
|
- license_plate: Optional[str] = Field(default=None, alias="licensePlate")
|
|
|
- remark: Optional[str] = None
|
|
|
- create_by: Optional[str] = Field(default=None, alias="createBy")
|
|
|
- create_by_name: Optional[str] = Field(default=None, alias="createByName")
|
|
|
- create_time: Optional[datetime] = Field(default=None, alias="createTime")
|
|
|
- update_time: Optional[datetime] = Field(default=None, alias="updateTime")
|
|
|
-
|
|
|
- model_config = {"populate_by_name": True}
|
|
|
-
|
|
|
-
|
|
|
class VehicleRechargeRecordListResponse(BaseModel):
|
|
|
items: list[VehicleRechargeRecordRead]
|
|
|
total: int
|