基于springboot2+vue2的疾病防控综合系统

1. 代码获取

https://fifteen.xiaobias.com/source/204

2. 项目简介

疾病防控综合系统,旨在为社区或基层单位提供一个信息化管理平台,以支持日常的疫情防控工作。系统主要功能模块包括:

  • 用户管理:管理社区用户的基本信息。
  • 出入记录:记录并管理居民的出入情况,并关联健康码状态。
  • 健康打卡:居民可以每日进行健康打卡,上传打卡照片和备注。
  • 核酸检测:记录居民的核酸检测时间与结果。
  • 疫苗接种:管理居民的疫苗接种记录,支持多针次记录。
  • 物资管理:管理防疫物资的库存,并支持居民在线申请物资。
  • 社区疫情情况:发布社区的疫情相关公告和动态。
  • 公告信息:发布系统级的通知公告。

系统分为管理员普通用户两种角色。管理员负责后台数据的管理与审核,普通用户可以进行打卡、查看公告、申请物资等操作。

3. 技术栈

层次 技术/框架 说明
后端 Spring Boot 应用框架,版本 2.2.2.RELEASE
MyBatis Plus ORM框架,简化数据库操作
Apache Shiro 安全框架,用于权限控制
MySQL 关系型数据库,版本 5.7.32-log
前端 Vue.js 前端核心框架(后台管理端)
Element UI Vue.js 的 UI 组件库(后台管理端)
LayUI 前端UI框架(前台展示端)
ECharts 数据可视化图表库
其他 Maven 项目构建与依赖管理

4. 详细介绍

4.1 核心功能模块

  1. 用户模块 (yonghu)

    • 支持用户的注册、登录和个人信息管理(头像、手机号、身份证号等)。
    • 用户角色区分,不同角色拥有不同权限。
  2. 健康管理模块

    • 打卡 (daka):用户每日可进行一次打卡,系统会记录打卡日期,并防止同一天重复打卡。
    • 核酸检测 (hesuanjiance):记录用户的核酸检测时间和结果(阴性/阳性)。
    • 疫苗接种 (jiezhongjilu):记录用户的疫苗接种信息,包括接种时间、类型(第一针、第二针等),并生成唯一的接种编号,避免重复记录。
  3. 物资管理模块 (wuzi, wuzishenqing)

    • 物资管理:管理员可以管理物资类型、名称、单位、库存数量等。
    • 物资申请:用户可以查看物资列表并发起申请,填写申请数量和理由。管理员审核通过后,系统会自动扣减相应物资的库存。
  4. 信息发布与记录模块

    • 出入记录 (churujilu):记录用户的出入时间、类型(出去/进来),并上传健康码图片作为凭证。
    • 社区疫情情况 (shequyiqing):发布社区相关的疫情信息,支持图文内容。
    • 公告信息 (gonggao):发布系统级的公告,支持按类型分类。

4.2 数据库设计

  • yonghu: 用户表,存储账户、密码、姓名、联系方式、身份证号等。
  • churujilu: 出入记录表,关联用户ID,记录出入类型、时间、健康码图片。
  • daka: 打卡表,关联用户ID,记录打卡日期、照片和备注。
  • hesuanjiance: 核酸检测表,关联用户ID,记录检测时间和结果。
  • jiezhongjilu: 接种记录表,关联用户ID,记录接种编号、时间和类型。
  • wuzi: 物资表,存储物资名称、单位、类型、库存(wuzi_kucun_number)。
  • wuzishenqing: 物资申请表,关联用户和物资,记录申请数量、状态(待审核/同意/拒绝)。
  • gonggao / shequyiqing: 公告和社区疫情表,存储标题、图片、内容和发布时间。
  • dictionary: 字典表,用于存储各类下拉选项,如性别、出入类型、接种类型等,提高了系统的可维护性。

4.3 核心业务逻辑

  1. 用户注册与登录:

    • 注册时会校验用户名、手机号、身份证号的唯一性。
    • 登录成功后,后端会生成一个 Token 用于后续请求的身份验证。
  2. 物资申请与审核:

    • 用户提交申请后,申请记录的 wuzishenqing_yesno_types 字段默认为 1(待审核)。
    • 管理员审核通过(状态改为 2,即"同意")时,后端逻辑会查询对应物资的当前库存。
    • 如果申请数量小于等于库存,则执行库存扣减操作;否则,审核会失败并提示库存不足。
    • 审核拒绝(状态改为 3)时,库存不变。
  3. 数据字典:

    • 系统大量使用 dictionary 表来管理枚举值,如性别、公告类型、接种类型等。
    • 项目启动时,监听器 DictionaryServletContextListener 会将所有字典数据加载到 ServletContextdictionaryMap 属性中,形成一个全局的缓存。
    • 在返回数据给前端时,dictionaryService.dictionaryConvert() 方法会利用这个缓存,自动将字典的编码(code)转换成对应的中文名称(value),方便前端展示。

5. 部分代码

5.1 实体类示例 (YonghuEntity.java)

java 复制代码
package com.entity;

import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
// ... 省略 imports

