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
@@ -76,7 +76,9 @@ class CrossReviewController(BaseController):
"""查询当前用户参与的交叉评查任务。"""
if not await self._check_permission(int(payload["user_id"]), [self._PERMISSIONS["task_read"]]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有查看交叉评查任务权限", "data": None})
Data = await self.CrossReviewService.GetUserTasks(CurrentUserId=int(payload["user_id"]), Body=Body)
UserId = int(payload["user_id"])
CanViewProgress = await self._check_permission(UserId, [self._PERMISSIONS["progress_view"]])
Data = await self.CrossReviewService.GetUserTasks(CurrentUserId=UserId, Body=Body, CanViewProgress=CanViewProgress)
return Result.success(data=Data)
@self.router.get("/tasks/{TaskId}/progress", response_model=Result[CrossReviewTaskProgressVO])
@@ -4,6 +4,7 @@ import json
from typing import Any
from fastapi import Depends, File, Form, Query, UploadFile
from fastapi.responses import JSONResponse
from pydantic import BaseModel, Field
from sqlalchemy import text
@@ -34,6 +35,8 @@ from fastapi_modules.fastapi_leaudit.domian.vo.reviewPointVo import (
)
from fastapi_modules.fastapi_leaudit.services import IDocumentService
from fastapi_modules.fastapi_leaudit.services.impl.documentServiceImpl import DocumentServiceImpl
from fastapi_modules.fastapi_leaudit.services.impl.permissionServiceImpl import PermissionServiceImpl
from fastapi_modules.fastapi_leaudit.services.permissionService import IPermissionService
class QueueStatusVO(BaseModel):
@@ -51,6 +54,8 @@ class ReviewPointAuditDTO(BaseModel):
class DocumentController(BaseController):
"""文档控制器。"""
_CROSS_REVIEW_DOCUMENT_READ_PERMISSION = "cross_review:document:read"
@staticmethod
def _tenant_context(payload: dict[str, Any]) -> dict[str, str | None]:
return {
@@ -61,6 +66,7 @@ class DocumentController(BaseController):
def __init__(self):
super().__init__(prefix="", tags=["文档"])
self.DocumentService: IDocumentService = DocumentServiceImpl()
self.PermissionService: IPermissionService = PermissionServiceImpl()
@self.router.post("/upload", response_model=Result[DocumentUploadVO])
async def UploadDocument(
@@ -69,6 +75,8 @@ class DocumentController(BaseController):
typeId: int | None = Form(None, description="文档类型ID"),
typeCode: str | None = Form(None, description="文档类型编码"),
groupId: int | None = Form(None, description="二级分组ID"),
entryModuleId: int | None = Form(None, description="入口模块ID"),
entry_module_id: int | None = Form(None, description="入口模块ID,兼容蛇形字段"),
region: str | None = Form(None, description="所属租户/地区"),
tenant_code: str | None = Form(None, description="租户编码"),
fileRole: str = Form("primary", description="文件角色"),
@@ -97,6 +105,7 @@ class DocumentController(BaseController):
TypeId=typeId,
TypeCode=typeCode,
GroupId=groupId,
EntryModuleId=entryModuleId or entry_module_id,
Region=region,
FileRole=fileRole,
CreatedBy=int(payload["user_id"]),
@@ -194,7 +203,11 @@ class DocumentController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取单个文档详情(带数据隔离校验)。"""
Data = await self.DocumentService.GetDocument(CurrentUserId=int(payload["user_id"]), Id=DocumentId)
userId = int(payload["user_id"])
deniedResponse = await self._deny_cross_review_document_without_permission(userId, DocumentId)
if deniedResponse:
return deniedResponse
Data = await self.DocumentService.GetDocument(CurrentUserId=userId, Id=DocumentId)
return Result.success(data=Data)
@self.router.get("/v3/review-points/{DocumentId}", response_model=Result[ReviewPointsAggregateVO])
@@ -203,7 +216,11 @@ class DocumentController(BaseController):
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取评查详情页聚合数据(带数据隔离校验)。"""
Data = await self.DocumentService.GetReviewPoints(CurrentUserId=int(payload["user_id"]), DocumentId=DocumentId)
userId = int(payload["user_id"])
deniedResponse = await self._deny_cross_review_document_without_permission(userId, DocumentId)
if deniedResponse:
return deniedResponse
Data = await self.DocumentService.GetReviewPoints(CurrentUserId=userId, DocumentId=DocumentId)
return Result.success(data=Data)
@self.router.patch("/v3/review-points/{ReviewPointResultId}/audit", response_model=Result[ReviewPointAuditVO])
@@ -400,3 +417,17 @@ class DocumentController(BaseController):
},
)
)
async def _deny_cross_review_document_without_permission(self, UserId: int, DocumentId: int) -> JSONResponse | None:
if not await self.DocumentService.IsCrossReviewDocument(DocumentId):
return None
hasPermission = await self.PermissionService.HasAnyPermission(
UserId=UserId,
PermissionKeys=[self._CROSS_REVIEW_DOCUMENT_READ_PERMISSION],
)
if hasPermission:
return None
return JSONResponse(
status_code=403,
content={"code": 403, "msg": "当前用户没有查看交叉评查结果权限", "data": None},
)
@@ -1,155 +1,40 @@
"""评查点控制器。"""
"""Legacy evaluation point API.
The current rule configuration flow is backed by leaudit_evaluation_point_groups
and rule version tables. The old evaluation_points table is no longer present
in the active schema, so keep this route explicit and non-destructive.
"""
from fastapi import Depends, Query
from fastapi.responses import JSONResponse
from fastapi_common.fastapi_common_security.security import verify_access_token
from fastapi_common.fastapi_common_web.controller import BaseController
from fastapi_modules.fastapi_leaudit.domian.Dto.evaluationPointDto import (
EvaluationPointCreateDTO,
EvaluationPointUpdateDTO,
)
from fastapi_modules.fastapi_leaudit.services.evaluationPointService import IEvaluationPointService
from fastapi_modules.fastapi_leaudit.services.impl.evaluationPointServiceImpl import EvaluationPointServiceImpl
from fastapi_modules.fastapi_leaudit.services.impl.permissionServiceImpl import PermissionServiceImpl
from fastapi_modules.fastapi_leaudit.services.permissionService import IPermissionService
class EvaluationPointController(BaseController):
"""评查点控制器。"""
_PERMISSIONS = {
"list": "evaluation_point:list:read",
"detail": "evaluation_point:detail:read",
"create": "evaluation_point:create:write",
"update": "evaluation_point:update:write",
"delete": "evaluation_point:delete:delete",
}
@staticmethod
def _tenant_context(payload: dict) -> dict[str, str | None]:
return {
"UserArea": payload.get("area"),
"UserRole": payload.get("user_role"),
"TenantCode": payload.get("tenant_code"),
"TenantName": payload.get("tenant_name"),
}
"""Deprecated legacy evaluation point controller."""
def __init__(self):
super().__init__(prefix="/v3/evaluation-points", tags=["评查点"])
self.PointService: IEvaluationPointService = EvaluationPointServiceImpl()
self.PermissionService: IPermissionService = PermissionServiceImpl()
super().__init__(prefix="/v3/evaluation-points", tags=["评查点接口"])
@self.router.get("")
async def ListEvaluationPoints(
name: str | None = Query(None, description="名称模糊搜索"),
code: str | None = Query(None, description="编码模糊搜索"),
risk: str | None = Query(None, description="风险等级"),
is_enabled: bool | None = Query(None, description="是否启用"),
evaluation_point_groups_pid: int | None = Query(None, description="一级分组ID"),
evaluation_point_groups_id: int | None = Query(None, description="二级分组ID"),
document_attribute_type: str | None = Query(None, description="文档属性类型"),
area: str | None = Query(None, description="地区/兼容租户展示值"),
tenant_code: str | None = Query(None, description="租户编码"),
tenant_name: str | None = Query(None, description="租户名称(兼容筛选)"),
page: int = Query(1, ge=1, description="页码"),
page_size: int = Query(20, ge=1, le=500, description="分页大小"),
payload: dict = Depends(verify_access_token),
):
if not await self._check_permission(int(payload["user_id"]), [self._PERMISSIONS["list"]]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有评查点查看权限", "data": None})
tenant_context = self._tenant_context(payload)
data = await self.PointService.ListPoints(
int(payload["user_id"]),
tenant_context["UserArea"],
tenant_context["UserRole"],
tenant_context["TenantCode"],
tenant_context["TenantName"],
name,
code,
risk,
is_enabled,
evaluation_point_groups_pid,
evaluation_point_groups_id,
document_attribute_type,
area,
tenant_code,
tenant_name,
page,
page_size,
)
return JSONResponse(status_code=200, content=data.model_dump())
@self.router.api_route("", methods=["GET", "POST"])
async def LegacyEvaluationPointsRoot():
return self._gone()
@self.router.get("/attribute-types")
async def GetEvaluationPointAttributeTypes(payload: dict = Depends(verify_access_token)):
if not await self._check_permission(int(payload["user_id"]), [self._PERMISSIONS["list"]]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有评查点查看权限", "data": None})
data = await self.PointService.GetAttributeTypes()
return JSONResponse(status_code=200, content=data.model_dump())
@self.router.api_route("/attribute-types", methods=["GET"])
async def LegacyEvaluationPointAttributeTypes():
return self._gone()
@self.router.get("/{PointId}")
async def GetEvaluationPoint(PointId: int, payload: dict = Depends(verify_access_token)):
if not await self._check_permission(int(payload["user_id"]), [self._PERMISSIONS["detail"]]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有评查点查看权限", "data": None})
tenant_context = self._tenant_context(payload)
data = await self.PointService.GetPoint(
int(payload["user_id"]),
tenant_context["UserArea"],
tenant_context["UserRole"],
tenant_context["TenantCode"],
tenant_context["TenantName"],
PointId,
)
return JSONResponse(status_code=200, content=data.model_dump())
@self.router.api_route("/{PointId}", methods=["GET", "PUT", "DELETE"])
async def LegacyEvaluationPointDetail(PointId: int):
return self._gone()
@self.router.post("")
async def CreateEvaluationPoint(body: EvaluationPointCreateDTO, payload: dict = Depends(verify_access_token)):
if not await self._check_permission(int(payload["user_id"]), [self._PERMISSIONS["create"]]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有创建评查点权限", "data": None})
tenant_context = self._tenant_context(payload)
data = await self.PointService.CreatePoint(
int(payload["user_id"]),
tenant_context["UserArea"],
tenant_context["UserRole"],
tenant_context["TenantCode"],
tenant_context["TenantName"],
body,
)
return JSONResponse(status_code=200, content=data.model_dump())
@self.router.put("/{PointId}")
async def UpdateEvaluationPoint(PointId: int, body: EvaluationPointUpdateDTO, payload: dict = Depends(verify_access_token)):
if not await self._check_permission(int(payload["user_id"]), [self._PERMISSIONS["update"]]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有更新评查点权限", "data": None})
tenant_context = self._tenant_context(payload)
data = await self.PointService.UpdatePoint(
int(payload["user_id"]),
tenant_context["UserArea"],
tenant_context["UserRole"],
tenant_context["TenantCode"],
tenant_context["TenantName"],
PointId,
body,
)
return JSONResponse(status_code=200, content=data.model_dump())
@self.router.delete("/{PointId}")
async def DeleteEvaluationPoint(PointId: int, payload: dict = Depends(verify_access_token)):
if not await self._check_permission(int(payload["user_id"]), [self._PERMISSIONS["delete"]]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有删除评查点权限", "data": None})
tenant_context = self._tenant_context(payload)
data = await self.PointService.DeletePoint(
int(payload["user_id"]),
tenant_context["UserArea"],
tenant_context["UserRole"],
tenant_context["TenantCode"],
tenant_context["TenantName"],
PointId,
)
return JSONResponse(status_code=200, content=data.model_dump())
async def _check_permission(self, user_id: int, permission_keys: list[str]) -> bool:
for permission_key in permission_keys:
if await self.PermissionService.CheckPermission(user_id, permission_key):
return True
return False
@staticmethod
def _gone() -> JSONResponse:
return JSONResponse(
status_code=410,
content={
"code": 410,
"msg": "旧评查点接口已下线,请使用规则组/规则配置接口",
"data": None,
},
)
@@ -35,24 +35,26 @@ class EvaluationPointGroupController(BaseController):
code: str | None = Query(None, description="分组编码模糊搜索"),
is_enabled: bool | None = Query(None, description="是否启用"),
pid: int | None = Query(None, description="父分组ID0 表示一级分组"),
entry_module_id: int | None = Query(None, description="入口模块ID"),
page: int = Query(1, ge=1, description="页码"),
page_size: int = Query(20, ge=1, le=500, description="分页大小"),
payload: dict = Depends(verify_access_token),
):
if not await self._check_permission(int(payload["user_id"]), ["evaluation_group:list:read", "rules:list:read"]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有评查点分组查看权限", "data": None})
data = await self.GroupService.ListGroups(name, code, is_enabled, pid, page, page_size, int(payload["user_id"]))
data = await self.GroupService.ListGroups(name, code, is_enabled, pid, page, page_size, int(payload["user_id"]), entry_module_id)
return JSONResponse(status_code=200, content=data.model_dump())
@self.router.get("/all")
async def ListAllEvaluationPointGroups(
include_disabled: bool = Query(False, description="是否包含禁用分组"),
with_rule_count: bool = Query(True, description="是否返回评查点数"),
entry_module_id: int | None = Query(None, description="入口模块ID"),
payload: dict = Depends(verify_access_token),
):
if not await self._check_permission(int(payload["user_id"]), ["evaluation_group:list:read", "rules:list:read"]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有评查点分组查看权限", "data": None})
data = await self.GroupService.ListAllGroups(include_disabled, with_rule_count, int(payload["user_id"]))
data = await self.GroupService.ListAllGroups(include_disabled, with_rule_count, int(payload["user_id"]), entry_module_id)
return JSONResponse(status_code=200, content=[item.model_dump() for item in data])
@self.router.get("/by-document-types")
@@ -8,6 +8,7 @@ from __future__ import annotations
from typing import Any
from fastapi import Depends, File, Form, Query, UploadFile
from fastapi.responses import JSONResponse
from fastapi_common.fastapi_common_security.security import verify_access_token
from fastapi_common.fastapi_common_web.controller import BaseController
@@ -15,6 +16,8 @@ from fastapi_common.fastapi_common_web.domain.responses import Result
from fastapi_modules.fastapi_leaudit.services import IGovdocService
from fastapi_modules.fastapi_leaudit.services.impl.govdocServiceImpl import GovdocServiceImpl
from fastapi_modules.fastapi_leaudit.services.impl.permissionServiceImpl import PermissionServiceImpl
from fastapi_modules.fastapi_leaudit.services.permissionService import IPermissionService
class GovdocController(BaseController):
@@ -23,6 +26,7 @@ class GovdocController(BaseController):
def __init__(self):
super().__init__(prefix="/govdoc", tags=["内部公文"])
self.GovdocService: IGovdocService = GovdocServiceImpl()
self.PermissionService: IPermissionService = PermissionServiceImpl()
# ── 文档 ──────────────────────────────────────────
@@ -30,6 +34,7 @@ class GovdocController(BaseController):
async def UploadDocument(
file: UploadFile = File(...),
typeId: int | None = Form(default=None),
entry_module_id: int | None = Form(default=None, description="入口模块ID"),
region: str | None = Form(default=None, description="兼容保留字段:租户展示值/旧地区"),
tenant_code: str | None = Form(default=None, description="租户编码"),
autoRun: bool = Form(default=True),
@@ -41,9 +46,12 @@ class GovdocController(BaseController):
创建文档主档记录,engine_type 标记为 govdoc,可选自动触发审查。
"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "govdoc:document:create"):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有上传公文权限", "data": None})
result = await self.GovdocService.UploadDocument(
file=file,
typeId=typeId,
entryModuleId=entry_module_id,
region=region,
tenantCode=tenant_code,
autoRun=autoRun,
@@ -61,6 +69,9 @@ class GovdocController(BaseController):
fileExt: str | None = Query(default=None),
region: str | None = Query(default=None, description="兼容保留字段:租户展示值/旧地区"),
tenant_code: str | None = Query(default=None, description="租户编码"),
entry_module_id: int | None = Query(default=None, description="按入口模块ID过滤"),
type_ids: str | None = Query(default=None, description="按文档类型ID列表过滤,逗号分隔"),
document_type_id: int | None = Query(default=None, description="按单个文档类型ID过滤"),
status: str | None = Query(default=None),
resultStatus: str | None = Query(default=None),
createdBy: int | None = Query(default=None),
@@ -72,6 +83,18 @@ class GovdocController(BaseController):
后端自动附加 engine_type='govdoc' 过滤条件。
"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "govdoc:document:read"):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有查看公文列表权限", "data": None})
typeIdList: list[int] = []
if type_ids:
typeIdList = [
int(item.strip())
for item in type_ids.split(",")
if item.strip().isdigit() and int(item.strip()) > 0
]
if document_type_id is not None and document_type_id > 0:
typeIdList.append(document_type_id)
result = await self.GovdocService.ListDocuments(
page=page,
pageSize=pageSize,
@@ -79,6 +102,8 @@ class GovdocController(BaseController):
fileExt=fileExt,
region=region,
tenantCode=tenant_code,
entryModuleId=entry_module_id,
typeIds=typeIdList or None,
status=status,
resultStatus=resultStatus,
createdBy=createdBy,
@@ -2,13 +2,13 @@
from typing import Any
from fastapi import Depends
from fastapi import Depends, Query
from fastapi_common.fastapi_common_security.security import verify_access_token
from fastapi_common.fastapi_common_web.controller import BaseController
from fastapi_common.fastapi_common_web.domain.responses import Result
from fastapi_modules.fastapi_leaudit.domian.vo.homeVo import HomeEntryModuleVO
from fastapi_modules.fastapi_leaudit.domian.vo.homeVo import HomeDashboardStatisticsVO, HomeEntryModuleVO
from fastapi_modules.fastapi_leaudit.services import IHomeService
from fastapi_modules.fastapi_leaudit.services.impl.homeServiceImpl import HomeServiceImpl
@@ -25,3 +25,24 @@ class HomeController(BaseController):
"""获取当前用户可见的首页入口模块。"""
Data = await self.HomeService.GetEntryModules(UserId=int(payload["user_id"]))
return Result.success(data=Data)
@self.router.get("/statistics/dashboard", response_model=Result[HomeDashboardStatisticsVO])
async def GetDashboardStatistics(
today: str | None = Query(None, description="统计基准日期,格式 YYYY-MM-DD"),
type_ids: str | None = Query(None, description="文档类型ID,逗号分隔"),
entry_module_id: int | None = Query(None, description="入口模块ID"),
payload: dict[str, Any] = Depends(verify_access_token),
):
"""获取首页统计卡片数据。"""
typeIds = [
int(item)
for item in str(type_ids or "").split(",")
if item.strip().isdigit() and int(item.strip()) > 0
]
Data = await self.HomeService.GetDashboardStatistics(
UserId=int(payload["user_id"]),
Today=today,
TypeIds=typeIds,
EntryModuleId=entry_module_id,
)
return Result.success(data=Data)
@@ -0,0 +1,99 @@
"""企查查控制器。"""
from typing import Any
from fastapi import Depends, Query
from fastapi.responses import JSONResponse
from fastapi_common.fastapi_common_security.security import verify_access_token
from fastapi_common.fastapi_common_web.controller import BaseController
from fastapi_common.fastapi_common_web.domain.responses import Result
from fastapi_modules.fastapi_leaudit.domian.Dto.qichachaDto import QichachaBatchQueryDTO, QichachaCompanyQueryDTO
from fastapi_modules.fastapi_leaudit.domian.vo.qichachaVo import (
QichachaBatchQueryVO,
QichachaCompanyQueryVO,
QichachaRecordStatusVO,
)
from fastapi_modules.fastapi_leaudit.services.impl.permissionServiceImpl import PermissionServiceImpl
from fastapi_modules.fastapi_leaudit.services.impl.qichachaServiceImpl import QichachaServiceImpl
from fastapi_modules.fastapi_leaudit.services.permissionService import IPermissionService
from fastapi_modules.fastapi_leaudit.services.qichachaService import IQichachaService
class QichachaController(BaseController):
"""企查查控制器。"""
def __init__(self):
super().__init__(prefix="/v2/qichacha", tags=["企查查"])
self.QichachaService: IQichachaService = QichachaServiceImpl()
self.PermissionService: IPermissionService = PermissionServiceImpl()
@self.router.post("/company", response_model=Result[QichachaCompanyQueryVO])
async def QueryCompany(Body: QichachaCompanyQueryDTO, payload: dict[str, Any] = Depends(verify_access_token)):
"""查询企业完整信息。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "qichacha:company:query"):
return JSONResponse(
status_code=403,
content={"code": 403, "message": "当前用户没有查询企业信息权限", "data": None},
)
data = await self.QichachaService.QueryCompany(
Keyword=Body.keyword,
ForceRefresh=Body.forceRefresh,
)
return Result.success(data=data)
@self.router.post("/enterprise", response_model=Result[QichachaCompanyQueryVO])
async def QueryEnterprise(Body: QichachaCompanyQueryDTO, payload: dict[str, Any] = Depends(verify_access_token)):
"""仅查询企业工商信息。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "qichacha:company:query"):
return JSONResponse(
status_code=403,
content={"code": 403, "message": "当前用户没有查询企业信息权限", "data": None},
)
data = await self.QichachaService.QueryEnterpriseOnly(
Keyword=Body.keyword,
ForceRefresh=Body.forceRefresh,
)
return Result.success(data=data)
@self.router.post("/dishonesty", response_model=Result[QichachaCompanyQueryVO])
async def QueryDishonesty(Body: QichachaCompanyQueryDTO, payload: dict[str, Any] = Depends(verify_access_token)):
"""仅查询企业失信信息。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "qichacha:company:query"):
return JSONResponse(
status_code=403,
content={"code": 403, "message": "当前用户没有查询企业信息权限", "data": None},
)
data = await self.QichachaService.QueryDishonestyOnly(
Keyword=Body.keyword,
ForceRefresh=Body.forceRefresh,
)
return Result.success(data=data)
@self.router.post("/batch", response_model=Result[QichachaBatchQueryVO])
async def BatchQuery(Body: QichachaBatchQueryDTO, payload: dict[str, Any] = Depends(verify_access_token)):
"""批量查询企业信息。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "qichacha:company:query"):
return JSONResponse(
status_code=403,
content={"code": 403, "message": "当前用户没有查询企业信息权限", "data": None},
)
data = await self.QichachaService.BatchQuery(
Keywords=Body.keywords,
ForceRefresh=Body.forceRefresh,
)
return Result.success(data=data)
@self.router.get("/status", response_model=Result[QichachaRecordStatusVO])
async def GetRecordStatus(
keyword: str = Query(..., min_length=2, description="企业名称或统一社会信用代码"),
payload: dict[str, Any] = Depends(verify_access_token),
):
"""查询企业缓存状态。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "qichacha:status:read"):
return JSONResponse(
status_code=403,
content={"code": 403, "message": "当前用户没有查看企业缓存状态权限", "data": None},
)
data = await self.QichachaService.GetRecordStatus(Keyword=keyword)
return Result.success(data=data)
@@ -5,6 +5,7 @@ from __future__ import annotations
from typing import Any
from fastapi import Depends, Query
from fastapi.responses import JSONResponse
from fastapi_common.fastapi_common_security.security import verify_access_token
from fastapi_common.fastapi_common_web.controller import BaseController
@@ -18,7 +19,9 @@ from fastapi_modules.fastapi_leaudit.domian.vo.usageStatsVo import (
UsageStatsTrendVO,
UsageStatsUserPageVO,
)
from fastapi_modules.fastapi_leaudit.services.impl.permissionServiceImpl import PermissionServiceImpl
from fastapi_modules.fastapi_leaudit.services.impl.usageStatsServiceImpl import UsageStatsServiceImpl
from fastapi_modules.fastapi_leaudit.services.permissionService import IPermissionService
from fastapi_modules.fastapi_leaudit.services.usageStatsService import IUsageStatsService
@@ -28,6 +31,7 @@ class UsageStatsController(BaseController):
def __init__(self):
super().__init__(prefix="/v3/usage-stats", tags=["系统使用统计"])
self.UsageStatsService: IUsageStatsService = UsageStatsServiceImpl()
self.PermissionService: IPermissionService = PermissionServiceImpl()
@self.router.get("/overview", response_model=Result[UsageStatsOverviewVO])
async def GetOverview(
@@ -39,6 +43,9 @@ class UsageStatsController(BaseController):
documentTypeId: int | None = None,
payload: dict[str, Any] = Depends(verify_access_token),
):
"""查询系统使用统计总览。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "usage_stats:overview:read"):
return JSONResponse(status_code=403, content={"code": 403, "message": "当前用户没有查看统计总览权限", "data": None})
data = await self.UsageStatsService.GetOverview(
CurrentUserId=int(payload["user_id"]),
Filters={
@@ -64,6 +71,9 @@ class UsageStatsController(BaseController):
documentTypeId: int | None = None,
payload: dict[str, Any] = Depends(verify_access_token),
):
"""查询系统使用统计趋势。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "usage_stats:trends:read"):
return JSONResponse(status_code=403, content={"code": 403, "message": "当前用户没有查看统计趋势权限", "data": None})
data = await self.UsageStatsService.GetTrends(
CurrentUserId=int(payload["user_id"]),
Filters={
@@ -92,6 +102,9 @@ class UsageStatsController(BaseController):
dateTo: str | None = None,
payload: dict[str, Any] = Depends(verify_access_token),
):
"""按用户维度查询系统使用统计。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "usage_stats:users:read"):
return JSONResponse(status_code=403, content={"code": 403, "message": "当前用户没有查看用户统计权限", "data": None})
data = await self.UsageStatsService.GetUsers(
CurrentUserId=int(payload["user_id"]),
Filters={
@@ -119,6 +132,9 @@ class UsageStatsController(BaseController):
dateTo: str | None = None,
payload: dict[str, Any] = Depends(verify_access_token),
):
"""按部门维度查询系统使用统计。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "usage_stats:departments:read"):
return JSONResponse(status_code=403, content={"code": 403, "message": "当前用户没有查看部门统计权限", "data": None})
data = await self.UsageStatsService.GetDepartments(
CurrentUserId=int(payload["user_id"]),
Filters={
@@ -144,6 +160,9 @@ class UsageStatsController(BaseController):
documentTypeId: int | None = None,
payload: dict[str, Any] = Depends(verify_access_token),
):
"""按地区维度查询系统使用统计。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "usage_stats:areas:read"):
return JSONResponse(status_code=403, content={"code": 403, "message": "当前用户没有查看地区统计权限", "data": None})
data = await self.UsageStatsService.GetAreas(
CurrentUserId=int(payload["user_id"]),
Filters={
@@ -173,6 +192,9 @@ class UsageStatsController(BaseController):
dateTo: str | None = None,
payload: dict[str, Any] = Depends(verify_access_token),
):
"""查询系统使用统计明细。"""
if not await self.PermissionService.CheckPermission(int(payload["user_id"]), "usage_stats:details:read"):
return JSONResponse(status_code=403, content={"code": 403, "message": "当前用户没有查看统计明细权限", "data": None})
data = await self.UsageStatsService.GetDetails(
CurrentUserId=int(payload["user_id"]),
Filters={