大数跨境

SpringBoot3+Vue3 培训证书:计划、班次签到、发证怎么落到员工档案

SpringBoot3+Vue3 培训证书:计划、班次签到、发证怎么落到员工档案 企业软件源码
2026-10-16
5
导读:培训做完证书还在行政U盘里,档案对不上。RuoYi Office 把计划、班次、扫码签到、证书模板和发证收成一条链:签到进班次名册,发证渲染证书图并写入员工证书。本文按产品页面把流程和实现一次写清。

SpringBoot3+Vue3 培训证书:计划、班次签到、发证怎么落到员工档案

本文由 RuoYi Office 团队整理,结合实际项目分享企业软件的设计思路与开发经验。

培训通知在群里,签到在纸上,证书在行政电脑。验收、晋升、外审时谁也拼不出「谁参加过、有没有证」。RuoYi Office 把计划、班次、签到、证书模板和发证串成一条:证不是另存的图片,是员工档案上的一条记录。

▲ 左:计划定范围。中:班次扫码签到。右:模板发证写入员工证书,撤销同步作废


引言:培训难在「证落不到人」

缺的不是课程表,是参加记录和证书各写各的。

现场
配错之后
只建计划不建班次
没人可签到,发证没名册
签到用共享表格
替签、过期码仍能扫
证书用 Word 另存
档案证书页是空的
撤证只删文件
员工档案还挂着有效证

本文讲产品怎么配、业务怎么走、实现怎么一次串完。外出培训申请单 hr_training_outbound_bill 是另一条出差审批,不在本页展开。

菜单:人力资源 → 培训管理。计划流程 key:hr_training_plan。


一、产品拆四块,不要合成一个「培训单」

页面
路由
配什么
培训计划
/hrm/training/plan-info
主题、内容、范围(人/部门/岗位),提交审批后才能开班
培训班次
/hrm/training/session
某次课的时间窗、名册、签到二维码 TTL
签到
/hrm/training/signin
扫码 / 补签,写入签到日志
证书模板
/hrm/training/cert-template-design
底图、字段占位、印章
发证规则 / 发证
/hrm/training/cert-rule
、/hrm/training/cert-issue
证号规则、批量颁发、撤销

计划未发布,班次创建会报「计划未发布」。这是故意的:先审「这期培训该不该办」,再谈哪一天上课。

▲ /hrm/training/plan-info。范围决定谁能进班次名册,不是开课后临时拉群

▲ /hrm/training/cert-template-design。姓名、证号、班次名套在图上。发证时服务端渲染,不靠行政手动 P 图

▲ /hrm/training/cert-issue 点预览。证号 JN-2026-000001、班次和印章都是发证时渲染的,不是行政另存的 Word


二、业务怎么走:从计划到档案

  1. HR 建计划,圈定部门或人员,提交 hr_training_plan。通过后计划可发布。
  2. 在已发布计划下建班次:上课时间、签到窗口、二维码有效秒数(默认 90 秒一轮)。
  3. 学员扫班次码。服务端用班次 qrSeed 做按时间片的 HMAC,过期码无效;不在名册不能签。补签要填原因。
  4. 课后在发证页勾选学员,选模板和证号规则。系统渲染证书图、生成证号、写入 hrm 员工证书,并回写该学员的培训记录 certNo。
  5. 撤证:发证单改作废,档案证书改撤销,培训记录清证号。

「我的培训」/hrm/training/my 给学员看自己的班次和证,不替代发证台账。

外训证书也可以 importExternal:先建一条待颁发,再走同一套 issueOne,避免「外训只上传附件、档案没有证」。


三、实现怎么串:表、时序、代码放一起看

计划、班次、名册、签到、发证、员工证书是六张不同的表。不要把证号塞进计划主表。

表 / 对象
作用
培训计划
审批壳 + 范围
培训班次
一次课、签到窗口、qrSeed / qrTtlSec
参训名册
班次 × 员工
签到日志
扫码或补签痕迹
发证单
待颁发 / 已颁发 / 已撤销
员工证书
档案页展示;source=培训 指向发证单

签到码不是写死在二维码里的学号。getQr 用当前时间片和种子算 token,扫码再算一遍比对。窗口外直接失败。

