1. 项目背景与意义
随着人们生活水平的不断提高,婚礼消费需求日益多样化、个性化。传统婚庆行业长期存在信息不对称、服务流程繁琐、价格不透明等问题:新人需要在线下门店之间反复奔波对比,婚庆公司则面临获客成本高、档期管理混乱、客户沟通效率低等痛点。
基于SpringBoot的婚庆服务平台旨在通过互联网技术整合婚庆产业链资源,为新人提供一站式婚礼筹备服务,包括婚宴酒店预订、婚庆策划方案选择、摄影摄像团队预约、司仪化妆师档期查询等功能。平台的建设具有以下意义:
- 提升用户体验:新人可以在线浏览、对比、预约各类婚庆服务,减少线下奔波成本,提高筹备效率。
- 降低商家获客成本:婚庆公司、酒店、摄影团队等商家通过平台精准触达目标客户,减少传统广告投放支出。
- 促进行业规范化:平台通过服务评价体系和订单管理机制,推动婚庆行业服务标准化、透明化。
- 数据驱动决策:平台积累的用户行为数据和订单数据,可为商家经营决策和平台运营优化提供数据支撑。
2. 系统技术栈
本系统采用前后端分离架构,后端基于SpringBoot框架构建,前端采用Vue.js进行页面渲染,数据库使用MySQL存储业务数据,Redis用于缓存热点数据。具体技术选型如下:
| 技术分类 | 技术选型 | 说明 |
|---|---|---|
| 后端框架 | SpringBoot 2.7.x | 快速构建独立运行的Spring应用,简化配置 |
| 持久层框架 | MyBatis-Plus | 简化数据库操作,内置分页、条件构造器等能力 |
| 数据库 | MySQL 8.0 | 存储用户、商家、订单、服务项目等核心业务数据 |
| 缓存 | Redis | 缓存热门服务信息、用户会话,提升系统并发能力 |
| 安全认证 | Spring Security + JWT | 实现用户登录认证与接口权限控制 |
| 前端框架 | Vue.js 3 + Element UI | 构建响应式管理后台与用户端页面 |
| 接口文档 | Swagger / Knife4j | 自动生成在线接口文档,方便前后端联调 |
| 构建工具 | Maven | 管理项目依赖与构建流程 |
3. 系统功能模块设计
系统面向三类角色:普通用户(新人)、商家(婚庆公司、酒店、摄影团队等)和平台管理员。整体功能模块划分如下:
3.1 用户端功能
- 用户注册登录:支持手机号验证码注册登录,使用JWT令牌维持登录状态。
- 服务浏览与搜索:按婚宴酒店、婚庆策划、摄影摄像、司仪化妆等分类浏览服务,支持关键词搜索和条件筛选。
- 在线预约下单:选择服务套餐、填写婚期和需求,提交预约订单。
- 订单管理:查看订单状态、支付记录,对已完成订单进行评价。
- 个人中心:维护个人资料、收藏夹、消息通知。
3.2 商家端功能
- 服务管理:发布、编辑、上下架婚庆服务套餐。
- 订单处理:查看新订单、确认接单、更新订单进度。
- 档期管理:维护可预约日期和时段,避免档期冲突。
- 数据统计:查看订单量、营收、服务评价等经营数据。
3.3 管理员端功能
- 用户管理:审核商家入驻申请,管理用户账号状态。
- 内容审核:审核服务信息、用户评价,处理违规内容。
- 订单监管:查看全平台订单数据,处理用户投诉。
- 系统配置:管理服务分类、公告信息、平台基础参数。
4. 数据库设计
系统核心数据表包括用户表、商家表、服务分类表、服务信息表、订单表、评价表等。以下为主要表结构设计:
| 数据表 | 主要字段 | 说明 |
|---|---|---|
| user | id, phone, password, nickname, avatar, role, status | 用户账号信息,role区分普通用户、商家、管理员 |
| merchant | id, user_id, company_name, license_no, contact, audit_status | 商家入驻信息与资质审核状态 |
| service_category | id, name, parent_id, sort | 服务分类,支持多级分类 |
| service_info | id, merchant_id, category_id, title, cover, price, description, status | 婚庆服务项目信息 |
| orders | id, order_no, user_id, merchant_id, service_id, wedding_date, amount, status, create_time | 预约订单信息,status记录订单流转状态 |
| order_comment | id, order_id, user_id, content, rating, create_time | 用户对已完成订单的评价 |
5. 核心代码实现
以下选取系统中最具代表性的几个核心模块进行代码说明。
5.1 SpringBoot启动类
@SpringBootApplication @MapperScan("com.wedding.platform.mapper") public class WeddingPlatformApplication { public static void main(String[] args) { SpringApplication.run(WeddingPlatformApplication.class, args); } }5.2 用户登录认证(JWT工具类)
@Component public class JwtUtil { @Value("${jwt.secret}") private String secret; @Value("${jwt.expire}") private Long expire; public String generateToken(Long userId, String role) { return Jwts.builder() .setSubject(String.valueOf(userId)) .claim("role", role) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + expire)) .signWith(SignatureAlgorithm.HS256, secret) .compact(); } public Claims parseToken(String token) { return Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); } }5.3 服务信息查询(MyBatis-Plus分页查询)
@Service public class ServiceInfoServiceImpl implements ServiceInfoService { @Autowired private ServiceInfoMapper serviceInfoMapper; @Override public PageResult<ServiceInfoVO> queryServicePage(ServiceQueryDTO queryDTO) { Page<ServiceInfo> page = new Page<>(queryDTO.getPageNum(), queryDTO.getPageSize()); LambdaQueryWrapper<ServiceInfo> wrapper = new LambdaQueryWrapper<>(); // 按分类筛选 if (StringUtils.isNotBlank(queryDTO.getCategoryId())) { wrapper.eq(ServiceInfo::getCategoryId, queryDTO.getCategoryId()); } // 按关键词模糊搜索 if (StringUtils.isNotBlank(queryDTO.getKeyword())) { wrapper.like(ServiceInfo::getTitle, queryDTO.getKeyword()); } // 只查询上架状态 wrapper.eq(ServiceInfo::getStatus, 1); wrapper.orderByDesc(ServiceInfo::getCreateTime); Page<ServiceInfo> result = serviceInfoMapper.selectPage(page, wrapper); // 转换为VO并返回 return convertToPageResult(result); } }5.4 订单创建(事务控制)
@Service public class OrderServiceImpl implements OrderService { @Autowired private OrderMapper orderMapper; @Autowired private ServiceInfoMapper serviceInfoMapper; @Override @Transactional(rollbackFor = Exception.class) public Long createOrder(OrderCreateDTO orderDTO) { // 校验服务是否存在且已上架 ServiceInfo service = serviceInfoMapper.selectById(orderDTO.getServiceId()); if (service == null || service.getStatus() != 1) { throw new BusinessException("服务不存在或已下架"); } // 生成订单号 String orderNo = "WD" + System.currentTimeMillis() + RandomUtil.randomNumbers(4); Orders order = new Orders(); order.setOrderNo(orderNo); order.setUserId(orderDTO.getUserId()); order.setMerchantId(service.getMerchantId()); order.setServiceId(service.getId()); order.setWeddingDate(orderDTO.getWeddingDate()); order.setAmount(service.getPrice()); order.setStatus(0); // 待确认 order.setCreateTime(LocalDateTime.now()); orderMapper.insert(order); return order.getId(); } }5.5 统一返回结果封装
@Data public class Result<T> { private Integer code; private String message; private T data; public static <T> Result<T> success(T data) { Result<T> result = new Result<>(); result.setCode(200); result.setMessage("操作成功"); result.setData(data); return result; } public static <T> Result<T> error(String message) { Result<T> result = new Result<>(); result.setCode(500); result.setMessage(message); return result; } }6. 系统测试与总结
系统开发完成后,对用户注册登录、服务搜索、在线下单、订单管理等核心功能进行了功能测试和接口测试。测试结果表明,各模块功能运行正常,接口响应稳定,能够满足婚庆服务平台的基本业务需求。
本系统基于SpringBoot框架实现了婚庆服务平台的用户端、商家端和管理员端核心功能,有效解决了传统婚庆行业信息不对称、流程繁琐等问题。后续可在支付对接、智能推荐、移动端适配等方面进一步优化完善,持续提升用户体验和平台运营效率。