status: review created: 2026-07-27 complexity: 🔴复杂
output/框架问题细化整改清单.md 指出 Controller 层存在查询构造、裸异常和分页参数不一致。本轮重新按当前工作树扫描,在客户端凭据整改已清理 SysClientController 后,基线为:
lambdaQuery/lambdaUpdate 数据操作。throw new RuntimeException。page;FlowFormController 已支持 pageNum/page 双读,作为兼容基线。本变更的目标是让 Controller 只负责协议转换和简单编排,查询、更新、统计和清理数据的逻辑进入 Service/Manager,所有自定义 SQL 进入 Mapper XML,同时保持现有 API 业务语义。
| 模块 | Controller | 主要操作 |
|---|---|---|
| System | SysLoginLogController |
登录日志分页 |
| System | LoginTenantAssetController |
租户直接 Mapper 查询 |
| AI | AiAgentController |
智能体分页/启用列表 |
| AI | AiModelController |
模型列表与默认供应商更新 |
| AI | AiProviderController |
默认供应商更新 |
| Generator | GenController |
表元数据分页 |
| Generator | GenDatasourceController |
数据源分页/列表 |
| Generator | GenTemplateController |
模板分页/列表 |
| Generator | GenTableColumnController |
字段查询/删除前查询 |
| Data | DataDatasetController |
数据集状态更新 |
| Message | MessageBizTypeController |
启用业务类型列表 |
| Flow | FlowInstanceController |
流程业务查询 |
| Flow | FlowErrorLogController |
错误统计 Wrapper |
| Flow | FlowMonitorController |
监控查询、统计、批量清理 |
SysUserController 4 处导入必填校验裸异常。SysExcelExportConfigController 1 处配置不存在裸异常。FlowModelVersionController 1 处 BPMN 内容不存在裸异常。ExcelEnhancedController 3 处下载异常把底层消息拼接给客户端,同文件另有 2 处错误响应也直接回传底层消息。SysCacheController、FlowMonitorController、FlowErrorLogController 只接收 page,前端标准 pageNum 会被忽略。FlowMonitorController#deleteForgeFlowRecords 包含 7 个删除操作,但原清单将它们全部视为物理删除并不准确:
FlowFormInstance、FlowFillBatchItem 实体已显式声明 @TableLogic,现有 BaseMapper delete 执行逻辑删除。FlowTask、FlowComment、FlowCc、FlowErrorLog、FlowBusiness 没有逻辑删除字段。该端点是需人工确认文本的管理员流程数据不可逆清理,且同时删除 Flowable 运行时和历史数据。本变更保留这 5 类物理清理语义,但要求下沉到专用 Service + Mapper XML,保留确认门禁和审计日志。该操作无数据库回滚能力,只能通过备份恢复。pageNum 为标准参数,暂时保留可选 page 别名。RuntimeException 归零,Excel 失败响应不回传底层异常消息。lambda* 数据操作扫描归零。selectById/insert/updateById/deleteById 仅可在 Service 使用。pageNum;兼容期同时传入 page 时,旧别名 page 优先,与已上线 FlowFormController 行为一致。BusinessException;系统异常记录完整堆栈后仅向客户端返回稳定文案。本变更不新增数据库字段。V1.0.55__secure_flow_monitor_cleanup.sql 将流程监控菜单权限统一为 flow:monitor:view,新增 flow:monitor:manage、flow:monitor:cleanup 两个按钮权限,并分别创建唯一权限标识的查询、管理和清理 API 资源。脚本使用显式列、tenant_id=1 和 NOT EXISTS;仅为原已拥有监控菜单的角色回填查询 API,管理和清理权限不自动授权。流程清理的逻辑/物理语义按现有表结构保持;如后续需要将 5 张表改为可恢复业务数据,必须单独 Proposal + Flyway,不在本轮隐式改变。
| 接口 | 变更 |
|---|---|
/system/cache/page |
新增标准 pageNum,保留可选 page |
/api/flow/monitor/instances |
新增标准 pageNum,保留可选 page |
/api/flow/monitor/error-logs |
新增标准 pageNum,保留可选 page |
| Excel 下载/导入/导出错误 | 保留 HTTP 错误语义,不再返回底层异常文本 |
forge-plugin-system、forge-plugin-ai、forge-plugin-generator、forge-plugin-data、forge-plugin-message。forge-flow-server。forge-starter-excel。xmllint。无。依据用户对分阶段整改方案的整体授权继续执行。
| Task | 状态 | 实际改动文件 | 备注 |
|---|---|---|---|
| Proposal | 完成 | 本变更四份 SDD 文档 | 已重新扫描当前基线 |
| Task 1 | 完成 | System/Flow/Excel 目标 Controller | 分页双读和异常边界已整改 |
| Task 2 | 完成 | System Controller、Service、Mapper/XML | 登录日志和租户资产查询已下沉 |
| Task 3 | 完成 | AI Controller、Service/Manager、Mapper/XML | 查询和默认项更新已下沉;Manager 单测受本机 Mockito attach 限制 |
| Task 4 | 完成 | Generator Controller、Service、Mapper/XML | 四个 Controller 已无 Wrapper/Mapper 直连,Generator Reactor 构建通过 |
| Task 5 | 完成 | Data/Message Controller、Service、Mapper/XML | 发布状态更新、分页和启用列表查询已下沉,Data/Message Reactor 构建通过 |
| Task 6 | 完成 | Flow Controller、Service、Mapper/XML、合同测试 | 监控查询/统计/状态同步/清理已下沉;2 逻辑 + 5 物理删除合同和确认门禁通过静态验证 |
| Task 7 | 完成 | Flow 事务/SPI/权限与租户边界、AI 并发锁、增量合同和聚合构建 | Spec Review 与最终 Code Quality Review 均已通过;部署 E2E 门禁保留 |
FlowMonitorUserLookup SPI 解耦 System Service;AI 模型摘要同步增加供应商/模型行锁。REQUIRES_NEW、AI 模型/供应商锁顺序反转、供应商删除检查竞态和用户查询降级吞异常。FlowCleanupTransactionExecutor 固定 REQUIRES_NEW 并记录降级异常堆栈;AI 统一供应商先锁、模型后锁并校验快照;供应商删除的锁、关联计数和删除收敛到同一 Manager 事务。isDefault 写入;事务测试补充外层事务挂起/恢复。flow:monitor:cleanup,移除 Controller 类级 @IgnoreTenant 并新增 V1.0.55 权限资源;候选集仅使用当前租户 sys_flow_business 筛选结果,单条和逐实例事务内均校验租户归属,七份清理 SQL 显式带租户;AI 默认切换将必填租户贯穿锁、清默认和设默认 SQL。V1.0.55 拆分查询/管理/清理权限并为 API 使用唯一权限标识,仅回填既有菜单角色的查询 API;表单状态回调和逻辑清理显式传递 tenantId;流程实例与任务操作在访问 Flowable 前通过 sys_flow_business + tenantId 校验归属;合同测试精确截取目标 Mapper statement 后断言。view/manage 权限、当前租户条件和业务归属行锁;监控列表、统计、趋势、分布显式传递 tenantId;移除碰撞式兼容 UPDATE 并补 PUT API 权限;终止、回退、转派、挂起、激活及清理在事务内锁定当前租户业务行;前端按 manage/cleanup 隐藏操作。forge-plugin-flow 编译通过,Flow Controller 合同最终 18/18,两份本轮 Mapper XML 解析通过,监控页 ESLint 和目标差异格式检查通过;按用户要求不重复执行全量 Reactor、前端生产构建或部署 E2E。/apply。