- 新增 updateSelfUser 方法,用于修改当前登录用户的个人资料 - 个人中心调用接口由原 updateUser 切换为 updateSelfUser,避免学生账号权限不足导致的保存失败 - 更新了头像保存、个人信息保存等相关调用代码,添加异常捕获和提示 - 修正环境变量 .env.development 中 API URL 配置为生产地址 - 优化审核记录排序逻辑,新增获取最新审核记录和编辑入口显示判断函数 - 调整审核状态标签使用统一排序规则,防止显示和编辑状态不一致 - 新增社团活动、社团编辑、志愿时长录入、学分记录编辑、社会实践学分申报、青马学员编辑等多个新增组件及表单功能 - 各新增功能支持表单验证、操作反馈和数据加载优化
19 KiB
团委智能化平台二期实施方案
依据《副本二期功能--定稿0802.docx》(4 大模块 26 项功能),结合 tuanwei-admin(Vue3)与 tuanwei-java(Spring Boot)现有底座制定。文档中括号内的疑问已逐条对应到「待确认项」,未确认处按默认假设推进。
一、总体判断
二期不是从零建设。现有系统已经具备四项可复用底座:申报+审核流引擎(9 张申报表、三级审核、状态回写)、学生/教师名册与认领体系(gxmu_student.user_id 是身份主键)、文件与 Word 导出(S3 存储、XWPF 直绘、电子签名图片叠加)、爬虫与异步任务(jsoup + 定时 + 进度表)。
真正缺失的是三块能力,必须新建:
- 站内消息中心——后端完全没有
oa_notice,但前端顶栏铃铛和/user/notice页面已经在调/oa/notice/*,属于「前端等后端」。 - 业务域——学分、志愿、社团、场地、青马培养档案、专家评审均无表、无接口。
- OCR / PDF 生成——无 OCR 依赖;PDF 只能靠服务器 LibreOffice 转换。
结论:全量规划、分三期实施。 本期(P0)先打通「学生成长主页 + 学分 + 志愿 + 社团场地 + 青马档案 + 消息中心 + 团课库」这条主干,P1 补齐审核类与 AI 类,P2 做画像与数字人。
移动端:本机没有 uni-app 工程,tuanwei-admin 是纯 PC 后台。本期只交付 PC,接口按可对外(/api/open)设计,学生端后续独立建工程,不阻塞本期。
二、菜单规划
原则:不动现有 12 个一级菜单、不迁移已有子菜单,避免破坏已配置的角色授权。二期新增 2 个一级菜单,其余能力挂到语义最贴近的现有菜单下。
新增一级菜单
成长中心 /growth (menu_id 14500)
├ 我的成长 /growth/myHome 14501 学生个人成长主页
├ 学分明细 /growth/credit 14502 第二课堂学分 + 社会实践学分汇总
├ 社会实践学分 /growth/practiceCredit 14503 申报 + 四级审核 + 教务处模板导出
├ 学分预警 /growth/creditWarning 14504 缺口预测 + 补分建议
├ 学生画像 /growth/portrait 14505 多维雷达 + 标签
└ 推荐内容 /growth/recommend 14506 思政文章/活动推荐 + 后台发布
社团与志愿 /club (menu_id 14520)
├ 志愿服务时长 /club/volunteerHour 14521 个人录入 + 桂志愿导入
├ 志愿时长审核 /club/volunteerReview 14522 二级学院审核
├ 志愿证明 /club/volunteerCertificate 14523 年度证明生成下载
├ 社团管理 /club/club 14524 社团 + 成员 + 指导老师
├ 社团活动 /club/activity 14525 发起 + 材料
├ 活动审批 /club/activityReview 14526 四级审批 + 公章识别
├ 场地预约 /club/venue 14527 场地日历 + 预约
├ 场地审批 /club/venueReview 14528 指导老师 → 校团委
├ 社团年审 /club/annualReview 14529 指标 + 自评 + 自动取数 + 公示
└ 社团评优 /club/award 14530 评优申报 + 审核 + 公示
挂到现有菜单
| 现有菜单 | 新增子项 | path |
|---|---|---|
| 数字化团员 14342 | 青马学员档案 | /gxmu/qmgcStudent |
| 培养任务 | /gxmu/qmgcTask |
|
| 考核评分 | /gxmu/qmgcScore |
|
| 主题团课库 | /gxmu/thematicCourse |
|
| AI内容创作与宣传助手 14365 | AI辅助教学设计 | /gxmu/teachingDesign |
| AI主题团日设计 | /gxmu/themeDayDesign |
|
| 挑战杯 14372 | 专家评审 | /gxmu/expertReview |
| 专家库 | /gxmu/expertPool |
|
| 系统设置 8574 | 消息模板 | /system/messageTemplate |
| 推送记录 | /system/messageLog |
青马工程(14353)保留为申报入口,新增的学员档案管培养期,两者不合并。消息中心的用户侧直接复用已有的 /user/notice(已隐藏菜单)+ 顶栏铃铛,零改动即可生效。
不推荐但已备选
把「五四评优/学术之星/青马工程」从数字化团员迁到申报系统,结构更清晰,但会动 6 个菜单的 parent_id 和全部角色授权,回归风险高。如后续确需重组,单独出一个迁移脚本。
三、分期实施计划
P0(本期,可上线的最小闭环)
| # | 功能 | 对应文档 | 交付物 |
|---|---|---|---|
| 1 | 站内消息中心 | 模块一·4 | oa_notice + 记录表 + /oa/notice/* 接口 + 审核钩子(提交/通过/驳回/待办)+ 顶栏铃铛生效 |
| 2 | 第二课堂学分 | 模块一·1 | 学分规则表 + 学分记录表 + Excel 导入(模板/校验/失败清单)+ 明细页 |
| 3 | 学生成长主页 | 模块一·3 | 聚合接口 + 简历式页面(基本信息/学分/志愿/活动/申报/荣誉) |
| 4 | 志愿时长 | 模块三·1·2 | 个人录入(盖章附件)+ 桂志愿导入 + 二级学院审核 |
| 5 | 社团管理 | 模块三·3·7 | 社团主档 + 成员 + 指导老师 + 活动发起 + 四级审批 |
| 6 | 场地预约 | 模块三·6 | 场地主档 + 日历视图 + 冲突校验 + 指导老师→校团委审批 |
| 7 | 青马培养档案 | 模块二·1 | 学员主档 + 培养材料提交 + 任务清单 + 任务完成度 |
| 8 | 主题团课库 | 模块二·6 | 爬虫(jsoup + 定时 + upsert)+ 列表/详情/下载 + 标签 |
| 9 | 工程配套 | — | 菜单/按钮/角色授权 SQL、字典、权限码、联调回归 |
估算 53 人日,2 人并行约 5.5 周。
P1(第二批)
社会实践学分申报(四级审核 + 教务处模板导出)、学分预警(规则 + 定时 + 消息)、智能推荐(内容库 + 规则引擎 + 推送)、学生画像(维度聚合 + 雷达图)、社团年审(指标配置 + 自评 + 自动取数 + 公示)、社团评优、年度志愿证明(docx + 电子章 + PDF)、社团年度报告(聚合 + AI 小结 + 导出)、专家评审(专家库 + 任务 + 分配 + 打分 + 汇总)、AI 辅助教学设计与主题团日设计、审核流并行审批改造。
估算 63 人日,2 人并行约 6.5 周。
P2(探索期)
AI 学员学习情况分析、AI 定制培养建议、OCR 公章识别接入、AI 数字人(形象 + 浮窗 + 知识库问答)、移动端接口整理。
估算 23 人日,约 2.5 周。
合计约 139 人日,2 人并行约 14-15 周。
四、数据模型(新表)
统一规范:id BIGINT AUTO_INCREMENT、tenant_id、user_id、deleted、create_time、update_time;附件用 file_id + file_url 或 JSON 数组;审批一律复用 gxmu_review_list(module, pk)。
学分 / 成长域
gxmu_credit_rule:学分类别、项目、分值、认定方式(import/manual/practice)、适用年级gxmu_credit_record:user_id, source(second_class|practice|activity), external_id, category, item_name, score, acquire_time, status, evidencegxmu_practice_credit_apply:学年、活动名、类型、起止、角色、内容、附件 JSONgxmu_graduate_requirement:year, college_id, major, category, required_scoregxmu_credit_warning:user_id, category, gap, level, hit_time, notifiedgxmu_student_profile:画像快照(维度分、标签 JSON、更新时间)gxmu_recommend_content:类型(article/activity)、标题、封面、关联 ID、标签gxmu_recommend_delivery:user_id, content_id, channel, is_read
志愿域
gxmu_volunteer_record:user_id, source(gz|self), project, hours, service_date, org_name, proof_files JSON, statusgxmu_certificate_template:模板标题、正文占位符、电子章图片、编号前缀gxmu_volunteer_certificate:user_id, year, total_hours, serial_no, file_id
社团 / 场地域
gxmu_club:名称、类别、college_id、advisor_user_id、社长、等级、状态gxmu_club_member:club_id, user_id, role, join_time, statusgxmu_club_activity:club_id, title, start/end, place, scale, budget, attachments JSON, review_status, ocr_status, ocr_orggxmu_club_annual_metric:指标名、权重、取数方式(auto/manual)、公式gxmu_club_annual_review:club_id, year, self_score, auto_score, final_score, materials, statusgxmu_club_award_apply:club_id, year, award_type, materials, statusgxmu_club_report:club_id, year, summary JSON, file_idgxmu_venue:名称、楼栋、容量、设备、开放时段、管理员、状态gxmu_venue_booking:venue_id, user_id, club_id, booking_date, start_time, end_time, purpose, status
青马域
gxmu_qmgc_student:user_id, form_id, batch, year, college_id, candidate_no, stage, resultgxmu_qmgc_material:student_id, stage, type, title, content, file_id, scoregxmu_qmgc_task:批次、阶段、标题、类型(online/offline)、跳转方式、截止时间gxmu_qmgc_task_assign:student_id, task_id, status, submit_time, scoregxmu_qmgc_score:student_id, dimension, item, score, scorer, commentgxmu_qmgc_exam/gxmu_qmgc_exam_record:题目 JSON、及格线、作答、得分
团课 / 专家 / 消息
gxmu_thematic_course:title, type(courseware|script|video|case|activity), source_site, source_url, source_key UNIQUE, file_id, content, tags, heatgxmu_expert:user_id, name, college, field_code, level, phonegxmu_expert_review_task:module, declare_id, round, start/end, quotagxmu_expert_review_assign:task_id, expert_id, statusgxmu_expert_review_score:assign_id, dimensions JSON, total, comment, submit_timeoa_notice+oa_notice_record:从/Users/gxwebsoft/JAVA/com.gxwebsoft.open移植,字段对齐前端已有的noticeRecordId/type/files/channel/progress
对现有表的改动(小步、可回滚)
gxmu_review_flow+gxmu_review_list增加parallel_group INT NULL—— 支持「二级学院团委与党委同时审核」。gxmu_review_list增加attachments TEXT—— 审核节点上传盖章附件。gxmu_declare.module若新增「团委科研课题」,同步加枚举(见待确认项)。
五、后端设计
包结构(新增,不动现有 24 个 gxmu 控制器)
com.gxwebsoft.gxmu.credit/ 学分规则、记录、导入、预警
com.gxwebsoft.gxmu.qmgc/ 青马学员、任务、评分、考试
com.gxwebsoft.gxmu.club/ 社团、活动、年审、评优、年度报告
com.gxwebsoft.gxmu.venue/ 场地与预约
com.gxwebsoft.gxmu.volunteer/ 志愿时长与证明
com.gxwebsoft.gxmu.thematic/ 主题团课库与爬虫
com.gxwebsoft.gxmu.portrait/ 画像与推荐
com.gxwebsoft.gxmu.expert/ 专家评审
com.gxwebsoft.notice/ 消息中心(移植 + 渠道)
每个子包内 controller/entity/mapper/service/param,与现有 gxmu.openplat 的组织方式一致。
接口约定
- 管理端统一
/api/gxmu/{domain}/page|list|{id}|save|update|remove|batch,沿用BaseController+BaseParam,前端继续传backendAccess=true。 - 学生自助统一
/api/gxmu/{domain}/my/*,用hasOnlyStudentRole()收口,只返回本人数据。 - 审核类不在各域重复造轮子,统一走
gxmu_review_list,前端复用reviewStatusTag/reviewHistoryModal/reviewFlowModal。 - 消息中心按前端既有路径
/api/oa/notice/*实现(page/list/{id}/getUnReadNum/save/update/remove),顶栏铃铛和/user/notice不需要改一行代码。 - 导出走现有模式:Controller 生成文件 →
FileStorageService.storeFile→FileRecord→ 返回下载地址。
关键改造:审核流支持并行节点
现状:ReviewListController.update 用 sortNumber + 1 取下一节点,隐含「一个节点一个人」。青马选拔要求团委与党委同时审核,因此:
- 模板按
level分组,同level的多行属于同一并行组; - 通过时先检查同组是否还有
status=0的节点,有则不推进; - 同组全部通过才进入下一
level; - 组内任一驳回是否终止整条流,做成
ReviewFlowConfig.rejectMode(任一驳回 / 全部驳回后终止),默认前者。 - 该改造同时被社会实践学分、社团活动、场地预约复用。
关键改造:学分引擎
不引入规则引擎,用「配置表 + 计算服务」:
CreditRuleService.resolve(userId, year)按学院/年级/专业匹配gxmu_graduate_requirement,得到各类别应修学分。CreditSummaryService汇总gxmu_credit_record中status=有效的记录,按类别输出「已修/应修/差额/完成率」。- 预警任务每天跑一次:差额 > 0 且距毕业不足 N 学期 → 生成
gxmu_credit_warning+ 发站内消息;同一学生同一类别本月只发一次。 - 推荐:先做规则匹配(缺分 → 推荐可加分的活动/课程,按标签和学院过滤),AI 排序留到 P2。
关键技术点
- 志愿证明 PDF:XWPF 直绘(复用
WxxzxDocxExportUtil的addPicture叠电子章)→OpenOfficeUtil.converterToPDF→ 存FileRecord。若服务器无soffice,降级为前端打印(复用youthDataCenter.exportPdf模式),不阻塞上线。 - 团课库爬虫:完全复用
CrossSchoolActivityCrawlerServiceImpl范式(站点配置 + jsoup +source_key唯一键 +batchUpsert+ 定时任务 + 手动/sync),新增文件下载入库。 - AI 扩展:
DifyProperties.AppKeys增加 4 个应用 key;AiChatType增加teaching_design / theme_day_design / student_analysis / training_advice;新增/api/ai/{xxx}与/stream,沿用AiGenerationRecorder落历史。 - OCR:不引入本地推理。P1 通过阿里云 OCR HTTP 接口(需开通 + AK),字段预留
ocr_status/ocr_org/ocr_raw;未开通时走「人工核验 + 附件留痕」。 - 消息渠道:站内信必做;企业微信在
WxWorkUtil增加message/send(token 逻辑已有);短信暂不做。
六、前端设计
目录与页面
src/views/growth/
myHome/ 我的成长(简历式:基本信息/学分/志愿/活动/申报/荣誉)
credit/ 学分明细(类别筛选 + 来源 + 明细表 + 导入)
practiceCredit/ 社会实践学分(申报表单 + 审核状态)
creditWarning/ 学分预警(雷达/进度条/建议)
portrait/ 学生画像
recommend/ 推荐内容
src/views/club/
volunteerHour/ 我的志愿时长(录入 + 导入 + 列表)
volunteerReview/ 志愿时长审核
volunteerCertificate/
club/ 社团管理(主档 + 成员抽屉)
activity/ 社团活动
activityReview/ 活动审批(复用 reviewFlowModal)
venue/ 场地预约(日历 + 预约弹窗)
venueReview/
annualReview/ 年审(指标 + 自评 + 打分)
award/
src/views/gxmu/
qmgcStudent/ qmgcTask/ qmgcScore/ thematicCourse/
teachingDesign/ themeDayDesign/
expertReview/ expertPool/
src/views/system/
messageTemplate/ messageLog/
复用清单(不要重写)
- 列表骨架:
ele-pro-table+.page/.ele-body/a-card,照studentRoster。 - 导入:
views/gxmu/components/common-import.vue(模板下载、逐行校验、失败清单)。 - 附件:
components/attachmentList.vue+views/gxmu/utils/attachment.ts;单文件用components/UploadFile。 - 审核:
reviewStatusTag/reviewHistoryModal/reviewFlowModal/views/gxmu/utils/review.ts。 - 图表:
utils/use-echarts.ts+vue-echarts,照youthDataCenter。 - 导出:Excel 用
xlsx;打印式 PDF 照youthDataCenter.exportPdf;docx 用html-docx-js-typescript。 - AI 页:复制
activityOutlineGen壳 +utils/ai-stream.ts+utils/ai-result.ts。 - 权限:
hasPermission/v-permission;角色用hasAnyRole(hasRole是「全部满足」语义)。
需要新建的公共件
components/MultiFileUpload:统一多附件上传(现有各表单各写了一套)。components/AiGenPageShell:把「左侧表单 + 右侧流式输出 + 历史入口」抽出,避免再复制 4 个 800-1300 行的页面。utils/export.ts:收敛 Excel/CSV/打印 PDF 的重复代码。src/constants/permissions.ts:集中权限码。
顺带修的两个既有问题
views/user/profile保存走PUT /system/user(要sys:user:update),学生账号会失败。改为后端已有的PUT /system/user/self,成长主页的「编辑资料」直接受益。reviewStatusTag按id取最新,utils/review.ts按createTime+id,两处规则不一致。二期接入新审核模块前统一到utils/review.ts。
七、实施顺序(建议按此推进)
- 基建先行:消息中心(表 + 移植 + 钩子)+ 菜单/权限 SQL + 字典 +
MultiFileUpload。 - 学历域:学分规则/记录/导入 → 成长主页聚合 → 明细页。
- 志愿域:录入/导入 → 审核 → 证明(证明依赖 LibreOffice,放最后)。
- 社团域:社团主档/成员 → 活动 → 四级审批 → 场地日历 → 场地审批。
- 青马域:学员档案 → 任务 → 材料 → (P1)评分/考试。
- 团课库:建表 → 爬虫 → 列表/详情。
- P1:学分预警/推荐/画像 → 社会实践 → 社团年审/评优/年报 → 专家评审 → AI 教学设计/团日设计 → 审核流并行改造(此改造需在青马选拔上线前完成,实际应提前到 P0 末尾)。
- P2:AI 学员分析/培养建议 → OCR → 数字人。
每批交付都包含:建表 SQL(可重复执行)、菜单/按钮 SQL、后端接口、前端页面、联调、回归。第一步先在仓库落地 docs/phase2-implementation-plan.md(本方案)和 docs/sql/phase2_*.sql。
八、待你确认的业务细节(有默认值,确认前按默认推进)
| 事项 | 默认假设 | 影响 |
|---|---|---|
| 第二课堂 / 桂志愿 是否有 API | 先 Excel 导入,source/external_id 预留,后续换数据源 |
P0 导入模板字段 |
| 学分规则与毕业要求 | 按「学院 + 年级 + 专业 + 类别」配应修学分,由管理员在后台维护 | 预警准确性 |
| 青马评分标准/任务清单 | 评分项和权重做成可配置表,任务分线上(可跳转)与线下(仅勾选) | P1 评分页 |
| 社团年审量化指标 | 做成指标配置表,活动数/参与人次/稿件数可自动取数,其余人工 | P1 年审 |
| 指导老师是单人还是多人 | 社团主档存 1 名主指导,审批节点支持多人并行 | 审批流 |
| 志愿证明模板与电子章 | 需要你提供模板文件与印章图片;未提供时用占位版 | P1 证明 |
| 「团委科研课题」是否新申报模块 | 视为新模块,新增 gxmu_research_project 表并加入申报枚举 |
专家评审范围 |
| 数字人形象 | 先用团委现有卡通形象,不做 3D | P2 |
其中前三项不确认就无法开工;其余可边做边定。只要前三项给出结论,P0 可以立即启动。