1. 项目背景与核心需求
纳雍县梦金园珠宝店作为当地知名珠宝零售企业,面临着传统手工管理模式的效率瓶颈。我在实地调研中发现,该店目前存在三大痛点:一是商品信息记录依赖纸质台账,每月盘点耗时长达3个工作日;二是会员数据分散在5个不同的Excel文件中,营销活动触达率不足30%;三是销售报表需要人工汇总,管理层无法实时掌握经营数据。
这个毕业设计项目正是要解决这些实际问题。通过构建基于SSM+Vue的珠宝店管理系统,实现以下核心功能模块:
- 商品管理:支持条码扫描录入、库存预警、多维分类检索
- 会员体系:整合消费记录、积分管理、生日提醒
- 销售分析:自动生成日报/月报、热销品分析、员工业绩统计
- 权限控制:店长/店员/财务分级权限体系
提示:珠宝行业管理系统需特别注意商品唯一标识问题。实际开发中建议采用"条码+自增ID"双标识方案,避免不同批次的同款商品被系统误判。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 为什么选择SSM+Vue组合
在技术验证阶段,我对比了三种常见方案:
- SpringBoot+Thymeleaf:开发速度快但前后端耦合度高
- Node.js全栈:适合高并发但不便利用校内的Java教学资源
- SSM+Vue:既能发挥Java后端稳定性,又能获得Vue的组件化优势
最终选择SSM(Spring+SpringMVC+MyBatis)作为后端框架,主要考虑到:
- 学校实验室环境已配置好Tomcat+MySQL组合
- MyBatis的动态SQL便于处理珠宝行业复杂的查询条件
- Spring事务管理能确保销售单生成的原子性操作
前端选用Vue 2.x而非3.x版本,因为:
- ElementUI组件库对管理后台的兼容性更成熟
- 毕业答辩时评委老师更熟悉Vue2的语法特性
- 社区资源丰富,遇到问题容易找到解决方案
2.2 系统架构示意图(伪代码表示)
java复制// 后端分层架构
src/
├── main/
│ ├── java/
│ │ ├── com.mengjinyuan/
│ │ │ ├── config/ # Spring配置类
│ │ │ ├── controller/ # 销售/库存/会员等控制器
│ │ │ ├── service/ # 业务逻辑层
│ │ │ ├── dao/ # MyBatis映射接口
│ │ │ └── entity/ # 商品/订单等实体类
│ ├── resources/
│ │ ├── mapper/ # XML映射文件
│ │ └── application.properties
// 前端目录结构
src/
├── api/ # Axios请求封装
├── assets/
├── components/ # 可复用组件
│ ├── charts/ # ECharts报表组件
│ └── form/ # 商品表单组件
├── router/ # Vue路由配置
├── store/ # Vuex状态管理
└── views/ # 页面视图
3. 核心功能实现细节
3.1 商品管理模块关键技术
珠宝商品具有特殊属性需要特别设计数据库:
sql复制CREATE TABLE `product` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`gemstone_type` ENUM('钻石','翡翠','黄金','银饰') NOT NULL,
`purity` VARCHAR(10) COMMENT '成色如AU999',
`weight` DECIMAL(10,2) COMMENT '克重',
`certificate_no` VARCHAR(50) UNIQUE COMMENT '鉴定证书编号',
`main_image` VARCHAR(255) COMMENT '3D展示图URL',
`status` TINYINT DEFAULT 1 COMMENT '1在售 2已预定 3已售出'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
前端采用ElementUI的Upload组件实现图片上传时,需要特别注意:
javascript复制// 限制上传文件为3D展示图专用格式
beforeUpload(file) {
const isGLB = file.type === 'model/gltf-binary';
if (!isGLB) {
this.$message.error('请上传GLB格式的3D模型文件');
return false;
}
return true;
}
3.2 销售开单的并发控制
当多个店员同时销售同一款限量商品时,采用乐观锁机制避免超卖:
java复制@Transactional
public SaleResult createOrder(OrderDTO dto) {
Product product = productMapper.selectById(dto.getProductId());
if (product.getStock() < dto.getQuantity()) {
throw new BusinessException("库存不足");
}
// 使用version字段实现乐观锁
int updated = productMapper.reduceStock(
dto.getProductId(),
dto.getQuantity(),
product.getVersion());
if (updated == 0) {
throw new ConcurrentUpdateException("商品库存已变更,请刷新后重试");
}
// ...后续订单创建逻辑
}
4. 典型问题与解决方案
4.1 珠宝图片加载性能优化
初期直接展示原图导致列表页加载缓慢,通过以下措施改进:
- 使用Thumbnailator生成三种尺寸缩略图
- 列表页:300x300像素
- 详情页:800x800像素
- 原图:保留原始尺寸
- 实现懒加载技术
vue复制<img v-lazy="item.thumbnailUrl" :alt="item.name" class="product-image"> - 配置Nginx静态资源缓存
nginx复制location ~* \.(jpg|jpeg|png)$ { expires 30d; add_header Cache-Control "public"; }
4.2 销售数据导出Excel乱码
解决中文导出乱码问题的完整方案:
- 后端设置响应头
java复制response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); - 前端Blob对象处理
javascript复制axios.get('/api/export', { responseType: 'blob' }).then(res => { const blob = new Blob([res.data], {type: 'application/vnd.ms-excel'}); saveAs(blob, '销售报表.xlsx'); // 使用file-saver库 });
5. 毕业设计亮点呈现
5.1 三维珠宝展示集成
通过Three.js实现商品三维旋转查看:
javascript复制import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
const loader = new GLTFLoader();
loader.load('models/ring.glb', (gltf) => {
scene.add(gltf.scene);
// 添加轨道控制器
controls = new OrbitControls(camera, renderer.domElement);
animate();
});
5.2 智能推荐算法
基于用户历史购买记录实现协同过滤推荐:
python复制# 使用surprise库进行离线计算
from surprise import Dataset, KNNBasic
data = Dataset.load_builtin('ml-100k')
algo = KNNBasic(sim_options={'user_based': False})
algo.fit(data.build_full_trainset())
# 为当前用户推荐Top3商品
user_inner_id = algo.trainset.to_inner_uid(current_user)
user_neighbors = algo.get_neighbors(user_inner_id, k=3)
6. 论文写作要点建议
-
系统设计章节建议结构:
- 6.1 珠宝行业特性分析
- 6.2 非功能性需求(安全性/并发性)
- 6.3 ER图与数据库设计
- 6.4 关键算法流程图
-
实验验证部分需包含:
- 压力测试:JMeter模拟50并发下单
- 兼容性测试:不同手机型号扫码功能验证
- 用户测试:店员操作效率对比数据
-
论文查重规避技巧:
- 技术原理部分适当添加珠宝行业应用场景描述
- 将Spring配置代码改为文字说明+配置片段组合
- 系统截图需包含纳雍县梦金园的实际门店背景
在系统部署阶段,建议使用Docker-compose编排服务,特别是解决MySQL与Redis的版本兼容问题。通过定义docker-compose.yml文件,可以确保答辩现场快速搭建演示环境,避免因环境差异导致功能异常。
