基于SpringBoot的宠物管理系统的设计与实现 1. 项目背景与意义随着社会经济发展和人们生活水平的提高饲养宠物已成为许多家庭生活的一部分。宠物数量的快速增长使得传统的线下宠物店或手写记录的管理方式面临巨大挑战如信息记录不完整、查询效率低下、服务预约混乱等。因此开发一个高效、便捷、功能完善的宠物管理系统具有重要的现实意义。本系统旨在通过现代化的Web技术为宠物店、宠物医院或宠物主人提供一个集宠物信息管理、健康记录、服务预约、消费记录于一体的综合管理平台。系统的实现将有助于提升宠物服务行业的数字化水平优化管理流程改善用户体验。2. 技术栈选型本项目采用前后端分离的架构模式后端基于SpringBoot框架构建前端使用Vue.js数据库选用MySQL。具体技术栈如下2.1 后端技术核心框架Spring Boot 2.7.x安全框架Spring Security JWT数据持久层MyBatis-Plus数据库MySQL 8.0API文档Knife4j (Swagger增强)缓存Redis项目管理Maven2.2 前端技术框架Vue 3 Composition APIUI组件库Element Plus状态管理Pinia路由Vue RouterHTTP客户端Axios2.3 开发与部署开发工具IntelliJ IDEA, VS Code版本控制Git容器化Docker3. 系统核心功能模块设计系统主要分为后台管理端和用户端宠物主人核心功能模块如下3.1 用户与权限管理用户注册、登录、个人信息管理。基于角色的权限控制RBAC区分管理员、店员、普通用户。3.2 宠物档案管理宠物基本信息录入品种、年龄、性别、照片等。宠物健康记录疫苗、驱虫、病史。宠物成长日记记录。3.3 服务预约与消费在线预约洗澡、美容、寄养、医疗等服务。服务项目与价格管理。订单生成、支付集成第三方支付与消费记录查询。3.4 数据统计与报表宠物品种分布、会员增长等数据可视化。营收报表、热门服务分析。4. 数据库核心表设计以下是几个核心实体表的结构设计-- 用户表 CREATE TABLE sys_user ( id bigint NOT NULL AUTO_INCREMENT COMMENT 主键, username varchar(50) NOT NULL COMMENT 用户名, password varchar(255) NOT NULL COMMENT 密码, nickname varchar(50) DEFAULT NULL COMMENT 昵称, phone varchar(20) DEFAULT NULL COMMENT 手机号, avatar varchar(500) DEFAULT NULL COMMENT 头像, role varchar(20) NOT NULL DEFAULT USER COMMENT 角色, status tinyint NOT NULL DEFAULT 1 COMMENT 状态, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_username (username) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表; -- 宠物表 CREATE TABLE pet ( id bigint NOT NULL AUTO_INCREMENT, user_id bigint NOT NULL COMMENT 主人ID, name varchar(50) NOT NULL COMMENT 宠物名, type varchar(20) DEFAULT NULL COMMENT 类型猫/狗等, breed varchar(50) DEFAULT NULL COMMENT 品种, birthday date DEFAULT NULL COMMENT 生日, gender tinyint DEFAULT NULL COMMENT 性别, photo varchar(500) DEFAULT NULL COMMENT 照片, remark text COMMENT 备注, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_user_id (user_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT宠物表; -- 服务预约表 CREATE TABLE appointment ( id bigint NOT NULL AUTO_INCREMENT, pet_id bigint NOT NULL COMMENT 宠物ID, service_type varchar(50) NOT NULL COMMENT 服务类型, appoint_time datetime NOT NULL COMMENT 预约时间, status varchar(20) NOT NULL DEFAULT PENDING COMMENT 状态, amount decimal(10,2) DEFAULT NULL COMMENT 金额, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_pet_id (pet_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT服务预约表;5. 核心代码实现示例5.1 宠物信息分页查询接口 (Controller)RestController RequestMapping(/api/pet) Api(tags 宠物管理) public class PetController { Autowired private PetService petService; GetMapping(/page) ApiOperation(分页查询宠物列表) public RPageResultPetVO pagePet(PetQueryDTO queryDTO) { PageResultPetVO pageResult petService.pageQuery(queryDTO); return R.ok(pageResult); } PostMapping ApiOperation(新增宠物) public RLong addPet(RequestBody Valid PetDTO petDTO) { Long petId petService.addPet(petDTO); return R.ok(petId); } }5.2 宠物服务层实现 (Service)Service Slf4j public class PetServiceImpl implements PetService { Autowired private PetMapper petMapper; Override public PageResultPetVO pageQuery(PetQueryDTO queryDTO) { // 构建查询条件 LambdaQueryWrapperPet wrapper new LambdaQueryWrapper(); wrapper.eq(queryDTO.getUserId() ! null, Pet::getUserId, queryDTO.getUserId()) .like(StringUtils.isNotBlank(queryDTO.getName()), Pet::getName, queryDTO.getName()) .orderByDesc(Pet::getCreateTime); // 执行分页查询 PagePet page new Page(queryDTO.getPageNum(), queryDTO.getPageSize()); PagePet petPage petMapper.selectPage(page, wrapper); // 转换为VO ListPetVO voList petPage.getRecords().stream() .map(this::convertToVO) .collect(Collectors.toList()); return new PageResult(petPage.getTotal(), voList); } Override Transactional(rollbackFor Exception.class) public Long addPet(PetDTO petDTO) { // DTO 转 Entity Pet pet new Pet(); BeanUtils.copyProperties(petDTO, pet); pet.setUserId(SecurityUtils.getCurrentUserId()); // 获取当前登录用户ID // 保存 petMapper.insert(pet); log.info(新增宠物成功ID: {}, pet.getId()); return pet.getId(); } private PetVO convertToVO(Pet pet) { PetVO vo new PetVO(); BeanUtils.copyProperties(pet, vo); // 可补充其他字段转换逻辑 return vo; } }5.3 使用JWT进行接口鉴权 (Filter)Component public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { Autowired private RedisCache redisCache; Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { // 1. 从请求头获取token String token request.getHeader(Authorization); if (StringUtils.isBlank(token) || !token.startsWith(Bearer )) { chain.doFilter(request, response); return; } token token.substring(7); // 2. 解析token获取用户ID String userId; try { Claims claims JwtUtil.parseToken(token); userId claims.getSubject(); } catch (Exception e) { chain.doFilter(request, response); return; } // 3. 从Redis中获取用户信息 String redisKey login:user: userId; LoginUser loginUser redisCache.getCacheObject(redisKey); if (Objects.isNull(loginUser)) { chain.doFilter(request, response); return; } // 4. 存入SecurityContextHolder UsernamePasswordAuthenticationToken authenticationToken new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authenticationToken); chain.doFilter(request, response); } }6. 总结与展望本文介绍了基于SpringBoot的宠物管理系统的设计与实现涵盖了项目背景、技术栈选型、核心功能模块、数据库设计以及关键代码示例。该系统采用主流技术栈具备良好的可扩展性和可维护性能够满足中小型宠物服务机构的日常管理需求。未来可考虑的功能扩展方向包括集成智能硬件如宠物智能项圈数据同步、引入AI图像识别进行宠物健康初筛、开发微信小程序端以触达更广泛的用户群体等。