1. 项目背景与意义
非物质文化遗产是中华优秀传统文化的重要组成部分,承载着民族记忆与文化基因。然而,随着现代化进程加快,许多非遗技艺面临传承人老龄化、受众萎缩、传播渠道单一等困境。传统口传心授的教学模式受限于地域与时间,难以规模化推广,非遗技艺的数字化保护与传承已成为亟待解决的问题。
本课题基于 Spring Boot 构建非遗技艺数字化传承与教学管理系统,旨在通过信息化手段整合非遗项目资源、传承人信息与教学课程,实现非遗技艺的在线展示、数字化教学、学习进度跟踪与互动交流。系统建设具有以下意义:
- 文化保护价值:将非遗技艺以图文、视频等数字化形式永久保存,降低传承中断风险。
- 教育推广价值:突破地域限制,让更多学习者便捷获取非遗教学资源,扩大传承人群。
- 管理效率价值:为非遗管理部门提供数字化管理工具,提升项目申报、传承人管理与教学组织效率。
- 技术示范价值:探索 Spring Boot 等主流框架在文化教育领域的落地实践,为同类系统提供参考。
2. 系统技术栈
本系统采用前后端分离架构,后端基于 Spring Boot 构建 RESTful API,前端使用 Vue.js 配合 Element UI 实现管理界面,数据存储采用 MySQL 关系型数据库,并引入 Redis 缓存热点数据以提升系统性能。
| 层次 | 技术选型 | 说明 |
|---|---|---|
| 后端框架 | Spring Boot 2.7 | 快速构建独立运行的微服务应用 |
| 持久层 | MyBatis-Plus | 简化数据库操作,内置分页与代码生成 |
| 安全认证 | Spring Security + JWT | 实现用户认证与接口权限控制 |
| 数据库 | MySQL 8.0 | 存储用户、非遗项目、课程等业务数据 |
| 缓存 | Redis | 缓存课程列表、热门项目等热点数据 |
| 前端框架 | Vue.js 3 + Element UI | 构建管理后台与用户端界面 |
| 文件存储 | 阿里云 OSS | 存储非遗图片、教学视频等多媒体资源 |
| 接口文档 | Swagger / Knife4j | 自动生成在线接口调试文档 |
3. 系统功能模块设计
系统面向系统管理员、非遗传承人(教师)与普通学员三类角色,核心功能模块划分如下:
3.1 非遗项目管理模块
管理员可对非遗项目进行新增、编辑、审核与下架操作,维护项目名称、所属类别、级别、地区、简介、传承人、图片与视频等基础信息。项目类别涵盖传统技艺、传统美术、传统舞蹈、传统医药等门类,支持按类别、地区、级别多维度检索。
3.2 传承人管理模块
系统维护非遗传承人的个人档案,包括姓名、级别、所属项目、传承年限、代表作品与荣誉信息。传承人账号由管理员分配,传承人登录后可维护个人资料并发布教学课程。
3.3 课程教学模块
传承人可创建课程,课程关联具体非遗项目,支持上传图文教程与视频资源,并可设置章节结构。学员可浏览课程列表、查看课程详情、在线学习视频并记录学习进度。课程支持收藏与评价,便于学员之间交流学习心得。
3.4 学习进度与考核模块
系统记录学员的课程学习进度,包括已学章节、学习时长与完成状态。教师可发布课后作业与测验,学员在线提交后由教师批阅评分,系统自动汇总学习成果,形成个人学习档案。
3.5 互动交流模块
提供课程评论、问答与公告通知功能。学员可在课程详情页发表评论,教师可回复答疑;管理员可发布系统公告,如非遗活动通知、课程上新提醒等。
3.6 系统管理模块
包含用户管理、角色权限管理、数据统计与日志管理。管理员可查看注册用户列表、分配角色权限,并通过图表统计非遗项目数量、课程数量、学员活跃度等运营数据。
4. 数据库设计
系统核心数据表包括用户表、非遗项目表、传承人表、课程表、课程章节表、学习记录表、评论表与公告表。以下为主要表结构设计:
| 表名 | 主要字段 | 说明 |
|---|---|---|
| sys_user | id, username, password, real_name, role, avatar | 系统用户(管理员/传承人/学员) |
| heritage_project | id, name, category, level, region, intro, cover_url, status | 非遗项目信息 |
| heritage_inheritor | id, user_id, project_id, title, years, works | 非遗传承人档案 |
| course | id, title, project_id, teacher_id, cover_url, intro, status | 教学课程 |
| course_chapter | id, course_id, title, video_url, content, sort | 课程章节 |
| study_record | id, user_id, chapter_id, status, study_time | 学习进度记录 |
| course_comment | id, course_id, user_id, content, create_time | 课程评论 |
5. 核心代码实现
以下选取系统开发中的关键代码片段进行说明,包括实体类、控制器、业务服务与配置类。
5.1 非遗项目实体类
@Data @TableName("heritage_project") public class HeritageProject { @TableId(type = IdType.AUTO) private Long id; private String name; private String category; private String level; private String region; private String intro; private String coverUrl; private Integer status; @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; }5.2 非遗项目控制器
@RestController @RequestMapping("/api/project") public class HeritageProjectController { @Resource private HeritageProjectService projectService; @GetMapping("/page") public Result<Page<HeritageProject>> page(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize, String keyword, String category) { Page<HeritageProject> page = projectService.queryPage(pageNum, pageSize, keyword, category); return Result.success(page); } @GetMapping("/{id}") public Result<HeritageProject> detail(@PathVariable Long id) { return Result.success(projectService.getById(id)); } @PostMapping public Result<?> save(@RequestBody HeritageProject project) { projectService.saveProject(project); return Result.success(); } @PutMapping public Result<?> update(@RequestBody HeritageProject project) { projectService.updateProject(project); return Result.success(); } @DeleteMapping("/{id}") public Result<?> delete(@PathVariable Long id) { projectService.removeById(id); return Result.success(); } }5.3 课程学习进度记录服务
@Service public class StudyRecordServiceImpl extends ServiceImpl<StudyRecordMapper, StudyRecord> implements StudyRecordService { @Override public void recordProgress(Long userId, Long chapterId) { StudyRecord record = lambdaQuery() .eq(StudyRecord::getUserId, userId) .eq(StudyRecord::getChapterId, chapterId) .one(); if (record == null) { StudyRecord newRecord = new StudyRecord(); newRecord.setUserId(userId); newRecord.setChapterId(chapterId); newRecord.setStatus(1); newRecord.setStudyTime(LocalDateTime.now()); save(newRecord); } else { record.setStatus(1); record.setStudyTime(LocalDateTime.now()); updateById(record); } } @Override public List<Long> listFinishedChapterIds(Long userId, Long courseId) { return baseMapper.selectFinishedChapterIds(userId, courseId); } }5.4 JWT 认证过滤器
@Component public class JwtAuthenticationFilter extends OncePerRequestFilter { @Resource private JwtUtil jwtUtil; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String token = request.getHeader("Authorization"); if (StringUtils.hasText(token) && token.startsWith("Bearer ")) { token = token.substring(7); String username = jwtUtil.parseUsername(token); if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { UserDetails userDetails = userDetailsService.loadUserByUsername(username); UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); } } chain.doFilter(request, response); } }5.5 跨域配置类
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOriginPatterns("*") .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowedHeaders("*") .allowCredentials(true) .maxAge(3600); } }6. 系统测试与总结
系统开发完成后,对用户登录、非遗项目管理、课程学习、进度记录等核心功能进行了功能测试与接口测试,测试结果表明各模块运行稳定,接口响应正常,能够满足非遗数字化传承与教学管理的基本业务需求。
本系统通过 Spring Boot 与 Vue.js 的有机结合,实现了非遗项目、传承人、课程教学与学习管理的数字化闭环,为非遗技艺的保护与传承提供了可行的信息化解决方案。后续可在智能推荐课程、在线直播教学、VR 技艺展示等方向进一步拓展,持续提升系统的教学体验与文化传播能力。