修复:完善报表查询校验
This commit is contained in:
@@ -1,18 +1,40 @@
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
||||
from pydantic.alias_generators import to_camel
|
||||
|
||||
from module_business.domain.enums import DocumentStatus, PalletEventType, PalletFlowState, ReturnStatus
|
||||
|
||||
|
||||
def _parse_report_query_date(value: str) -> datetime:
|
||||
try:
|
||||
parsed = datetime.strptime(value, '%Y-%m-%d')
|
||||
except ValueError as exc:
|
||||
raise ValueError('日期必须为有效的 YYYY-MM-DD 格式') from exc
|
||||
if parsed.strftime('%Y-%m-%d') != value:
|
||||
raise ValueError('日期必须为有效的 YYYY-MM-DD 格式')
|
||||
return parsed
|
||||
|
||||
|
||||
def _validate_report_query_date_range(value: BaseModel) -> BaseModel:
|
||||
begin_value = value.begin_time
|
||||
end_value = value.end_time
|
||||
begin_date = _parse_report_query_date(begin_value) if begin_value else None
|
||||
end_date = _parse_report_query_date(end_value) if end_value else None
|
||||
if end_date and end_date.date() == datetime.max.date():
|
||||
raise ValueError('结束日期必须早于 9999-12-31')
|
||||
if begin_date and end_date and begin_date > end_date:
|
||||
raise ValueError('开始日期不能晚于结束日期')
|
||||
return value
|
||||
|
||||
|
||||
class PalletInventoryReportQueryModel(BaseModel):
|
||||
"""托盘库存报表查询模型。"""
|
||||
|
||||
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True, populate_by_name=True)
|
||||
|
||||
page_num: int = Field(default=1, gt=0, description='当前页码')
|
||||
page_size: int = Field(default=10, gt=0, description='每页记录数')
|
||||
page_size: int = Field(default=10, gt=0, le=100, description='每页记录数')
|
||||
begin_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='开始时间')
|
||||
end_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='结束时间')
|
||||
pallet_code: str | None = Field(default=None, min_length=1, max_length=64, pattern=r'\S', description='托盘编号')
|
||||
@@ -23,6 +45,8 @@ class PalletInventoryReportQueryModel(BaseModel):
|
||||
strain_id: int | None = Field(default=None, gt=0, description='菌种ID')
|
||||
batch_no: str | None = Field(default=None, min_length=1, max_length=64, pattern=r'\S', description='生产批次')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_report_query_date_range)
|
||||
|
||||
|
||||
class PalletInventoryReportModel(BaseModel):
|
||||
"""托盘库存报表行模型。"""
|
||||
@@ -53,7 +77,7 @@ class FillingReportQueryModel(BaseModel):
|
||||
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True, populate_by_name=True)
|
||||
|
||||
page_num: int = Field(default=1, gt=0, description='当前页码')
|
||||
page_size: int = Field(default=10, gt=0, description='每页记录数')
|
||||
page_size: int = Field(default=10, gt=0, le=100, description='每页记录数')
|
||||
begin_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='开始时间')
|
||||
end_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='结束时间')
|
||||
warehouse_id: int | None = Field(default=None, gt=0, description='仓库ID')
|
||||
@@ -61,6 +85,8 @@ class FillingReportQueryModel(BaseModel):
|
||||
strain_id: int | None = Field(default=None, gt=0, description='菌种ID')
|
||||
batch_no: str | None = Field(default=None, min_length=1, max_length=64, pattern=r'\S', description='生产批次')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_report_query_date_range)
|
||||
|
||||
|
||||
class FillingReportModel(BaseModel):
|
||||
"""装填记录报表行模型。"""
|
||||
@@ -90,7 +116,7 @@ class ShipmentReportQueryModel(BaseModel):
|
||||
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True, populate_by_name=True)
|
||||
|
||||
page_num: int = Field(default=1, gt=0, description='当前页码')
|
||||
page_size: int = Field(default=10, gt=0, description='每页记录数')
|
||||
page_size: int = Field(default=10, gt=0, le=100, description='每页记录数')
|
||||
begin_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='开始时间')
|
||||
end_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='结束时间')
|
||||
shipment_no: str | None = Field(default=None, min_length=1, max_length=64, pattern=r'\S', description='发货单号')
|
||||
@@ -99,6 +125,8 @@ class ShipmentReportQueryModel(BaseModel):
|
||||
pallet_code: str | None = Field(default=None, min_length=1, max_length=64, pattern=r'\S', description='托盘编号')
|
||||
status: DocumentStatus | None = Field(default=None, description='单据状态')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_report_query_date_range)
|
||||
|
||||
|
||||
class ShipmentReportModel(BaseModel):
|
||||
"""发货出库报表行模型。"""
|
||||
@@ -126,7 +154,7 @@ class ConsumptionReportQueryModel(BaseModel):
|
||||
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True, populate_by_name=True)
|
||||
|
||||
page_num: int = Field(default=1, gt=0, description='当前页码')
|
||||
page_size: int = Field(default=10, gt=0, description='每页记录数')
|
||||
page_size: int = Field(default=10, gt=0, le=100, description='每页记录数')
|
||||
begin_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='开始时间')
|
||||
end_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='结束时间')
|
||||
customer_id: int | None = Field(default=None, gt=0, description='客户ID')
|
||||
@@ -136,6 +164,8 @@ class ConsumptionReportQueryModel(BaseModel):
|
||||
strain_id: int | None = Field(default=None, gt=0, description='菌种ID')
|
||||
batch_no: str | None = Field(default=None, min_length=1, max_length=64, pattern=r'\S', description='生产批次')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_report_query_date_range)
|
||||
|
||||
|
||||
class ConsumptionReportModel(BaseModel):
|
||||
"""产线消耗报表行模型。"""
|
||||
@@ -169,7 +199,7 @@ class ReturnReportQueryModel(BaseModel):
|
||||
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True, populate_by_name=True)
|
||||
|
||||
page_num: int = Field(default=1, gt=0, description='当前页码')
|
||||
page_size: int = Field(default=10, gt=0, description='每页记录数')
|
||||
page_size: int = Field(default=10, gt=0, le=100, description='每页记录数')
|
||||
begin_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='开始时间')
|
||||
end_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='结束时间')
|
||||
return_no: str | None = Field(default=None, min_length=1, max_length=64, pattern=r'\S', description='退回单号')
|
||||
@@ -178,6 +208,8 @@ class ReturnReportQueryModel(BaseModel):
|
||||
pallet_code: str | None = Field(default=None, min_length=1, max_length=64, pattern=r'\S', description='托盘编号')
|
||||
status: ReturnStatus | None = Field(default=None, description='退回状态')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_report_query_date_range)
|
||||
|
||||
|
||||
class ReturnReportModel(BaseModel):
|
||||
"""退回仓库报表行模型。"""
|
||||
@@ -205,12 +237,14 @@ class PalletTraceReportQueryModel(BaseModel):
|
||||
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True, populate_by_name=True)
|
||||
|
||||
page_num: int = Field(default=1, gt=0, description='当前页码')
|
||||
page_size: int = Field(default=10, gt=0, description='每页记录数')
|
||||
page_size: int = Field(default=10, gt=0, le=100, description='每页记录数')
|
||||
begin_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='开始时间')
|
||||
end_time: str | None = Field(default=None, min_length=1, pattern=r'\S', description='结束时间')
|
||||
pallet_code: str | None = Field(default=None, min_length=1, max_length=64, pattern=r'\S', description='托盘编号')
|
||||
event_type: PalletEventType | None = Field(default=None, description='事件类型')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_report_query_date_range)
|
||||
|
||||
|
||||
class PalletTraceReportModel(BaseModel):
|
||||
"""托盘追溯报表行模型。"""
|
||||
|
||||
Reference in New Issue
Block a user