个人开发5

应急预案管理模块开发日记
关键词:Spring Boot、MySQL、Excel模板解析、多版本控制
一、需求分析与技术选型
需求核心:

  1. 预案模板标准化:支持下载模板后批量导入,需兼容Excel格式(基于用户提供的演练项目分类,如客票系统、机房供配电等)。
  2. 版本管理:每个预案需记录版本号,支持历史版本追溯与回滚。
  3. 权限控制:仅管理员可编辑/删除预案,普通用户可查看与下载模板。

技术方案:
后端框架:Spring Boot 3.x(集成Apache POI处理Excel)
数据库
:MySQL 8.0,表结构设计参考emergency_plan(预案主表)与plan_template(模板表)
文件存储:预案文档采用OSS对象存储,模板文件存于本地/templates目录
前端交互:Vue3 + Element Plus(弹窗表单、文件上传组件)
sql
-- 应急预案表(新增版本控制字段)
CREATE TABLE emergency_plan (
plan_id INT AUTO_INCREMENT PRIMARY KEY,
plan_name VARCHAR(200) NOT NULL COMMENT '预案名称',
plan_type ENUM('客票系统','旅服系统','机房供配电/UPS') NOT NULL,
version VARCHAR(20) NOT NULL COMMENT '版本号(格式:v1.0.0)',
file_path VARCHAR(255) NOT NULL COMMENT 'OSS存储路径',
is_latest TINYINT(1) DEFAULT 1 COMMENT '是否为最新版本',
creator_id INT NOT NULL
);

-- 预案模板表(增加下载计数统计)
CREATE TABLE plan_template (
template_id INT AUTO_INCREMENT PRIMARY KEY,
template_name VARCHAR(200) NOT NULL,
applicable_type VARCHAR(50) NOT NULL COMMENT '适用预案类型',
download_count INT DEFAULT 0 COMMENT '下载次数',
file_path VARCHAR(255) NOT NULL
);

@GetMapping("/template/download/{type}")  
public ResponseEntity<Resource> downloadTemplate(@PathVariable String type) {  
    String filePath = templateService.getPathByType(type);  
    File file = new File(filePath);  
    return ResponseEntity.ok()  
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getName() + "\"")  
        .body(new FileSystemResource(file));  
}  
  1. 批量导入接口(含事务管理):
@Transactional  
public void batchImport(MultipartFile file) {  
    List<EmergencyPlanDTO> plans = ExcelParser.parse(file); // 使用POI解析Excel  
    plans.forEach(plan -> {  
        if (!planTypeValidator.isValid(plan.getType())) {  
            throw new InvalidTemplateException("无效的预案类型");  
        }  
        planRepository.save(convertToEntity(plan));  
    });  
}  
  - 在`plan_type`字段增加枚举约束,前端下拉框动态加载类型。  
  - 后端解析时通过`JSR-303`校验,返回详细错误定位(如“第5行:机房UPS不属于有效类型”)。  
  - 新增数据时自动生成语义化版本号(如v1.2.3),`is_latest`字段标记最新版本。  
  - 使用乐观锁(`@Version`注解)控制并发修改。  
  - 前端采用分片上传(每片5MB),后端通过MD5校验合并文件。  
  - 异步线程处理OSS上传,避免阻塞主线程。 

为`plan_type`和`creator_id`添加联合索引。  
模板文件列表缓存至Redis,有效期2小时。    
当前进展:已完成核心功能开发并通过冒烟测试,代码覆盖率85%。  
遗留问题:  
- 移动端适配尚未完成(计划使用Vant UI重构表单页)。  
- 审计日志模块待接入(记录预案修改历史)。  
1. 与“演练评估反馈”模块联动,支持根据评估结果自动推荐预案更新。  
2. 集成Markdown编辑器,支持预案内容富文本编辑。  
posted @ 2025-04-24 00:10  我嘞牛牛  阅读(31)  评论(0)    收藏  举报