修复:强化库存事务并发与日期边界
This commit is contained in:
@@ -16,6 +16,26 @@ def _ensure_unique_ids(value: list[int]) -> list[int]:
|
||||
return value
|
||||
|
||||
|
||||
def _parse_page_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_page_query_date_range(value: BaseModel) -> BaseModel:
|
||||
begin_value = value.begin_time
|
||||
end_value = value.end_time
|
||||
begin_date = _parse_page_query_date(begin_value) if begin_value else None
|
||||
end_date = _parse_page_query_date(end_value) if end_value else None
|
||||
if begin_date and end_date and begin_date > end_date:
|
||||
raise ValueError('开始日期不能晚于结束日期')
|
||||
return value
|
||||
|
||||
|
||||
class InboundCreateModel(BaseModel):
|
||||
"""首次入库草稿新增模型。"""
|
||||
|
||||
@@ -335,6 +355,8 @@ class InboundPageQueryModel(BaseModel):
|
||||
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='结束时间')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_page_query_date_range)
|
||||
|
||||
|
||||
class FillingPageQueryModel(BaseModel):
|
||||
"""托盘装填分页查询模型。"""
|
||||
@@ -351,6 +373,8 @@ class FillingPageQueryModel(BaseModel):
|
||||
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='结束时间')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_page_query_date_range)
|
||||
|
||||
|
||||
class ShipmentPageQueryModel(BaseModel):
|
||||
"""整托发货分页查询模型。"""
|
||||
@@ -366,6 +390,8 @@ class ShipmentPageQueryModel(BaseModel):
|
||||
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='结束时间')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_page_query_date_range)
|
||||
|
||||
|
||||
class UsagePageQueryModel(BaseModel):
|
||||
"""客户现场使用分页查询模型。"""
|
||||
@@ -381,6 +407,8 @@ class UsagePageQueryModel(BaseModel):
|
||||
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='结束时间')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_page_query_date_range)
|
||||
|
||||
|
||||
class ReturnPageQueryModel(BaseModel):
|
||||
"""托盘退回分页查询模型。"""
|
||||
@@ -396,6 +424,8 @@ class ReturnPageQueryModel(BaseModel):
|
||||
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='结束时间')
|
||||
|
||||
_validate_date_range = model_validator(mode='after')(_validate_page_query_date_range)
|
||||
|
||||
|
||||
class InboundScanQueryModel(BaseModel):
|
||||
"""首次入库扫码查询模型。"""
|
||||
|
||||
Reference in New Issue
Block a user