基于SSM框架的在线家政预约管理系统 - 源码深度解析
随着现代服务业数字化转型的加速推进,家政服务行业正经历着从传统电话预约向智能化在线平台的转变。这种转变不仅提升了用户体验,更优化了服务资源配置效率。本文深入解析一个基于SSM(Spring+SpringMVC+MyBatis)框架构建的企业级家政服务预约平台,从系统架构、数据库设计到核心功能实现进行全面剖析。
系统架构与技术栈选型
整体架构设计
该平台采用经典的MVC三层架构模式,确保系统的高内聚低耦合特性:
- 前端表现层:JSP+JavaScript+HTML+CSS技术组合,配合jQuery处理用户交互
- 后端控制层:Spring MVC框架实现请求路由和业务逻辑控制
- 业务服务层:Spring IoC容器管理服务组件,AOP实现事务管理
- 数据持久层:MyBatis实现ORM映射,提供灵活的SQL定制能力
- 数据库系统:MySQL 5.7,支持事务处理和并发控制
技术栈优势分析
SSM框架组合在Java Web开发中具有显著优势:
- Spring框架:通过依赖注入和面向切面编程实现松耦合架构
- Spring MVC:清晰的分层结构,支持RESTful风格API设计
- MyBatis:半自动化ORM框架,兼具灵活性和性能优势
数据库设计深度优化
订单信息表设计精要
CREATE TABLE `dingdanxinxi` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`dingdanbianhao` varchar(50) NOT NULL COMMENT '订单编号',
`dingdanxinxi` text NOT NULL COMMENT '订单信息',
`zongjijine` decimal(18,2) NOT NULL COMMENT '总计金额',
`shouhuoren` varchar(50) NOT NULL COMMENT '收货人',
`dianhua` varchar(50) NOT NULL COMMENT '电话',
`dizhi` varchar(255) NOT NULL COMMENT '地址',
`beizhu` text NOT NULL COMMENT '备注',
`zhuangtai` varchar(255) NOT NULL COMMENT '状态',
`xiadanren` varchar(50) NOT NULL COMMENT '下单人',
`iszf` varchar(10) NOT NULL DEFAULT '否' COMMENT '是否支付',
`addtime` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '添加时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='订单信息表'
设计亮点深度解析:
金融级精度控制
- 使用
decimal(18,2)类型确保金额计算的精确性 - 避免浮点数运算带来的精度丢失问题
- 使用
状态机设计模式
zhuangtai字段支持订单状态的全生命周期管理- 实现待支付、已支付、服务中、已完成等状态流转
支付状态优化
iszf字段采用布尔语义,简化支付状态判断逻辑- 支持支付状态的快速查询和统计
审计字段设计
addtime自动记录创建时间,支持数据追溯和分析- 为业务监控和报表统计提供基础数据

