基于SpringBoot2+vue2的流浪宠物管理系统
1. 获取地址
https://fifteen.xiaobias.com/source/209
2. 项目简介
流浪宠物管理系统是一个基于Spring Boot + Mybatis-Plus + Vue/Element UI + Layui开发的综合性宠物救助平台。系统旨在帮助流浪动物救助机构或爱心人士管理流浪宠物的信息、领养申请、宠物用品销售、救助活动记录以及用户互动等业务。项目包含前台展示系统(面向普通用户)和后台管理系统(面向管理员),支持流浪宠物信息的发布与领养审核、宠物用品商城(商品浏览、购物车、订单支付、评价)、流浪动物救助动态(点赞/踩、收藏、留言)、公告资讯管理、用户中心等功能。
3. 技术栈
| 层级 | 技术/框架 | 说明 |
|---|---|---|
| 后端 | Spring Boot 2.2.2 | 主框架,提供RESTful API |
| Mybatis-Plus 2.3 | ORM框架,简化数据库操作 | |
| Apache Shiro 1.3.2 | 身份认证与权限控制 | |
| MySQL 5.7 | 关系型数据库 | |
| Fastjson / Hutool / Commons-lang3 | 工具库 | |
| 前端(后台) | Vue 2.x | 前端框架 |
| Element UI | UI组件库 | |
| Vue Router / Axios | 路由与HTTP请求 | |
| 前端(前台) | HTML5 / Layui / jQuery / Vue | 传统前端页面,部分区域使用Vue绑定数据 |
| 其他 | Maven | 项目构建 |
4. 详细介绍
4.1 模块功能概览
系统分为前台用户端和后台管理员端,主要功能模块如下:
4.1.1 流浪宠物管理
- 管理员可发布流浪宠物信息(名称、照片、类型、简介、认领状态)。
- 前台用户可查看所有流浪宠物列表及详情。
- 用户可对“未认领”的宠物提交领养申请,填写申请理由;管理员审核通过后宠物状态变为“已认领”。
4.1.2 宠物用品商城
- 商品管理:商品分类、名称、图片、价格、库存、上架/下架、逻辑删除。
- 购物车:用户可将商品加入购物车,修改购买数量。
- 订单流程:用户选择地址 → 提交订单 → 支付(余额支付)→ 管理员发货 → 用户确认收货 → 评价商品。
- 支持退款功能(已支付的订单可申请退款,恢复库存和用户余额)。
4.1.3 流浪动物救助动态
- 管理员或用户可发布救助文章(标题、现场图片、内容描述)。
- 普通用户可对救助动态进行点赞/点踩(每人限一次)、收藏、留言(支持管理员回复)。
- 按点击量自动计数,提供互动数据展示。
4.1.4 公告资讯
- 管理员发布系统公告(标题、类型、封面图、内容)。
- 前台展示公告列表及详情。
4.1.5 用户管理
- 用户注册、登录(支持手机号、身份证号唯一性校验)。
- 个人中心:修改个人信息、头像、密码,查看余额,充值。
- 收货地址管理(多地址,可设置默认地址)。
4.1.6 系统管理
- 管理员登录与权限控制(基于Shiro + Token)。
- 轮播图配置(后台可配置首页轮播图片)。
- 字典表维护(动态管理下拉选项,如宠物类型、订单状态等)。
4.2 数据库设计
yonghu:用户表(账号、密码、姓名、手机、身份证、头像、性别、邮箱、余额)chongwu:流浪宠物表(名称、照片、类型、认领状态、简介)chongwu_lingyang:领养申请表(宠物ID、用户ID、申请理由、审核状态、审核原因)chongwuyongpin:商品表(名称、照片、类型、积分价格、库存、原价、现价、点击次数、上下架)chongwuyongpin_order:订单表(订单号、地址、商品、用户、数量、实付价格、订单状态、支付类型)chongwuyongpin_commentback:商品评价表(评价内容、回复内容)cart:购物车表(用户、商品、数量)liulangdongwujiuzhu:救助动态表(标题、图片、赞数、踩数、点击量、内容)liulangdongwujiuzhu_collection:救助收藏表(用户、动态、收藏类型:收藏/赞/踩)liulangdongwujiuzhu_liuyan:救助留言表(留言内容、回复内容)address:收货地址表(收货人、电话、地址、是否默认)news:公告表(标题、图片、类型、内容)dictionary:字典表(字段名、编码、编码名称)users:管理员表token:用户登录凭证表
5. 部分代码
5.1 订单支付与库存扣减(后端Controller示例)
// 文件:src/main/java/com/controller/ChongwuyongpinOrderController.java@RequestMapping("/order")publicRadd(@RequestParamMap<String,Object>params,HttpServletRequestrequest){// 获取当前登录用户、地址、支付方式IntegeruserId=(Integer)request.getSession().getAttribute("userId");IntegeraddressId=Integer.valueOf(String.valueOf(params.get("addressId")));IntegerchongwuyongpinOrderPaymentTypes=Integer.valueOf(String.valueOf(params.get("chongwuyongpinOrderPaymentTypes")));// 解析购物车商品列表Stringdata=String.valueOf(params.get("chongwuyongpins"));JSONArrayjsonArray=JSON.parseArray(data);List<Map>chongwuyongpins=JSON.parseObject(jsonArray.toString(),List.class);// 循环处理每个商品for(Map<String,Object>map:chongwuyongpins){IntegerchongwuyongpinId=Integer.valueOf(String.valueOf(map.get("chongwuyongpinId")));IntegerbuyNumber=Integer.valueOf(String.valueOf(map.get("buyNumber")));ChongwuyongpinEntitychongwuyongpinEntity=chongwuyongpinService.selectById(chongwuyongpinId);// 库存校验if(chongwuyongpinEntity.getChongwuyongpinKucunNumber()<buyNumber){returnR.error(chongwuyongpinEntity.getChongwuyongpinName()+"的库存不足");}// 减库存chongwuyongpinEntity.setChongwuyongpinKucunNumber(chongwuyongpinEntity.getChongwuyongpinKucunNumber()-buyNumber);chongwuyongpinList.add(chongwuyongpinEntity);// 创建订单记录ChongwuyongpinOrderEntityorderEntity=newChongwuyongpinOrderEntity();orderEntity.setChongwuyongpinOrderUuidNumber(String.valueOf(newDate().getTime()));orderEntity.setAddressId(addressId);orderEntity.setChongwuyongpinId(chongwuyongpinId);orderEntity.setYonghuId(userId);orderEntity.setBuyNumber(buyNumber);orderEntity.setChongwuyongpinOrderTypes(3);// 已支付orderEntity.setChongwuyongpinOrderPaymentTypes(chongwuyongpinOrderPaymentTypes);// 计算实付金额并校验余额Doublemoney=chongwuyongpinEntity.getChongwuyongpinNewMoney()*buyNumber;if(yonghuEntity.getNewMoney()-money<0){returnR.error("余额不足");}yonghuEntity.setNewMoney(yonghuEntity.getNewMoney()-money);orderEntity.setChongwuyongpinOrderTruePrice(money);chongwuyongpinOrderList.add(orderEntity);}// 批量保存订单、更新商品库存、更新用户余额、删除购物车记录chongwuyongpinOrderService.insertBatch(chongwuyongpinOrderList);chongwuyongpinService.updateBatchById(chongwuyongpinList);yonghuService.updateById(yonghuEntity);cartService.deleteBatchIds(cartIds);returnR.ok();}5.2 流浪宠物领养审核(后端Service与Controller逻辑)
// 文件:src/main/java/com/controller/ChongwuLingyangController.java// 用户提交领养申请@RequestMapping("/add")publicRadd(@RequestBodyChongwuLingyangEntitychongwuLingyang,HttpServletRequestrequest){// 设置默认审核状态为“审核中”chongwuLingyang.setChongwuLingyangYesnoTypes(1);chongwuLingyang.setCreateTime(newDate());chongwuLingyangService.insert(chongwuLingyang);returnR.ok();}// 管理员审核通过/拒绝(后端通过update方法修改审核状态)@RequestMapping("/update")publicRupdate(@RequestBodyChongwuLingyangEntitychongwuLingyang,HttpServletRequestrequest){// 若审核通过,同时将对应宠物的认领状态改为“已认领”if(chongwuLingyang.getChongwuLingyangYesnoTypes()==2){ChongwuEntitychongwu=chongwuService.selectById(chongwuLingyang.getChongwuId());chongwu.setChongwuStatusTypes(2);// 2表示已认领chongwuService.updateById(chongwu);}chongwuLingyangService.updateById(chongwuLingyang);returnR.ok();}5.3 前台页面商品详情与加入购物车(JavaScript/Vue)
// 文件:src/main/resources/front/front/pages/chongwuyongpin/detail.htmladdChongwuyongpinCart(){// 库存限制校验if(this.detail.chongwuyongpinKucunNumber>0&&this.detail.chongwuyongpinKucunNumber<this.buyNumber){layui.layer.msg(`库存不足`,{time:2000,icon:5});returnfalse;}// 查询是否已在购物车layui.http.request('cart/list','get',{yonghuId:localStorage.getItem('userid'),chongwuyongpinId:this.detail.id,},(res)=>{if(res.data.list.length>0){layui.layer.msg("该商品已经添加到购物车",{time:2000,icon:5});returnfalse;}layui.http.requestJson('cart/add','post',{yonghuId:localStorage.getItem('userid'),chongwuyongpinId:this.detail.id,buyNumber:this.buyNumber,},(res)=>{if(res.code==0){layui.layer.msg('添加到购物车成功',{time:2000,icon:6});}});});}6. 部分截图
7. 项目总结
本项目是一个功能完整的流浪宠物管理系统,涵盖了流浪宠物信息发布、领养审核、宠物用品商城、动态救助互动、公告管理等核心业务。系统采用前后端分离架构(后台使用Vue+Element UI,前台使用传统HTML+Layui),后端基于Spring Boot + Mybatis-Plus实现快速开发,数据库设计合理,支持订单流程、库存管理、用户余额支付等复杂业务逻辑。
通过该项目,可以学习到:
- Spring Boot整合Mybatis-Plus、Shiro完成权限控制与数据访问。
- 前后端交互(Token认证、RESTful API设计)。
- 典型电商模块(购物车、订单、支付、退款、评价)的实现方法。
- 点赞/踩/收藏/留言等社交互动功能的数据库设计与代码实现。
- 动态字典表管理、文件上传、分页查询等通用技术。
项目代码结构清晰,注释完整,可直接部署运行,适用于毕业设计、课程实践或作为小型救助站信息化管理的原型系统。
