# 评估功能前后端实现评估报告

> 评估日期：2026-01-18
> 评估范围：危险评估、计分考核、评估报告模块
> 评估目标：发现交互逻辑问题、功能设置问题，为产品专家评审提供依据

---

## 一、功能模块概览

### 1.1 已实现模块清单

| 模块名称 | 中文名称 | 后端路径 | 前端路径 | 完成度 |
|---------|---------|---------|---------|-------|
| RiskAssessment | 危险评估 | `controller/admin/riskassessment/` | `views/prison/riskassessment/` | 90% |
| Score | 计分考核 | `controller/admin/score/` | `views/prison/score/` | 85% |
| ScoreRule | 考核规则配置 | `controller/admin/score/rule/` | 未实现 | 70% |
| ScoreDetail | 考核明细记录 | `controller/admin/score/detail/` | 未实现 | 70% |
| EvaluationReport | 评估报告 | `controller/admin/evaluationreport/` | `api/prison/evaluation/` | 75% |

### 1.2 评估报告模块表结构

| 表名 | 说明 | 状态 |
|-----|------|------|
| `prison_evaluation_template` | 评估报告模板表 | ✅ 已创建 |
| `prison_evaluation_dimension` | 评估维度配置表 | ✅ 已创建 |
| `prison_evaluation_report` | 评估报告表 | ✅ 已创建 |
| `prison_evaluation_dimension_data` | 报告维度数据表 | ✅ 已创建 |
| `prison_report_comment` | 快捷评语库表 | ✅ 已创建 |
| `prison_evaluation_report_version` | 报告版本历史表 | ✅ 已创建 |
| `prison_evaluation_ai_log` | AI生成日志表 | ✅ 已创建 |

---

## 二、需求实现对比分析

### 2.1 模板管理功能对比

| 需求功能 | 实现状态 | 问题说明 |
|---------|---------|---------|
| 新增模板 | ✅ 已实现 | |
| 编辑模板 | ✅ 已实现 | |
| 复制模板 | ❌ **未实现** | 需求文档3.1.3明确要求 |
| 启用/停用模板 | ✅ 已实现 | |
| 设为默认 | ❌ **未实现** | 需求文档3.1.3明确要求 |
| 版本管理 | ⚠️ 部分实现 | 仅存储，未实现版本对比 |
| 模板分类 | ✅ 已实现 | 支持4种类型 |

### 2.2 维度管理功能对比

| 需求功能 | 实现状态 | 问题说明 |
|---------|---------|---------|
| 新增维度 | ✅ 已实现 | |
| 编辑维度 | ✅ 已实现 | |
| 删除维度 | ✅ 已实现 | |
| 复制维度 | ❌ **未实现** | 需求文档3.1.4.1明确要求 |
| 拖拽排序 | ❌ **未实现** | 仅后端存储sort字段，前端未实现拖拽 |
| 启用/停用 | ✅ 已实现 | |
| AI提示词配置 | ✅ 已实现 | |
| 数据源绑定 | ✅ 已实现 | |

### 2.3 报告生成功能对比

| 需求功能 | 实现状态 | 问题说明 |
|---------|---------|---------|
| 手动创建报告 | ✅ 已实现 | |
| 批量生成报告 | ❌ **未实现** | 需求文档3.5.2明确要求 |
| 数据自动填充 | ✅ 已实现 | |
| AI生成初稿 | ✅ 已实现 | |
| 人工修改 | ✅ 已实现 | |
| 逐维度重新生成 | ✅ 已实现 | |
| 快捷评语 | ✅ 已实现 | |

### 2.4 报告审核功能对比

| 需求功能 | 实现状态 | 问题说明 |
|---------|---------|---------|
| 提交审核 | ✅ 已实现 | |
| 审核通过 | ✅ 已实现 | |
| 审核退回 | ⚠️ **不完整** | 缺少结构化退回原因记录 |
| 撤回报告 | ❌ **未实现** | 需求文档3.13.3明确要求 |
| 退回后重新提交 | ✅ 已实现 | |

### 2.5 报告导出功能对比

| 需求功能 | 实现状态 | 问题说明 |
|---------|---------|---------|
| 导出Excel | ✅ 已实现 | |
| 导出PDF | ❌ **未实现** | 需求文档3.9明确要求 |
| 导出Word | ❌ **未实现** | 需求文档3.9明确要求 |
| 批量导出 | ❌ **未实现** | 需求文档3.11.5明确要求 |
| 批量打包下载 | ❌ **未实现** | 需求文档3.9.2明确要求 |

