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

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

基于 SpringBoot2 和 Vue3 构建前后端分离架构,采用 MyBatis-Plus 进行数据持久化,数据库使用 MySQL8.0。主要功能涵盖用户健康打卡、体温异常预警、行程轨迹记录及数据可视化分析,支持多角色权限管理。系统包含用户健康打卡、疫情动态资讯及系统用户信息三张核心数据表,通过 RESTful API 实现业务逻辑,具备高并发访问能力和良好的扩展性。

NodeJser发布于 2026/3/29更新于 2026/6/819 浏览
基于 SpringBoot2+Vue3 的疫情健康打卡评测系统设计

摘要

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

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

数据表

用户健康打卡数据表

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

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

疫情动态资讯数据表

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

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

系统用户信息数据表

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

字段名数据类型说明
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

更多推荐文章

查看全部
  • Python unstructured 库:处理非结构化数据并转换为结构化格式
  • Python+requests+pytest 接口自动化测试框架搭建
  • Akagi 雀魂 AI 辅助工具安装与配置指南
  • 基于强化学习的无人机端到端飞行控制算法开发
  • Python 网络爬虫技术原理与实战应用指南
  • LangChain-Chatchat 本地知识库部署与避坑指南
  • HarmonyOS6 RcInput 组件核心架构与类型系统设计
  • C++ Lambda 表达式详解:语法、捕获与底层原理
  • 基于 C++11 手写前端 Promise 实现
  • Windows WSL 环境下 AMD 显卡部署 Stable Diffusion WebUI 与 ComfyUI
  • 软考上午题高频真题汇总:前端备考指南
  • 网络安全转行指南:零基础学习路径与职业规划建议
  • DeepSeek 结合通义万相制作 AI 视频实战详解
  • Python 项目打包发布完整指南:从构建到上传 PyPI
  • Go 语言实现复杂密码生成器算法(附源码)
  • Llama.cpp 跨平台部署实战:本地运行大模型完整指南
  • HarmonyOS 6.0 Camera Kit 微距状态监听能力详解
  • Spark 核心更新:Python UDF AST 转译与 K8s 突发内存感知机制
  • MySQL 内置函数与连接查询详解
  • Web Animations API (WAAPI) 核心原理与实战应用

相关免费在线工具

  • 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