JAVA同城预约服务预约理发系统源码支持小程序+公众号+H5



行业前景与技术优势分析
在美业市场规模突破万亿级、消费者对服务品质与便捷性要求日益提升的背景下,传统理发门店正面临“等客上门”与“资源闲置”的双重困境。数据显示,超过65%的消费者更倾向于通过线上预约完成理发服务,而门店发型师空闲率却高达30%以上。这一矛盾催生了美业数字化服务平台的巨大市场需求。
本套JAVA同城预约服务预约理发系统源码支持小程序+公众号+H5,基于SpringBoot+MybatisPlus+MySQL构建高可用服务端,以uniapp(vue语法)实现用户端多端统一,配合Vue+ElementUi管理后台,形成“用户-发型师-门店-平台”四位一体的美业服务生态。其核心优势体现在:一是通过精选分类与门店筛选技术,将用户需求与美发服务精准匹配;二是理发师预约模块融合实时时间槽算法,将发型师资源利用率提升40%以上;三是加盟管理与发型师管理功能支撑连锁品牌快速扩张;四是订单与服务管理模块构建完整的服务闭环。该系统不仅满足单店数字化升级需求,更为美业连锁品牌、O2O服务平台提供了可快速复制、稳定可靠的解决方案。

系统架构全景:从同城服务到多端触达
系统采用前后端分离架构,后端基于SpringBoot构建RESTful API,MybatisPlus简化数据访问,MySQL存储核心业务数据。用户端通过uniapp编译为微信小程序、公众号H5及App,管理后台使用Vue+ElementUi实现运营管理。
核心技术栈
// 后端核心依赖- SpringBoot 2.7.x:提供自动配置与微服务基础能力- MybatisPlus 3.5.x:增强CRUD操作,支持分页与条件构造器- MySQL 8.0:存储门店、发型师、订单、预约记录等核心数据- Redis:缓存门店数据、管理预约时段锁- RabbitMQ:处理订单异步消息与预约提醒
多端适配实现
用户端通过uniapp条件编译实现一套代码多端运行,统一用户身份认证。
// uni-app 微信登录核心代码uni.login({provider: 'weixin',success: (loginRes) => {uni.request({url: 'https://api.domain.com/auth/wechat',method: 'POST',data: { code: loginRes.code },success: (res) => {uni.setStorageSync('token', res.data.token);}});}});
精选分类与门店筛选:提升用户决策效率
精选分类功能通过数据库设计实现美发服务的多维度管理。服务分类表(service_category)包含洗剪吹、烫染造型、护发养发、头皮护理、男士理容等细分品类。每个品类下关联具体服务项目,支持按价格、热度、距离排序。
门店筛选与LBS实现
门店筛选支持按距离、评分、服务项目、营业时间等多维度条件组合查询。后端使用Redis Geo存储门店经纬度,实现毫秒级距离计算。
// 门店筛选核心实现@Servicepublic classStoreService{@Autowiredprivate StoreMapper storeMapper;public List<StoreVO> filterStores(StoreFilterDTO filter) {// 构建查询条件LambdaQueryWrapper<Store> wrapper = new LambdaQueryWrapper<>();wrapper.eq(filter.getCategoryId() != null, Store::getCategoryId, filter.getCategoryId()).ge(filter.getMinRating() != null, Store::getRating, filter.getMinRating()).eq(StringUtils.hasText(filter.getServiceType()), Store::getServiceType, filter.getServiceType()).eq(Store::getStatus, 1); // 仅展示营业中门店// 距离筛选if (filter.getLng() != null && filter.getLat() != null) {// 使用MySQL空间函数计算距离并筛选return storeMapper.findNearbyStores(filter.getLng(), filter.getLat(), filter.getRadius());}return storeMapper.selectList(wrapper);}}
前端地图展示门店位置,支持缩放查看周边门店,点击标记进入门店详情页。
理发师预约与详情:核心服务体验
理发师预约是系统的核心功能模块。用户进入理发师详情页面,可查看发型师的个人简介、从业年限、擅长风格、作品展示、用户评价等完整信息,选择服务项目后进行预约。
预约时间槽算法实现
预约模块采用时间槽算法,将营业时间划分为30分钟的时间段,支持15分钟粒度的预约控制。使用Redis分布式锁防止同一时段超约。
// 预约实体public class Appointment {private Long id;private Long userId;private Long barberId;private Long serviceId;private Long storeId;private Date appointmentTime; // 预约时间private Integer duration; // 服务时长(分钟)private Integer status; // 0:待确认 1:已确认 2:已完成 3:已取消private BigDecimal amount;private Date createTime;}// 预约核心逻辑@Servicepublic class AppointmentService {@Autowiredprivate RedisTemplate redisTemplate;public Result createAppointment(AppointmentDTO dto) {String lockKey = "appointment:lock:" + dto.getBarberId() + ":" + dto.getAppointmentTime();// 分布式锁,防止并发超约Boolean lock = redisTemplate.opsForValue().setIfAbsent(lockKey, "1", 30, TimeUnit.SECONDS);if (!lock) {return Result.error("当前时段已被预约,请选择其他时间");}try {// 校验该时段是否已被预约int count = appointmentMapper.checkTimeSlot(dto.getBarberId(), dto.getAppointmentTime());if (count > 0) {return Result.error("该时段已被预约");}// 创建预约记录Appointment appointment = new Appointment();appointment.setUserId(dto.getUserId());appointment.setBarberId(dto.getBarberId());appointment.setServiceId(dto.getServiceId());appointment.setAppointmentTime(dto.getAppointmentTime());appointment.setStatus(0);appointmentMapper.insert(appointment);// 发送预约成功通知sendNotification(appointment);return Result.success(appointment);} finally {redisTemplate.delete(lockKey);}}}
前端预约界面采用日历组件展示发型师可预约时段,支持按日期切换,已约满时段置灰不可选,用户体验流畅直观。
加盟管理与发型师管理:支撑品牌连锁扩张
加盟管理模块是连锁品牌快速扩张的核心功能。加盟商在线提交申请,填写基本信息、资质文件、选址需求等,平台审核通过后开通加盟门店账号。
加盟申请与门店开通流程
// 加盟申请实体public class FranchiseApplication {private Long id;private String applicantName;private String phone;private String storeName;private String province;private String city;private String district;private String address;private String businessLicense; // 营业执照图片private Integer status; // 0:待审核 1:审核通过 2:审核拒绝private Date createTime;private Date auditTime;}// 加盟审核通过后自动创建门店和账号@Transactionalpublic void approveFranchise(Long applicationId) {FranchiseApplication app = franchiseMapper.selectById(applicationId);app.setStatus(1);app.setAuditTime(new Date());franchiseMapper.updateById(app);// 创建门店Store store = new Store();store.setName(app.getStoreName());store.setAddress(app.getAddress());store.setType(StoreType.FRANCHISE); // 加盟店类型store.setStatus(1);storeMapper.insert(store);// 创建加盟商管理账号FranchiseAccount account = new FranchiseAccount();account.setStoreId(store.getId());account.setUsername(app.getPhone());account.setPassword(BCrypt.hashpw("123456", BCrypt.gensalt()));franchiseAccountMapper.insert(account);}
发型师管理模块支持门店自主管理发型师信息,包括基本信息、服务项目、排班表、提成比例等。管理后台可批量导入发型师,设置每个发型师的预约开关状态。
订单管理与服务管理:全流程服务闭环
订单管理模块处理用户预约产生的服务订单,支持在线支付、订单状态跟踪、评价管理等功能。服务管理模块用于维护平台提供的服务项目库,包括名称、价格、时长、适用人群等。
订单状态机与支付回调
// 订单实体核心字段public class Order {private Long id;private String orderNo;private Long userId;private Long storeId;private Long barberId;private Long serviceId;private BigDecimal amount;private Integer status; // 0:待支付 1:已支付 2:服务中 3:已完成 4:已取消private Date appointmentTime;private Date payTime;// 微信支付回调处理public void handlePayCallback(String transactionId) {this.status = OrderStatus.PAID;this.payTime = new Date();this.transactionId = transactionId;// 通知门店有新订单notifyStoreNewOrder(this);// 通知发型师有新的预约notifyBarberNewAppointment(this);}}
用户可在订单列表查看所有历史订单,支持按状态筛选,已完成的订单可进行评价打分和文字评价,评价内容同步展示在门店和发型师详情页。
管理后台:Vue+ElementUi构建高效运营中枢
管理后台为平台运营人员提供门店管理、发型师管理、加盟审核、订单监控、服务管理、数据统计等核心功能。加盟商后台则提供门店专属的管理视图。
<!-- 加盟申请审核组件核心代码 --><template><el-card><divslot="header"><span>加盟申请审核</span></div><el-table:data="applicationList"border><el-table-columnprop="applicantName"label="申请人"></el-table-column><el-table-columnprop="phone"label="联系电话"></el-table-column><el-table-columnprop="storeName"label="申请门店名称"></el-table-column><el-table-columnprop="address"label="地址"></el-table-column><el-table-columnlabel="营业执照"><templateslot-scope="scope"><el-image:src="scope.row.businessLicense"style="width: 50px; height: 50px"></el-image></template></el-table-column><el-table-columnlabel="状态"><templateslot-scope="scope"><el-tag:type="statusType(scope.row.status)">{{ scope.row.status === 0 ? '待审核' : scope.row.status === 1 ? '已通过' : '已拒绝' }}</el-tag></template></el-table-column><el-table-columnlabel="操作"><templateslot-scope="scope"><el-buttontype="text" @click="viewDetail(scope.row)">详情</el-button><el-buttonv-if="scope.row.status === 0"type="text" @click="approve(scope.row)">通过</el-button><el-buttonv-if="scope.row.status === 0"type="text" @click="reject(scope.row)">拒绝</el-button></template></el-table-column></el-table></el-card></template><script>export default {data() {return { applicationList: [] };},mounted() {this.fetchApplicationList();},methods: {async fetchApplicationList() {const { data } = await this.$api.getFranchiseApplications();this.applicationList = data;},async approve(row) {await this.$api.approveFranchise(row.id);this.$message.success('审核通过,门店账号已开通');this.fetchApplicationList();},async reject(row) {await this.$api.rejectFranchise(row.id);this.$message.success('已拒绝');this.fetchApplicationList();}}}</script>
本套JAVA同城预约服务预约理发系统源码支持小程序+公众号+H5,通过精选分类、门店筛选、理发师预约、理发师详情、加盟管理、发型师管理、订单管理、服务管理等核心功能,构建了覆盖用户端、门店端、平台端的完整美业数字化解决方案。系统采用SpringBoot+MybatisPlus+MySQL高性能后端架构,uniapp实现多端统一发布,Vue+ElementUi提供可视化运营管理,代码简洁规范,易于二次开发与私有化部署。
对于企业而言,采用该源码可快速搭建自有美业预约平台,抢占同城服务市场先机;对于开发者,该代码是学习O2O预约系统的最佳实践案例。无论是单店美容美发沙龙、区域连锁品牌,还是本地生活服务平台,这套系统均能提供稳定、高效、可扩展的技术支撑。
如果您正在寻找一套成熟、开源可商用、功能全面的美业预约系统,本文所展示的JAVA同城预约服务预约理发系统源码支持小程序+公众号+H5无疑是您的理想选择。立即部署,开启您的美业数字化服务新征程。
往期推荐

夜雨聆风