### 2.6 归档管理功能对比

| 需求功能 | 实现状态 | 问题说明 |
|---------|---------|---------|
| 报告归档 | ❌ **未实现** | 需求文档3.10明确要求 |
| 归档查询 | ❌ **未实现** | |
| 归档后不可修改 | ❌ **未实现** | |

### 2.7 版本管理功能对比

| 需求功能 | 实现状态 | 问题说明 |
|---------|---------|---------|
| 版本记录 | ✅ 已实现 | 表结构已创建 |
| 版本查看 | ⚠️ 部分实现 | 仅存储，未实现查看功能 |
| 版本对比 | ❌ **未实现** | 需求文档3.8.2明确要求 |
| 版本回滚 | ❌ **未实现** | 需求文档3.8.2明确要求 |

---

## 三、交互逻辑问题清单

### 3.1 报告编号生成规则不一致

**问题描述**：
- 需求规范：`RPT-{监区编码}-{年月}-{4位序号}` 示例：`RPT-JQ01-202601-0001`
- 代码实现：`PGEV + yyyyMMdd + 6位序号` 示例：`PGEV20260118000001`

**影响**：报告编号不符合需求规范，无法直观识别监区信息

**建议修复**：
```java
// 建议改为：
// 1. 获取罪犯所属监区编码
// 2. 获取当前年月
// 3. 查询当月该监区的最大序号
// 4. 格式：RPT-{监区编码}-{年月}-{序号(4位)}
```

### 3.2 审核退回流程不完整

**问题描述**：
- 当前实现：仅记录 `audit_opinion` 文本字段
- 需求要求：结构化记录退回原因、驳回时间、驳回人

**影响**：退回原因无法有效传达给起草人，缺少退回时间追溯

**建议修复**：
```sql
-- 增加字段
ALTER TABLE prison_evaluation_report
ADD COLUMN return_reason VARCHAR(500) COMMENT '退回原因',
ADD COLUMN return_time DATETIME COMMENT '退回时间',
ADD COLUMN return_by BIGINT COMMENT '退回人ID';
```

### 3.3 缺少报告撤回功能

**问题描述**：
- 需求文档3.13.3明确要求：待审核状态可撤回为草稿
- 当前代码：没有撤回(Withdraw/Recall)相关接口

**影响**：提交审核后发现问题无法及时撤回修改

**建议新增接口**：
```
POST /prison/evaluation-report/report/withdraw
参数：reportId
前置条件：status = PENDING_AUDIT(2)
后置条件：status = DRAFT(1)
```

### 3.4 状态枚举定义不一致

**问题描述**：
- 需求文档：草稿(1)、待审核(2)、已通过(3)、已退回(4)、已归档(5)
- 代码实现：缺少"已归档"状态枚举

**影响**：归档功能无法正确实现状态流转

**建议修复**：在 `EvaluationReportStatusEnum` 中添加 `ARCHIVED(5, "已归档")`

### 3.5 维度类型定义不一致

**问题描述**：
- 数据库表：1-基本信息, 2-犯罪情况, 3-服刑表现...
- DO类定义：1-心理测评, 2-危险性评估, 3-改造表现...

**影响**：前后端数据交换可能出现类型映射错误

**建议修复**：统一枚举定义，确保DO类与数据库枚举值一致

---

## 四、功能设置问题清单

### 4.1 模板缺少"复制"功能

**问题描述**：需求要求支持复制模板快速创建，当前未实现

**业务场景**：
- 管理员需要基于现有模板创建新版模板
- 不同监区需要基于标准模板创建本地化版本

**建议实现**：
```java
@PostMapping("/template/copy")
public CommonResult<Long> copyTemplate(@RequestParam("templateId") Long templateId) {
    // 1. 查询原模板
    // 2. 复制模板基础信息（名称加"副本"后缀）
    // 3. 复制所有维度配置
    // 4. 返回新模板ID
}
```

### 4.2 维度缺少"复制"功能

**问题描述**：需求要求支持复制维度快速创建，当前未实现

**业务场景**：
- 类似维度需要微调配置
- 跨模板复用维度配置

**建议实现**：
```java
@PostMapping("/dimension/copy")
public CommonResult<Long> copyDimension(@RequestParam("dimensionId") Long dimensionId) {
    // 1. 查询原维度
    // 2. 复制维度配置（名称加"副本"后缀）
    // 3. 返回新维度ID
}
```

