毕业设计实战:基于SSM的一站式家装服务管理系统全流程指南

19 阅读6分钟

毕业设计实战:基于SSM的一站式家装服务管理系统全流程指南

在开发“一站式家装服务管理系统”时,曾因“合同与工程安排的关联设计不清晰”踩过大坑——初期合同状态变更未同步更新工程进度,导致合同已终止但工程仍在进行。耗费2天重构状态同步逻辑才解决问题📝。本文将分享家装系统从需求到部署的全流程经验。

一、需求分析:聚焦家装全流程管理

核心用户与功能

用户端(业主)
  • 风格选择:浏览装修风格库,收藏喜欢风格
  • 预算规划:在线制定装修预算,选择主材
  • 合同管理:查看合同状态,下载合同文件
  • 工程跟进:查看工程安排,了解进度
  • 售后服务:提交服务申请,查看服务记录
管理员端(装修公司)
  • 风格管理:维护装修风格库(现代、中式、欧式等)
  • 主材管理:管理主材库(品牌、价格、库存)
  • 合同管理:审核合同,变更合同状态
  • 工程安排:分配工程任务,跟踪进度
  • 预算管理:审核用户预算方案
  • 售后服务:处理用户售后申请

二、技术选型:稳定高效的SSM框架

推荐技术栈

  • 后端:Spring + SpringMVC + MyBatis(SSM)
  • 前端:Vue 2.x + ElementUI
  • 数据库:MySQL 8.0
  • 工具:IDEA + Maven + Git
  • 部署:Tomcat 8.5

选型理由

  • SSM框架:企业级应用成熟方案
  • MyBatis:灵活SQL,便于复杂查询
  • Vue+ElementUI:组件丰富,开发高效
  • MySQL 8.0:性能稳定,支持JSON

三、数据库设计:关键业务表结构

核心表设计(优化版)

合同表(contract)

CREATE TABLE `contract` (
  `id` int NOT NULL AUTO_INCREMENT,
  `contract_no` varchar(50) NOT NULL COMMENT '合同编号',
  `user_id` int NOT NULL COMMENT '业主ID',
  `style_id` int COMMENT '装修风格ID',
  `total_amount` decimal(10,2) NOT NULL COMMENT '合同总金额',
  `deposit` decimal(10,2) COMMENT '定金',
  `sign_date` date NOT NULL COMMENT '签订日期',
  `start_date` date COMMENT '开工日期',
  `end_date` date COMMENT '完工日期',
  `status` tinyint DEFAULT 1 COMMENT '1待审核 2已生效 3进行中 4已完成 5已终止',
  `attachment` varchar(500) COMMENT '合同附件路径',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_contract_no` (`contract_no`),
  INDEX `idx_user_status` (`user_id`, `status`)
);

工程安排表(project_schedule)

CREATE TABLE `project_schedule` (
  `id` int NOT NULL AUTO_INCREMENT,
  `contract_id` int NOT NULL COMMENT '合同ID',
  `phase` tinyint NOT NULL COMMENT '阶段:1设计 2拆改 3水电 4泥木 5油漆 6安装',
  `phase_name` varchar(50) NOT NULL COMMENT '阶段名称',
  `plan_start` date COMMENT '计划开始',
  `plan_end` date COMMENT '计划结束',
  `actual_start` date COMMENT '实际开始',
  `actual_end` date COMMENT '实际结束',
  `status` tinyint DEFAULT 1 COMMENT '1未开始 2进行中 3已完成',
  `responsible` varchar(50) COMMENT '负责人',
  `contact` varchar(20) COMMENT '联系方式',
  `remark` text COMMENT '备注',
  PRIMARY KEY (`id`),
  INDEX `idx_contract_phase` (`contract_id`, `phase`)
);

预算表(budget)

CREATE TABLE `budget` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` int NOT NULL,
  `budget_no` varchar(50) COMMENT '预算编号',
  `style_id` int NOT NULL COMMENT '风格ID',
  `total_budget` decimal(10,2) NOT NULL COMMENT '总预算',
  `design_fee` decimal(10,2) COMMENT '设计费',
  `material_fee` decimal(10,2) COMMENT '材料费',
  `labor_fee` decimal(10,2) COMMENT '人工费',
  `other_fee` decimal(10,2) COMMENT '其他费用',
  `status` tinyint DEFAULT 1 COMMENT '1草稿 2已提交 3已审核',
  PRIMARY KEY (`id`)
);

设计要点

  1. 合同状态机:明确定义合同状态流转规则
  2. 工程阶段:标准化家装工程流程
  3. 金额字段:统一使用decimal(10,2)存储金额
  4. 关联关系:合同-工程-预算的完整关联链

四、核心业务逻辑实现

1. 合同状态同步工程进度

@Service
public class ContractService {
    
