feat(credit): 增加社会实践学分及学分预警模块

- 实现社会实践学分的提交、撤回、作废、删除、汇总及导出功能
- 审核通过后自动发放学分,确保幂等性
- 新增学分预警功能,支持缺口计算、级别判定和月度去重推送
- 设计四级审核流程,审核状态变更后自动回调处理
- 支持教务处模板导出,输出标准xls格式文件
- 提供前端页面替换原占位页,提升用户体验
- 补充每日定时任务执行学分预警重算,支持配置开关
- 修复审核回写逻辑,避免误更新不存在的表数据
This commit is contained in:
2026-11-05 19:18:26 +08:00
parent 567e4aabdb
commit 9c45ff79f4
+57
View File
@@ -192,3 +192,60 @@ src/views/system/{messageTemplate,messageLog}/
### 8.4 统一最新审核记录排序 ### 8.4 统一最新审核记录排序
`reviewStatusTag` 原按 `id` 取最新,`utils/review.ts` 按 `createTime + id`,并行审核下两处可能给出矛盾结论。现已抽出 `getLatestReview()` 统一为「sortNumber → createTime → id」,两个调用方共用。 `reviewStatusTag` 原按 `id` 取最新,`utils/review.ts` 按 `createTime + id`,并行审核下两处可能给出矛盾结论。现已抽出 `getLatestReview()` 统一为「sortNumber → createTime → id」,两个调用方共用。
## 九、P1 首批交付:社会实践学分 + 学分预警
### 9.1 社会实践学分
**后端**(`com.gxwebsoft.gxmu.credit`)
| 文件 | 说明 |
| --- | --- |
| `PracticeCreditController` | 提交/撤回/作废/删除/汇总/导出 |
| `PracticeCreditService` + `Impl` | 校验、状态回写、**通过后自动发放学分** |
| `PracticeCreditApplyParam` | 查询参数 |
**审核接入**:模块名 `gxmu_practice_credit`,走既有 `gxmu_review_list` 引擎,四级审核(个人 → 班级 → 二级学院团委 → 校团委)在「审核流配置」里绑定即可。`ReviewListController` 审核完成后回调:
1. `syncReviewStatus` 回写申报状态;
2. `grantCreditWhenApproved` 在通过时写一条 `gxmu_credit_record`(`source=practice`、`external_id=practice-{id}`,幂等)。
**教务处模板导出**:`POST /api/gxmu/practice-credit/export`,输出 14 列 xls(序号/学号/姓名/学院/班级/学年/活动名称/活动类型/起止日期/实践内容/担任角色/核定学分/审核状态),走既有「生成文件 → FileRecord 入库 → 返回下载地址」模式。
**前端**:`/growth/practiceCredit`,替换原占位页。
### 9.2 学分预警
| 文件 | 说明 |
| --- | --- |
| `CreditWarningService` + `Impl` | 缺口计算、级别判定、月度去重推送 |
| `CreditWarningController` | 列表/汇总/重算/推送 |
| `CreditWarningTask`(新增) | 每天 02:30 全量重算,`gxmu.credit-warning.enabled` 可关 |
**级别规则**:`gap/required ≥ 0.6 且 gap ≥ 2` → danger;`≥ 0.3` → warn;其余 normal。
叠加绝对门槛是因为只看比例会把「应修 1 分、缺 1 分」也判成严重。
**去重**:同一学生同一类别每个自然月只推一条站内消息(`notify_month` 记录)。
**闭环**:补分后重算会自动清理已达成类别的预警(逻辑删除),不会永远挂着。
**前端**:`/growth/creditWarning`,替换原占位页。
### 9.3 验证记录
| 场景 | 结果 |
| --- | --- |
| 社会实践缺附件提交 | 拒绝「请上传社会实践证明材料」✓ |
| 正常提交 → 生成审核节点 | ✓ |
| 审核通过 → 申报状态置 2 | ✓ |
| 审核通过 → 学分自动入账(2.00,source=practice) | ✓ |
| 重复审核同一条 → 学分不重复发 | ✓(仍 1 条 2.00) |
| 学分类别缺口识别 | 6 类全部识别 ✓ |
| 补分后重算 → 该类别预警清除 | ✓(有效预警 6→5) |
| 级别判定 | 缺 2 分 danger、缺 1 分 warn ✓ |
| 预警推送 → 第一次 5 条、第二次 0 条 | 月度去重生效 ✓ |
### 9.4 修复记录
初版曾把 `gxmu_practice_credit` 加进 `DeclareGuardServiceImpl` 的模块列表,导致审核回写时按「模块名=表名」去更新不存在的表。已移除——社会实践用独立表 `gxmu_practice_credit_apply`,状态回写由自己的 service 负责。