### 4.3 缺少批量生成报告功能

**问题描述**：需求要求支持选择多个罪犯+模板批量生成报告

**业务场景**：
- 月末批量生成在押犯评估报告
- 入监队批量生成新入监罪犯评估报告

**建议实现**：
```java
@PostMapping("/report/batch-generate")
public CommonResult<List<Long>> batchGenerate(
        @RequestBody BatchGenerateReqVO vo) {
    // vo包含：prisonerIds, templateId, evaluationDate
    // 使用异步队列处理，返回任务ID
}
```

### 4.4 缺少归档管理功能

**问题描述**：需求要求已审核报告可归档，归档后不可修改

**建议实现**：
```java
@PostMapping("/report/archive")
public CommonResult<Boolean> archive(@RequestParam("reportId") Long reportId);

@PostMapping("/report/unarchive")
public CommonResult<Boolean> unarchive(@RequestParam("reportId") Long reportId);

@PostMapping("/report/archive-list")
public CommonResult<Boolean> batchArchive(@RequestParam("reportIds") List<Long> reportIds);
```

### 4.5 缺少版本对比和回滚功能

**问题描述**：需求要求支持版本对比和回滚

**建议实现**：
```java
// 版本对比
@GetMapping("/report/version/compare")
public CommonResult<VersionCompareRespVO> compareVersions(
        @RequestParam("reportId") Long reportId,
        @RequestParam("version1") Integer version1,
        @RequestParam("version2") Integer version2);

// 版本回滚
@PostMapping("/report/version/rollback")
public CommonResult<Boolean> rollback(
        @RequestParam("reportId") Long reportId,
        @RequestParam("targetVersion") Integer targetVersion);
```

### 4.6 缺少PDF/Word导出功能

**问题描述**：需求要求支持PDF和Word格式导出

**建议实现**：
```java
@PostMapping("/report/export-pdf")
public void exportPdf(@RequestParam("reportId") Long reportId, HttpServletResponse response);

@PostMapping("/report/export-word")
public void exportWord(@RequestParam("reportId") Long reportId, HttpServletResponse response);

@PostMapping("/report/batch-export-zip")
public void batchExportZip(@RequestBody List<Long> reportIds, HttpServletResponse response);
```

---

## 五、性能与安全缺失项

### 5.1 缓存机制未实现

**需求要求**：
- 罪犯基础信息缓存（5分钟过期）
- 考核数据缓存（10分钟过期）
- 模板配置缓存（1小时过期）

**当前状态**：未实现任何缓存

**建议实现**：
```java
@Cacheable(value = "prisoner", key = "#prisonerId", ttl = 5 * 60)
public PrisonerDTO getPrisoner(Long prisonerId) { ... }

@Cacheable(value = "scoreData", key = "#prisonerId + ':' + #year", ttl = 10 * 60)
public ScoreDTO getScoreData(Long prisonerId, Integer year) { ... }
```

### 5.2 异步生成队列未实现

**需求要求**：
- 批量生成使用异步队列
- 支持队列状态查询
- 失败重试（最多3次）
- 生成完成通知

**当前状态**：同步调用LLM服务

**建议实现**：
```java
@Async("reportGenerateExecutor")
public CompletableFuture<ReportGenerateResult> generateReportAsync(GenerateTask task) {
    // 调用LLM生成报告
    // 失败时重试3次
    // 完成后发送系统通知
}
```

### 5.3 AI服务降级未实现

**需求要求**：AI服务不可用时有降级策略

**当前状态**：仅检查LLM是否可用，无降级机制

**建议实现**：
- 使用默认模板填充
- 标记维度为"待人工填写"
- 记录服务降级日志

---

## 六、前端交互问题

### 6.1 评估报告前端页面未完整实现

| 组件 | 状态 | 说明 |
|-----|------|------|
| 报告模板管理页 | ❌ 未实现 | 仅有API，无页面 |
| 维度配置管理页 | ❌ 未实现 | 仅有API，无页面 |
| 报告编辑页面 | ❌ 未实现 | 仅有API，无页面 |
| 报告列表页 | ❌ 未实现 | 仅有API，无页面 |

### 6.2 前后端联调问题

**问题**：前端API已定义，但后端Controller路径不一致

