修复:返回使用后的余量与状态
This commit is contained in:
@@ -11,7 +11,7 @@ from common.aspect.interface_auth import UserInterfaceAuthDependency
|
||||
from common.aspect.pre_auth import CurrentUserDependency, PreAuthDependency
|
||||
from common.enums import BusinessType
|
||||
from common.router import APIRouterPro
|
||||
from common.vo import DataResponseModel, PageResponseModel, ResponseBaseModel
|
||||
from common.vo import DataResponseModel, PageResponseModel
|
||||
from module_admin.entity.vo.user_vo import CurrentUserModel
|
||||
from module_business.entity.vo.operation_vo import (
|
||||
BusinessOptionModel,
|
||||
@@ -19,6 +19,7 @@ from module_business.entity.vo.operation_vo import (
|
||||
UsageCreateModel,
|
||||
UsageModel,
|
||||
UsagePageQueryModel,
|
||||
UsageSuccessResponseModel,
|
||||
)
|
||||
from module_business.service.usage_service import UsageService
|
||||
from utils.response_util import ResponseUtil
|
||||
@@ -110,7 +111,7 @@ async def query_detail_business_usage(
|
||||
'',
|
||||
summary='记录客户现场使用接口',
|
||||
description='扫描托盘并原子记录客户现场使用包数',
|
||||
response_model=ResponseBaseModel,
|
||||
response_model=DataResponseModel[UsageSuccessResponseModel],
|
||||
dependencies=[UserInterfaceAuthDependency('business:usage:add')],
|
||||
)
|
||||
@Log(title='客户现场使用', business_type=BusinessType.INSERT)
|
||||
@@ -121,4 +122,4 @@ async def add_business_usage(
|
||||
current_user: Annotated[CurrentUserModel, CurrentUserDependency()],
|
||||
) -> Response:
|
||||
result = await UsageService.record_usage_services(query_db, add_usage, current_user)
|
||||
return ResponseUtil.success(msg=result.message)
|
||||
return ResponseUtil.success(msg=result.message, data=result.result)
|
||||
|
||||
@@ -154,6 +154,16 @@ class UsageCreateModel(BaseModel):
|
||||
idempotency_key: str = Field(min_length=1, max_length=64, pattern=r'\S', description='幂等键')
|
||||
|
||||
|
||||
class UsageSuccessResponseModel(BaseModel):
|
||||
"""客户现场使用成功响应模型。"""
|
||||
|
||||
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True, populate_by_name=True)
|
||||
|
||||
usage_id: int = Field(gt=0, description='使用记录ID')
|
||||
remaining_packages: int = Field(strict=True, ge=0, description='使用后剩余包数')
|
||||
flow_state: PalletFlowState = Field(description='使用后托盘流转状态')
|
||||
|
||||
|
||||
class ReturnRequestModel(BaseModel):
|
||||
"""托盘退回申请命令模型。"""
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ from module_business.entity.vo.operation_vo import (
|
||||
UsageCreateModel,
|
||||
UsageModel,
|
||||
UsagePageQueryModel,
|
||||
UsageSuccessResponseModel,
|
||||
)
|
||||
from module_business.service.access_service import AccessService
|
||||
|
||||
@@ -127,8 +128,20 @@ class UsageService:
|
||||
return usage.idempotency_key == page_object.idempotency_key and usage.request_hash == request_hash
|
||||
|
||||
@staticmethod
|
||||
def _success(usage_id: int) -> CrudResponseModel:
|
||||
return CrudResponseModel(is_success=True, message='使用成功', result=usage_id)
|
||||
def _success(usage: BizUsageRecord) -> CrudResponseModel:
|
||||
remaining_packages = usage.remaining_packages_after
|
||||
flow_state = (
|
||||
PalletFlowState.AT_SITE_EMPTY if remaining_packages == 0 else PalletFlowState.AT_SITE_PARTIAL
|
||||
)
|
||||
return CrudResponseModel(
|
||||
is_success=True,
|
||||
message='使用成功',
|
||||
result=UsageSuccessResponseModel(
|
||||
usage_id=usage.usage_id,
|
||||
remaining_packages=remaining_packages,
|
||||
flow_state=flow_state,
|
||||
),
|
||||
)
|
||||
|
||||
@classmethod
|
||||
async def _lock_and_reauthorize_usage_site(
|
||||
@@ -181,7 +194,7 @@ class UsageService:
|
||||
recovered.site_id,
|
||||
current_user,
|
||||
)
|
||||
return cls._success(recovered.usage_id)
|
||||
return cls._success(recovered)
|
||||
finally:
|
||||
await query_db.rollback()
|
||||
|
||||
@@ -355,9 +368,9 @@ class UsageService:
|
||||
existing.site_id,
|
||||
current_user,
|
||||
)
|
||||
usage_id = existing.usage_id
|
||||
result = cls._success(existing)
|
||||
await query_db.rollback()
|
||||
return cls._success(usage_id)
|
||||
return result
|
||||
|
||||
scanned_pallet = await InventoryDao.get_pallet_by_qr_token(
|
||||
query_db,
|
||||
@@ -413,9 +426,9 @@ class UsageService:
|
||||
locked_existing.site_id,
|
||||
current_user,
|
||||
)
|
||||
usage_id = locked_existing.usage_id
|
||||
result = cls._success(locked_existing)
|
||||
await query_db.rollback()
|
||||
return cls._success(usage_id)
|
||||
return result
|
||||
|
||||
if inventory.active_filling_id is None:
|
||||
raise ServiceException(message='托盘不存在活动装填周期')
|
||||
@@ -495,6 +508,7 @@ class UsageService:
|
||||
)
|
||||
usage = await OperationDao.add_usage_record(query_db, usage)
|
||||
usage_id = usage.usage_id
|
||||
result = cls._success(usage)
|
||||
|
||||
before_state = inventory.flow_state
|
||||
before_warehouse_id = inventory.warehouse_id
|
||||
@@ -535,7 +549,7 @@ class UsageService:
|
||||
)
|
||||
await InventoryDao.add_event(query_db, inventory, event)
|
||||
await query_db.commit()
|
||||
return cls._success(usage_id)
|
||||
return result
|
||||
except IntegrityError:
|
||||
await query_db.rollback()
|
||||
if expected_site_id is None:
|
||||
|
||||
Reference in New Issue
Block a user