feat(valuation): 添加update_calc方法并更新相关字段类型

为ValuationController添加update_calc方法用于计算更新
将updated_at等字段改为Optional类型
修复heritage_level字段获取方式
更新docker镜像版本至v2.7
This commit is contained in:
邹方成 2025-12-02 18:50:46 +08:00
parent 01ed8fb25b
commit b10c357a56
6 changed files with 26 additions and 15 deletions

View File

@ -166,7 +166,7 @@ async def _perform_valuation_calculation(user_id: int, data: UserValuationCreate
# 步骤1立即更新计算输入参数不管后续是否成功 # 步骤1立即更新计算输入参数不管后续是否成功
try: try:
await valuation_controller.update( await valuation_controller.update_calc(
valuation_id, valuation_id,
ValuationAssessmentUpdate( ValuationAssessmentUpdate(
calculation_input=input_data, calculation_input=input_data,
@ -212,7 +212,7 @@ async def _perform_valuation_calculation(user_id: int, data: UserValuationCreate
# api_calc_fields["flow_correction"] = None # api_calc_fields["flow_correction"] = None
if api_calc_fields: if api_calc_fields:
await valuation_controller.update( await valuation_controller.update_calc(
valuation_id, valuation_id,
ValuationAssessmentUpdate(**api_calc_fields) ValuationAssessmentUpdate(**api_calc_fields)
) )
@ -225,7 +225,7 @@ async def _perform_valuation_calculation(user_id: int, data: UserValuationCreate
# 步骤2更新计算结果字段模型估值B、市场估值C、最终估值AB、完整计算结果 # 步骤2更新计算结果字段模型估值B、市场估值C、最终估值AB、完整计算结果
try: try:
await valuation_controller.update( await valuation_controller.update_calc(
valuation_id, valuation_id,
ValuationAssessmentUpdate( ValuationAssessmentUpdate(
model_value_b=calculation_result.get('model_value_b'), model_value_b=calculation_result.get('model_value_b'),
@ -280,7 +280,7 @@ async def _perform_valuation_calculation(user_id: int, data: UserValuationCreate
base_pledge_rate_value = "0.5" # 固定值:基础质押率 = 0.5 base_pledge_rate_value = "0.5" # 固定值:基础质押率 = 0.5
flow_correction_value = "0.3" # 固定值:流量修正系数 = 0.3 flow_correction_value = "0.3" # 固定值:流量修正系数 = 0.3
await valuation_controller.update( await valuation_controller.update_calc(
valuation_id, valuation_id,
ValuationAssessmentUpdate( ValuationAssessmentUpdate(
dynamic_pledge_rate=drp_result, dynamic_pledge_rate=drp_result,
@ -309,7 +309,7 @@ async def _perform_valuation_calculation(user_id: int, data: UserValuationCreate
# 步骤4最后更新状态为成功 # 步骤4最后更新状态为成功
try: try:
result = await valuation_controller.update( result = await valuation_controller.update_calc(
valuation_id, valuation_id,
ValuationAssessmentUpdate( ValuationAssessmentUpdate(
status='success' status='success'
@ -362,7 +362,7 @@ async def _perform_valuation_calculation(user_id: int, data: UserValuationCreate
fail_update_fields.update(api_calc_fields) fail_update_fields.update(api_calc_fields)
try: try:
await valuation_controller.update( await valuation_controller.update_calc(
valuation_id, valuation_id,
ValuationAssessmentUpdate(**fail_update_fields) ValuationAssessmentUpdate(**fail_update_fields)
) )
@ -372,7 +372,7 @@ async def _perform_valuation_calculation(user_id: int, data: UserValuationCreate
# 如果保存失败,至少更新状态 # 如果保存失败,至少更新状态
try: try:
fail_update = ValuationAssessmentUpdate(status='rejected') fail_update = ValuationAssessmentUpdate(status='rejected')
await valuation_controller.update(valuation_id, fail_update) await valuation_controller.update_calc(valuation_id, fail_update)
except Exception: except Exception:
pass pass
else: else:

View File

@ -127,7 +127,7 @@ class UserValuationController:
inheritor_ages=valuation.inheritor_ages, inheritor_ages=valuation.inheritor_ages,
inheritor_age_count=valuation.inheritor_age_count, inheritor_age_count=valuation.inheritor_age_count,
inheritor_certificates=valuation.inheritor_certificates, inheritor_certificates=valuation.inheritor_certificates,
heritage_level=valuation.heritage_level, heritage_level=getattr(valuation, "heritage_level", None),
heritage_asset_level=valuation.heritage_asset_level, heritage_asset_level=valuation.heritage_asset_level,
patent_application_no=valuation.patent_application_no, patent_application_no=valuation.patent_application_no,
patent_remaining_years=valuation.patent_remaining_years, patent_remaining_years=valuation.patent_remaining_years,
@ -197,7 +197,7 @@ class UserValuationController:
inheritor_ages=valuation.inheritor_ages, inheritor_ages=valuation.inheritor_ages,
inheritor_age_count=valuation.inheritor_age_count, inheritor_age_count=valuation.inheritor_age_count,
inheritor_certificates=valuation.inheritor_certificates, inheritor_certificates=valuation.inheritor_certificates,
heritage_level=valuation.heritage_level, heritage_level=getattr(valuation, "heritage_level", None),
heritage_asset_level=valuation.heritage_asset_level, heritage_asset_level=valuation.heritage_asset_level,
patent_application_no=valuation.patent_application_no, patent_application_no=valuation.patent_application_no,
patent_remaining_years=valuation.patent_remaining_years, patent_remaining_years=valuation.patent_remaining_years,

View File

@ -847,6 +847,17 @@ class ValuationController:
out = ValuationAssessmentOut.model_validate(valuation) out = ValuationAssessmentOut.model_validate(valuation)
return await self._attach_user_phone(out) return await self._attach_user_phone(out)
async def update_calc(self, valuation_id: int, data: ValuationAssessmentUpdate) -> Optional[ValuationAssessmentOut]:
valuation = await self.model.filter(id=valuation_id, is_active=True).first()
if not valuation:
return None
update_data = data.model_dump(exclude_unset=True)
if update_data:
await valuation.update_from_dict(update_data)
await valuation.save()
out = ValuationAssessmentOut.model_validate(valuation)
return await self._attach_user_phone(out)
async def _attach_user_phone(self, out: ValuationAssessmentOut) -> ValuationAssessmentOut: async def _attach_user_phone(self, out: ValuationAssessmentOut) -> ValuationAssessmentOut:
user = await AppUser.filter(id=out.user_id).first() user = await AppUser.filter(id=out.user_id).first()
out.user_phone = getattr(user, "phone", None) if user else None out.user_phone = getattr(user, "phone", None) if user else None

View File

@ -193,7 +193,7 @@ class ValuationAssessmentOut(ValuationAssessmentBase):
status: str = Field(..., description="评估状态") status: str = Field(..., description="评估状态")
admin_notes: Optional[str] = Field(None, description="管理员备注") admin_notes: Optional[str] = Field(None, description="管理员备注")
created_at: datetime = Field(..., description="创建时间") created_at: datetime = Field(..., description="创建时间")
updated_at: datetime = Field(..., description="更新时间") updated_at: Optional[datetime] = Field(None, description="更新时间")
audited_at: Optional[datetime] = Field(None, description="审核时间") audited_at: Optional[datetime] = Field(None, description="审核时间")
is_active: bool = Field(..., description="是否激活") is_active: bool = Field(..., description="是否激活")
@ -246,7 +246,7 @@ class UserValuationOut(ValuationAssessmentBase):
status: str = Field(..., description="评估状态") status: str = Field(..., description="评估状态")
admin_notes: Optional[str] = Field(None, description="管理员备注") admin_notes: Optional[str] = Field(None, description="管理员备注")
created_at: datetime = Field(..., description="创建时间") created_at: datetime = Field(..., description="创建时间")
updated_at: datetime = Field(..., description="更新时间") updated_at: Optional[datetime] = Field(None, description="更新时间")
is_active: Optional[bool] = Field(None, description="是否激活") is_active: Optional[bool] = Field(None, description="是否激活")
class Config: class Config:
@ -290,7 +290,7 @@ class UserValuationDetail(ValuationAssessmentBase):
status: str = Field(..., description="评估状态") status: str = Field(..., description="评估状态")
admin_notes: Optional[str] = Field(None, description="管理员备注") admin_notes: Optional[str] = Field(None, description="管理员备注")
created_at: datetime = Field(..., description="创建时间") created_at: datetime = Field(..., description="创建时间")
updated_at: datetime = Field(..., description="更新时间") updated_at: Optional[datetime] = Field(None, description="更新时间")
class Config: class Config:
from_attributes = True from_attributes = True
@ -422,7 +422,7 @@ class ValuationCalculationStepOut(ValuationCalculationStepBase):
id: int = Field(..., description="主键ID") id: int = Field(..., description="主键ID")
valuation_id: int = Field(..., description="关联的估值评估ID") valuation_id: int = Field(..., description="关联的估值评估ID")
created_at: datetime = Field(..., description="创建时间") created_at: datetime = Field(..., description="创建时间")
updated_at: datetime = Field(..., description="更新时间") updated_at: Optional[datetime] = Field(None, description="更新时间")
class Config: class Config:
from_attributes = True from_attributes = True

BIN
web1/dist.zip Normal file

Binary file not shown.

View File

@ -37,8 +37,8 @@
export DOCKER_DEFAULT_PLATFORM=linux/amd64 export DOCKER_DEFAULT_PLATFORM=linux/amd64
docker build -t zfc931912343/guzhi-fastapi-admin:v2.6 . docker build -t zfc931912343/guzhi-fastapi-admin:v2.7 .
docker push zfc931912343/guzhi-fastapi-admin:v2.6 docker push zfc931912343/guzhi-fastapi-admin:v2.7
# 运行容器 # 运行容器