feat: update audit platform workspace

This commit is contained in:
wren
2026-05-25 09:50:01 +08:00
parent ba8e93c0d3
commit 68d0b4c878
73 changed files with 12196 additions and 367 deletions
@@ -27,6 +27,8 @@ class EntryModuleCreateDTO(BaseModel):
description: str | None = Field(None, description="模块描述")
path: str | None = Field(None, description="前端路由路径")
route_path: str | None = Field(None, description="前端跳转路径")
menu_profile: str | None = Field(None, description="菜单模板:document_review/contract/govdoc/custom")
features: list[str] | None = Field(None, description="启用功能编码列表")
areas: list[EntryModuleAreaDTO] | None = Field(None, description="历史地区配置(兼容字段,建议改用 tenants)")
tenants: list[EntryModuleTenantDTO] | None = Field(None, description="租户配置")
@@ -38,5 +40,7 @@ class EntryModuleUpdateDTO(BaseModel):
description: str | None = Field(None, description="模块描述")
path: str | None = Field(None, description="前端路由路径")
route_path: str | None = Field(None, description="前端跳转路径")
menu_profile: str | None = Field(None, description="菜单模板:document_review/contract/govdoc/custom")
features: list[str] | None = Field(None, description="启用功能编码列表")
areas: list[EntryModuleAreaDTO] | None = Field(None, description="历史地区配置(兼容字段,建议改用 tenants)")
tenants: list[EntryModuleTenantDTO] | None = Field(None, description="租户配置")
@@ -0,0 +1,17 @@
"""企查查 DTO。"""
from pydantic import BaseModel, Field
class QichachaCompanyQueryDTO(BaseModel):
"""企业查询请求。"""
keyword: str = Field(..., min_length=2, max_length=200, description="企业名称或统一社会信用代码")
forceRefresh: bool = Field(False, description="是否强制刷新缓存")
class QichachaBatchQueryDTO(BaseModel):
"""批量企业查询请求。"""
keywords: list[str] = Field(..., min_length=1, max_length=10, description="企业名称或统一社会信用代码列表")
forceRefresh: bool = Field(False, description="是否强制刷新缓存")
@@ -23,12 +23,14 @@ class CrossReviewTaskItemVO(BaseModel):
docTypeId: int | None = Field(None, description="文档类型ID")
docTypeCode: str | None = Field(None, description="文档类型编码")
status: str = Field(..., description="任务状态")
progress: float = Field(0, description="进度百分比")
totalDocuments: int = Field(0, description="文档总数")
completedDocuments: int = Field(0, description="已完成文档数")
progress: float | None = Field(0, description="进度百分比")
totalDocuments: int | None = Field(0, description="文档总数")
completedDocuments: int | None = Field(0, description="已完成文档数")
createdAt: datetime | None = Field(None, description="创建时间")
evaluationTenants: list[CrossReviewTaskTenantVO] = Field(default_factory=list, description="评查租户列表")
evaluationRegion: list[str] = Field(default_factory=list, description="评查租户/地区(兼容展示值)")
currentUserRole: str = Field("participant", description="当前用户在任务中的角色:assigner/principal/participant")
currentUserCanConfirm: bool = Field(False, description="当前用户是否可确认完成任务文档")
class CrossReviewTaskPageVO(BaseModel):
@@ -20,6 +20,7 @@ class DocumentUploadVO(BaseModel):
typeId: int = Field(..., description="文档类型ID")
typeCode: str = Field(..., description="文档类型编码")
groupId: int | None = Field(None, description="命中的二级分组ID")
entryModuleId: int | None = Field(None, description="所属入口模块ID")
region: str = Field(..., description="所属地区")
tenantCode: str | None = Field(None, description="所属租户编码")
tenantName: str | None = Field(None, description="所属租户名称")
@@ -109,6 +110,7 @@ class DocumentListItemVO(BaseModel):
typeName: str | None = Field(None, description="文档类型名称")
groupId: int | None = Field(None, description="命中的二级分组ID")
groupName: str | None = Field(None, description="二级分组名称")
entryModuleId: int | None = Field(None, description="所属入口模块ID")
region: str = Field(..., description="区域")
tenantCode: str | None = Field(None, description="所属租户编码")
tenantName: str | None = Field(None, description="所属租户名称")
@@ -12,6 +12,14 @@ class EntryModuleTenantVO(BaseModel):
sort_order: int = Field(0, description="排序号")
class EntryModuleBusinessScopeVO(BaseModel):
"""入口模块业务范围摘要。"""
category_count: int = Field(0, description="业务大类数量")
business_type_count: int = Field(0, description="业务类型数量")
categories: list[str] = Field(default_factory=list, description="业务大类名称列表")
class EntryModuleVO(BaseModel):
"""入口模块详情。"""
@@ -20,9 +28,12 @@ class EntryModuleVO(BaseModel):
description: str | None = Field(None, description="模块描述")
path: str | None = Field(None, description="图标路径")
route_path: str | None = Field(None, description="前端跳转路径")
menu_profile: str = Field("document_review", description="菜单模板")
features: list[str] = Field(default_factory=list, description="启用功能编码列表")
sort_order: int = Field(0, description="排序")
is_enabled: bool = Field(True, description="是否启用")
tenants: list[EntryModuleTenantVO] = Field(default_factory=list, description="租户配置")
business_scope: EntryModuleBusinessScopeVO = Field(default_factory=EntryModuleBusinessScopeVO, description="业务范围摘要")
created_at: str | None = Field(None, description="创建时间")
updated_at: str | None = Field(None, description="更新时间")
@@ -36,9 +36,31 @@ class HomeEntryModuleVO(BaseModel):
description: str | None = Field(None, description="模块描述")
targetPath: str | None = Field(None, description="点击后跳转路径")
routePath: str | None = Field(None, description="用于 RBAC 校验的页面路径")
menuProfile: str = Field("document_review", description="菜单模板")
features: list[str] = Field(default_factory=list, description="启用功能编码列表")
tenantCode: str | None = Field(None, description="当前命中的租户编码")
iconPath: str | None = Field(None, description="模块图标路径")
sortOrder: int = Field(0, description="排序序号")
requiresDocumentTypes: bool = Field(True, description="是否要求至少绑定一个文档类型")
areas: list[HomeEntryAreaVO] = Field(default_factory=list, description="地区配置")
tenants: list[HomeEntryTenantVO] = Field(default_factory=list, description="租户配置")
documentTypes: list[HomeEntryDocumentTypeVO] = Field(default_factory=list, description="关联文档类型列表")
class HomeDashboardGrowthVO(BaseModel):
"""首页统计环比数据。"""
value: int = Field(0, description="环比百分比")
isUp: bool = Field(True, description="是否上升")
class HomeDashboardStatisticsVO(BaseModel):
"""首页统计卡片数据。"""
todayPendingFiles: int = Field(0, description="今日待审文件数")
monthlyReviewedFiles: int = Field(0, description="本月已审核文件数")
monthlyReviewGrowth: HomeDashboardGrowthVO = Field(default_factory=HomeDashboardGrowthVO, description="本月审核数环比")
monthlyPassRate: int = Field(0, description="本月审核通过率")
passRateGrowth: HomeDashboardGrowthVO = Field(default_factory=HomeDashboardGrowthVO, description="通过率环比")
issuesDetected: int = Field(0, description="本月问题检出数")
issuesGrowth: HomeDashboardGrowthVO = Field(default_factory=HomeDashboardGrowthVO, description="问题检出数环比")
@@ -0,0 +1,55 @@
"""企查查 VO。"""
from __future__ import annotations
from typing import Any
from pydantic import BaseModel, Field
class QichachaCompanyInfoVO(BaseModel):
"""企业信息响应。"""
searchKey: str = Field(..., description="查询关键词")
creditCode: str | None = Field(None, description="统一社会信用代码")
companyName: str | None = Field(None, description="企业名称")
enterprise: dict[str, Any] | None = Field(None, description="工商信息")
dishonesty: dict[str, Any] | None = Field(None, description="失信信息")
hasDishonesty: bool = Field(False, description="是否存在失信记录")
dishonestyCount: int = Field(0, description="失信记录数量")
updatedAt: str | None = Field(None, description="更新时间")
class QichachaCompanyQueryVO(BaseModel):
"""企业查询响应。"""
success: bool = Field(..., description="是否成功")
message: str = Field(..., description="响应消息")
data: QichachaCompanyInfoVO | None = Field(None, description="企业信息")
errorCode: str | None = Field(None, description="错误码")
errorDetails: dict[str, Any] | None = Field(None, description="错误详情")
class QichachaBatchQueryVO(BaseModel):
"""批量企业查询响应。"""
success: bool = Field(..., description="是否全部成功")
total: int = Field(..., description="查询总数")
successCount: int = Field(..., description="成功数")
failedCount: int = Field(..., description="失败数")
results: list[QichachaCompanyQueryVO] = Field(default_factory=list, description="查询结果")
class QichachaRecordStatusVO(BaseModel):
"""企业缓存记录状态响应。"""
exists: bool = Field(..., description="是否存在缓存")
searchKey: str = Field(..., description="查询关键词")
creditCode: str | None = Field(None, description="统一社会信用代码")
companyName: str | None = Field(None, description="企业名称")
hasEnterprise: bool = Field(False, description="是否有工商信息")
hasDishonesty: bool = Field(False, description="是否有失信信息")
updatedAt: str | None = Field(None, description="更新时间")
ageDays: int | None = Field(None, description="缓存天数")
refreshThresholdDays: int = Field(..., description="刷新阈值")
needRefresh: bool = Field(False, description="是否需要刷新")