    @Transactional
    public Result updateContractStatus(Integer contractId, Integer status) {
        Contract contract = contractMapper.selectById(contractId);
        if (contract == null) {
            return Result.error("合同不存在");
        }
        
        // 状态流转校验
        if (!canTransition(contract.getStatus(), status)) {
            return Result.error("状态流转不合法");
        }
        
        // 更新合同状态
        contract.setStatus(status);
        contractMapper.updateById(contract);
        
        // 根据状态同步工程安排
        syncProjectSchedule(contractId, status);
        
        return Result.success("状态更新成功");
    }
    
    private void syncProjectSchedule(Integer contractId, Integer status) {
        if (status == 3) { // 合同进行中
            // 自动创建第一个工程阶段
            ProjectSchedule firstPhase = new ProjectSchedule();
            firstPhase.setContractId(contractId);
            firstPhase.setPhase(1);
            firstPhase.setPhaseName("设计阶段");
            firstPhase.setStatus(2); // 进行中
            projectScheduleMapper.insert(firstPhase);
        } else if (status == 4) { // 合同已完成
            // 标记所有工程阶段为已完成
            projectScheduleMapper.updateStatusByContract(
                contractId, 3); // 3=已完成
        }
    }
}

2. 预算生成与主材关联

@Service
public class BudgetService {
    
    public Budget generateBudget(Integer userId, Integer styleId) {
        // 1. 获取风格信息
        DecorationStyle style = styleMapper.selectById(styleId);
        
        // 2. 根据风格推荐主材
        List<MainMaterial> materials = mainMaterialMapper
            .selectByStyle(styleId);
        
        // 3. 计算各项费用
        Budget budget = new Budget();
        budget.setUserId(userId);
        budget.setStyleId(styleId);
        budget.setBudgetNo(generateBudgetNo());
        
        // 计算材料费
        BigDecimal materialFee = materials.stream()
            .map(MainMaterial::getPrice)
            .reduce(BigDecimal.ZERO, BigDecimal::add);
        budget.setMaterialFee(materialFee);
        
        // 估算人工费(材料费的30%)
        budget.setLaborFee(materialFee.multiply(
            new BigDecimal("0.3")));
            
        // 总预算
        budget.setTotalBudget(budget.getMaterialFee()
            .add(budget.getLaborFee())
            .add(budget.getDesignFee()));
            
        return budget;
    }
}

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、测试要点

核心测试场景

  1. 合同状态流转:测试状态机所有合法流转路径
  2. 工程阶段同步:合同状态变更时工程阶段的同步更新
  3. 预算计算:不同风格预算的自动计算准确性
  4. 主材库存:主材选择与库存校验

测试数据准备

-- 测试风格
INSERT INTO decoration_style VALUES 
(1, '现代简约', '现代简约风格', 1, '120平');

-- 测试主材
INSERT INTO main_material VALUES
(1, '大理石瓷砖', 1, '片', 150.00, 1000);

-- 测试合同
INSERT INTO contract VALUES
(1, 'HT20240601001', 1, 1, 150000.00, 
 30000.00, '2024-06-01', NULL, NULL, 1, '');

六、部署与优化

快速部署

  1. SSM项目部署
<!-- pom.xml关键依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.23</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.7</version>
</dependency>
  1. 数据库配置
# jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/home_decoration?useSSL=false
jdbc.username=root
jdbc.password=123456

性能优化建议

  1. 数据库优化

    • 合同、工程表按年份分表
    • 主材图片使用CDN存储
    • 频繁查询字段添加复合索引
  2. 缓存策略

    • 装修风格列表缓存(1小时)
    • 主材分类缓存(永不过期)
    • 合同状态缓存(实时更新)
  3. 业务优化

    • 预算计算使用缓存结果
    • 工程进度批量更新
    • 异步处理图片上传

答辩准备要点

1. 演示流程(3分钟)

  • 用户端:选择风格 → 生成预算 → 签订合同 → 查看工程
  • 管理员端:审核合同 → 安排工程 → 管理主材 → 处理售后

2. 技术亮点

  • 状态同步机制:合同与工程进度自动同步
  • 预算智能计算:基于风格自动生成预算方案
  • 全流程跟踪:设计-施工-售后的完整闭环

3. 常见问题准备

  • Q:如何处理合同变更? A:版本控制+变更记录+重新计算工期
  • Q:主材价格变动怎么办? A:价格历史记录+预算预警机制
  • Q:工程延期如何处理? A:进度预警+责任划分+违约金计算

结语

一站式家装系统的核心在于业务流程的完整性数据关联的准确性。重点关注以下三点:

  1. 合同管理:状态流转与工程进度的强关联
  2. 预算控制:动态计算与实时预警
  3. 进度跟踪:可视化展示与异常预警

采用SSM+Vue技术栈可稳定实现,数据库设计时注意业务约束的完整性。测试阶段重点验证状态同步和金额计算。

资源获取:需要完整源码和数据库脚本,评论区留言"家装系统"。

关键提醒:务必设计完善的合同状态机,这是系统业务流程的核心。

收藏本文,开发过程随时参考。祝各位毕设顺利!🎉