以下是一个基于SSM(Spring+SpringMVC+MyBatis)和Vue技术栈的演出人员与观众疫情信息管理系统的详细设计方案,包含功能模块、数据库设计、测试方案及技术实现要点。


技术栈组成

后端

  • Spring Boot 2.7.x
  • MyBatis 3.5.x
  • MySQL 8.0
  • Redis(缓存健康码状态)

前端

  • Vue 3 + Composition API
  • Element Plus UI
  • Axios 网络请求
  • ECharts 数据可视化

核心功能模块设计

1. 人员信息管理
  • 演员/工作人员模块

    • 基本信息登记(姓名、身份证、联系方式、近期行程)。
    • 健康码状态同步(对接卫健委API,定时更新)。
    • 核酸检测记录上传(支持PDF/图片格式)。
  • 观众模块

    • 购票时强制填写健康信息(行程码、疫苗接种记录)。
    • 入场时扫码核验(通过Redis缓存实时状态)。
// MyBatis 数据层示例(演员信息)
public interface PerformerMapper {
    @Insert("INSERT INTO performer(name, id_card, health_status) VALUES (#{name}, #{idCard}, #{healthStatus})")
    int insertPerformer(Per performer);
}

2. 疫情风险防控
  • 风险地区预警

    • 自动比对演员/观众行程与全国风险地区名单(定时任务调用疫情API)。
    • 高风险人员自动触发告警(站内信+短信通知)。
  • 密接追踪

    • 基于场馆座位号生成接触图谱(图数据库Neo4j辅助分析)。
3. 数据可视化看板
  • Vue前端使用ECharts展示:
    • 实时在场人员健康状态分布。
    • 近7天高风险地区人员占比趋势。
<template>
  <div id="health-chart"></div>
</template>
<script setup>
import * as echarts from 'echarts';
const chart = echarts.init(document.getElementById('health-chart'));
chart.setOption({
  series: [{ type: 'pie', data: healthData }]
});
</script>


数据库设计(MySQL)

关键表结构
-- 演员表
CREATE TABLE `performer` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `id_card` VARCHAR(18) UNIQUE,
  `health_status` TINYINT COMMENT '0-绿码 1-黄码 2-红码'
);

-- 观众健康记录表
CREATE TABLE `audience_health` (
  `ticket_id` VARCHAR(32) PRIMARY KEY,
  `user_id` BIGINT,
  `vaccine_status` TINYINT,
  `risk_area_history` JSON COMMENT '近期行程地数组'
);

-- 场馆区域表(用于密接追踪)
CREATE TABLE `venue_zone` (
  `zone_id` VARCHAR(10) PRIMARY KEY,
  `capacity` INT,
  `risk_level` TINYINT DEFAULT 0
);


系统测试方案

1. 单元测试
  • 使用JUnit 5测试MyBatis DAO层:
@SpringBootTest
class PerformerMapperTest {
    @Autowired
    private PerformerMapper mapper;
    
    @Test
    void testInsert() {
        Performer p = new Performer("张三", "110101199001011234", 0);
        assertEquals(1, mapper.insertPerformer(p));
    }
}

2. 集成测试
  • MockMVC测试Controller层:
@AutoConfigureMockMvc
@SpringBootTest
class HealthCheckControllerTest {
    @Autowired
    private MockMvc mvc;
    
    @Test
    void testHealthStatusAPI() throws Exception {
        mvc.perform(get("/api/health/status?userId=123"))
           .andExpect(status().isOk());
    }
}

3. 前端测试
  • Jest + Testing Library测试Vue组件:
test('renders health chart', async () => {
  const wrapper = mount(HealthChart);
  await nextTick();
  expect(wrapper.find('.echarts-instance').exists()).toBe(true);
});


源码结构建议

src/
├── backend/
│   ├── controller/       # 控制层
│   ├── service/          # 业务逻辑
│   ├── mapper/           # MyBatis接口
│   └── entity/           # 数据实体
├── frontend/
│   ├── public/           # 静态资源
│   ├── src/
│   │   ├── api/          # Axios请求
│   │   ├── views/        # 页面组件
│   │   └── store/        # Pinia状态管理
└── docs/
    ├── db_schema.sql     # 数据库脚本
    └── api_postman.json  # Postman测试集合


以上方案可通过GitHub开源项目(如若依RuoYi-Vue)进行二次开发,快速搭建基础框架。实际部署时需考虑健康码API的合规性调用和数据隐私保护措施。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