🎓 一、 选题背景:为什么选这个题?
同学们,听我一句劝:别再卷“外卖系统”了!那是资本家的故事,我们要讲**“中国故事”**。
- 政治正确(Buff 叠满):紧扣“文化自信”、“数字非遗”、“乡村振兴”。答辩时你只要说出“用技术赋能传统文化”,立意瞬间拉满。
- 界面绝美:非遗项目(如剪纸、皮影、京剧)本身就好看。随便找几张高清大图往首页轮播图一放,导师第一印象就是“这系统做得精致”。
- 逻辑简单:
- 展示= 文章 CMS(增删改查)。
- 众筹= 商品预售(加个进度条)。
- 没有什么复杂的库存锁定、物流追踪,因为众筹通常是预售!
🏗️ 二、 系统架构设计
为了体现“数字化保护”和“商业化落地”的双重价值,我们采用内容 + 交易双引擎架构。
1. 技术栈选型
- 后端:Spring Boot 2.7+、MyBatis Plus
- 前端:Vue 3 + Element Plus +Video.js (视频播放)
- 数据库:MySQL 8.0
- 加分项:Redis (众筹热度排行)
2. 系统逻辑架构图 (Mermaid)
这张图展示了用户如何在“学习文化”和“支持文化”之间流转。
🛠️ 三、 项目亮点包装(Project Highlights)
这部分专门用来把“简单的功能”吹成“高端的创新”。
1. 沉浸式“数字孪生”非遗博物馆
包装话术:区别于传统的图文列表,本系统集成了多媒体 CMS 引擎。支持非遗技艺的高清视频流播放与大图如瀑布流展示,构建了“云端博物馆”。虽然底层只是存储了视频 URL,但你可以说实现了“非遗资产的数字化留存与复现”。
2. 基于“时间窗”的动态众筹进度算法
包装话术:针对文创产品的孵化特性,系统设计了动态众筹引擎。实时计算
(当前筹集金额 / 目标金额) * 100%并渲染为前端进度条。同时引入“时间窗”机制,自动监控项目截止日期,一旦过期未达标自动触发(模拟)退款流程,实现了商业逻辑的闭环。
3. 非遗“活化”推荐机制
包装话术:为了解决冷门非遗无人问津的问题,系统在众筹详情页引入了关联推荐策略。当用户浏览“皮影戏”众筹时,系统会自动推荐相关的“皮影制作技艺”科普文章,实现了“以商养文,以文促商”的生态闭环。
💻 四、 核心功能实现(保姆级代码)
核心只有两个:非遗文章怎么存(CMS),众筹进度怎么算(数学题)。
1. 核心表结构设计
非遗百科表 (sys_heritage_item)
其实就是一张博客文章表。
| 字段名 | 类型 | 说明 | 备注 |
|---|---|---|---|
id | BIGINT | 主键 | - |
title | VARCHAR | 项目名称 | 如:苏绣 |
level | VARCHAR | 级别 | 国家级/省级 |
category | VARCHAR | 类别 | 民间美术/传统技艺 |
video_url | VARCHAR | 视频地址 | 核心展示字段 |
content | TEXT | 富文本详情 | - |
众筹项目表 (sys_crowd_project)
其实就是一张商品表,多了“目标金额”和“截止时间”。
| 字段名 | 类型 | 说明 | 备注 |
|---|---|---|---|
id | BIGINT | 主键 | - |
name | VARCHAR | 文创名 | 如:苏绣双面扇 |
target_money | DECIMAL | 目标金额 | 如:10000.00 |
current_money | DECIMAL | 已筹金额 | 如:5000.00 |
end_time | DATETIME | 截止时间 | - |
status | TINYINT | 状态 | 0:众筹中, 1:成功, 2:失败 |
2. 难点代码:众筹支持与进度计算 (CrowdService.java)
这个逻辑是整个系统的“金钱核心”。
@ServicepublicclassCrowdService{@AutowiredprivateCrowdProjectMapperprojectMapper;@AutowiredprivateCrowdOrderMapperorderMapper;/** * 核心功能:用户支持(购买)文创产品 * @param projectId 项目ID * @param supportAmount 支持金额 (比如买了一个 99元的扇子) */@TransactionalpublicvoidsupportProject(LongprojectId,BigDecimalsupportAmount){// 1. 锁定项目 (防止并发导致金额统计不准,简单点直接用数据库行锁)CrowdProjectproject=projectMapper.selectByIdForUpdate(projectId);if(project.getStatus()!=0||newDate().after(project.getEndTime())){thrownewRuntimeException("众筹已结束,无法支持!");}// 2. 更新已筹金额BigDecimalnewCurrent=project.getCurrentMoney().add(supportAmount);project.setCurrentMoney(newCurrent);// 3. 判断是否众筹成功// 如果 当前金额 >= 目标金额,且状态还是进行中,则改为成功if(newCurrent.compareTo(project.getTargetMoney())>=0){project.setStatus(1);// 众筹成功}// 4. 落库projectMapper.updateById(project);// 5. 生成订单记录 (略)createOrder(projectId,supportAmount);}/** * 前端获取进度百分比 (用于显示进度条) * 公式:(当前 / 目标) * 100 */publicIntegergetProgressPercent(LongprojectId){CrowdProjectp=projectMapper.selectById(projectId);if(p.getTargetMoney().compareTo(BigDecimal.ZERO)==0)return0;// 计算百分比,保留整数BigDecimalpercent=p.getCurrentMoney().divide(p.getTargetMoney(),2,RoundingMode.HALF_UP).multiply(newBigDecimal(100));returnpercent.intValue()>100?100:percent.intValue();}}📸 五、 运行效果展示 (答辩 PPT 必杀技)
这部分是视觉分。非遗项目,图一定要美!
- 首页大屏:
- 轮播图放一张高清的“京剧脸谱”或“千里江山图”。
- 中间放一个“非遗地图”(ECharts 地图),鼠标移到哪个省,显示该省有多少非遗项目。
- 众筹详情页(核心):
- 左边是文创产品的高清图。
- 右边最显眼的地方:一条绿色的进度条。
- 文字显示:“已筹 ¥8,848 / 目标 ¥10,000 (88%)”。
- 旁边放个倒计时:“距离结束还剩 03 天 12 小时”。
- 注:这种“紧迫感”是电商系统的精髓。
🗣️ 六、 答辩防御术(高情商回答)
Q1: 你的众筹如果失败了,钱怎么退?
A (闭环版):“老师,本系统设计了**‘众筹状态机’。当项目由于到期且未达到目标金额(Status=2)时,系统会触发定时任务 (Spring Task)**,自动扫描失败项目的订单表,并调用模拟支付接口的 Refund 方法进行原路退回。这保证了用户的资金安全。”
(解析:虽然你可能没写退款代码,但逻辑要是闭环的。)
Q2: 为什么把“非遗展示”和“众筹”放在一个系统里?
A (立意版):“这是为了解决非遗保护中**‘造血能力不足’的痛点。单纯的展示只是‘输血’,而通过文创众筹,可以让非遗传承人通过手艺获得经济回报,实现‘造血’。本系统旨在打通‘文化传播-市场认可-资金回流’**的可持续发展链路。”
(解析:这一波升华,直接把一个 CRUD 系统拔高到了乡村振兴的高度。)
总结:
这个项目的核心是**“素材”。
代码写起来非常快(就是文章表+订单表),但你需要去百度找一点好看的非遗视频和图片填进去。
只要界面做得古色古香,进度条能动,这就是一个S级**的毕业设计。