Skip to content

EVEDensity/schoolLost

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏫 AI 校园失物招领系统

AI-Powered Campus Lost & Found Platform

基于 Spring Boot + MongoDB + UniApp 的 AI 驱动校园失物招领平台,让失物快速归家。

SpringBoot MongoDB Java MinIO UniApp License PRs


📖 项目介绍

解决什么问题?

在校园生活中,物品丢失/拾获是高频痛点。传统失物招领依赖公告栏、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 图像识别

集成百度 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)

🚀 快速启动

第一步:启动 MongoDB

# Windows — 检查并启动 MongoDB 服务
Get-Service -Name MongoDB*
Start-Service -Name MongoDB

第二步:启动 MinIO(可选)

# 下载并运行 MinIO Server
minio server ./data

# 默认访问地址:http://localhost:9000
# 默认账号密码:minioadmin / minioadmin

第三步:启动后端服务

cd 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自动识别)、填写物品特征、选择分类/位置
📢 寻物发布 填写捡到物品信息、上传图片、选择分类
🔗 智能匹配 自动推荐匹配度高的失物/招领,按置信度排序
💬 匿名聊天 失主与捡到者实时沟通,匿名保护隐私
🔔 消息中心 匹配通知、聊天提醒、核销通知,未读计数
👤 个人中心 我的发布、我的匹配、数据统计

物品分类体系(10大类 50+ 子类)

证件卡类 · 数码设备 · 数码配件 · 箱包类 · 服饰鞋帽 · 书本文具 · 钥匙门禁 · 生活用品 · 眼镜饰品 · 运动器材


📡 API 概览

首页 & 搜索

方法 路径 说明
GET /api/home 首页数据(最新动态 + 统计)
GET /api/home/search 全局搜索(关键词/分类/位置)

用户

方法 路径 说明
POST /api/user/login 微信登录
GET /api/user/{id} 获取用户信息
PUT /api/user/{id} 更新用户信息
GET /api/user/{id}/stats 用户统计

失物 (Lost)

方法 路径 说明
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 更新状态

招领 (Found)

方法 路径 说明
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} 举报会话

消息 & AI & 文件

方法 路径 说明
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 &

前端部署(微信小程序)

  1. 在 HBuilderX 中打开 frontend/ 目录
  2. 修改 utils/api.js 中的 BASE_URL 为生产环境地址
  3. 点击 发行 → 小程序-微信
  4. 在微信开发者工具中上传代码
  5. 登录微信小程序管理后台提交审核

Docker 部署

# 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-backend

❓ 常见问题 (FAQ)

Q:后端启动失败,提示 MongoDB 连接错误? A:检查 MongoDB 服务是否运行,确认 application.yaml 中 MongoDB URI 配置正确。

Q:图片上传失败? A:检查 MinIO 服务是否运行,或查看 upload.path 本地目录是否有写入权限。系统会自动回退到本地存储。

Q:登录失败? A:确认后端服务已启动,检查微信小程序 AppID 配置,或在开发阶段使用模拟登录。

Q:端口被占用? A:修改 application.yamlserver.port,同时同步修改前端 api.js 中的 BASE_URL

Q:匹配功能没有结果? A:确保已发布失物/招领数据,匹配算法需要双方数据才可计算相似度。


📄 开源协议

本项目基于 MIT License 开源,可自由使用、修改和分发。

Copyright (c) 2026 Density


🤝 贡献指南

欢迎贡献代码、提交 Issue 或功能建议!

  1. Fork 本仓库
  2. 创建功能分支:git checkout -b feature/amazing-feature
  3. 提交改动:git commit -m 'feat: add some amazing feature'
  4. 推送分支:git push origin feature/amazing-feature
  5. 提交 Pull Request

开发规范

  • Commit 格式遵循 Conventional Commits
  • Java 代码遵循阿里巴巴编码规范
  • 前端组件遵循 Vue 3 Composition API 风格

如果这个项目对你有帮助,给个 ⭐️ 支持一下吧!

遇到问题?提交 Issue

Star History Chart

About

AI智能校园失误招领微信小程序

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors