# 疫情上报 — 技术方案 > 依据:同目录 `疫情上报功能需求.md`。本模块为疫情台账 **CRUD + 解除**;处置状态由 `release_date` 是否为空推导。 --- ## 1. 技术架构 | 项 | 说明 | | --- | --- | | **后端** | RuoYi **v3.9.2**(**springboot2** 分支):JDK 8、Spring Boot 2.x、Spring MVC、MyBatis、Druid | | **数据库** | MySQL **5.7.39**,InnoDB,`utf8mb4` | | **前端** | 若依 Vue2;日期 `YYYY-MM-DD`;枚举用字典或固定选项(与需求 §2 一致) | | **代码包** | `com.ruoyi.web.modules.diseasedetection`(建议) | **分层**:`Controller`(权限、`AjaxResult` / `TableDataInfo`)→ `Service`(枚举/日期校验、**未解除**才可改/解除)→ `Mapper`/XML → `domain`。 **业务特征(摘要)** - `release_date` **为空** → 未解除:可改、可解除、可删。 - `release_date` **非空** → 已解除:禁止改、禁止再次解除;可删。 - 列表默认 `report_date DESC, create_time DESC, id DESC`。 - 筛选:`transmission_route`、`risk_level` 精确匹配(可空)。 --- ## 2. 数据库设计 ### 2.1 表 `biz_epidemic_report`(疫情上报) | 字段 | 类型 | 非空 | 说明 | | --- | --- | --- | --- | | `id` | `bigint(20)` | Y | 主键 | | `report_date` | `date` | Y | 上报日期 | | `transmission_route` | `tinyint(2)` | Y | 传播途径,见 **§2.3** | | `affected_location_track` | `varchar(500)` | Y | 涉疫点位/轨迹 | | `epidemic_type` | `tinyint(2)` | Y | 疫病类型,见 **§2.3** | | `epidemic_name` | `varchar(50)` | Y | 疫病名称 | | `risk_level` | `tinyint(2)` | Y | 风险等级,见 **§2.3** | | `release_date` | `date` | N | 解除日期;**NULL=未解除** | | `create_by` / `create_time` / `update_by` / `update_time` | 若依惯例 | — | 审计 | | `remark` | `varchar(500)` | N | 备注(选填,扩展用) | **索引**:`PRIMARY KEY (id)`;`KEY idx_report_date (report_date)`;`KEY idx_transmission_route (transmission_route)`;`KEY idx_risk_level (risk_level)`;`KEY idx_release_date (release_date)`。 **处置状态(不落库)**:`release_date IS NULL` → 未解除;否则已解除。列表/详情可冗余返回 `relieveStatus`:`0` 未解除 / `1` 已解除。 ### 2.2 DDL(MySQL 5.7) ```sql CREATE TABLE `biz_epidemic_report` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `report_date` date NOT NULL COMMENT '上报日期', `transmission_route` tinyint(2) NOT NULL COMMENT '传播途径1调运2本地3环境4其他', `affected_location_track` varchar(500) NOT NULL COMMENT '涉疫点位轨迹', `epidemic_type` tinyint(2) NOT NULL COMMENT '疫病类型1病毒2细菌3寄生虫4其他', `epidemic_name` varchar(50) NOT NULL COMMENT '疫病名称', `risk_level` tinyint(2) NOT NULL COMMENT '风险等级1高2中3低', `release_date` date DEFAULT NULL COMMENT '解除日期NULL未解除', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `idx_report_date` (`report_date`), KEY `idx_transmission_route` (`transmission_route`), KEY `idx_risk_level` (`risk_level`), KEY `idx_release_date` (`release_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='疫情上报'; ``` ### 2.3 枚举编码(与功能需求 §2 对应) **传播途径 `transmission_route`** | 值 | 标签 | | --- | --- | | 1 | 调运传入 | | 2 | 本地扩散 | | 3 | 环境感染 | | 4 | 其他未知 | **疫病类型 `epidemic_type`** | 值 | 标签 | | --- | --- | | 1 | 病毒性疫病 | | 2 | 细菌性疫病 | | 3 | 寄生虫疫病 | | 4 | 其他类疫病 | **风险等级 `risk_level`** | 值 | 标签 | | --- | --- | | 1 | 高危 | | 2 | 中危 | | 3 | 低危 | > 前后端展示走数据字典(`sys_dict`)或前端 i18n 均可;**入库必须为上表编码**,非法值拒绝。 ### 2.4 字段与 API 驼峰对照 | 需求名称 | 库字段 | API 驼峰 | | --- | --- | --- | | 上报日期 | `report_date` | `reportDate` | | 传播途径 | `transmission_route` | `transmissionRoute` | | 涉疫点位/轨迹 | `affected_location_track` | `affectedLocationTrack` | | 疫病类型 | `epidemic_type` | `epidemicType` | | 疫病名称 | `epidemic_name` | `epidemicName` | | 风险等级 | `risk_level` | `riskLevel` | | 解除日期 | `release_date` | `releaseDate` | | 处置状态(派生) | — | `relieveStatus`(0 未解除 / 1 已解除) | --- ## 3. 接口设计 **统一响应**:`AjaxResult` 或分页 `TableDataInfo`(`rows`、`total`)。 **权限标识(示例)**:`diseaseDetection:epidemicReport:list|query|add|edit|remove|relieve` **Base Path(示例)**:`/diseaseDetection/epidemicReport` | # | 说明 | Method | URI | 权限 | 要点 | | --- | --- | --- | --- | --- | --- | | 3.1 | 分页列表 | GET | `/diseaseDetection/epidemicReport/list` | `...:list` | Query **§3.1.1**;排序见 §1 | | 3.2 | 详情 | GET | `/diseaseDetection/epidemicReport/{id}` | `...:query` | 含 `relieveStatus` | | 3.3 | 新增 | POST | `/diseaseDetection/epidemicReport` | `...:add` | Body **§3.3.1**;`releaseDate` 忽略 | | 3.4 | 修改 | PUT | `/diseaseDetection/epidemicReport` | `...:edit` | Body 含 `id`;**仅** `release_date IS NULL` | | 3.5 | 删除 | DELETE | `/diseaseDetection/epidemicReport/{ids}` | `...:remove` | 逗号分隔;已/未解除均可 | | 3.6 | 解除 | PUT | `/diseaseDetection/epidemicReport/relieve` | `...:relieve` | Body:**§3.6.1**;**仅**未解除 | #### 3.1.1 列表 Query | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `pageNum` / `pageSize` | int | N | 默认 `1` / `20` | | `transmissionRoute` | int | N | 传播途径编码,精确匹配 | | `riskLevel` | int | N | 风险等级编码,精确匹配 | | `relieveStatus` | int | N | 可选:`0` 未解除(`release_date IS NULL`),`1` 已解除 | **列表行(示例)**:`id`、`reportDate`、`transmissionRoute`、`epidemicType`、`epidemicName`、`riskLevel`、`affectedLocationTrack`(可截断)、`relieveStatus`、`releaseDate`、`createTime`。 #### 3.3.1 新增 / 修改 Body(JSON,驼峰) | 字段 | 新增 | 修改 | 说明 | | --- | --- | --- | --- | | `id` | — | Y | 主键 | | `reportDate` | Y | Y | `YYYY-MM-DD` | | `transmissionRoute` | Y | Y | 1~4 | | `affectedLocationTrack` | Y | Y | 1~500 字 | | `epidemicType` | Y | Y | 1~4 | | `epidemicName` | Y | Y | 1~50 字 | | `riskLevel` | Y | Y | 1~3 | | `releaseDate` | — | — | **不得**经新增/修改写入;仅 **§3.6** | #### 3.6.1 解除 Body | 字段 | 必填 | 说明 | | --- | --- | --- | | `id` | Y | 疫情上报主键 | | `releaseDate` | Y | `YYYY-MM-DD`;≥ `report_date`;默认不允许未来日期(与需求一致) | **解除逻辑**:校验未解除 → 更新 `release_date`、`update_by/time` → 返回成功。 ### 3.4 服务端校验(摘要) | 项 | 规则 | | --- | --- | | 枚举 | `transmissionRoute`、`epidemicType`、`riskLevel` 须在 **§2.3** 范围内 | | 日期 | `reportDate` 合法;解除时 `releaseDate >= reportDate` | | 修改 | 若 `release_date` 非空 → 业务失败(已解除不可修改) | | 解除 | 若 `release_date` 非空 → 业务失败(不可重复解除) | | 删除 | 无状态限制 | --- ## 4. 菜单与权限 SQL(示例) | 类型 | 名称 | 权限标识 | | --- | --- | --- | | 目录/菜单 | 疫情上报 | `diseaseDetection:epidemicReport:list` | | 按钮 | 查询 | `diseaseDetection:epidemicReport:query` | | 按钮 | 新增 | `diseaseDetection:epidemicReport:add` | | 按钮 | 修改 | `diseaseDetection:epidemicReport:edit` | | 按钮 | 删除 | `diseaseDetection:epidemicReport:remove` | | 按钮 | 解除 | `diseaseDetection:epidemicReport:relieve` | 组件路径建议:`diseaseDetection/epidemicReport/index`;API 文件 `ruoyi-ui/src/api/diseaseDetection/epidemicReport.js`。 --- ## 5. 交付清单 - [ ] `sql/biz_epidemic_report.sql`、字典数据(三类枚举)、菜单权限 SQL - [ ] `BizEpidemicReport` Domain / Mapper / Service / Controller - [ ] 前端:列表筛选、新增/编辑表单、解除弹窗(仅未解除行展示) - [ ] 用例:已解除不可改/不可再解除、解除日期早于上报日、筛选与删除 --- ## 6. 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初稿:单表;`release_date` 驱动处置状态;CRUD + relieve 接口 |