# 实战业务培训 — 功能需求 ## 1. 文档说明 | 项 | 说明 | | --- | --- | | 模块名称 | 实战业务培训(科技平台与服务) | | 目标 | 在业务后台维护实战类培训活动信息,控制发布与报名时段,展示报名进展,支撑牧业相关实战培训的发布、运营与台账管理 | | 关联系统 | 业务后台;学员在线报名、签到、评价等若由其他模块承担,**本模块**侧重培训主档的**维护、发布控制与报名状态展示** | | 修订依据 | 同目录 `实战业务培训-草稿.md`、界面原型(`实战业务培训.png`) | 本文档仅描述**功能需求与业务规则**,不涉及库表结构、接口路径、请求体字段命名、HTTP 报文及技术栈选型。 --- ## 2. 术语与枚举 ### 2.1 实战培训(一条记录) - 表示一场可对外(或对内)开放报名的**实战业务培训活动**。 - 包含培训基本信息、报名时段、计划规模、可选封面与预期成果等。 - 通过 **发布状态**(§2.2)控制是否对外生效;通过 **培训状态** `training_status`(§2.3)反映当前报名阶段(由系统按时间与人数**自动计算并入库**,用户不可手工改状态)。 ### 2.2 发布状态 | 状态 | 含义概要 | | --- | --- | | **未发布** | 新建「仅保存」、或下架回流后的状态;可编辑、可删除、可执行发布 | | **已发布** | 已对外生效的培训;**不可修改**、**不可删除**;可查看、在满足条件下可下架 | **发布日期**:执行「发布」成功当日,记录为自然日 **YYYY-MM-DD**;未发布时列表展示「—」或空。下架后**建议保留**上次发布日期供审计(是否清空由产品确认,默认保留)。 ### 2.3 培训状态(`training_status`,自动计算入库) 字典父编码 `006`:`006001` 未开始、`006002` 报名中、`006003` 已报满、`006004` 已截止。 在**已发布**前提下,按**当前系统时间**、**报名开始/截止时间**、**计划人数**与**实际报名人数**判定;**未发布**时为 `006001`(未开始)。 判定优先级(满足即停): | 优先级 | 条件 | 状态 | | --- | --- | --- | | 1 | 发布状态为 **未发布** | `006001` 未开始 | | 2 | 当前时间 **≥** 报名截止时间 | `006004` 已截止 | | 3 | 当前时间 **<** 报名开始时间 | `006001` 未开始 | | 4 | 实际报名人数 **≥** 计划人数 | `006003` 已报满 | | 5 | 报名开始时间 **≤** 当前时间 **<** 报名截止时间 | `006002` 报名中 | **实际报名人数**:统计 `biz_practical_training_member` 中 `enroll_status=0`(已报名)的记录数,写入主表 `actual_enrolled_count`;小程序用户可在 **报名中** 执行报名/取消报名并触发状态刷新。 ### 2.4 时间字段关系(全局约束) 以下比较均基于 **YYYY-MM-DD HH:mm:ss**(界面 datetime 选择器): ``` 报名开始时间 < 报名截止时间 < 培训时间 ``` - **培训时间**:培训举办时点(必填)。 - **报名开始时间**:开放报名起点(必填)。 - **报名截止时间**:开放报名终点(必填)。 保存、发布前均须满足上述链式关系;任一不满足则拒绝提交并提示。 ### 2.5 列表筛选项与字段关系 | 筛选项 | 与记录字段关系 | | --- | --- | | 培训主题 | 与「培训主题」**完全一致**(精确匹配);空则不过滤 | | 培训日期 | 按「培训时间」的**日期部分**筛选;区间为闭区间(起止日均计入) | --- ## 3. 功能范围 **本期实现:** | 能力 | 说明 | | --- | --- | | 培训列表 | 培训主题精确、培训日期区间筛选;分页;见 **§5.2** | | 新增培训 | 录入业务字段与封面;见 **§5.1** | | 修改培训 | 仅未发布可改;见 **§5.3** | | 查看详情 | 只读;见 **§5.5** | | 删除培训 | 仅未发布;见 **§5.4** | | 发布 / 下架 | 见 **§5.6** | | 报名状态展示 | 列表/详情按 **§2.3** 展示 `training_status` | | 小程序报名/取消 | 登录用户对 **报名中** 培训报名或取消,回写人数与状态 | **本期不实现(除非后续单独立项):** - 排队候补 - 培训签到、考核、证书、评价 - 消息通知(短信/站内信提醒报名开始或报满) - 培训地点地图选点、直播链接自动校验 - 批量导入培训、复制上一场培训 --- ## 4. 业务流程概览 ```mermaid flowchart TD A[新增实战培训] --> B{保存方式} B -->|确定/仅保存| C[未发布] B -->|发布| D[已发布并记录发布日期] C --> E[列表查询/筛选] D --> E E --> F[查看详情] E --> G[修改] E --> H[删除] E --> I[发布] E --> J[下架] G --> C H --> E I --> D J --> C C --> I D --> J F --> E ``` **典型运营顺序:** 1. 运营人员**新增**培训,填写主题、培训时间、简介、计划人数、地点、报名时段等,上传封面(可选)。 2. 可先**仅保存**为未发布,经内部核对后再**发布**;或在新增表单直接**发布**。 3. 发布后对外生效,列表展示**报名状态**与**实际报名人数**;到达报名开始后**不可下架**(**§5.6**)。 4. 报名截止或报满后,状态自动变为 **已截止** 或 **已报满**;如需调整内容须**下架**(若仍允许)→ 修改 → 再发布。 --- ## 5. 详细功能需求 ### 5.1 新增实战培训 #### 5.1.1 业务字段 | 字段 | 必填 | 规则摘要 | | --- | --- | --- | | 培训主题 | 是 | **1~20** 个字符(与草稿「限制 20 字」一致) | | 培训时间 | 是 | datetime;打开表单时**默认当前时刻**(可改);须 **晚于** 报名截止时间 | | 培训简介 | 是 | 多行文本;去除首尾空白后非空;长度上限宜 **500** 字(评审可调整) | | 计划人数 | 是 | 正整数;单位 **人** | | 培训地点 | 是 | 文本;长度宜 **1~200** 字 | | 预期成果 | 否 | 多行文本;选填 | | 报名开始时间 | 是 | datetime;须 **早于** 报名截止时间且 **早于** 培训时间 | | 报名截止时间 | 是 | datetime;须 **晚于** 报名开始且 **早于** 培训时间 | | 封面 | 否 | **单张**图片;后缀 `jpg`、`jpeg`、`png`(可扩展 `webp`);单文件 ≤ **10 MB** | #### 5.1.2 保存方式(与原型一致) | 操作 | 行为 | | --- | --- | | **确定** | 校验通过后保存,**发布状态为未发布**;不写入发布日期 | | **发布**(表单内,如橙色按钮) | 校验通过后保存,**发布状态为已发布**,**发布日期**为操作当日 | | **取消** | 关闭表单,不保存 | #### 5.1.3 校验摘要 | 规则 | 说明 | | --- | --- | | 时间链 | **报名开始 < 报名截止 < 培训时间**(**§2.4**) | | 计划人数 | 正整数,≥ 1 | | 封面 | 类型、大小不符时拒绝上传或拒绝保存 | | 必填 | 任一必填为空或仅空白时拒绝保存 | --- ### 5.2 查询实战培训列表 #### 5.2.1 筛选 | 条件 | 规则 | | --- | --- | | 培训主题 | 选填;**精确**匹配;空则不过滤 | | 培训日期 | 选填;**日期区间**(开始~结束,含起止日);按**培训时间**的日期部分匹配;开始日晚于结束日时提示修正 | #### 5.2.2 列表规则 - 默认每页 **20** 条;默认排序:**培训时间倒序**(或 **创建时间倒序**,产品择一,全文一致)。 - 工具栏:**搜索**、**重置**、**新增**。 #### 5.2.3 展示列(与原型一致) 培训主题、培训时间、计划人数(人)、培训地点、报名开始时间、报名截止时间、**发布日期**、**报名状态**、**实际报名人数**(人)、操作。 | 列 | 展示说明 | | --- | --- | | 发布日期 | 未发布显示「—」 | | 报名状态 | **§2.3** 中文标签;宜配颜色区分(报名中/已报满/已截止等) | | 实际报名人数 | 无报名模块时为 **0** 或「—」;不得超过计划人数展示异常时需产品约定 | #### 5.2.4 操作列(与 §6 一致) | 发布状态 | 行内操作 | | --- | --- | | 未发布 | 查看、发布、编辑、删除 | | 已发布 | 查看、下架(满足 **§5.6** 下架前置时显示或可点) | --- ### 5.3 修改实战培训 | 项 | 要求 | | --- | --- | | 状态约束 | 仅 **未发布** 可进入编辑并保存 | | 已发布 | **不可修改**;须先 **下架**(若允许) | | 可改范围 | **§5.1.1** 全部字段(含替换封面) | | 校验 | 同 **§5.1.3** | | 编辑表单按钮 | 通常 **确定**(保持未发布)、**取消**;是否提供 **发布** 与新增一致 | --- ### 5.4 删除实战培训 | 项 | 要求 | | --- | --- | | 允许删除 | **未发布** 且具备删除权限 | | 不允许删除 | **已发布**;须先下架 | | 删除方式 | 建议 **逻辑删除**(与项目其他业务台账一致):列表不可见,数据可审计 | | 确认 | 删除前二次确认;**本期不提供**批量删除(若实现须单独说明) | | 关联 | 删除时宜清理封面文件;已有关联报名数据时是否禁止删除,由报名模块评审(**默认:有报名记录则禁止删除未发布培训**) | --- ### 5.5 查看实战培训详情 | 项 | 要求 | | --- | --- | | 展示内容 | **§5.1.1** 全部字段、封面预览、**发布状态**、**发布日期**、**报名状态**、**实际报名人数**;宜含创建/修改审计信息 | | 未发布 | 只读;可提供 **编辑**、**发布**、**删除**(与列表等价) | | 已发布 | 只读;可提供 **下架**(满足条件时);**不提供编辑、删除** | | 培训简介/预期成果 | 全文展示,保留换行 | --- ### 5.6 发布与下架 #### 发布 | 项 | 说明 | | --- | --- | | 入口 | 列表「发布」、详情「发布」、新增表单「发布」 | | 前置 | **未发布**;**§5.1.3** 校验通过 | | 结果 | **已发布**;**发布日期** = 操作当日(YYYY-MM-DD) | | 重复 | 已发布不可再次发布 | #### 下架 | 项 | 说明 | | --- | --- | | 入口 | 列表「下架」、详情「下架」 | | 前置 | **已发布**;且当前时间 **早于** 报名开始时间(**「开始报名后不允许下架」**) | | 不满足前置 | 当前时间 **≥** 报名开始时间时,**不展示**或**禁用**下架,并提示原因(如「报名已开始,不可下架」) | | 结果 | **未发布**;对外展示结束;记录与封面保留;可再编辑、再发布 | | 已报满/已截止 | 若仍早于报名开始才可下架;报名开始后一律不可下架(与草稿一致) | --- ## 6. 状态与操作矩阵(汇总) 在**已授权**前提下: | 当前发布状态 | 查看 | 新增 | 修改 | 发布 | 下架 | 删除 | | --- | --- | --- | --- | --- | --- | --- | | 未发布 | ✓ | — | ✓ | ✓ | — | ✓ | | 已发布(且当前时间<报名开始) | ✓ | — | ✗ | — | ✓ | ✗ | | 已发布(且当前时间≥报名开始) | ✓ | — | ✗ | — | ✗ | ✗ | | 列表/global | — | ✓ | — | — | — | — | 下架成功后按 **未发布** 行权限处理。 --- ## 7. 报名状态计算示例(自查) | 发布 | 当前时间 vs 报名时段 | 实际报名 vs 计划 | 报名状态 | | --- | --- | --- | --- | | 未发布 | 任意 | 任意 | 未开始 | | 已发布 | < 报名开始 | 任意 | 未开始 | | 已发布 | 在 [开始, 截止] 内 | < 计划 | 报名中 | | 已发布 | 在 [开始, 截止] 内 | ≥ 计划 | 已报满 | | 已发布 | > 报名截止 | 任意 | 已截止 | --- ## 8. 错误与提示约定 面向使用方的提示宜语义明确,例如: | 场景 | 提示方向(示例) | | --- | --- | | 必填项缺失 | 标明字段(如「请填写培训简介」) | | 培训主题超长 | 「培训主题不能超过 20 字」 | | 时间链不满足 | 「报名截止时间须早于培训时间」等分项提示 | | 计划人数非法 | 「计划人数须为正整数」 | | 封面类型/大小不符 | 「仅支持 jpg、png 格式」「封面不能超过 10MB」 | | 已发布不可编辑/删除 | 「已发布培训须先下架后再修改」 | | 报名开始后不可下架 | 「报名已开始,不允许下架」 | | 删除确认取消 | 不执行删除 | 本文档**不约定** HTTP 状态码、错误码字段名及接口报文结构。 --- ## 9. 非功能需求(建议) | 类别 | 建议 | | --- | --- | | 权限 | 查询、新增、修改、删除、发布、下架宜分按钮权限 | | 审计 | 新增、修改、删除、发布、下架记操作日志 | | 性能 | 列表分页;报名状态宜服务端计算,避免前后端口径不一致 | | 封面 | 上传鉴权、访问控制;替换时清理旧文件 | | 双语 | 界面 i18n(汉语 + 藏文,若适用) | --- ## 10. 相对草稿的修订说明 | 草稿内容 | 处理 | | --- | --- | | 技术栈、MySQL、RuoYi | 已移除 | | `code`、`msg`、`data` | 已移除 | | 报名状态四条规则 | 整理为 **§2.3** 含优先级与未发布特例 | | 下架与「开始报名后」 | 明确为 **当前时间 ≥ 报名开始** 不可下架(**§5.6**) | | 操作列 发布前/后 | 汇总为 **§5.2.4、§6** | | 仅罗列字段 | 补充流程、矩阵、时间链、删除策略、范围边界 | | 实际报名人数来源 | 说明本模块展示、报名功能另模块(**§2.3**) | --- ## 11. 需求追溯 | 能力 | 章节 | | --- | --- | | 新增与字段校验 | §5.1 | | 列表筛选 | §5.2 | | 修改 / 删除 | §5.3、§5.4 | | 查看 | §5.5 | | 发布 / 下架 | §5.6 | | 报名状态 | §2.3、§7 | | 操作流程 | §4 |