家政服务信息表架构设计
CREATE TABLE `fuwuxinxi` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`fuwubianhao` varchar(50) NOT NULL COMMENT '家政服务编号',
`fuwumingcheng` varchar(255) NOT NULL COMMENT '家政服务名称',
`fenlei` int(10) unsigned NOT NULL COMMENT '分类',
`fuwutupian` text NOT NULL COMMENT '家政服务图片',
`shichangjiage` decimal(20,6) NOT NULL DEFAULT 0.000000 COMMENT '市场价格',
`xiaoshoujiage` decimal(18,2) NOT NULL COMMENT '销售价格',
`kucun` int(11) NOT NULL COMMENT '库存',
`zuozhe` varchar(50) NOT NULL COMMENT '联系电话',
`chubanshe` varchar(50) NOT NULL COMMENT '预计耗时',
`fuwuxiangqing` longtext NOT NULL COMMENT '家政服务详情',
`tianjiaren` varchar(50) NOT NULL COMMENT '添加人',
`addtime` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '添加时间',
PRIMARY KEY (`id`),
KEY `fuwuxinxi_fenlei_index` (`fenlei`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='家政服务信息'
索引与性能优化策略:
- 主键索引优化:基于
id的聚簇索引设计,提升主键查询效率 - 分类查询加速:
fenlei字段建立辅助索引,优化分类检索性能 - 大字段存储策略:
fuwutupian采用TEXT类型,支持图片URL灵活存储 - 价格精度设计:支持高精度价格计算,满足促销活动需求

核心业务功能实现深度解析
购物车模块架构设计
购物车模块采用Session与数据库双重存储策略,在保证数据持久化的同时优化用户体验。
实体类领域建模:
@Entity
@Table(name = "gouwuche")
public class ShoppingCart implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "fuwuxinxiid", nullable = false)
private Long serviceId;
@Column(name = "fuwumingcheng", length = 255, nullable = false)
private String serviceName;
@Column(name = "xiaoshoujiage", precision = 18, scale = 2, nullable = false)
private BigDecimal salePrice;
@Column(name = "goumaishuliang", nullable = false)
private Integer quantity;
@Column(name = "xiaoji", precision = 18, scale = 2, nullable = false)
private BigDecimal subtotal;
@Column(name = "goumairen", length = 50, nullable = false)
private String buyer;
// Getter和Setter方法
// 业务逻辑方法
public void calculateSubtotal() {
this.subtotal = this.salePrice.multiply(BigDecimal.valueOf(this.quantity));
}
}
控制器层业务逻辑实现:
@Controller
@RequestMapping("/cart")
public class ShoppingCartController {
@Autowired
private ShoppingCartService cartService;
@Autowired
private ServiceInfoService serviceService;
/**
* 添加服务到购物车
*/
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addToCart(@RequestParam Long serviceId,
@RequestParam Integer quantity,
HttpSession session,
RedirectAttributes redirectAttributes) {
// 用户认证检查
User currentUser = (User) session.getAttribute("currentUser");
if (currentUser == null) {
redirectAttributes.addFlashAttribute("error", "请先登录");
return "redirect:/login";
}
try {
// 构建购物车项
ShoppingCartItem item = new ShoppingCartItem();
item.setServiceId(serviceId);
item.setQuantity(quantity);
item.setBuyer(currentUser.getUsername());
// 获取服务信息并计算金额
ServiceInfo service = serviceService.findById(serviceId);
if (service == null) {
redirectAttributes.addFlashAttribute("error", "服务不存在");
return "redirect:/services";
}
item.setServiceName(service.getServiceName());
item.setSalePrice(service.getSalePrice());
item.calculateSubtotal();
// 持久化到数据库
cartService.addItem(item);
// 更新Session中的购物车数量
updateCartSession(session, currentUser.getUsername());
redirectAttributes.addFlashAttribute("success", "添加成功");
} catch (Exception e) {
redirectAttributes.addFlashAttribute("error", "添加失败:" + e.getMessage());
}
return "redirect:/cart/view";
}
/**
* 查看购物车
*/
@RequestMapping("/view")
public String viewCart(Model model, HttpSession session) {
User currentUser = (User) session.getAttribute("currentUser");
if (currentUser == null) {
return "redirect:/login";
}
List<ShoppingCartItem> cartItems = cartService.getCartItems(currentUser.getUsername());
model.addAttribute("cartItems", cartItems);
// 计算购物车总金额
BigDecimal totalAmount = calculateTotalAmount(cartItems);
model.addAttribute("totalAmount", totalAmount);
return "cart/view";
}
private BigDecimal calculateTotalAmount(List<ShoppingCartItem> items) {
return items.stream()
.map(ShoppingCartItem::getSubtotal)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
private void updateCartSession(HttpSession session, String username) {
int cartCount = cartService.getCartCount(username);
session.setAttribute("cartCount", cartCount);
}
}
服务管理模块特色功能
动态库存管理:
- 实时库存监控和预警机制
- 支持库存预留和释放策略
- 防止超卖的业务逻辑控制
价格策略引擎:
- 支持市场价和销售价双价格体系
- 预留促销活动接口扩展
- 会员等级折扣计算支持
系统安全与性能优化
安全防护措施
- SQL注入防护:MyBatis参数化查询
- XSS攻击防范:输入输出过滤
- 会话安全:Session超时管理和HTTPS支持
性能优化策略
- 数据库连接池配置优化
- 常用数据缓存机制
- 静态资源CDN加速
总结与展望
本系统通过SSM框架的合理运用,实现了家政服务行业的数字化转型需求。系统在设计上注重用户体验和业务扩展性,为后续的功能迭代和技术升级奠定了坚实基础。未来可考虑引入微服务架构、大数据分析等先进技术,进一步提升系统的智能化水平和服务质量。