最近在整理毕设资料时,翻出一个当年让我收获颇丰的实战项目——基于SpringBoot+Vue的画师约稿平台。这个项目不仅帮我顺利通过答辩,后来还成为工作室接外包的模板项目。今天把完整源码、数据库脚本和接口文档都整理出来,特别适合正在做Java Web毕设的同学参考。
这个平台本质上是个垂直领域的C2C交易系统,核心解决了三个痛点:
技术栈选择上,后端用SpringBoot 2.7 + MyBatis-Plus实现RESTful API,前端Vue 3组合式API开发管理后台,Element Plus做UI框架。整套代码包含完整的RBAC权限控制、JWT鉴权、阿里云OSS文件上传等企业级功能实现。
后端选择SpringBoot主要考虑:
前端选用Vue 3是因为:
mermaid复制graph TD
A[用户服务] --> B[JWT鉴权]
C[作品服务] --> D[OSS存储]
E[订单服务] --> F[支付宝沙箱]
G[消息服务] --> H[WebSocket]
(注:实际开发中应避免使用mermaid图表,此处仅为说明模块关系)
sql复制-- 画师资质表
CREATE TABLE `artist_qualification` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL COMMENT '关联用户ID',
`real_name` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '真实姓名',
`id_card` varchar(18) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '身份证号',
`sample_works` json DEFAULT NULL COMMENT '代表作品URL数组',
`audit_status` tinyint DEFAULT '0' COMMENT '审核状态0-未审核 1-已通过 2-已拒绝',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
java复制@Transactional
public Result publishWork(WorkPublishDTO dto) {
// 验证用户资质
ArtistQualification qualification = qualificationMapper.selectOne(
new LambdaQueryWrapper<ArtistQualification>()
.eq(ArtistQualification::getUserId, UserContext.getUserId()));
if(qualification.getAuditStatus() != 1) {
throw new BusinessException("请先完成画师认证");
}
// 保存作品
ArtWork work = new ArtWork();
BeanUtils.copyProperties(dto, work);
workMapper.insert(work);
// 更新统计
artistStatMapper.updateWorkCount(work.getArtistId());
return Result.success(work.getId());
}
采用支付宝沙箱环境实现双担保交易:
关键状态机设计:
java复制public enum OrderStatus {
INIT(0), // 初始状态
PAY_FROZEN(1), // 已冻结
WORK_UPLOAD(2), // 作品已提交
CONFIRMED(3), // 已确认
COMPLETED(4), // 已完成
CANCELLED(5); // 已取消
}
yaml复制# application-dev.yml
aliyun:
oss:
endpoint: oss-cn-beijing.aliyuncs.com
bucket: art-dev
access-key-id: ${ACCESS_KEY}
access-key-secret: ${SECRET_KEY}
spring:
datasource:
url: jdbc:mysql://localhost:3306/art_platform?useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
跨域问题:确保前端代理配置正确
javascript复制// vue.config.js
devServer: {
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true
}
}
}
JWT失效:检查服务端时钟是否同步
OSS上传失败:Bucket权限需设置为公共读
可扩展方向:
答辩准备重点:
项目源码已去除敏感信息,包含:
需要特别注意的是,在实际部署时应当:
这个项目最值得借鉴的是其完整的业务流程实现,特别是订单状态机设计和文件上传方案,这些在企业级应用中都是通用性很强的模块。对于毕设来说,可以适当简化支付流程,用模拟数据替代真实支付接口。