1. 项目概述
这个猫咪商城管理系统是一个典型的B2C电商平台,采用前后端分离架构,后端基于SpringBoot框架,前端使用Vue.js实现。系统主要面向宠物用品细分市场,特别是猫咪相关商品的在线销售场景。
我在实际开发中发现,宠物电商系统与传统电商有几个显著差异点:商品SKU相对简单但规格参数特殊(如猫粮的适用年龄、口味等),用户群体更垂直且复购率高,订单金额较小但购买频次高。这些特点直接影响到了系统的技术选型和功能设计。
2. 技术架构解析
2.1 后端技术栈
SpringBoot 2.7.x作为基础框架,搭配以下核心组件:
- 持久层:MyBatis-Plus 3.5.x(简化CRUD操作)
- 数据库:MySQL 8.0(关系型)+ Redis 7.0(缓存)
- 安全框架:Spring Security + JWT
- 其他:Lombok(简化代码)、Hutool(工具集)
选择这套组合主要考虑:
- MyBatis-Plus的ActiveRecord模式非常适合电商业务中频繁的增删改查
- Redis不仅用于缓存,还承担了秒杀活动的库存计数
- JWT的无状态特性适合商城类应用的高并发场景
2.2 前端技术栈
Vue 3.x全家桶包括:
- 构建工具:Vite 3.x
- UI框架:Element Plus
- 状态管理:Pinia
- 路由:Vue Router 4.x
特别优化点:
- 使用Vite的按需编译显著提升开发体验
- 自定义Element Plus主题匹配猫咪主题的粉色调
- 封装axios拦截器统一处理401跳转登录页
3. 核心功能实现
3.1 商品管理系统
商品模型设计考虑了宠物用品特性:
java复制public class Product {
private Long id;
private String name; // 商品名称
private String petType; // 宠物类型(猫/狗等)
private String category; // 分类(食品/玩具等)
private List<Spec> specs; // 规格参数
@Data
public static class Spec {
private String key; // 如"适用年龄"
private String value; // 如"幼猫(0-1岁)"
}
}
前端采用多规格选择组件:
vue复制<el-select
v-for="spec in product.specs"
:key="spec.key"
v-model="selectedSpecs[spec.key]">
<el-option
v-for="item in spec.values"
:label="item"
:value="item"/>
</el-select>
3.2 订单支付流程
支付流程的特殊处理:
- 预减库存使用Redis原子操作:
java复制Long stock = redisTemplate.opsForValue()
.decrement("product:stock:"+productId);
if(stock < 0){
// 库存不足处理
}
- 订单状态机设计:
mermaid复制stateDiagram
[*] --> 待支付
待支付 --> 已取消: 超时未支付
待支付 --> 已支付: 支付成功
已支付 --> 已发货
已发货 --> 已完成: 确认收货
已发货 --> 退款中: 申请退款
注意:实际开发中宠物食品类商品需特别注意7天无理由退货的特殊政策
4. 特色功能实现
4.1 猫咪社区模块
仿照小红书风格的UGC社区:
- 富文本编辑器:整合了WangEditor
- 图片上传:使用阿里云OSS直传
- 内容审核:接入阿里云内容安全API
核心接口示例:
java复制@PostMapping("/post")
public Result createPost(@Valid @RequestBody PostDTO dto) {
// 内容安全审核
ContentAuditResult audit = ossService.auditText(dto.getContent());
if(!audit.isPass()){
throw new BusinessException("内容包含违规信息");
}
return success(postService.savePost(dto));
}
4.2 智能推荐系统
基于用户行为的简易推荐算法:
- 协同过滤:使用Redis的ZSET存储用户偏好
- 实时计算:Flink处理用户浏览日志
- 混合推荐:结合销量排行和个性化推荐
算法核心逻辑:
python复制# 伪代码示例
def recommend(user_id):
# 获取用户历史行为
history = get_user_history(user_id)
# 找出相似用户
similar_users = find_similar_users(history)
# 合并推荐结果
return merge_recommendations(
history_based=history,
similar_based=similar_users,
hot_items=get_hot_items()
)
5. 部署与优化
5.1 容器化部署
Docker Compose编排方案:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
redis:
image: redis:7.0-alpine
backend:
build: ./backend
depends_on:
- mysql
- redis
frontend:
build: ./frontend
ports:
- "80:80"
关键优化参数:
- MySQL配置了连接池和查询缓存
- Redis设置了最大内存限制和淘汰策略
- Nginx开启gzip和静态资源缓存
5.2 性能优化记录
压测中发现的问题及解决方案:
| 问题现象 | 排查过程 | 解决方案 |
|---|---|---|
| 下单接口TPS低 | 发现MySQL行锁竞争 | 改为Redis预减库存 |
| 商品列表加载慢 | Nginx日志显示大量静态请求 | 开启CDN加速 |
| 搜索接口超时 | ES分片配置不合理 | 重新规划分片策略 |
6. 项目总结
这个项目在几个方面具有参考价值:
- 垂直领域电商的差异化设计
- 高并发场景下的技术实践
- 前后端分离项目的协作模式
实际开发中收获的经验:
- 宠物用品需要特别关注保质期管理
- 用户更在意商品详情中的实物拍摄图
- 定期备份数据库的重要性(特别是订单数据)
源码中值得关注的几个关键点:
ProductServiceImpl.java中的SKU组合算法PaymentCallbackController.java的幂等处理recommend-engine模块的混合推荐实现
项目后续可扩展方向:
- 接入微信小程序端
- 增加宠物健康咨询服务
- 实现订阅制自动配送功能