1. 项目概述
这个基于SpringBoot的宠物商城系统是一个典型的B2C电商平台,专为宠物用品垂直领域设计。我在实际开发中发现,相比通用电商系统,宠物类商城需要特别关注活体宠物的展示规则、宠物用品的分类体系以及养宠知识社区等特色功能模块。
系统采用经典的三层架构设计,前端使用Thymeleaf模板引擎实现服务端渲染,后端基于SpringBoot 2.7.x构建,数据库选用MySQL 8.0。特别之处在于针对宠物行业特性,设计了宠物健康档案管理、智能推荐养宠方案等增值服务功能。
2. 核心功能模块解析
2.1 商品管理系统
宠物商城的商品管理比普通电商更复杂,需要处理两种商品类型:
- 实物商品:宠物食品、玩具等标准SKU
- 活体宠物:需要特殊信息字段(品种、年龄、免疫情况等)
商品表设计关键字段示例:
CREATE TABLE `product` ( `id` bigint NOT NULL AUTO_INCREMENT, `type` tinyint COMMENT '1-实物 2-活体', `category_id` bigint COMMENT '三级分类ID', `title` varchar(100) COMMENT '商品标题', `sub_title` varchar(200) COMMENT '副标题(如品种)', `main_image` varchar(255) COMMENT '主图URL', `detail_html` text COMMENT '详情HTML', `price` decimal(10,2) COMMENT '售价', `stock` int COMMENT '库存', `status` tinyint COMMENT '状态', `pet_age` varchar(20) COMMENT '年龄(仅活体)', `vaccine` tinyint COMMENT '疫苗情况(仅活体)', `created_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;2.2 智能推荐系统
基于用户行为数据构建的混合推荐模型:
- 协同过滤:根据相似用户的购买记录推荐
- 内容推荐:基于商品标签匹配
- 热销榜单:全站/类目维度统计
推荐服务核心逻辑代码片段:
public List<Product> recommendProducts(Long userId) { // 获取用户画像 UserProfile profile = userService.getProfile(userId); // 并行获取各推荐源结果 CompletableFuture<List<Product>> cf1 = CompletableFuture.supplyAsync( () -> cfRecommender.recommend(profile)); CompletableFuture<List<Product>> cf2 = CompletableFuture.supplyAsync( () -> contentRecommender.recommend(profile)); // 合并并去重 return Stream.concat(cf1.join().stream(), cf2.join().stream()) .distinct() .limit(10) .collect(Collectors.toList()); }3. 关键技术实现
3.1 高并发订单处理
采用分布式锁+库存预扣减方案解决超卖问题:
public boolean createOrder(OrderDTO orderDTO) { // 分布式锁Key格式:lock:product:{skuId} String lockKey = "lock:product:" + orderDTO.getSkuId(); RLock lock = redissonClient.getLock(lockKey); try { // 尝试加锁,最多等待100ms,锁持有时间30s if (lock.tryLock(100, 30000, TimeUnit.MILLISECONDS)) { // 检查库存 int stock = productService.getStock(orderDTO.getSkuId()); if (stock < orderDTO.getQuantity()) { throw new BusinessException("库存不足"); } // 预扣减库存(实际扣减在支付成功后完成) productService.freezeStock(orderDTO.getSkuId(), orderDTO.getQuantity()); // 创建订单 return orderService.create(orderDTO); } } finally { lock.unlock(); } return false; }3.2 宠物健康档案管理
采用MongoDB存储非结构化的健康记录:
@Document(collection = "pet_health_records") public class PetHealthRecord { @Id private String id; private Long petId; private Long ownerId; private List<VaccineRecord> vaccines; private List<MedicalHistory> medicalHistory; private List<DailyRecord> dailyRecords; @Data public static class VaccineRecord { private String vaccineName; private LocalDate date; private String hospital; } }4. 部署与运维方案
4.1 容器化部署
Docker Compose编排文件示例:
version: '3' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} volumes: - ./mysql/data:/var/lib/mysql - ./mysql/conf:/etc/mysql/conf.d ports: - "3306:3306" redis: image: redis:6 ports: - "6379:6379" app: build: . ports: - "8080:8080" depends_on: - mysql - redis environment: SPRING_PROFILES_ACTIVE: prod4.2 性能优化实践
缓存策略:
- 商品详情:Redis缓存 + 本地缓存二级架构
- 分类菜单:Ehcache本地缓存
- 热点数据:提前加载到缓存
SQL优化示例:
-- 反例:N+1查询问题 SELECT * FROM product WHERE category_id = 1; -- 正例:批量查询+联合查询 SELECT p.*, c.name as category_name FROM product p JOIN category c ON p.category_id = c.id WHERE p.category_id IN (1,2,3);5. 开发注意事项
活体宠物特殊处理:
- 需要单独审核机制
- 展示时需标注疫苗、驱虫情况
- 物流必须使用专业活体运输
支付对接要点:
- 宠物类目在某些支付渠道属于特殊类目
- 需要准备《活体销售协议》等资质文件
法律合规:
- 禁止交易的宠物品种清单
- 活体销售退换货特殊规则
性能监控指标:
- 订单创建成功率
- 库存扣减耗时
- 推荐点击率
6. 扩展功能建议
宠物社区UGC系统:
- 养宠日记
- 问答板块
- 宠物社交
智能客服:
- 常见养宠问题自动回复
- 宠物健康咨询转人工
线下服务对接:
- 宠物医院预约
- 美容服务套餐
物联网整合:
- 智能喂食器数据对接
- 宠物定位设备联动
这套系统在实际运营中,需要特别注意活体宠物的展示规范和交易流程设计。我们团队在开发过程中发现,采用异步审核机制配合专业物流对接,可以显著降低活体交易的纠纷率。对于源码中的支付模块,建议根据实际业务地区选择适合的支付渠道,特别注意宠物类目的特殊限制条件。