跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Java大前端java

基于SpringBoot2与Vue3的疫情打卡健康评测系统设计

基于SpringBoot2与Vue3构建的疫情打卡健康评测系统,采用MyBatis-Plus及MySQL8.0数据库。系统支持用户健康信息采集、体温预警、行程记录及可视化分析,具备多角色权限管理。前后端分离架构确保高并发性能。包含用户打卡、资讯发布、用户管理等核心模块,提供完整的数据表结构与后端接口示例,适用于疫情防控场景下的数字化管理需求。

樱花落尽发布于 2026/3/26更新于 2026/6/1221 浏览
基于SpringBoot2与Vue3的疫情打卡健康评测系统设计

系统概述

近年来,全球范围内的突发公共卫生事件频发,疫情防控成为各国政府和社会关注的重点。传统的人工健康打卡和疫情监测方式效率低下,数据统计和分析滞后,难以满足实时监控和快速响应的需求。随着信息技术的快速发展,利用数字化手段构建高效、精准的疫情健康评测系统成为解决这一问题的有效途径。该系统能够实现个人健康信息的快速采集、动态监测和智能分析,为疫情防控提供数据支持。

本系统基于 SpringBoot2 框架构建后端服务,采用 Vue3 作为前端开发框架,结合 MyBatis-Plus 实现高效数据持久化操作,数据库选用 MySQL8.0 以支持高性能数据存储与查询。系统主要功能包括用户健康打卡、体温异常预警、行程轨迹记录、数据可视化分析等,同时支持多角色权限管理,确保数据安全性和系统可扩展性。通过前后端分离的架构设计,系统具备良好的用户体验和响应速度,能够满足大规模用户并发访问的需求。

数据表

用户健康打卡数据表

用户健康打卡数据表用于存储用户每日的健康状态信息,包括体温、症状、行程等数据。打卡时间通过系统函数自动生成,用户 ID 是该表的外键,关联用户基本信息表。结构如表 1 所示。

字段名数据类型说明
health_idbigint主键,健康记录唯一标识
user_codevarchar(32)用户编码,关联用户表
temp_valuedecimal(3,1)体温值(单位:℃)
symptom_desctext症状描述
travel_infovarchar(255)行程信息
check_timedatetime打卡时间,自动记录
risk_leveltinyint风险等级(1-低,2-中,3-高)

疫情动态资讯数据表

疫情动态资讯数据表用于存储系统发布的疫情相关新闻和公告,便于用户及时获取最新防控信息。新闻内容的编辑时间由系统自动生成,序号是该表的主键。结构如表 2 所示。

字段名数据类型说明
news_idbigint主键,资讯唯一标识
news_titlevarchar(100)资讯标题
news_contenttext资讯详细内容
publish_timedatetime发布时间,自动记录
admin_accountvarchar(50)发布管理员账号
view_countint浏览次数

系统用户信息数据表

系统用户信息数据表用于存储注册用户的基本信息和权限数据,支持多角色权限分配。用户密码采用加密存储,注册时间由系统自动生成。结构如表 3 所示。

字段名数据类型说明
user_idbigint主键,用户唯一标识
user_namevarchar(50)用户姓名
login_accountvarchar(50)登录账号
login_pwdvarchar(64)加密后的登录密码
role_typetinyint角色类型(1-普通用户,2-管理员)
register_timedatetime注册时间,自动记录
last_logindatetime最后登录时间

技术架构栈

后端技术:Spring Boot

Spring Boot 作为现代 Java 企业级开发的核心框架,以其'约定优于配置'的设计哲学重新定义了应用开发模式。

  • 零配置启动:集成自动配置机制,大幅减少 XML 配置文件编写
  • 嵌入式服务器:内置 Tomcat/Jetty/Undertow,支持独立 JAR 包部署
  • 生产就绪:集成 Actuator 监控组件,提供健康检查、指标收集等企业级特性
  • 微服务友好:天然支持分布式架构,与 Spring Cloud 生态无缝集成

开发优势:通过 Starter 依赖体系和智能自动装配,开发者可将精力完全聚焦于业务逻辑实现,而非底层基础设施搭建。单一可执行 JAR 的部署模式极大简化了运维流程。

前端技术:Vue.js

Vue.js 以其渐进式框架设计和卓越的开发体验,成为现代前端开发的首选解决方案。

  • 响应式数据流:基于依赖追踪的响应式系统,实现高效的视图更新
  • 组件化架构:单文件组件(SFC)设计,实现样式、逻辑、模板的完美封装
  • 灵活的渐进式设计:可从简单的视图层库扩展至完整的 SPA 解决方案
  • 丰富的生态系统:Vue Router、Vuex/Pinia、Vue CLI 等官方工具链完备

开发效率:直观的模板语法结合强大的指令系统,让复杂的用户交互变得简洁明了。优秀的 TypeScript 支持和开发者工具,为大型项目提供可靠的开发保障。

核心代码

package com.controller;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.ShangpinxinxiEntity;
import com.entity.view.ShangpinxinxiView;
import com.service.ShangpinxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
import com.service.StoreupService;
import com.entity.StoreupEntity;

/**
 * 商品信息
 * 后端接口
 * @author *
 * @email *
 * @date 2023-05-08 15:26:09
 */