**示例**：
- 前端定义：`/prison/evaluation-report/template/page`
- 后端实际：`/prison/evaluation-report/template/page` ✅ 一致

**但缺少以下前端页面**：
- 模板列表/编辑页面
- 维度配置页面
- 报告编辑页面（左右分栏布局）
- 报告预览/打印页面
- 快捷评语管理页面

---

## 七、功能实现完成度汇总

| 功能模块 | 已实现 | 需完善 | 未实现 | 完成度 |
|---------|-------|-------|-------|-------|
| 模板管理 | 8项 | 1项 | 2项 | **75%** |
| 维度管理 | 5项 | 0项 | 2项 | **71%** |
| 报告创建 | 5项 | 1项 | 1项 | **79%** |
| 报告审核 | 3项 | 1项 | 1项 | **60%** |
| 报告导出 | 1项 | 0项 | 3项 | **25%** |
| 归档管理 | 0项 | 0项 | 3项 | **0%** |
| 版本管理 | 1项 | 1项 | 2项 | **33%** |
| AI生成 | 3项 | 2项 | 2项 | **50%** |
| 前端页面 | 0项 | 0项 | 5项 | **0%** |

**总体评估**：核心数据模型和API已实现，但前端页面缺失较多，高级功能（批量生成、归档、版本对比）未实现。

---

## 八、改进优先级建议

### P0 - 必须修复（影响核心流程）

1. **报告编号规则修复** - 符合需求规范
2. **审核退回流程完善** - 结构化记录退回原因
3. **添加报告撤回功能** - 支持待审核撤回
4. **状态枚举补全** - 添加已归档状态

### P1 - 应该实现（影响用户体验）

5. **模板复制功能**
6. **维度复制功能**
7. **批量生成报告功能**
8. **PDF/Word导出功能**
9. **归档管理功能**
10. **版本对比功能**

### P2 - 建议实现（提升体验）

11. **数据缓存机制**
12. **异步生成队列**
13. **AI服务降级**
14. **前端页面完整实现**
15. **维度拖拽排序前端**

---

## 九、待产品专家评审事项

### 9.1 业务流程问题

1. **批量生成场景确认**
   - 一次性最多生成多少个报告？
   - 是否需要显示生成进度？
   - 生成失败如何处理？

2. **审核退回流程确认**
   - 是否必须填写退回原因？
   - 退回原因是否需要分类？
   - 退回后是否需要通知起草人？

3. **归档策略确认**
   - 自动归档还是手动归档？
   - 归档后是否可导出？
   - 归档文件保留多长时间？

### 9.2 交互设计问题

1. **报告编辑页面布局**
   - 需求文档设计了左右分栏布局，是否认可？
   - 罪犯列表每页显示多少条？
   - 是否需要支持快捷键操作？

2. **版本对比界面**
   - 左右分屏对比是否足够？
   - 是否需要高亮显示差异？
   - 是否需要一键还原？

### 9.3 功能优先级确认

1. **第一阶段MVP功能范围**
   - 模板管理、维度配置
   - 报告创建、AI生成
   - 报告审核、Excel导出

2. **第二阶段功能范围**
   - 批量生成、PDF导出
   - 归档管理、版本对比

---

## 附录：关键文件清单

### 后端关键文件

| 文件路径 | 说明 |
|---------|------|
| `controller/admin/evaluationreport/EvaluationReportController.java` | 主控制器 |
| `service/evaluationreport/EvaluationReportService.java` | 服务接口 |
| `service/evaluationreport/impl/EvaluationReportServiceImpl.java` | 服务实现 |
| `dal/dataobject/evaluationreport/EvaluationReportDO.java` | 报告实体 |
| `dal/dataobject/evaluationreport/EvaluationDimensionDO.java` | 维度实体 |
| `enums/EvaluationReportStatusEnum.java` | 状态枚举 |

### 前端关键文件

| 文件路径 | 说明 |
|---------|------|
| `api/prison/evaluation/index.ts` | API定义 |
| `views/prison/riskassessment/index.vue` | 危险评估列表 |
| `views/prison/score/index.vue` | 计分考核列表 |

### 数据库脚本

| 文件路径 | 说明 |
|---------|------|
| `sql/evaluation_report.sql` | 评估报告表结构 |
| `sql/evaluation_report_dict_data.sql` | 字典数据 |

---

**报告生成时间**：2026-01-18
**评估人**：Claude Code
**版本**：v1.0
