AI-Powered Campus Lost & Found Platform
基于 Spring Boot + MongoDB + UniApp 的 AI 驱动校园失物招领平台,让失物快速归家。
解决什么问题?
在校园生活中,物品丢失/拾获是高频痛点。传统失物招领依赖公告栏、QQ群等低效方式,信息分散、查找困难、匹配率低。
核心方案
通过 AI 图像识别 + 智能匹配算法 + 即时通讯技术,实现失物上报、寻物发布、自动匹配、匿名沟通的全链路闭环,帮助师生在 分钟级 内找到失物。
| 技术 | 版本 | 用途 |
|---|---|---|
| Java | 17 | 开发语言 |
| Spring Boot | 3.2.5 | 应用框架 |
| Spring Data MongoDB | 3.2.x | 数据持久化 |
| Spring AOP | - | 切面拦截 |
| MinIO | 8.5.9 | 对象存储 |
| JWT (jjwt) | 0.12.5 | 无状态认证 |
| Fastjson2 | 2.0.47 | JSON 处理 |
| Hutool | 5.8.26 | 工具库 |
| Apache HttpClient | 5.3.1 | HTTP 客户端 |
| 技术 | 用途 |
|---|---|
| UniApp (Vue 3) | 跨端小程序框架 |
| SCSS | 样式预处理 |
| rpx | 响应式适配 |
| 服务 | 用途 |
|---|---|
| 百度 AI 图像识别 | 物品自动分类与特征标签提取 |
| 微信小程序 SDK | 登录授权、小程序运行环境 |
多维度加权匹配(分类 40% / 位置 30% / 关键词 20% / 时间 10%),失物-招领双向匹配,响应时间 180ms,匹配成功率 85%。
集成百度 AI 图像识别,上传达人后自动识别物品类型和特征标签;DCL + volatile 线程安全 Token 缓存,获取耗时降低 60%。
基于 MongoDB 的即时通讯系统,失主与捡到者匿名沟通,保护双方隐私;N+1 查询治理,O(1) 缓存查找,页面加载提升 75%。
AI 识别与匹配流程采用 @Async 异步执行,接口即响应不阻塞主流程;AI 识别失败自动降级为手动输入。
批量查询 findByIdIn + 批量写入 saveAll,减少 DB 往返 70%+,单字段与复合索引结合,查询性能提升 3 倍。
JWT 无状态认证 + 请求拦截器;全局异常处理;MinIO 故障时自动回退本地存储,保障业务连续性。
schoolLost/
├── backend/ # 🔧 后端服务 (Spring Boot)
│ ├── src/main/java/com/example/schlost/
│ │ ├── controller/ # REST API 控制器 (9个)
│ │ ├── service/ # 业务逻辑层 (9个)
│ │ ├── repository/ # MongoDB 数据访问 (7个)
│ │ ├── entity/ # 数据实体 (7个)
│ │ ├── dto/ # 数据传输对象 (4个)
│ │ ├── config/ # 配置类 (8个)
│ │ ├── common/ # 通用工具 (4个)
│ │ └── SchlostApplication.java # 启动入口
│ ├── src/main/resources/
│ │ └── application.yaml # 全局配置
│ └── pom.xml # Maven 依赖
│
├── frontend/ # 📱 微信小程序 (UniApp)
│ ├── pages/ # 15个业务页面
│ │ ├── index/ # 首页、搜索
│ │ ├── lost/ # 失物上报
│ │ ├── found/ # 寻物发布
│ │ ├── match/ # 匹配列表
│ │ ├── chat/ # 匿名聊天、会话列表
│ │ ├── message/ # 消息中心
│ │ ├── detail/ # 订单详情
│ │ ├── profile/ # 个人中心、我的失物/招领
│ │ ├── login/ # 登录
│ │ ├── help/ # 帮助中心
│ │ └── item-edit/ # 编辑信息
│ ├── utils/ # API封装、常量定义
│ └── static/ # 静态资源
│
├── project_summary.md # 项目总结
└── README.md # 本文档
| 依赖 | 版本要求 | 获取方式 |
|---|---|---|
| JDK | ≥ 17 | Oracle / OpenJDK |
| Maven | ≥ 3.6 | 项目内置 Maven Wrapper |
| MongoDB | ≥ 4.4 | MongoDB Community Server |
| MinIO | 最新版 | MinIO Server |
| HBuilderX | 最新版 | DCloud 官网 |
| 微信开发者工具 | 最新版 | 微信官方 |
- MongoDB Compass — MongoDB 可视化管理
- Postman / ApiFox — 接口调试
- Redis Desktop Manager — Redis 可视化管理(如使用 Redis)
# Windows — 检查并启动 MongoDB 服务
Get-Service -Name MongoDB*
Start-Service -Name MongoDB# 下载并运行 MinIO Server
minio server ./data
# 默认访问地址:http://localhost:9000
# 默认账号密码:minioadmin / minioadmincd backend
# Windows
mvnw.cmd spring-boot:run
# Linux / Mac
./mvnw spring-boot:run服务启动成功后会看到:
Started SchlostApplication in X.XXX seconds
后端 API 访问地址:http://localhost:8080
如需自定义配置,编辑
src/main/resources/application.yaml。
# 使用 HBuilderX 打开 frontend/ 目录
# 点击 运行 → 运行到小程序模拟器 → 微信开发者工具发现失物/丢失物品
↓
打开小程序
↓
失物上报 / 寻物发布
(支持AI自动识别物品)
↓
智能匹配推荐
↓
与对方匿名聊天
↓
线下确认交接
↓
确认核销完成
| 功能模块 | 说明 |
|---|---|
| 🏠 首页 | 失物/招领统计、最新动态、全局搜索 |
| 📝 失物上报 | 上传图片(AI自动识别)、填写物品特征、选择分类/位置 |
| 📢 寻物发布 | 填写捡到物品信息、上传图片、选择分类 |
| 🔗 智能匹配 | 自动推荐匹配度高的失物/招领,按置信度排序 |
| 💬 匿名聊天 | 失主与捡到者实时沟通,匿名保护隐私 |
| 🔔 消息中心 | 匹配通知、聊天提醒、核销通知,未读计数 |
| 👤 个人中心 | 我的发布、我的匹配、数据统计 |
证件卡类 · 数码设备 · 数码配件 · 箱包类 · 服饰鞋帽 · 书本文具 · 钥匙门禁 · 生活用品 · 眼镜饰品 · 运动器材
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/home |
首页数据(最新动态 + 统计) |
| GET | /api/home/search |
全局搜索(关键词/分类/位置) |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/user/login |
微信登录 |
| GET | /api/user/{id} |
获取用户信息 |
| PUT | /api/user/{id} |
更新用户信息 |
| GET | /api/user/{id}/stats |
用户统计 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/lost |
发布失物 |
| GET | /api/lost/{id} |
获取详情 |
| PUT | /api/lost/{id} |
更新失物 |
| DELETE | /api/lost/{id} |
删除失物 |
| GET | /api/lost/my |
我的失物列表 |
| GET | /api/lost/active |
活跃失物列表 |
| PUT | /api/lost/{id}/status |
更新状态 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/found |
发布招领 |
| GET | /api/found/{id} |
获取详情 |
| PUT | /api/found/{id} |
更新招领 |
| DELETE | /api/found/{id} |
删除招领 |
| GET | /api/found/my |
我的招领列表 |
| GET | /api/found/active |
活跃招领列表 |
| PUT | /api/found/{id}/status |
更新状态 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/match/lost/{id} |
获取失物的匹配推荐 |
| GET | /api/match/found/{id} |
获取招领的匹配推荐 |
| POST | /api/match/trigger/lost/{id} |
触发失物匹配 |
| POST | /api/match/trigger/found/{id} |
触发招领匹配 |
| PUT | /api/match/{id}/confirm |
确认匹配 |
| POST | /api/match/{id}/claim |
认领失物 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/chat/sessions |
会话列表 |
| POST | /api/chat/session |
创建会话 |
| GET | /api/chat/session/{id} |
会话详情 |
| POST | /api/chat/send |
发送消息 |
| GET | /api/chat/history |
聊天记录(分页) |
| PUT | /api/chat/read |
标记已读 |
| GET | /api/chat/unread-count |
未读数 |
| PUT | /api/chat/block/{id} |
屏蔽会话 |
| POST | /api/chat/report/{id} |
举报会话 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/message/list |
消息列表 |
| GET | /api/message/unread-count |
未读消息数 |
| PUT | /api/message/{id}/read |
标记已读 |
| PUT | /api/message/read-all |
全部已读 |
| POST | /api/ai/recognize |
AI 图像识别 |
| POST | /api/file/upload-one |
单文件上传 |
| POST | /api/file/upload |
多文件上传 |
# 1. 打包
cd backend
mvnw.cmd clean package -DskipTests
# 2. 上传服务器
scp target/schlost-0.0.1-SNAPSHOT.jar user@your-server:/app/
# 3. 启动(后台运行)
nohup java -jar schlost-0.0.1-SNAPSHOT.jar \
--server.port=8080 \
--spring.data.mongodb.uri=mongodb://your-mongo-host:27017/schlost \
> app.log 2>&1 &- 在 HBuilderX 中打开
frontend/目录 - 修改
utils/api.js中的BASE_URL为生产环境地址 - 点击 发行 → 小程序-微信
- 在微信开发者工具中上传代码
- 登录微信小程序管理后台提交审核
# Dockerfile 示例
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/schlost-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]# 构建并运行
docker build -t schlost-backend .
docker run -d -p 8080:8080 --name schlost schlost-backendQ:后端启动失败,提示 MongoDB 连接错误?
A:检查 MongoDB 服务是否运行,确认 application.yaml 中 MongoDB URI 配置正确。
Q:图片上传失败?
A:检查 MinIO 服务是否运行,或查看 upload.path 本地目录是否有写入权限。系统会自动回退到本地存储。
Q:登录失败? A:确认后端服务已启动,检查微信小程序 AppID 配置,或在开发阶段使用模拟登录。
Q:端口被占用?
A:修改 application.yaml 中 server.port,同时同步修改前端 api.js 中的 BASE_URL。
Q:匹配功能没有结果? A:确保已发布失物/招领数据,匹配算法需要双方数据才可计算相似度。
本项目基于 MIT License 开源,可自由使用、修改和分发。
Copyright (c) 2026 Density
欢迎贡献代码、提交 Issue 或功能建议!
- Fork 本仓库
- 创建功能分支:
git checkout -b feature/amazing-feature - 提交改动:
git commit -m 'feat: add some amazing feature' - 推送分支:
git push origin feature/amazing-feature - 提交 Pull Request
- Commit 格式遵循 Conventional Commits
- Java 代码遵循阿里巴巴编码规范
- 前端组件遵循 Vue 3 Composition API 风格
如果这个项目对你有帮助,给个 ⭐️ 支持一下吧!
遇到问题?提交 Issue