摘 要
随着国民健康意识的不断提高,低卡路里、高营养密度的饮食方式逐渐成为消费新趋势,但是现有的电商平台对于营养精细化筛选和个人健康管理还存在着不足。本文设计并实现了一个以SpringBoot和Vue为基础的低卡食品销售系统。系统采用前后端分离架构,后端以Spring Boot和MyBatis-Plus构建RESTful API,前端采用Vue.js与Element-UI实现响应式界面,数据库选用MySQL。系统面向普通用户有健康档案的建立、商品的多维度选择、购物车的管理、营养摄入的记录、智能的推荐以及社区的互动等;面向管理员有用户管理、商品管理、订单管理、营销活动的配置和数据可视化仪表盘等。测试结果表明,系统功能完备、运行正常,可以很好地满足低卡食品消费者的需求,实现"购物+健康管理"闭环服务,对推动健康饮食消费数字化转型有较好的应用价值。
关键词:低卡食品销售系统;Spring Boot;Vue;健康管理;智能推荐
目 录
[1 绪 论](#1 绪 论)
[1.1 研究背景与意义](#1.1 研究背景与意义)
[1.2 国内外研究综述](#1.2 国内外研究综述)
[1.3 内容及安排](#1.3 内容及安排)
[1.4 本章小结](#1.4 本章小结)
[2 开发环境及相关技术介绍](#2 开发环境及相关技术介绍)
[2.1 Java语言](#2.1 Java语言)
[2.2 Spring Boot框架](#2.2 Spring Boot框架)
[2.3 Vue.js概述](#2.3 Vue.js概述)
[2.4 MyBatis-Plus概述](#2.4 MyBatis-Plus概述)
[2.5 MySQL概述](#2.5 MySQL概述)
[2.6 开发环境介绍](#2.6 开发环境介绍)
[2.7 本章小结](#2.7 本章小结)
[3 系统分析](#3 系统分析)
[3.1 可行性分析](#3.1 可行性分析)
[3.1.1 经济可行性](#3.1.1 经济可行性)
[3.1.2 操作可行性](#3.1.2 操作可行性)
[3.1.3 技术可行性](#3.1.3 技术可行性)
[3.2 功能需求分析](#3.2 功能需求分析)
[3.2.1 普通用户功能需求](#3.2.1 普通用户功能需求)
[3.2.2 管理员功能需求](#3.2.2 管理员功能需求)
[3.3 用例分析](#3.3 用例分析)
[3.4 系统流程分析](#3.4 系统流程分析)
[3.4.1 用户流程分析](#3.4.1 用户流程分析)
[3.4.2 管理员流程分析](#3.4.2 管理员流程分析)
[3.5 数据流图分析](#3.5 数据流图分析)
[3.5.1 0层数据流图](#3.5.1 0层数据流图)
[3.5.2 1层数据流图](#3.5.2 1层数据流图)
[3.6 本章小结](#3.6 本章小结)
[4 系统设计](#4 系统设计)
[4.1 功能模块设计](#4.1 功能模块设计)
[4.2 数据库设计](#4.2 数据库设计)
[4.2.1 概念结构设计](#4.2.1 概念结构设计)
[4.2.2 逻辑结构设计](#4.2.2 逻辑结构设计)
[4.3 系统架构设计](#4.3 系统架构设计)
[4.3.1 层次设计](#4.3.1 层次设计)
[4.3.2 系统层次交互流程](#4.3.2 系统层次交互流程)
[4.4 系统详细设计](#4.4 系统详细设计)
[4.4.1 用户注册与登录模块](#4.4.1 用户注册与登录模块)
[4.4.2 商品浏览与筛选模块](#4.4.2 商品浏览与筛选模块)
[4.4.3 购物车与订单模块](#4.4.3 购物车与订单模块)
[4.4.4 营养摄入记录模块](#4.4.4 营养摄入记录模块)
[4.5 本章小结](#4.5 本章小结)
[5 系统实现](#5 系统实现)
[5.1 用户功能实现](#5.1 用户功能实现)
[5.2 管理员功能实现](#5.2 管理员功能实现)
[5.3 本章小结](#5.3 本章小结)
[6 系统测试](#6 系统测试)
[6.1 环境测试](#6.1 环境测试)
[6.2 系统功能测试](#6.2 系统功能测试)
[6.3 本章小结](#6.3 本章小结)
[7 总结与展望](#7 总结与展望)
[7.1 总结](#7.1 总结)
[7.2 展望](#7.2 展望)
-
- 研究 背景 与意义
随着我国居民生活水平不断提高和膳食结构发生深刻改变,超重、肥胖以及与营养有关的慢性病问题越来越严重。根据2021年中国居民营养与慢性病状况报告,我国成年居民超重肥胖率已经超过50%,减脂、控糖、增肌成了社会公众普遍关心的健康需求。低卡路里、高蛋白、无糖、高纤维等特殊营养食品市场不断扩大,消费者对于食品营养成分的重视程度也越来越大。
但是目前主流的综合电商平台在食品销售方面存在明显的缺陷,商品营养标签信息不统一、筛选维度单一、没有和用户的个人健康数据相关联。消费者如果想要买到符合自身健康需求的低卡食品,就要花大量的时间去仔细查看商品信息,体验不佳。平台运营方缺少针对用户健康需求的数据分析手段,不能实现精细化的选品以及精准化的营销。曹岱认为食品销售系统要有数据可溯性以及分布式存储的特性,从而保证食品安全和销售效率1。李颖认为食品销售企业应该创建起完整的、多层次的食品安全控制体系来,对各个环节的责任进行划分,并且保障消费者的权益5。
在这样的情况下,设计并实现一个专门针对低卡食品的垂直销售系统就有着十分重要的现实意义。本系统将用户健康档案、商品营养数据、智能推荐算法三者结合起来,创建起一个"购物+健康管理"闭环的服务模式,可以促使消费者快速挑选出契合自身目的的食品,并给平台经营赋予数据支撑的决策助力。技术上系统使用的是SpringBoot+Vue的前后端分离架构,有开发效率高、可扩展性好、维护成本低等优点,可以给同类系统的设计提供技术上的借鉴。
-
- 用例分析
普通用户角色是没有注册的用户通过手机号码获取验证码后来注册。已经登录的用户可以浏览首页的轮播图、商品分类等信息,了解商品的详情以及用户对商品的评价,用不同的筛选条件来精准地找到自己想要的商品。用户可以将商品加入购物车并修改数量,确认订单之后进行支付,最后查看订单的状态。用户可以自行在个人中心中填写自己的健康档案,每天记录自己的膳食摄入量并得到营养报告。系统根据用户的健康目标以及行为数据来为用户做出个性化的商品推荐。用户可以收藏商品,在社交平台上各种评价、发表在发布者社区里的评论、和他人交流等行为都被用户收集、整理并保存下来。普通用户角色用例表如图3.1所示。

管理员角色,管理员使用专用账号登录后台系统可以审核和管理用户账号。管理员可以对商品的基本信息、营养信息进行管理,也可以对商品的种类以及库存预警进行管理。订单管理模块可以查看全平台的订单流转情况以及售后申请的处理。营销管理模块由两个子模块组成,一是优惠券发放,二是促销活动。内容管理系统里可上传健康的科普知识、营养食谱等等各类内容。数据统计模块用可视化图表来显示运营的主要指标。系统管理模块可以做日志审计和基础配置两个方面的功能。管理员角色用例表如图3.2所示。

-
- 功能模块设计
以SpringBoot和Vue为基础搭建低卡食品销售系统,分成后台管理员模块和前台普通用户模块两个部分,后台模块包含首页仪表盘、用户管理、商品管理、商品分类管理、订单管理、库存管理、营销活动管理、内容管理、数据统计分析、系统管理、操作日志等功能,前台模块面向普通消费者,用户可以浏览首页轮播推荐、商品分类浏览、商品详情、平台公告、健康食谱等内容,登录后可以在个人中心维护健康档案、管理购物车、查看历史订单、管理收藏夹和收货地址、查看优惠券、记录营养摄入并生成日摄入报告,同时可以使用智能推荐、社区互动、消息通知、智能客服等各项功能。系统功能模块图如图4.1所示。

-
-
- 逻辑结构设计
-
根据概念模型转换为关系模型,遵循第三范式(3NF)设计数据表结构。以下为系统核心数据表的详细结构设计。
(1)用户信息表
用户信息表存储普通用户的账户信息与健康档案数据,主键为用户ID,手机号字段设为唯一约束。用户信息表如表4.1所示。
表4.1 用户信息表
|----|------------------------|--------------|----|-----|--------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 用户ID |
| 2 | yonghushoujihao | varchar(32) | 否 | 唯一 | 用户手机号 |
| 3 | mima | varchar(200) | 否 | --- | 密码 |
| 4 | yonghuxingming | varchar(16) | 是 | --- | 用户姓名 |
| 5 | touxiang | longtext | 是 | --- | 头像 |
| 6 | xingbie | varchar(200) | 是 | --- | 性别 |
| 7 | lianxifangshi | varchar(200) | 是 | --- | 联系方式 |
| 8 | shengao | varchar(200) | 是 | --- | 身高 |
| 9 | tizhong | varchar(200) | 是 | --- | 体重 |
| 10 | richanghuodongshuiping | longtext | 是 | --- | 日常活动水平 |
| 11 | jiankangmubiao | varchar(200) | 是 | --- | 健康目标 |
| 12 | nianling | varchar(200) | 是 | --- | 年龄 |
| 13 | money | double | 是 | --- | 账户余额 |
(2)商品信息表
商品信息表存储低卡食品的基础信息与营养数据,商品信息表如表4.2所示。
表4.2 商品信息表
|----|-------------------|--------------|----|-----|-------------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 商品ID |
| 2 | shangpinmingcheng | varchar(32) | 是 | --- | 商品名称 |
| 3 | shangpinfenlei | varchar(16) | 是 | --- | 商品分类 |
| 4 | jinghanliang | varchar(32) | 是 | --- | 净含量 |
| 5 | reliang | varchar(200) | 是 | --- | 热量 |
| 6 | sandayingyangsu | varchar(200) | 是 | --- | 三大营养素 |
| 7 | peiliaobiao | longtext | 是 | --- | 配料表 |
| 8 | shiyongrenqun | varchar(200) | 是 | --- | 适用人群 |
| 9 | alllimittimes | int | 是 | --- | 库存 |
| 10 | price | double | 是 | --- | 价格 |
| 11 | is_shelves | int | 是 | --- | 是否上架(1是/0否) |
| 12 | shifouwutang | varchar(200) | 是 | --- | 是否无糖 |
| 13 | shifougaoxianwei | varchar(200) | 是 | --- | 是否高纤维 |
| 14 | fengmian | longtext | 是 | --- | 封面图片 |
| 15 | storeup_number | int | 是 | --- | 收藏数 |
| 16 | discuss_number | int | 是 | --- | 评论数 |
(3)商品分类表
商品分类表存储平台商品类目信息,主键为分类ID。商品分类表如表4.3所示。
表4.3 商品分类表
|--------|----------------|-------------|--------|--------|--------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 分类ID |
| 2 | shangpinfenlei | varchar(16) | 是 | --- | 商品分类名称 |
(4)购物车表
购物车表存储用户临时选购的商品信息,通过外键关联商品表。购物车表如表4.4所示。
表4.4 购物车表
|----|-----------|--------------|----|-----|--------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 购物车项ID |
| 2 | tablename | varchar(200) | 是 | --- | 商品表名 |
| 3 | goodid | bigint | 否 | 外键 | 商品ID |
| 4 | goodname | varchar(200) | 是 | --- | 商品名称 |
| 5 | picture | longtext | 否 | --- | 图片 |
| 6 | buynumber | int | 是 | --- | 购买数量 |
| 7 | price | double | 是 | --- | 单价 |
| 8 | userid | bigint | 否 | --- | 用户ID |
(5)订单表
订单表存储用户提交的订单记录,订单编号为唯一约束。订单表如表4.5所示。
表4.5 订单表
|----|-----------------|--------------|----|-----|-------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 订单ID |
| 2 | orderid | varchar(200) | 否 | 唯一 | 订单编号 |
| 3 | tablename | varchar(200) | 是 | --- | 商品表名 |
| 4 | goodid | bigint | 否 | --- | 商品ID |
| 5 | goodname | varchar(200) | 是 | --- | 商品名称 |
| 6 | picture | longtext | 否 | --- | 图片 |
| 7 | buynumber | int | 是 | --- | 购买数量 |
| 8 | price | double | 是 | --- | 单价 |
| 9 | total | double | 是 | --- | 总价 |
| 10 | type | varchar(200) | 是 | --- | 支付类型 |
| 11 | status | varchar(200) | 是 | --- | 订单状态 |
| 12 | address | varchar(200) | 是 | --- | 收货地址 |
| 13 | tel | varchar(200) | 是 | --- | 联系电话 |
| 14 | consignee | varchar(200) | 是 | --- | 收货人 |
| 15 | userid | bigint | 否 | --- | 用户ID |
| 16 | coupon_number | varchar(200) | 是 | --- | 优惠券编号 |
| 17 | discount_amount | double | 是 | --- | 优惠金额 |
(6)营养摄入表
营养摄入表存储用户每日饮食记录,主键为记录ID。营养摄入表如表4.6所示。
表4.6 营养摄入表
|----|-----------------|-------------|----|-----|-------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 记录ID |
| 2 | yonghushoujihao | varchar(32) | 是 | --- | 用户手机号 |
续表4.6
|----|-------------------------|--------------|----|-----|---------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 3 | Yonghuxingming | varchar(16) | 是 | --- | 用户姓名 |
| 4 | meiriyinshi | varchar(200) | 是 | --- | 每日饮食 |
| 5 | reliang | varchar(200) | 是 | --- | 热量 |
| 6 | yingyangsu | varchar(200) | 是 | --- | 营养素 |
| 7 | shengchengrisherubaogao | longtext | 是 | --- | 日摄入报告文件 |
(7)收货地址表
收货地址表存储用户的配送地址信息,主键为地址ID。收货地址表如表4.7所示。
表4.7 收货地址表
|----|-----------|--------------|----|-----|--------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 地址ID |
| 2 | address | varchar(200) | 否 | --- | 详细地址 |
| 3 | name | varchar(200) | 是 | --- | 收货人 |
| 4 | phone | varchar(200) | 是 | --- | 电话 |
| 5 | isdefault | varchar(200) | 是 | --- | 是否默认地址 |
| 6 | userid | bigint | 否 | --- | 用户ID |
(8)优惠券表
优惠券表存储平台发放的优惠券信息,主键为优惠券ID。优惠券表如表4.8所示。
表4.8 优惠券表
|----|-----------------|--------------|----|-----|-------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 优惠券ID |
| 2 | coupon_name | varchar(200) | 否 | --- | 优惠券名称 |
| 3 | coupon_type | varchar(200) | 否 | --- | 优惠券类型 |
| 4 | full_amount | double | 是 | --- | 满额条件 |
| 5 | discount_amount | double | 是 | --- | 优惠金额 |
| 6 | effect_time | datetime | 是 | --- | 生效时间 |
| 7 | expire_time | datetime | 是 | --- | 过期时间 |
| 8 | userid | bigint | 否 | --- | 用户ID |
(9)社区帖子表
社区帖子表存储用户发布的交流内容,主键为帖子ID。社区帖子表如表4.9所示。
表4.9 社区帖子表
|----|--------------|--------------|----|-----|------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 帖子ID |
| 2 | title | varchar(200) | 是 | --- | 帖子标题 |
| 3 | content | longtext | 否 | --- | 帖子内容 |
| 4 | userid | bigint | 否 | --- | 用户ID |
| 5 | username | varchar(200) | 是 | --- | 用户名 |
| 6 | avatarurl | longtext | 是 | --- | 头像 |
| 续表4.9 ||||||
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 7 | is_top | int | 是 | --- | 是否置顶 |
| 8 | is_anonymous | int | 是 | --- | 是否匿名 |
| 9 | is_del | int | 是 | --- | 是否删除 |
(10)管理员表
管理员表存储后台管理员账户信息,主键为管理员ID。管理员表如表4.10所示。
表4.10 管理员表
|----|----------|--------------|----|-----|-------|
| 编号 | 字段名 | 类型 | 空否 | 键值 | 注释 |
| 1 | id | bigint | 否 | 主键 | 管理员ID |
| 2 | username | varchar(200) | 否 | --- | 用户名 |
| 3 | password | varchar(200) | 否 | --- | 密码 |
| 4 | role | varchar(200) | 是 | --- | 角色 |
- 系统实现
- 用户功能实现
(1)用户注册与登录
用户第一次使用系统的时候需要通过手机号进行注册。注册页面如图5.1所示,用户需要依次输入手机号码、密码以及是否同意协议,填写用户名或者昵称,上传头像照片,选择性别和职业类别,填写联系地址,身高,体重等个人信息。系统对手机号进行实时唯一性、两次密码一致性检验,检验合格之后才开始注册,并直接跳转到登录页面。
登录页面如图5.2所示,用户输入已注册的手机号和密码,系统对账号状态和密码进行验证之后生成Token并返回给前端,前端将Token存入浏览器本地,之后请求会带上Token来保持登录状态。页面底部有注册用户和忘记密码的链接,方便用户进行账号操作。


(2)首页与导航
用户登录后进入系统首页,顶部导航栏包含系统名称、系统公告、客服聊天、购物车入口及当前登录用户信息,如图5.3所示。导航菜单包括"首页"、"商品信息"、"健康食谱"和"论坛交流"四个主要功能板块,用户可点击切换不同功能模块。

(3)商品浏览与筛选
首页商品信息板块展示推荐商品列表,如图5.4所示。每个商品以卡片形式呈现,包含商品图片、名称、价格及关键标签(如"开袋即食""高蛋白低脂肪")。用户点击商品卡片可进入商品详情页查看完整信息。系统顶部提供搜索框,用户可输入关键词检索商品。

-
- 管理员功能实现
(1)管理员登录与后台首页
管理员以独立的后台登录页输入账号和密码来进入管理后台。登录成功之后进入后台首页仪表盘,图5.10为仪表盘。页面左侧为导航菜单,有首页、订单管理、类型管理、商品分类管理、商品信息管理、营养摄入管理、健康食谱管理、用户管理、优惠券管理、社区互动管理、系统功能管理等。首页顶部显示欢迎信息和当前时间,主要数据卡片呈现用户总数、商品信息总数、商品订单总数这些概览数据。下面使用ECharts图表来展示用户健康目标分布、无糖占比、三大营养素统计和热销商品排名,给运营决策提供可视化数据支持。

(2)类型管理
类型管理用于维护健康食谱的类型标签,如图5.11所示。管理员可查看类型列表,支持新增、删除及按类型名称搜索。每条类型记录提供详情、修改、删除操作按钮。

(5)健康食谱管理
健康食谱管理页面如图5.15所示,以表格形式展示全部食谱,包含名称、类型、热量、主料、份数、时间、详情、封面、赞数、收藏数、评论数等字段。点击"新增"按钮弹出食谱录入表单,如图5.16所示,管理员可填写食谱各项信息并上传封面后保存。

- 总结与展望
- 总结
低卡食品销售系统是为了适应目前健康饮食消费趋势,同时解决目前电商平台营养精细化筛选不足问题而专门设计开发的垂直领域解决方案。随着国民健康意识不断提升、低卡食品市场迅速发展,创建起集商品交易、营养指导、个性化推荐等多方面功能为一体的平台有着十分明显的实际意义。本系统利用信息化技术将用户健康档案和商品营养数据整合起来,从而达成选购、记录、推荐的全部流程的数字化,较好地提高了低卡食品的供需对接速度以及用户的体验。本系统研发过程中取得如下成果:
(1)系统成功构建了覆盖普通消费者与平台管理员的完整功能体系。用户端有健康档案维护、商品多维筛选、购物车管理、在线下单、营养摄入记录、智能推荐、社区互动等16项主要功能;管理端包含用户管理、商品管理、订单管理、营销管理、内容管理以及数据可视化统计等内容,构建起完整的业务链条。
(2)系统采用前后端分离架构,后端基于Spring Boot与MyBatis-Plus构建RESTful API,前端采用Vue.js与Element-UI实现响应式界面,数据库选用MySQL。技术选型都是行业里已经成熟的方案,可以保证系统的稳定性、可扩展性以及开发的效率。
(3)系统创新性地把用户健康档案数据同电商推荐算法融合起来,依据健康目的及行为前史给出个性化商品推荐,在营养记载模块实现了日摄入量的可视化剖析和超标报警,体现出"购物+健康管理"的产品理念。
经过全面的功能测试、性能测试,系统各个模块可以正常运行,界面友好,能满足低卡食品消费者的使用需求,具备上线试运行条件。
-
- 展望
低卡食品销售系统已经达到了设计的功能目标,但是由于开发时间和技术原因还存在一些不足之处,在以后的发展中还可以进一步完善和扩展。
(1)推荐算法的更新。目前所用到的内容过滤的推荐方法存在着新的用户冷启动问题,并且对于用户潜在的兴趣挖掘得比较浅。还可以使用协同过滤算法或者基于深度学习的embedding召回技术,由于有更为丰富多样的用户行为数据,从而可以提高推荐的准确性以及多样。
(2)营养数据库的增加。目前系统中营养记录模块的食物库数据量小,以后可以和权威的第三方营养API(中国食物成分表数据库)进行对接,给用户提供更多的食物搜索以及热量查询的功能。
(3)IOT设备数据接入。智能穿戴设备已经普及到社会当中,将来系统可以和智能体脂秤、运动手环等进行接口,从而得到用户体重的变化和运动消耗的情况,达到更加精确的动态热量预算目的。
低卡食品销售系统属于健康饮食消费领域的数字化转型新举措,目前也存在一些应用效果方面的优点。随着技术的不断更新以及功能的不断改进,系统将会在健康饮食理念的传播上起到更大的作用,也会给消费者的购物带来更好的体验。