返回作品

垃圾分类回收系统

创建于 2025 年 3 月 20 日

标签
  • Java 8
  • Spring Boot 2.5
  • RuoYi 3.8.8
  • MyBatis
  • MySQL 5.7
  • Redis
  • Vue 3
  • Element Plus
  • ECharts

项目介绍

垃圾分类回收管理系统是一套面向社区环保场景的全流程业务平台,把”这垃圾算什么类、扔到哪里、谁来上门收、服务好不好”串成一条完整链路:居民先在垃圾分类指南里查清物品归属,从物品详情直接发起回收预约;回收人员接单后上门处理并推进状态;预约完成后居民还能对服务打分、提交投诉。项目同时配套知识科普文章与在线测试,用答题积分鼓励居民学习分类知识。

系统基于若依 RuoYi-Vue 3.8.8 二次开发,业务代码集中在 gc-management 模块,分为 manage(管理端 REST 接口,/manage/**)与 app(面向用户的前台接口,/api/**)两套控制器。前台接口注释里明确列出的功能清单是”垃圾分类列表、垃圾信息列表、知识测试、知识文章阅读、垃圾回收预约、个人中心”,并支持通过 http://localhost:8080/swagger-ui/index.html 在线调试接口。

项目架构

项目是标准的若依单体架构:后端按 gc-admingc-commongc-frameworkgc-systemgc-managementgc-quartzgc-generatorgc-ui 模块划分,认证基于 Spring Security + JWT,数据库使用 MySQL(业务库 garbage_collection),Redis 承担验证码与会话缓存,Quartz 提供定时任务框架。核心业务表通过若依代码生成器(gen_table 记录)一键生成 CRUD 后再手工扩展,包括:

  • garbage_categories:垃圾品类表,内置 14 个分类(可回收、有害、湿/干垃圾,以及电子产品、金属、塑料、玻璃、纺织品、纸质、有机废物、危险废物、建材、其他);
  • garbage_items:垃圾物品库,通过 category_id 外键关联品类,保存名称、描述与图片路径;
  • garbage_collection_appointment:回收预约表,记录预约用户(create_by)、回收人员(update_by)、预约时间、投放地点、状态、服务评价与投诉信息;
  • gc_article:知识科普文章表;questions:分类测试题库表。

前端为若依 Vue3 版(Vue 3.4 + Element Plus 2.4 + Pinia + Vite),同一套工程承载三种视图:管理端页面(views/manage/*,垃圾分类、物品、文章、题目、预约管理与数据处理)、用户端页面(views/user/*,数据看板、垃圾分类指南、知识测试、文章阅读)以及预约管理页(views/appointment/index.vue),图表统一使用 ECharts 5 渲染。

核心功能

  • 垃圾分类指南:用户端以卡片墙展示物品库,每个物品带品类色标与详情弹窗(描述、处理方法、小贴士),支持按名称模糊搜索与品类筛选。后端 GarbageItemsMapper 通过 LEFT JOIN garbage_categories 一次性带出分类名称(selectAllGarbageItemsWithCategoryName),模糊查询使用 name like concat('%', #{name}, '%'),避免注入风险。
  • 在线预约回收:在物品详情弹窗点击”预约回收”打开预约表单,填写预约日期(前端 disabled-date 限制不可选过去日期、提示至少提前 24 小时)、投放地点、回收数量,并可上传投放地点照片辅助回收人员定位;提交成功后展示预约编号。预约数据走 AppGarbageCollectionAppointmentController/api/appointment/add),查询个人预约时服务端强制 setCreateBy(String.valueOf(SecurityUtils.getUserId())),用户只能看到自己的记录。
  • 回收处理闭环与角色权限:系统单独配置”回收人员”角色(roleKey = recycle,操作日志可见菜单授权 manage:appointment:list/add/edit/remove/export)。回收人员在处理页(views/manage/deal/index.vue)将预约状态从”待处理”推进为”回收中""已完成”;GarbageCollectionAppointmentServiceImpl.update 会遍历当前登录用户的角色,只有命中”回收人员”才把 update_by 写为回收人员 ID。预约创建时自动初始化 updateBy = "暂无回收人员回收"complaints = "无投诉"serviceRating = 5
  • 服务评价与投诉:预约状态为已完成时,预约管理页动态显示”评价""投诉”按钮,评价走 recycle_service_comment 数据字典(极差/差/中/好等星级),投诉信息写入 complaints 字段,构成”处理 — 反馈”的完整服务闭环。
  • 知识科普与测试gc_article 提供垃圾分类重要性、塑料垃圾危害、电子垃圾处理等科普文章;题库内置 21 道选择题,前台接口 AppQuestionsControllerCollections.shuffle(list) 随机打乱后截取前 10 题返回,前端逐题作答并统计得分(每题 10 分)、答对题数与用时,答对题目获得积分奖励。
  • 数据看板:用户端看板展示垃圾分类数量、垃圾总数量、知识科普数量、预约回收数量四张统计卡片,配 ECharts 环形饼图(各品类物品占比,按分类聚合统计)与近 30 天预约趋势折线图(按 createTime 逐日累加),接口异常时自动回退演示数据;管理端另有 data-statistics 页面,用柱状图呈现预约处理状态分布与评价数据分布。

功能截图

暂无运行截图。

快速上手

项目为 Maven + pnpm 工程,要求 JDK 1.8、Node 16+。环境准备分四步:

  1. 新建 MySQL 数据库 garbage_collection,导入 garbage_collection.sql(或更新版 20250320-2.sql),包含业务表、若依系统表、菜单权限、字典与演示数据;
  2. 启动本地 Redis,按环境修改 application-druid.yml 中的数据库连接与 application.yml 中的 Redis 配置;
  3. 后端在 垃圾回收后端 目录执行 mvn spring-boot:run 启动(默认端口 8080),前端在 垃圾回收前端/Vue3 目录执行 pnpm install && pnpm dev(默认端口 80,开发代理将 /api/manage 转发到后端);
  4. 使用管理员账号(若依默认 admin)登录进入管理端,演示账号 huishou(昵称”小收”)绑定”回收人员”角色,可登录处理页体验接单流程。

接口调试可直接访问 http://localhost:8080/swagger-ui/index.html,预约新增、个人预约列表等前台接口均可在线调用。

总结

这个项目的价值在于把垃圾分类这件”小事”做成了完整的产品闭环:知识库解决”怎么分”的认知问题,预约与上门回收解决”谁来收”的服务问题,评价投诉解决”服务好不好”的质量问题,知识测试与数据看板则承担教育与运营激励。技术上它是一次典型的若依业务二次开发实践——代码生成器产出基础 CRUD,再围绕预约状态机补上角色感知的业务逻辑(回收人员才可认领)、按当前用户隔离数据(只能看自己的预约)、字典驱动评价选项,最后用 ECharts 把业务数据可视化。

从实现细节看,updateBy = "暂无回收人员回收"complaints = "无投诉" 这类默认值设计,以及前端”接口失败回退演示数据”的处理,都体现了从演示走向可用的小心思。后续可扩展的方向包括:预约时间与回收人员排班的冲突校验、积分兑换与环保贡献值排行、预约消息的短信/站内信提醒,以及将垃圾分类知识库对接图像识别做拍照识垃圾。