fix:修复bug

master
HuangHuiKang 1 day ago
parent 28186d3d19
commit 8d594060ed

@ -22,10 +22,10 @@ class EnergyReportReviewModel(ModelMixin, TenantMixin, UserMixin):
task_name: Mapped[str] = mapped_column(String(128), nullable=False, comment="任务名称", index=True)
report_type: Mapped[int] = mapped_column(Integer, default=1, nullable=False, comment="报告类型 1:能源报告 2:光伏报告", index=True)
template_id: Mapped[int] = mapped_column(
template_id: Mapped[int | None] = mapped_column(
Integer,
ForeignKey("energy_report_template.id", ondelete="RESTRICT", onupdate="CASCADE"),
nullable=False,
ForeignKey("energy_report_template.id", ondelete="SET NULL", onupdate="CASCADE"),
nullable=True,
index=True,
comment="能源报告模板ID",
)

@ -16,7 +16,7 @@ class EnergyReportReviewCreateSchema(BaseModel):
task_name: str = Field(..., min_length=1, max_length=128, description="任务名称")
report_type: int = Field(default=1, ge=1, le=2, description="报告类型 1:能源报告 2:光伏报告")
template_id: int = Field(..., ge=1, description="能源报告模板ID")
template_id: int | None = Field(default=None, ge=1, description="能源报告模板ID")
file_id: int = Field(..., ge=1, description="上传文档文件ID")
attachment_file_id: int | None = Field(default=None, ge=1, description="附件文件ID")
status: int = Field(default=0, ge=0, le=3, description="状态 0:待审查 1:审查中 2:已审查 3:审查失败")

@ -46,7 +46,7 @@ class EnergyReportReviewService:
order_by: list[dict[str, str]] | None = None,
) -> dict:
search_dict = self._build_search_dict(search)
stats = await self._stats(search_dict=search_dict)
stats = await self._stats(search_dict=self._build_stats_search(search_dict))
offset = (page_no - 1) * page_size
page_result = await EnergyReportReviewCRUD(self.auth).page(
offset=offset,
@ -66,7 +66,7 @@ class EnergyReportReviewService:
}
async def create(self, data: EnergyReportReviewCreateSchema) -> EnergyReportReviewOutSchema:
await self._validate_template(template_id=data.template_id, report_type=data.report_type)
template = await self._validate_template(template_id=data.template_id)
await self._validate_file(file_id=data.file_id)
attachment_file = await self._validate_attachment_file(
attachment_file_id=data.attachment_file_id,
@ -74,6 +74,8 @@ class EnergyReportReviewService:
)
await self._validate_reviewer(reviewer_id=data.reviewer_id)
create_data = data.model_dump()
if template:
create_data["report_type"] = template.report_type
create_data["attachment_url"] = attachment_file.file_url if attachment_file else None
review = await EnergyReportReviewCRUD(self.auth).create(data=create_data)
await self._bind_file(file_id=data.file_id, review_id=review.id)
@ -89,7 +91,7 @@ class EnergyReportReviewService:
async def update(self, id: int, data: EnergyReportReviewUpdateSchema) -> EnergyReportReviewOutSchema:
old_review = await EnergyReportReviewCRUD(self.auth).get_or_404(id=id, msg="更新失败,能源报告审核任务不存在")
await self._validate_template(template_id=data.template_id, report_type=data.report_type)
template = await self._validate_template(template_id=data.template_id)
await self._validate_file(file_id=data.file_id, current_review_id=id)
if old_review.attachment_file_id and old_review.attachment_file_id == data.file_id:
raise CustomException(msg="更新失败,上传文档不能使用原附件文件")
@ -102,6 +104,8 @@ class EnergyReportReviewService:
)
await self._validate_reviewer(reviewer_id=data.reviewer_id)
update_data = data.model_dump(exclude_unset=True)
if template:
update_data["report_type"] = template.report_type
update_data["attachment_url"] = attachment_file.file_url if attachment_file else None
review = await EnergyReportReviewCRUD(self.auth).update(id=id, data=update_data)
if old_review.file_id != data.file_id:
@ -138,23 +142,34 @@ class EnergyReportReviewService:
def _build_stats_search(self, search_dict: dict | None = None) -> dict:
if not search_dict:
return {}
stats_keys = {"created_time", "updated_time", "tenant_id", "created_id", "updated_id"}
stats_keys = {"report_type", "created_time", "updated_time", "tenant_id", "created_id", "updated_id"}
return {key: value for key, value in search_dict.items() if key in stats_keys and value is not None}
def _build_search_dict(self, search: EnergyReportReviewQueryParam | None = None) -> dict | None:
def _build_search_dict(self, search: EnergyReportReviewQueryParam | None = None) -> dict:
if not search:
return None
search_dict = vars(search).copy()
return {}
raw_search = vars(search)
search_dict = {}
like_fields = {"task_name"}
eq_fields = {"report_type", "status", "template_id", "reviewer_id", "tenant_id", "created_id", "updated_id"}
range_fields = {"created_time", "updated_time"}
for field in like_fields:
value = search_dict.get(field)
if value is not None and value != "" and not isinstance(value, tuple):
search_dict[field] = (QueueEnum.like.value, value)
value = raw_search.get(field)
if value is not None and value != "":
search_dict[field] = value if isinstance(value, tuple) else (QueueEnum.like.value, value)
for field in eq_fields:
value = search_dict.get(field)
if value is not None and value != "" and not isinstance(value, tuple):
search_dict[field] = (QueueEnum.eq.value, int(value))
value = raw_search.get(field)
if value is not None and value != "":
search_dict[field] = value if isinstance(value, tuple) else (QueueEnum.eq.value, int(value))
for field in range_fields:
value = raw_search.get(field)
if value is not None and value != "":
search_dict[field] = value
return search_dict
def _to_out_schema(self, review) -> EnergyReportReviewOutSchema:
@ -194,12 +209,13 @@ class EnergyReportReviewService:
item["reviewer_name"] = reviewer_info.get("name")
return item
async def _validate_template(self, template_id: int, report_type: int) -> None:
async def _validate_template(self, template_id: int | None):
if template_id is None:
return None
template = await EnergyReportTemplateCRUD(self.auth).get(id=template_id)
if not template:
raise CustomException(msg="能源报告模板不存在")
if template.report_type != report_type:
raise CustomException(msg="报告类型与模板类型不一致")
return template
async def _validate_file(self, file_id: int, current_review_id: int | None = None) -> None:
file_record = await FileCRUD(self.auth).get(id=file_id)

Loading…
Cancel
Save