# mwbj **Repository Path**: pcxadmin/mwbj ## Basic Information - **Project Name**: mwbj - **Description**: 觅味比价 展示今日官方菜品价格列表 点击菜品可查看当前菜品的历史价格趋势图 显示菜场列表,并列出距离多少。按距离,点赞等排序。 点进菜场显示菜品列表点击菜品可查看当前菜品的历史价格趋势图 可认证成为菜场。菜场用户可设置菜场名称图集介绍和位置。 同时菜场用户可添加菜品及价格,同时有更新菜价功能,默认当日不更新菜品的价格默认保持原价。 拍菜照片自动显示最近的价格列表及菜市场以及当前地区的官方菜价 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-09 - **Last Updated**: 2026-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 襄阳菜价比价小程序 面向襄阳本地市民打造的便民生鲜菜价查询工具,整合襄阳官方每日生鲜指导价与线下实体菜场实时售价。 ## 技术架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 用户端 (微信小程序) │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────────────────┐ │ │ │ 首页菜价 │ │ 菜场列表 │ │ 拍菜比价 │ │ 个人中心/商户后台 │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └──────────┬───────────┘ │ └───────┼───────────┼───────────┼──────────────────┼──────────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Java后端服务 (Spring Boot) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 用户认证 │ │ 业务接口 │ │ 敏感词过滤│ │ 定时任务 │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ MySQL数据库│ │ 阿里云OSS │ │ FastAPI │ │ │ └──────────┘ └──────────┘ └────┬─────┘ │ └─────────────────────────────────┼──────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ YOLOv11图像识别服务 (FastAPI) │ │ 本地部署 - 内网通信 │ └─────────────────────────────────────────────────────────────────┘ ``` ## 技术栈 ### 后端服务 (backend/) - **Java**: 21 - **Spring Boot**: 3.2.5 - **MyBatis-Plus**: 3.5.5 - **MySQL**: 8.0+ - **阿里云OSS**: 文件存储 - **JWT**: 用户认证 - **Quartz**: 定时任务 ### 管理后台 (frontend-admin/) - **Vue**: 3.4+ - **Vue Router**: 4.3+ - **Element Plus**: 2.6+ - **ECharts**: 5.5+ - **Vite**: 5.1+ ### 微信小程序 (frontend-miniprogram/) - 微信原生小程序框架 - Canvas图表绘制 ### AI识别服务 (ai-service/) - **Python**: 3.10+ - **FastAPI**: 0.110+ - **YOLOv11**: 菜品图像识别 ## 项目结构 ``` mwbj/ ├── backend/ # Java后端服务 │ ├── src/main/java/com/xiangyang/vegetable/ │ │ ├── VegetablePriceApplication.java # 启动类 │ │ ├── controller/ # 控制器层 │ │ ├── service/ # 服务层 │ │ ├── mapper/ # 数据访问层 │ │ ├── entity/ # 实体类 │ │ ├── dto/ # 数据传输对象 │ │ ├── config/ # 配置类 │ │ ├── util/ # 工具类 │ │ ├── interceptor/ # 拦截器 │ │ ├── exception/ # 异常处理 │ │ └── scheduler/ # 定时任务 │ ├── src/main/resources/ │ │ ├── application.yml # 配置文件 │ │ ├── schema.sql # 数据库初始化脚本 │ │ └── data.sql # 初始数据 │ └── pom.xml # Maven依赖 ├── frontend-admin/ # Vue管理后台 │ ├── src/ │ │ ├── views/ # 页面组件 │ │ │ ├── Dashboard.vue # 数据看板 │ │ │ ├── Apply.vue # 商户审核 │ │ │ ├── Market.vue # 菜场管理 │ │ │ ├── Comment.vue # 评论管理 │ │ │ ├── SensitiveWord.vue # 敏感词管理 │ │ │ ├── PriceSync.vue # 价格同步 │ │ │ └── Statistics.vue # 统计分析 │ │ ├── api/ # API接口封装 │ │ ├── router/ # 路由配置 │ │ ├── App.vue # 根组件 │ │ └── main.js # 入口文件 │ ├── index.html │ ├── package.json │ └── vite.config.js ├── frontend-miniprogram/ # 微信小程序 │ ├── pages/ │ │ ├── index/ # 首页-官方菜价 │ │ ├── goods-detail/ # 菜品详情 │ │ ├── market-list/ # 菜场列表 │ │ ├── market-detail/ # 菜场详情 │ │ ├── camera-compare/ # 拍菜比价 │ │ ├── mine/ # 个人中心 │ │ ├── market-apply/ # 商户认证申请 │ │ ├── market-manage/ # 商户管理后台 │ │ └── city-select/ # 地区选择 │ ├── images/ # 静态资源 │ ├── app.js │ ├── app.json │ └── app.wxss ├── ai-service/ # YOLOv11图像识别服务 │ ├── main.py # 服务入口 │ ├── config.py # 配置文件 │ ├── models.py # 数据模型 │ ├── services/ │ │ └── recognition.py # 识别服务 │ ├── utils/ │ │ ├── logger.py # 日志工具 │ │ ├── rate_limiter.py # 限流工具 │ │ └── cache.py # 缓存工具 │ └── requirements.txt # Python依赖 └── README.md # 项目说明文档 ``` ## 快速开始 ### 1. 数据库配置 创建数据库: ```sql CREATE DATABASE vegetable_price CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 执行初始化脚本: ```bash mysql -u root -p vegetable_price < backend/src/main/resources/schema.sql mysql -u root -p vegetable_price < backend/src/main/resources/data.sql ``` ### 2. 启动后端服务 ```bash cd backend mvn spring-boot:run ``` 服务端口:`http://localhost:8080` ### 3. 启动AI识别服务 ```bash cd ai-service pip install -r requirements.txt python main.py ``` 服务端口:`http://localhost:8001` ### 4. 启动管理后台 ```bash cd frontend-admin npm install npm run dev ``` 访问地址:`http://localhost:5173` ### 5. 小程序开发 1. 使用微信开发者工具打开 `frontend-miniprogram` 目录 2. 配置小程序AppID(测试可使用测试号) 3. 确保后端服务已启动,小程序会自动连接 `http://localhost:8080` ## API接口概览 ### 用户模块 | 接口 | 方法 | 说明 | | --- | --- | --- | | `/api/user/login` | POST | 用户登录 | | `/api/user/info` | GET | 获取用户信息 | ### 官方菜价模块 | 接口 | 方法 | 说明 | | --- | --- | --- | | `/api/official-price/today` | GET | 获取今日官方菜价 | | `/api/official-price/detail?goodsName=xxx` | GET | 获取菜品详情 | | `/api/official-price/sync` | POST | 手动同步官方菜价 | ### 菜场模块 | 接口 | 方法 | 说明 | | --- | --- | --- | | `/api/market/list` | GET | 获取菜场列表 | | `/api/market/detail/{marketId}` | GET | 获取菜场详情 | | `/api/market/apply` | POST | 提交商户认证申请 | ### AI识别模块 | 接口 | 方法 | 说明 | | --- | --- | --- | | `/api/ai/recognize` | POST | 图片识别菜品 | ### 比价模块 | 接口 | 方法 | 说明 | | --- | --- | --- | | `/api/compare?goodsName=xxx` | GET | 菜品比价 | ### 评论/点赞模块 | 接口 | 方法 | 说明 | | --- | --- | --- | | `/api/comment` | POST | 发布评论 | | `/api/comment/list` | GET | 获取评论列表 | | `/api/like` | POST | 点赞/取消点赞 | ### 管理后台模块 | 接口 | 方法 | 说明 | | --- | --- | --- | | `/api/admin/apply/list` | GET | 获取商户申请列表 | | `/api/admin/apply/audit` | POST | 审核商户申请 | | `/api/admin/market/list` | GET | 获取菜场列表 | | `/api/admin/comment/list` | GET | 获取评论列表 | | `/api/admin/sensitive-word` | POST | 添加敏感词 | | `/api/admin/statistics` | GET | 获取统计数据 | ## 定时任务 | 任务 | Cron表达式 | 说明 | | --- | --- | --- | | 同步官方菜价 | `0 0 6 * * ?` | 每日6点同步官方指导价 | | 自动更新商户菜价 | `0 0 0 * * ?` | 每日凌晨自动沿用昨日价格 | ## 配置说明 修改 `backend/src/main/resources/application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/vegetable_price?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: your_username password: your_password app: oss: endpoint: your-oss-endpoint access-key-id: your-access-key-id access-key-secret: your-access-key-secret bucket-name: your-bucket-name fastapi: host: http://localhost:8001 timeout: 30000 jwt: secret: your-jwt-secret expiration: 86400000 ``` ## 用户角色 | 角色 | 功能 | | --- | --- | | **普通市民** | 查看官方菜价、周边菜场、价格趋势、拍照比价、评论点赞 | | **认证商户** | 维护菜场信息、手动/拍照识别录入菜价、上架/下架菜品 | | **后台管理员** | 商户审核、菜场管理、评论管控、敏感词维护、数据统计 | ## 核心业务流程 ### 拍菜比价流程 1. 用户拍照/选择图片 → 上传至后端 → 转存阿里云OSS 2. 后端调用FastAPI+YOLOv11识别菜品 3. 返回识别结果 → 查询官方指导价+周边菜场售价 4. 展示比价列表 ### 商户认证流程 1. 用户提交认证申请 → 后台管理员审核 2. 审核通过 → 解锁商户管理权限 3. 审核驳回 → 可查看原因并重新提交 ## 注意事项 1. FastAPI图像识别服务需要本地部署,端口配置为8001 2. 阿里云OSS需要配置正确的密钥和Bucket信息 3. 数据库连接信息需要根据实际环境修改 4. JWT密钥需要在生产环境中修改为安全的随机字符串 5. 小程序仅支持襄阳市地区使用 # 襄阳菜价比价小程序-需求详细设计文档 ## 文档基础信息 | 文档项 | 内容 | | ---- | ---- | | 文档名称 | 襄阳菜价比价小程序需求详细设计文档 | | 整体技术架构 | 微信小程序(前端)+ Java管理后台 + MySQL数据库 + 阿里云OSS文件存储 + YOLOv11图像识别服务(FastAPI本地接口) | | 服务覆盖范围 | 仅襄阳市 | | 用户角色 | 普通市民用户、菜场商户认证用户、后台管理员 | | 核心业务 | 襄阳官方菜价查询、菜场菜价对比、AI拍照识图录入/比价、菜场商户自主维护菜品价格、价格走势图表、评论点赞互动、敏感词管控、商户资质审核 | | 文档用途 | 前端小程序、Java后端、图像识别服务开发、测试、交付验收 | # 1 项目概述 ## 1.1 项目背景 面向襄阳本地市民打造便民生鲜菜价查询工具,整合**襄阳官方每日生鲜指导价**与线下实体菜场实时售价。 1. 市民端:查看各菜场价格、历史价格走势、拍照识图一键比价,评论点赞互动; 2. 商户端:认证入驻菜场,支持**手动选择菜品录入价格 / YOLOv11拍照识别菜品自动录入价格**; 3. 管理端:Java后台统一管控商户、菜场、评论、敏感词、官方菜价同步; 4. AI识别服务:独立FastAPI服务搭载YOLOv11模型,本地部署,提供菜品图像识别接口,不依赖第三方识图平台。 ## 1.2 整体技术栈拆分 ### 1.2.1 前端端(用户交互) 微信原生小程序,负责页面展示、定位、拍照上传、图表渲染、点赞评论、商户菜价录入操作。 ### 1.2.2 Java后端服务(核心业务接口) - 提供小程序全部业务API:用户、菜场、菜品、价格、评论、点赞、商户认证、官方菜价同步; - 管理后台接口:商户审核、菜场管理、评论管控、敏感词库、数据统计; - 对接阿里云OSS:图片上传、图集、拍照识别原图存储; - MySQL持久化全部业务数据; - 调用FastAPI图像识别接口,转发图片识别请求。 ### 1.2.3 YOLOv11图像识别服务(独立本地服务) - 基于FastAPI搭建轻量化接口服务,本地部署; - 加载YOLOv11生鲜菜品检测模型; - 接收Java后端转发的菜品图片,识别图片中生鲜菜品名称,返回识别结果; - 识别结果回传给Java后端,供小程序实现「拍照识别菜品、一键录入菜价/比价」功能。 ### 1.2.4 存储服务 1. MySQL:业务结构化数据(用户、菜场、菜品、价格、评论、认证申请、敏感词库等); 2. 阿里云OSS:存储菜场图集、商户上传实拍图、用户拍照比价原图、AI识别缓存图片。 ### 1.2.5 定时任务 Java后端定时任务,每日固定时段拉取襄阳官方公开菜价接口,自动同步当日指导价入库。 ## 1.3 用户角色划分 ### 1.3.1 普通市民用户 1. 查看襄阳官方每日菜价、周边菜场及在售菜品; 2. 查看菜品近30天历史价格趋势折线图; 3. 对菜品、菜场点赞、发布文字评论(后台敏感词过滤拦截违规内容); 4. 拍照识图比价:上传图片,AI识别菜品,展示官方指导价+周边菜场售价; 5. 提交菜场商户入驻认证申请。 ### 1.3.2 认证菜场商户用户(普通用户认证升级) 1. 具备普通用户全部功能; 2. 维护菜场基础信息:名称、简介、图集、地理位置(经纬度); 3. 两种录入当日菜价模式: - 模式1:手动选择菜品列表,填写当日售价; - 模式2:拍照识别录入菜价(核心新增):拍摄菜品实物图,YOLOv11自动识别菜品,识别成功后直接填写价格提交; 4. 价格规则:当日未更新价格的菜品,系统自动沿用昨日售价,自动生成历史价格记录; 5. 上架/下架自有在售菜品。 ### 1.3.3 Java后台管理员 1. 商户认证申请审核(通过/驳回并填写原因); 2. 菜场信息管理、违规菜场下架管控; 3. 评论管理:查看全量评论、删除违规评论; 4. 敏感词库维护:新增、删除、批量导入过滤词汇; 5. 襄阳官方菜价同步配置、同步日志查看; 6. 全平台数据统计:用户量、菜场数量、拍照识别使用次数、每日比价次数; 7. OSS图片资源查看、违规图片清理。 ## 1.4 全局前置能力:地区选择 1. 小程序首次启动弹窗选择城市,仅提供「襄阳市」单一选项; 2. 调用微信定位,定位城市非襄阳时弹窗提示:当前系统仅支持襄阳市使用; 3. 选择后本地缓存地区标识,全页面仅加载襄阳业务数据; 4. 所有菜场、菜品、官方菜价数据均绑定襄阳地区,无外地数据。 # 2 系统整体架构流程 ## 2.1 完整请求链路(拍照识别录入菜价/拍照比价) 1. 小程序上传菜品图片 → Java后端接收 → 上传原图至阿里云OSS; 2. Java后端携带OSS图片地址,调用本地FastAPI+YOLOv11识别接口; 3. FastAPI服务读取图片,YOLOv11模型检测识别菜品名称,返回识别结果; 4. Java后端接收识别结果,回传给小程序; 5. 小程序分支逻辑: - 市民端:识别菜品后自动查询官方菜价+周边菜场价格,展示比价列表; - 商户端:识别菜品后自动填充菜品名称,跳转价格录入页面填写当日售价。 ## 2.2 常规业务请求链路(非图像识别) 小程序前端 → Java后端API → MySQL读写数据 / 阿里云OSS文件上传下载 ## 2.3 官方菜价同步流程 Java定时任务 → 拉取襄阳官方菜价接口 → 清洗数据存入MySQL official_price表 + price_history历史价格表 # 3 小程序页面模块详细需求 ## 3.1 首页模块 pages/index ### 3.1.1 功能概述 展示襄阳当日官方生鲜指导价列表;点击菜品进入详情页查看历史价格趋势,支持点赞、评论,评论由Java后台做敏感词过滤。 ### 3.1.2 页面结构 1. 顶部栏:城市标识(襄阳)、手动刷新按钮(触发后端重新同步官方菜价); 2. 标题区:今日襄阳官方菜价; 3. 菜品卡片列表(分页下拉加载):菜品名称、当日指导价、计价单位、价格涨跌标识、点赞总数; 4. 下拉刷新:重新请求后端最新官方菜价数据。 ### 3.1.3 交互逻辑 1. 点击菜品卡片 → 跳转菜品详情页; 2. 点赞按钮:单用户单菜品仅可点赞1次,点击切换点赞/取消点赞,实时同步后端更新点赞数量。 ### 3.1.4 菜品通用详情页 pages/goods-detail 1. 基础信息:菜品名称、今日官方指导价、周边菜场平均售价; 2. 可视化模块:近30天历史价格趋势折线图; 3. 互动区:点赞按钮、评论列表、评论输入框; 4. 评论规则:提交评论请求Java后端校验敏感词,含违规词汇直接拦截并弹窗提示修改。 ## 3.2 菜场模块 ### 3.2.1 菜场列表页 pages/market-list 1. 顶部搜索:支持搜索菜场名称、菜品名称; 2. 排序栏(三种排序):距离由近到远、点赞人气降序、综合推荐; 3. 菜场卡片:菜场图集缩略图、名称、简介、用户直线距离、总点赞数、在售菜品数量; 4. 定位异常兜底:未授予定位权限时隐藏距离字段,仅保留点赞/综合排序。 ### 3.2.2 菜场详情页 pages/market-detail 1. 头部:菜场图集轮播、名称、简介、详细地址、距离、点赞按钮; 2. 在售菜品列表:商户上架全部菜品,展示当日售价、与官方指导价差价对比; 3. 点击菜品跳转统一菜品详情页,查看该菜场单品历史售价、点赞评论。 ## 3.3 拍菜比价页面 pages/camera-compare(市民端) ### 3.3.1 功能流程 1. 入口操作:相机拍摄菜品 / 相册选择本地图片; 2. 图片压缩上传至Java后端,后端转存阿里云OSS; 3. Java调用本地FastAPI+YOLOv11接口识别菜品; 4. 分支处理: - 识别失败:弹窗提示无法识别,请拍摄清晰菜品实物; - 识别成功:分栏展示比价数据 ① 襄阳今日官方指导价格; ② 周边菜场同款菜品售价,按距离升序排列,显示菜场名称、单价、距离; 5. 点击菜场条目直接跳转菜场详情。 ## 3.4 我的页面 pages/mine ### 3.4.1 普通用户视图 1. 用户基础信息:微信头像、昵称; 2. 功能菜单:我的点赞、我的评论、菜场商户认证、地区设置、关于我们; 3. 商户认证入口:未认证用户可见,已认证用户替换为「菜场管理后台」入口。 ### 3.4.2 商户认证申请页 pages/market-apply 1. 表单字段:菜场名称、详细地址、联系人手机号、菜场实景图集上传; 2. 提交后生成认证记录存入MySQL,等待Java后台管理员审核; 3. 审核驳回后可查看驳回原因,修改资料重新提交;审核通过解锁商户管理权限。 ### 3.4.3 商户管理后台 pages/market-manage(认证商户专属) #### 模块1:菜场基础信息维护 - 修改菜场名称、简介; - 图集上传/删除(图片存储阿里云OSS); - 地图选点更新菜场经纬度,用于计算用户距离。 #### 模块2:菜品与菜价录入(核心新增双录入模式) 1. 菜品基础管理:新增菜品、下架菜品、管理本店在售菜品列表; 2. 模式一:手动选择菜品录入价格 - 下拉选择本店已上架菜品,输入当日售价,提交更新; 3. 模式二:拍照识别自动录入菜价(YOLOv11图像识别) 1)商户拍摄菜品实物图片上传; 2)Java后端调用FastAPI+YOLOv11识别菜品名称; 3)识别成功自动匹配本店对应菜品,页面预填充菜品名称; 4)商户填写当日售价,提交完成价格更新; 5)识别无匹配本店菜品时,提示「未查询到该菜品,可手动新增菜品」; 4. 价格业务规则:当日未更新价格的菜品,后端自动沿用昨日价格,并生成一条当日历史价格记录。 ## 3.5 地区选择页面 pages/city-select 仅展示襄阳市,定位外地时强制跳转本页选择城市,无其他城市选项。 # 4 YOLOv11 + FastAPI 图像识别独立服务需求 ## 4.1 部署环境 本地独立部署,与Java后端通过内网接口通信,不对外公网暴露识别模型。 ## 4.2 FastAPI接口入参出参规范 ### 请求入参 OSS菜品图片网络地址 ### 返回JSON结构 ```json { "code": 200, "data": { "goods_name": "白菜", "confidence": 0.92 }, "msg": "识别成功" } ``` ## 4.3 核心能力 1. 加载YOLOv11生鲜专用检测模型,识别襄阳本地蔬菜、肉类、水产; 2. 支持单张图片检测,返回匹配度最高的菜品名称与置信度; 3. 置信度低于阈值(默认0.6)返回识别失败; 4. 接口增加请求限流,防止高频重复调用; 5. 本地日志记录每次识别图片、结果、耗时,便于排查识别误差。 ## 4.4 与Java后端交互规则 1. Java后端作为调用方,转发小程序上传的OSS图片地址请求识别; 2. FastAPI仅处理菜品识别业务,不存储业务数据,图片存储全部由阿里云OSS负责; 3. 识别超时、模型异常时,Java后端返回小程序「图片识别失败,请重试」。 # 5 Java后端核心能力需求 ## 5.1 接口服务 1. 小程序端全套RESTful接口:用户、菜场、菜品、价格、点赞、评论、商户认证、比价、图片上传; 2. 管理后台接口:商户审核、菜场管控、评论删除、敏感词维护、数据统计; 3. 封装FastAPI识别接口调用工具类,统一处理图像识别请求; 4. 封装阿里云OSS工具类,统一处理图片上传、删除、地址获取。 ## 5.2 定时任务 1. 每日定时拉取襄阳官方菜价,清洗入库; 2. 每日凌晨自动处理商户未更新价格菜品,沿用昨日价格生成历史记录。 ## 5.3 安全校验 1. 评论提交前置敏感词校验,读取MySQL敏感词库匹配拦截; 2. 小程序请求携带身份凭证,校验用户登录状态与商户权限; 3. OSS图片上传增加访问时效、防盗链配置; 4. FastAPI识别接口内网隔离,仅Java服务可访问。 # 6 存储设计 ## 6.1 MySQL数据库表结构(核心表精简) ### 6.1.1 user 用户表 | 字段 | 类型 | 说明 | | ---- | ---- | ---- | | openid | varchar(100) | 微信用户唯一标识,主键 | | avatar | varchar(255) | 微信头像OSS地址 | | nickname | varchar(50) | 微信昵称 | | user_type | tinyint | 0普通用户 1认证商户 | | city | varchar(20) | 固定值:襄阳市 | | create_time | datetime | 创建时间 | ### 6.1.2 market 菜场表 | 字段 | 类型 | 说明 | | ---- | ---- | ---- | | id | bigint | 主键自增 | | owner_openid | varchar(100) | 商户用户openid | | market_name | varchar(100) | 菜场名称 | | market_desc | text | 菜场简介 | | images | text | OSS图集地址,逗号分隔 | | address | varchar(200) | 文字地址 | | longitude | decimal | 经度 | | latitude | decimal | 纬度 | | like_count | int | 总点赞数 | | audit_status | tinyint | 0待审核 1通过 2驳回 | | contact_phone | varchar(20) | 商户联系电话 | | create_time | datetime | 创建时间 | ### 6.1.3 market_goods 商户菜品表 | 字段 | 类型 | 说明 | | ---- | ---- | ---- | | id | bigint | 主键 | | market_id | bigint | 关联菜场id | | goods_name | varchar(50) | 菜品名称 | | unit | varchar(10) | 斤/公斤 | | today_price | decimal(8,2) | 当日售价 | | is_shelf | tinyint | 1上架 0下架 | | last_update_time | datetime | 上次更新价格时间 | ### 6.1.4 official_price 官方每日菜价表 | 字段 | 类型 | 说明 | | ---- | ---- | ---- | | id | bigint | 主键 | | goods_name | varchar(50) | 菜品名 | | price | decimal(8,2) | 指导价 | | unit | varchar(10) | 计价单位 | | date | varchar(20) | 日期YYYY-MM-DD,联合索引 | | up_down | varchar(10) | rise上涨 fall下跌 draw持平 | ### 6.1.5 price_history 价格历史表 | 字段 | 类型 | 说明 | | ---- | ---- | ---- | | id | bigint | 主键 | | source_type | tinyint | 1官方 2菜场商户 | | source_id | bigint | 菜场菜品id,官方为0 | | goods_name | varchar(50) | 菜品名称 | | price | decimal(8,2) | 当日价格 | | date | varchar(20) | 日期 | ### 6.1.6 comment 评论表、like_record 点赞记录表、market_apply 商户申请表、sensitive_word 敏感词库表(常规结构不变) ## 6.2 阿里云OSS文件存储规范 1. 目录分层: - /market/image/ 菜场商户图集; - /camera/compare/ 用户拍照比价原图; - /camera/merchant/ 商户录入菜价实拍图; 2. 所有图片上传Java后端中转,小程序不直传OSS,统一增加图片访问有效期; 3. 后台支持管理员清理违规图片资源。 # 7 核心业务规则约束 1. 地区强约束:系统仅支持襄阳市,外地定位无法使用完整功能; 2. 商户价格规则:当日无手动更新的菜品,凌晨定时任务自动复用昨日价格; 3. AI识别双场景:市民用于比价,商户用于快速匹配菜品录入价格; 4. 点赞限制:同一用户对同一菜品/菜场仅允许一次点赞; 5. 评论管控:后端MySQL敏感词库实时拦截违规评论,管理员可删除已发布违规评论; 6. 菜场展示约束:仅审核状态为通过的菜场对外展示; 7. 图像识别约束:FastAPI本地独立部署,模型不暴露公网,所有识别请求由Java中转。 # 8 非功能性需求 ## 8.1 性能要求 1. MySQL建立菜品名称、日期、菜场id联合索引,价格趋势查询、比价查询提速; 2. OSS图片自动压缩,小程序懒加载图集、列表图片; 3. YOLOv11识别接口增加缓存,相同图片短时间重复请求复用识别结果; 4. 列表分页加载,不一次性返回全量菜场、菜品数据。 ## 8.2 安全规范 1. FastAPI识别服务内网部署,关闭公网端口,仅Java服务可访问; 2. 阿里云OSS密钥、襄阳官方菜价接口密钥、数据库密码统一存放Java后端配置,小程序前端无任何密钥; 3. 商户手机号、菜场地址仅登录用户可见,禁止匿名访问; 4. 用户上传图片后端校验格式、大小,拦截违规图片。 ## 8.3 异常处理 1. FastAPI识别服务离线:商户拍照录入、用户比价功能弹窗提示「图像识别服务暂不可用,请手动选择菜品」; 2. MySQL连接异常:小程序统一提示服务繁忙; 3. OSS上传失败:提示图片上传失败,重新拍摄; 4. 官方菜价接口同步失败:页面展示昨日缓存数据,标注数据未更新。 # 9 全页面路由清单 | 路由地址 | 页面名称 | 核心功能 | | ---- | ---- | ---- | | pages/city-select/index | 地区选择页 | 仅可选襄阳市 | | pages/index/index | 首页 | 襄阳官方当日菜价列表 | | pages/goods-detail/index | 菜品详情 | 价格趋势、点赞评论 | | pages/market-list/index | 菜场列表 | 多维度排序、距离展示 | | pages/market-detail/index | 菜场详情 | 菜场信息、本店菜品 | | pages/camera-compare/index | 拍菜比价(市民) | YOLO识图、多渠道比价 | | pages/mine/index | 我的主页 | 用户信息、认证/管理入口 | | pages/market-apply/index | 商户认证申请 | 提交菜场资质 | | pages/market-manage/index | 商户后台 | 菜场信息维护、菜品管理、双模式录入菜价 | # 10 Java管理后台配套需求 1. 商户认证审核:查看申请单、通过/驳回填写原因; 2. 菜场管理:修改菜场状态、下架违规菜场; 3. 评论管理:全量评论查询、单条/批量删除违规评论; 4. 敏感词管理:新增、删除、批量导入过滤词汇; 5. 官方菜价同步:手动触发同步、查看每日同步日志; 6. 图像识别统计:每日识别调用次数、识别成功率; 7. OSS资源管理:图片查询、违规图片删除; 8. 平台数据看板:用户总数、菜场总数、比价使用次数。 frontend-admin的路由清单 | 路由地址 | 页面名称 | 核心功能 | | ---- | ---- | ---- | | pages/login/index | 登录页 | 管理员登录 | | pages/index/index | 管理员首页 | 菜单列表、用户管理、角色管理、日志管理 | | pages/official-price/index | 官方菜价管理 | 新增、删除、修改官方菜价 | | pages/price-history/index | 价格历史查询 | 查询菜价价格历史记录 | | pages/comment/index | 评论管理 | 查看、删除违规评论 | | pages/like-record/index | 点赞记录查询 | 查询用户点赞记录 | frontend-admin启动说明 下面的安装加上国内镜像 1. 安装依赖:`npm install --registry=https://registry.npmjs.org` 2. 启动项目:`npm run dev` 3. 访问项目:`http://localhost:3000`