/**
 * 用户
 */
@TableName("yonghu")
public class YonghuEntity<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    @TableId(type = IdType.AUTO)
    private Integer id;

    /** 账户 */
    private String username;

    /** 密码 */
    private String password;

    /** 用户姓名 */
    private String yonghuName;

    /** 用户手机号 */
    private String yonghuPhone;

    /** 用户身份证号 */
    private String yonghuIdNumber;

    /** 用户头像 */
    private String yonghuPhoto;

    /** 性别 */
    private Integer sexTypes;

    /** 电子邮箱 */
    private String yonghuEmail;

    /** 创建时间 */
    private Date createTime;

    // ... 省略 getter 和 setter 方法
}

5.2 控制器示例 (WuzishenqingController.java 部分代码)

java 复制代码
// ... 省略其他代码
@RestController
@RequestMapping("/wuzishenqing")
public class WuzishenqingController {
    // ... 省略依赖注入

    /**
    * 后端审核物资申请
    */
    @RequestMapping("/shenqing")
    public R shenqing(@RequestBody WuzishenqingEntity wuzishenqing, HttpServletRequest request){
        // 如果审核状态为"同意"
        if(wuzishenqing.getWuzishenqingYesnoTypes() == 2){
            // 查询对应的物资信息
            WuziEntity wuziEntity = wuziService.selectById(wuzishenqing.getWuziId());
            if(wuziEntity == null )
                return R.error("查不到该物资");
            // 计算扣除申请数量后的库存
            int yue = wuziEntity.getWuziKucunNumber() - wuzishenqing.getWuzishenqingNumber();
            // 如果库存不足
            if(yue <0)
                return R.error("库存中并没有那么多物资");
            // 更新物资库存
            wuziEntity.setWuziKucunNumber(yue);
            wuziService.updateById(wuziEntity);
        }
        // 更新申请记录的审核时间和审核状态
        wuzishenqing.setUpdateTime(new Date());
        wuzishenqingService.updateById(wuzishenqing);
        return R.ok();
    }
    // ... 省略其他代码
}

5.3 前端权限菜单配置 (menu.js 部分代码)

javascript 复制代码
const menu = {
    list() {
        return [
            {
                "roleName": "管理员",
                "backMenu": [
                    {
                        "menu": "出入记录管理",
                        "child": [
                            {
                                "menu": "出入记录管理",
                                "tableName": "churujilu",
                                "buttons": ["查看", "新增", "修改", "删除"] // 管理员有此模块的所有权限
                            }
                        ]
                    },
                    // ... 其他菜单项
                ]
            },
            {
                "roleName": "用户",
                "backMenu": [
                    {
                        "menu": "出入记录管理",
                        "child": [
                            {
                                "menu": "出入记录管理",
                                "tableName": "churujilu",
                                "buttons": ["查看"] // 普通用户在此模块只有"查看"权限
                            }
                        ]
                    },
                    // ... 其他菜单项
                ]
            }
        ]
    }
}
export default menu;

6. 部分截图

7. 项目总结

该项目是一个功能较为完善的疾病防控综合管理系统,涵盖了疫情防控中常见的用户管理、健康监测(打卡、核酸、疫苗)、物资调配及信息发布等多个环节。项目采用了主流的 Spring Boot + Vue 技术栈,前后端分离,结构清晰。

主要优点:

  • 功能全面:覆盖了社区防控工作的主要业务场景,形成一个闭环管理。
  • 权限分明 :通过 menu.jsToken 拦截器,实现了管理员和普通用户角色的权限隔离,保证了数据操作的安全性。
  • 数据字典设计 :通过 dictionary 表集中管理枚举值,提高了代码的复用性和系统的可维护性。
  • 关键业务逻辑严谨:如物资申请审核时对库存的判断和扣减,确保了数据的一致性和业务规则的正确执行。

总体而言,该项目结构完整,代码规范,可作为中小型社区或单位疫情防控管理系统的有效解决方案。

相关推荐
砚底藏山河22 分钟前
【量化纯GET实战 #11】移动均线 MA:5 日 20 日 60 日怎么算怎么用
java·python·金融·maven
一只小闪闪34 分钟前
easy-trans java数据通用翻译框架v2.3.0
java·后端·架构
2601_9620558136 分钟前
Spring全部注解
java·后端·spring
chjif1 小时前
一张照片和一段声音如何生成口播视频:MiniMax H3 音画同步实测
java·前端·javascript
何以解忧,唯有..1 小时前
LangChain 中 Pydantic 格式输出:结构化输出的完整指南
java·开发语言·langchain
旧梦95271 小时前
Java 捕获多个异常:从基础语法到最佳实践
java·开发语言
2601_962189601 小时前
【SpringBoot】使用IDEA创建SpringBoot项目
java·spring boot·intellij-idea
步行cgn1 小时前
Spring Boot 启动报错:MissingServletWebServerFactoryBean 的排查与解决
java·spring boot·后端
XLYcmy1 小时前
HTML/CSS/JS 基础与 Vue 技术栈深度解析
java·前端·css·html·vue3·vue2·api