# 新项目交叉评查新表结构与接口清单 > 目标:给出交叉评查在新平台中的建议表结构、接口清单以及代码文件落点,便于直接拆任务实施。 ## 1. 推荐新增表 ## 1.1 `leaudit_cross_review_tasks` 用途: - 交叉评查任务主表 建议字段: ```sql id bigint primary key, task_name varchar(255) not null, task_type varchar(32) not null, doc_type_id bigint null, doc_type_code varchar(64) null, assigner_id bigint not null, status varchar(32) not null default 'in_progress', created_at timestamptz not null default now(), updated_at timestamptz not null default now(), deleted_at timestamptz null ``` 建议索引: - `idx_lcrt_assigner_id` - `idx_lcrt_status` - `idx_lcrt_doc_type_id` ## 1.2 `leaudit_cross_review_task_members` 用途: - 任务参与人和负责人关系表 建议字段: ```sql id bigint primary key, task_id bigint not null, user_id bigint not null, member_role varchar(32) not null, created_at timestamptz not null default now(), updated_at timestamptz not null default now(), deleted_at timestamptz null ``` 约束建议: - 唯一约束:`(task_id, user_id, deleted_at is null)` 语义上唯一 建议索引: - `idx_lcrtm_task_id` - `idx_lcrtm_user_id` - `idx_lcrtm_role` ## 1.3 `leaudit_cross_review_task_documents` 用途: - 任务绑定文档 建议字段: ```sql id bigint primary key, task_id bigint not null, document_id bigint not null, audit_status integer not null default 0, created_at timestamptz not null default now(), updated_at timestamptz not null default now(), deleted_at timestamptz null ``` 说明: - `audit_status=0` 未完成 - `audit_status=1` 已完成 建议索引: - `idx_lcrtd_task_id` - `idx_lcrtd_document_id` - `idx_lcrtd_task_status` ## 1.4 `leaudit_cross_review_proposals` 用途: - 交叉评查加减分提案 建议字段: ```sql id bigint primary key, task_id bigint not null, document_id bigint not null, rule_result_id bigint not null, proposer_id bigint not null, proposed_score_delta numeric(10,2) not null, reason text not null, status varchar(32) not null default 'pending', created_at timestamptz not null default now(), updated_at timestamptz not null default now(), deleted_at timestamptz null ``` 建议索引: - `idx_lcrp_task_id` - `idx_lcrp_document_id` - `idx_lcrp_rule_result_id` - `idx_lcrp_proposer_id` - `idx_lcrp_status` 业务唯一性建议: - 同一用户对同一 `document_id + rule_result_id` 同时只能存在一条有效提案 ## 1.5 `leaudit_cross_review_votes` 用途: - 提案投票 建议字段: ```sql id bigint primary key, proposal_id bigint not null, voter_id bigint not null, vote_type varchar(16) not null, created_at timestamptz not null default now(), updated_at timestamptz not null default now(), deleted_at timestamptz null ``` 建议索引: - `idx_lcrv_proposal_id` - `idx_lcrv_voter_id` 业务唯一性建议: - 同一提案、同一用户仅保留一条有效投票 ## 2. 推荐后端文件落点 ## 2.1 Models 建议新增: - `fastapi_modules/fastapi_leaudit/models/leauditCrossReviewTask.py` - `fastapi_modules/fastapi_leaudit/models/leauditCrossReviewTaskMember.py` - `fastapi_modules/fastapi_leaudit/models/leauditCrossReviewTaskDocument.py` - `fastapi_modules/fastapi_leaudit/models/leauditCrossReviewProposal.py` - `fastapi_modules/fastapi_leaudit/models/leauditCrossReviewVote.py` ## 2.2 DTO 建议新增: - `fastapi_modules/fastapi_leaudit/domian/Dto/crossReviewDto.py` 建议包含: - `CrossReviewTaskCreateDTO` - `CrossReviewProposalCreateDTO` - `CrossReviewVoteDTO` - `CrossReviewTaskDocumentQueryDTO` ## 2.3 VO 建议新增: - `fastapi_modules/fastapi_leaudit/domian/vo/crossReviewVo.py` 建议包含: - `CrossReviewTaskItemVO` - `CrossReviewTaskPageVO` - `CrossReviewTaskDocumentVO` - `CrossReviewTaskDocumentPageVO` - `CrossReviewProposalVO` - `CrossReviewProposalPageVO` - `CrossReviewPermissionVO` - `CrossReviewCompleteVO` ## 2.4 Service 建议新增: - `fastapi_modules/fastapi_leaudit/services/crossReviewService.py` - `fastapi_modules/fastapi_leaudit/services/impl/crossReviewServiceImpl.py` ## 2.5 Controller 建议新增: - `fastapi_modules/fastapi_leaudit/controllers/crossReviewController.py` ## 3. 推荐服务接口 建议在 `crossReviewService.py` 中定义以下能力: - `CreateTask(...)` - `GetUserTasks(...)` - `GetTaskDocuments(...)` - `CanConfirmTaskDocument(...)` - `CompleteTaskDocument(...)` - `CreateProposal(...)` - `VoteProposal(...)` - `CancelProposal(...)` - `GetDocumentProposals(...)` - `GetPendingProposalDetails(...)` - `CheckPendingVotesByDocument(...)` - `UploadDocumentsToTask(...)` - `AppendTaskDocumentAttachments(...)` - `LoadApprovedProposalDeltas(...)` ## 4. 推荐接口清单 ## 4.1 任务接口 ### `POST /api/v2/cross_review/tasks` 用途: - 创建交叉评查任务 请求体建议: ```json { "document_ids": [101, 102], "user_ids": [11, 12], "principal_user_ids": [21], "task_name": "市局间交叉评查-合同类", "doc_type_id": 3, "doc_type_code": "XZCF", "task_type": "CITY" } ``` ### `POST /api/v2/cross_review/tasks/user_tasks` 用途: - 获取当前用户参与的任务列表 ### `GET /api/v2/cross_review/tasks/{taskId}/documents` 用途: - 获取任务下文档列表 - 支持版本归纳 查询参数建议: - `page` - `page_size` - `keyword` ### `GET /api/v2/cross_review/tasks/{taskId}/can-confirm` 用途: - 检查当前用户是否能确认文档评查完成 ### `POST /api/v2/cross_review/tasks/{taskId}/documents/{documentId}/complete` 用途: - 确认任务内文档完成 ### `POST /api/v2/cross_review/tasks/{taskId}/upload_documents` 用途: - 向已有任务追加新文档 ### `POST /api/v2/cross_review/tasks/{taskId}/documents/{documentId}/append_attachments` 用途: - 给任务文档追加附件并生成新版本 ## 4.2 提案接口 ### `POST /api/v2/cross_review/proposals` 用途: - 创建提案 请求体建议: ```json { "task_id": 1, "document_id": 101, "rule_result_id": 10001, "proposed_score_delta": -5, "reason": "该点应扣 5 分" } ``` ### `POST /api/v2/cross_review/proposals/{proposalId}/votes` 用途: - 对提案投票 请求体建议: ```json { "vote_type": "agree" } ``` ### `DELETE /api/v2/cross_review/proposals/{proposalId}` 用途: - 撤销提案 ### `POST /api/v2/cross_review/proposals/document` 用途: - 获取某文档的提案列表 请求体建议: ```json { "document_id": 101, "page": 1, "page_size": 10 } ``` ### `POST /api/v2/cross_review/proposals/details` 用途: - 获取当前用户待处理提案列表 ### `POST /api/v2/cross_review/proposals/document/check_pending_votes` 用途: - 检查某文档是否仍有提案未完成投票 ## 5. 与现有 `DocumentServiceImpl` 的衔接点 ## 5.1 详情页提案列表 当前衔接点: - `DocumentServiceImpl._loadScoringProposals()` 建议: - 改成读 `leaudit_cross_review_proposals` - 后续移除对旧 `cross_scoring_proposals` 的直接依赖 ## 5.2 最终得分计算 当前衔接点: - `DocumentServiceImpl._loadReviewPointResults()` 建议: - 增加按 `rule_result_id` 聚合已通过提案分数的逻辑 - 返回前写入 `ReviewPointResultVO.finalScore` ## 5.3 文档上传与附件追加 建议复用: - `DocumentServiceImpl.Upload()` - `DocumentServiceImpl.AppendAttachments()` 交叉评查只负责: - 上传后把文档挂入任务 - 维护任务内状态和版本展示 ## 6. 建议前端改造策略 ## 6.1 第一阶段 前端尽量少改,只调整 API 基址和字段映射。 重点文件: - `new_doc_review/app/api/cross-checking/cross-files.ts` - `new_doc_review/app/api/cross-checking/cross-file-result.ts` - `new_doc_review/app/api/cross-checking/cross-files-upload.ts` ## 6.2 第二阶段 逐步清理这些旧依赖: - 前端直接查 `cross_examination_tasks` - 前端直接查 `cross_task_document_mapping` - 前端假设旧路径 `/admin/cross_review/*` ## 7. 推荐实施拆解 ### P0:表结构与模型 - 建新表 - 建模型 - 建基础迁移 ### P1:任务与提案接口 - 创建任务 - 任务列表 - 文档列表 - 提案创建 - 投票 - 完成确认 ### P2:详情页聚合接入 - `GetReviewPoints()` 改接新提案表 - 动态计算最终分数 ### P3:上传与版本链闭环 - 任务上传文档 - 追加附件 - 版本归纳改用 `versionGroupKey` ### P4:清理旧兼容 - 清理旧表直查 - 清理前端旧路径 - 清理旧逻辑兜底