@RestController
@RequestMapping("/shangpinxinxi")
public class ShangpinxinxiController {
    @Autowired
    private ShangpinxinxiService shangpinxinxiService;
    @Autowired
    private StoreupService storeupService;

    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, ShangpinxinxiEntity shangpinxinxi,
                  @RequestParam(required = false) Double pricestart,
                  @RequestParam(required = false) Double priceend, HttpServletRequest request) {
        String tableName = request.getSession().getAttribute("tableName").toString();
        if (tableName.equals("shangjia")) {
            shangpinxinxi.setShangpubianhao((String) request.getSession().getAttribute("username"));
        }
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
        if (pricestart != null) ew.ge("price", pricestart);
        if (priceend != null) ew.le("price", priceend);
        PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
        return R.ok().put("data", page);
    }

    /**
     * 前端列表
     */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, ShangpinxinxiEntity shangpinxinxi,
                  @RequestParam(required = false) Double pricestart,
                  @RequestParam(required = false) Double priceend, HttpServletRequest request) {
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
        if (pricestart != null) ew.ge("price", pricestart);
        if (priceend != null) ew.le("price", priceend);
        PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
        return R.ok().put("data", page);
    }

    /**
     * 列表
     */
    @RequestMapping("/lists")
    public R list(ShangpinxinxiEntity shangpinxinxi) {
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
        ew.allEq(MPUtil.allEQMapPre(shangpinxinxi, "shangpinxinxi"));
        return R.ok().put("data", shangpinxinxiService.selectListView(ew));
    }

    /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(ShangpinxinxiEntity shangpinxinxi) {
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
        ew.allEq(MPUtil.allEQMapPre(shangpinxinxi, "shangpinxinxi"));
        ShangpinxinxiView shangpinxinxiView = shangpinxinxiService.selectView(ew);
        return R.ok("查询商品信息成功").put("data", shangpinxinxiView);
    }

    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id) {
        ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
        shangpinxinxi.setClicknum(shangpinxinxi.getClicknum() + 1);
        shangpinxinxi.setClicktime(new Date());
        shangpinxinxiService.updateById(shangpinxinxi);
        return R.ok().put("data", shangpinxinxi);
    }

    /**
     * 前端详情
     */
    @IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id) {
        ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
        shangpinxinxi.setClicknum(shangpinxinxi.getClicknum() + 1);
        shangpinxinxi.setClicktime(new Date());
        shangpinxinxiService.updateById(shangpinxinxi);
        return R.ok().put("data", shangpinxinxi);
    }

    /**
     * 赞或踩
     */
    @RequestMapping("/thumbsup/{id}")
    public R vote(@PathVariable("id") String id, String type) {
        ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
        if (type.equals("1")) {
            shangpinxinxi.setThumbsupnum(shangpinxinxi.getThumbsupnum() + 1);
        } else {
            shangpinxinxi.setCrazilynum(shangpinxinxi.getCrazilynum() + 1);
        }
        shangpinxinxiService.updateById(shangpinxinxi);
        return R.ok("投票成功");
    }

    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request) {
        shangpinxinxi.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue());
        // ValidatorUtils.validateEntity(shangpinxinxi);
        shangpinxinxiService.insert(shangpinxinxi);
        return R.ok();
    }

    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request) {
        shangpinxinxi.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue());
        // ValidatorUtils.validateEntity(shangpinxinxi);
        shangpinxinxiService.insert(shangpinxinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request) {
        // ValidatorUtils.validateEntity(shangpinxinxi);
        shangpinxinxiService.updateById(shangpinxinxi);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids) {
        shangpinxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }

    /**
     * 前端智能排序
     */
    @IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params, ShangpinxinxiEntity shangpinxinxi,
                      HttpServletRequest request, String pre) {
        EntityWrapper<ShangpinxinxiEntity> ew = new EntityWrapper<ShangpinxinxiEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
        Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, Object> entry = it.next();
            String key = entry.getKey();
            String newKey = entry.getKey();
            if (pre.endsWith(".")) {
                newMap.put(pre + newKey, entry.getValue());
            } else if (StringUtils.isEmpty(pre)) {
                newMap.put(newKey, entry.getValue());
            } else {
                newMap.put(pre + "." + newKey, entry.getValue());
            }
        }
        params.put("sort", "clicknum");
        params.put("order", "desc");
        PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
        return R.ok().put("data", page);
    }
}

系统界面截图

系统界面截图

系统界面截图

系统界面截图

系统界面截图

目录

  1. 系统概述
  2. 数据表
  3. 用户健康打卡数据表
  4. 疫情动态资讯数据表
  5. 系统用户信息数据表
  6. 技术架构栈
  7. 后端技术:Spring Boot
  8. 前端技术:Vue.js
  9. 核心代码
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Hookshot:轻量级 GitHub Webhook 处理工具
  • CANN 技术栈解析:不同场景下的语言选型指南
  • 几款免费 AI 生成内容检测工具及降重方法指南
  • AI 产品经理面试 20 个核心问题及备考策略
  • DJI RoboMaster EP 机器人 Python SDK 编程入门
  • 使用 Trae IDE 自动将 Figma 转为前端代码
  • 低空安全综合管理服务平台建设方案
  • VSCode 精准禁用 Copilot 代码补全:按语言与场景灵活配置
  • 大模型(LLM)面试常见问题与解答指南
  • Spring Boot 微服务架构:独立匹配系统设计及后端对接
  • OpenManus 项目导论:从“手写”到“智能写作”的进化史
  • 基于 YOLOv8-v12 与 SpringBoot 的轴承缺陷检测系统
  • AI 时代,为何架构师反而更稀缺了?
  • Chrome 浏览器存在严重安全漏洞需立即更新
  • Python 代码加速运行的 8 种实用技巧
  • Rust 与 WebAssembly 深度实战:在浏览器与 Node.js 中运行高性能代码
  • Kotaemon 与 GraphRAG 集成:构建高效文档问答系统
  • 企业级 Neo4j 集群部署实战指南
  • Python Windows 环境搭建与 PyCharm 配置实战
  • OpenClaw 开源 AI 助手部署与使用指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online