public TrainingSigninQrRespVO getQr(Long sessionId) {    TrainingSessionDO session = validatePublished(sessionId);    assertWindow(session);    int ttl = session.getQrTtlSec() == null || session.getQrTtlSec() <= 0 ? 90 : session.getQrTtlSec();    long period = System.currentTimeMillis() / 1000 / ttl;    String token = hmac(session.getQrSeed(), period, sessionId);    vo.setContent("{\"sessionId\":" + sessionId + ",\"token\":\"" + token + "\"}");    return vo;}

发证 issueOne 才是落到档案的那一下:校验待颁发 → 补模板/规则 → nextCertNo → renderCert 出图 → employeeCertificateService.createFromTraining → 回写培训记录和名册。

private void issueOne(Long id, Long templateId, Long ruleId) {    // 待颁发才能发;缺模板/规则用启用中的默认项    String certNo = StrUtil.blankToDefault(issue.getCertNo(), nextCertNo(useRuleId));    String fileUrl = StrUtil.blankToDefault(issue.getFileUrl(),            renderCert(issue, employeeName, certNo, useTemplateId));    employeeCertificateService.createFromTraining(            issue.getEmployeeId(), issue.getId(), issue.getCertName(), certNo, certType, fileUrl);    // 同步该班次下此员工的培训记录 certNo / issueId}

撤销必须双边:发证单 ISSUE_REVOKED,档案证书 STATUS_REVOKED。只删文件 URL,档案页仍会当有效证。

模板设计器存的是占位和底图,渲染在服务端。这样手机和 PC 看到的证同一份,不会各 P 一张。

计划审批和发证没有绑在同一张 Flowable 单上。计划过了只表示「这期能办」;证发给谁,看签到和名册。不要指望审批通过自动人手一本证——缺勤的人不应拿到证。


四、实施时怎么选

你想要的结果
怎么配
全员合规培训
计划范围选部门,班次名册从范围带出
小班选修
计划范围只勾人,班次不要再手工加编外
防替签
二维码 TTL 90 秒,窗口外不允许扫
外训也要进档案
走导入发证,不要只把 PDF 丢附件
证作废
发证页撤销,不要去文件存储删图

证书类型跟模板走,档案筛选「技能证 / 上岗证」才有意义。不要所有证都叫 other。


五、快速体验

在线体验路径

  1. 人力资源 → 培训管理 → 培训计划
     打开一份已发布计划,看范围。
  2. 培训班次
     进详情,看签到窗口和二维码。
  3. 证书模板
     打开设计器,拖一个姓名占位。
  4. 证书颁发
     勾一名学员颁发,再打开该员工档案证书页核对。
  5. 对刚发的证点撤销,档案状态应变成撤销。



常见问题(FAQ)

计划通过了为什么不能发证?

发证认的是班次名册和待颁发单,不认计划审批状态。先建班次、签到或导入,再颁发。

扫码提示不在名册?

名册是班次上的人,不是计划范围的超集。范围只限制「谁能被加进班次」。把人加进该班次名册。

证书图是空的?

模板没底图或渲染失败。先在设计器预览,确认文件服务可用。导入外训可以自带 fileUrl,跳过渲染。

和劳动合同、技能鉴定是不是一张表?

员工证书是档案子表,来源字段区分培训 / 其它。劳动合同走合同模块。不要把培训证当合同附件。

外出培训申请通过会不会自动发证?

不会。外训单一审费用和行程。证仍然要颁发或导入,才能进档案。


结语

培训要选的是「计划审什么、班次记谁、证写到哪」。签到用会过期的码,发证写档案,撤销双边作废。读者能带走的三句:未发布计划不能开班;证从发证单来不从群文件来;撤证要动档案。你们现在证书还在行政文件夹里吗?评论区说一下档案页能不能搜到。

如果这篇对你有用,欢迎点赞支持。
 我们会持续分享企业软件开发实践与 RuoYi Office 产品进展。


【声明】内容源于网络
0
0
企业软件源码
RuoyiOffice 是一套基于 Spring Boot + Vue3 +Uniapp 的企业一体化管理平台,集 OA、CRM、ERP、工作流、HR、资产、合同、项目、AI应用等业务于一体,帮助企业用一个系统协同管理多类核心业务。
内容 155
粉丝 0
企业软件源码 RuoyiOffice 是一套基于 Spring Boot + Vue3 +Uniapp 的企业一体化管理平台,集 OA、CRM、ERP、工作流、HR、资产、合同、项目、AI应用等业务于一体,帮助企业用一个系统协同管理多类核心业务。
总阅读3.1k
粉丝0
内容155