Files
his/docs/specs/his-release-checklist-v1.0.md

17 KiB
Raw Blame History

HIS项目发布检查清单 v1.0

文档说明本清单整合了提交规范、前端检查、后端检查、CI/CD门禁四个部分作为HIS项目发布的标准化检查依据。每次发布前必须逐项确认。

目录


1. 提交规范commit-template

📝 PR/Commit 模板

标题格式

<类型>(<模块>): <简短描述>

示例:
feat(patient): 添加患者基本信息编辑功能
fix(doctor): 修复医生排班显示异常问题
docs(api): 更新预约挂号接口文档
refactor(nurse): 重构护士站护理记录组件

正文模板

## 🔍 变更背景
- **问题描述**:详细说明要解决的问题或实现的需求
- **影响范围**:列出受影响的模块、页面、功能
- **相关链接**禅道任务ID、需求文档链接等

## 🛠️ 变更内容
- **主要修改**:核心代码变更点
- **技术方案**:采用的技术方案和设计思路
- **兼容性**是否涉及API或数据结构变更

## 🗄️ 数据库变更
- **表结构变更**:列出新增/修改的表和字段
- **数据迁移**:是否需要数据迁移脚本
- **回滚方案**:数据库变更的回滚策略

## ✅ 验证情况
- **测试覆盖**:单元测试、集成测试覆盖情况
- **手动验证**:手动测试的场景和结果
- **构建验证**:本地构建截图(必填)

## 📋 检查清单
- [ ] 代码已通过 ESLint 检查
- [ ] 本地构建成功(附截图)
- [ ] 核心功能已测试验证
- [ ] 文档已同步更新
- [ ] Code Review 已完成

## 👥 相关人员
- **开发者**@开发者姓名
- **测试者**@测试者姓名  
- **审核人**@架构师姓名

🏷️ 提交类型说明

类型 说明 示例
feat 新功能 feat: 添加用户登录功能
fix Bug修复 fix: 修复表单验证错误
docs 文档更新 docs: 更新API文档
style 代码格式调整 style: 格式化代码
refactor 代码重构 refactor: 重构组件结构
test 测试相关 test: 添加单元测试
chore 构建/依赖等 chore: 升级依赖版本
perf 性能优化 perf: 优化列表加载速度

📁 模块命名规范

模块 说明
patient 患者管理相关
doctor 医生工作站相关
nurse 护士站相关
admin 后台管理相关
common 公共组件/工具
api API接口相关
auth 认证授权相关
payment 支付相关

🖼️ 构建验证截图要求

必须包含的信息

  1. 终端窗口:显示 npm run build:prod 命令执行过程
  2. 成功标识:明确显示构建成功的提示信息
  3. 时间戳:截图包含当前时间,证明是最新构建
  4. 分支信息:显示当前工作分支名称

⚠️ 禁止行为

严重违规(直接拒绝合并)

  • 无构建验证截图
  • 代码存在 ESLint 错误
  • 未填写变更说明
  • 修改无关代码文件

2. 前端检查frontend-checklist

📋 基础检查项

代码质量

  • 代码已通过 ESLint 检查,无警告和错误
  • 代码已通过 Prettier 格式化
  • 无 console.log() 等调试代码残留
  • 变量命名符合规范,语义清晰
  • 函数职责单一,复杂度适中

构建验证

  • 本地执行 npm run build:prod 成功完成
  • 构建产物无报错,体积合理
  • 静态资源路径正确无404错误
  • 环境变量配置正确(开发/测试/生产)

功能验证

  • 核心功能流程完整测试通过
  • 边界条件和异常场景已覆盖
  • 表单验证逻辑正确
  • API 接口调用正常,错误处理完善
  • 路由跳转逻辑正确

🔧 技术检查项

模块导入检查

  • 所有 import 语句引用的模块实际存在
  • 无未使用的 import 导入
  • 路径别名(@/)配置正确
  • 第三方库版本兼容性确认

性能优化

  • 组件按需加载(懒加载)已配置
  • 大数据列表已实现虚拟滚动或分页
  • 图片资源已压缩,格式合适
  • 无内存泄漏风险(事件监听器、定时器等)

安全检查

  • 用户输入已做 XSS 防护
  • 敏感信息不在前端硬编码
  • API 请求已做 CSRF 防护
  • 权限控制逻辑正确

🌐 兼容性检查

浏览器兼容

  • 主流浏览器Chrome、Firefox、Safari、Edge显示正常
  • 移动端适配良好(如适用)
  • 分辨率适配1366x768、1920x1080等

设备兼容

  • 触摸设备操作体验良好
  • 键盘导航支持完整
  • 屏幕阅读器兼容性(无障碍)

📱 发布准备

文档更新

  • 相关 API 文档已同步更新
  • 用户操作手册已更新(如适用)
  • 变更日志已记录

回滚预案

  • 回滚方案已准备
  • 数据兼容性已确认
  • 紧急联系人已明确

最终确认

发布前最后检查

  • 本地构建截图已附在 PR 中
  • 测试环境部署验证通过
  • Code Review 已完成并获得批准
  • 相关 Bug 已关闭或延期说明

3. 后端检查backend-checklist

📋 基础检查项

Maven编译验证

  • 本地执行 mvn compile 编译通过无ERROR
  • 执行 mvn package -DskipTests 打包成功
  • 依赖版本无冲突(mvn dependency:tree 检查)
  • 无编译警告(或已有书面说明可忽略)

构建产物验证

  • JAR/WAR包生成完整大小合理
  • application.yml 等配置文件已打包进产物
  • 第三方依赖jar包完整lib目录无缺失

🔧 Spring Boot 配置检查

多环境配置

  • application-dev.yml(开发)配置正确
  • application-test.yml(测试)配置正确
  • application-prod.yml(生产)配置正确
  • 启动参数 --spring.profiles.active 指定正确环境
  • 生产环境未启用devtools热部署

Actuator安全

  • 生产环境 /actuator 端点已禁用或限制访问
  • /actuator/env/actuator/heapdump 等敏感端点已关闭
  • 健康检查端点 /actuator/health 返回信息已脱敏

启动校验

  • 数据库连接池配置合理HikariCP最大/最小连接数)
  • Redis/消息中间件连接配置正确
  • 启动日志无ERROR级别异常

🗄️ MyBatis Plus 规范检查

实体-表映射

  • 所有实体类标注 @TableName,表名与实际一致
  • 主键字段标注 @TableId(type = IdType.AUTO) 或对应策略
  • 非表字段标注 @TableField(exist = false)
  • 字段命名符合下划线转驼峰规则

SQL安全

  • 所有查询使用参数化查询(QueryWrapper / LambdaQueryWrapper
  • 禁止字符串拼接SQL"WHERE name = '" + name + "'"
  • 批量操作使用MyBatis Plus saveBatch / updateBatchById
  • 复杂SQL使用XML映射避免注解内嵌长SQL

事务管理

  • 涉及多表写操作的方法标注 @Transactional
  • 事务边界合理不包含外部HTTP调用
  • 异常回滚配置正确(rollbackFor = Exception.class
  • 事务方法未被同一类内方法直接调用(自调用失效问题)

分页插件

  • PaginationInnerInterceptor 已正确配置
  • 分页查询使用 Page<T> 对象非手动limit/offset

🔌 RESTful API 设计检查

统一返回格式

  • 所有接口返回 {code, msg, data} 统一结构
  • 成功返回 code=200,业务错误使用自定义错误码
  • 异常通过 @ControllerAdvice + @ExceptionHandler 统一处理

HTTP状态码

  • 资源创建返回 201 Created
  • 资源删除返回 204 No Content
  • 参数校验失败返回 400 Bad Request
  • 未认证返回 401 Unauthorized
  • 无权限返回 403 Forbidden
  • 资源不存在返回 404 Not Found

参数校验

  • 请求参数使用 @Valid / @Validated 注解校验
  • 必填字段标注 @NotBlank / @NotNull
  • 数值范围标注 @Min / @Max
  • 格式校验使用 @Pattern(如手机号、身份证号)
  • 校验失败返回明确错误信息非500堆栈

API版本管理

  • 接口路径包含版本号(/api/v1//api/v2/
  • 废弃接口标注 @Deprecated,并在文档中说明
  • 不兼容变更必须升级版本号

🔒 安全与合规检查

数据脱敏

  • 患者身份证号在日志中脱敏(*** 掩码)
  • 患者手机号在日志中脱敏前3后4中间****
  • 敏感字段序列化时使用 @JsonSerialize 自定义脱敏器
  • 接口返回中非必需字段不暴露如密码、salt

权限控制

  • 所有涉及患者数据的接口标注 @PreAuthorize
  • 数据级权限校验(医生只能访问本科室患者)
  • 越权访问返回 403,非 404500
  • 敏感操作(删除、修改诊断)需二次确认或额外权限

审计日志

  • 处方修改记录操作人、时间、变更内容
  • 病历删除操作记录完整审计链
  • 审计日志独立存储,不可被业务用户删除
  • 关键业务操作记录IP地址和操作终端

性能检查

数据库查询

  • 无N+1查询问题使用 JOIN 或批量查询)
  • 大表查询必须有分页限制
  • 慢查询已优化(执行时间 < 500ms
  • 索引已覆盖高频查询条件

接口性能

  • 核心接口响应时间 < 1秒
  • 列表接口支持分页,无全量返回
  • 大文件下载使用流式传输,非全量加载到内存

📝 文档与发布准备

文档更新

  • API接口文档已同步更新路径、参数、返回值
  • 数据库变更脚本已提供DDL/DML
  • 配置变更说明已记录(新增/修改的配置项)
  • 影响范围说明已明确(哪些模块、哪些接口受影响)

回滚预案

  • 数据库变更可回滚提供反向SQL脚本
  • 配置变更可快速回退
  • 紧急回滚流程已明确(谁、怎么做、多长时间)
  • 回滚后数据一致性已验证

最终确认

发布前最后检查

  • mvn compile 构建成功(附终端截图)
  • 关键单元测试通过
  • 测试环境部署验证通过
  • Code Review 已完成并获得批准
  • 相关Bug已关闭或延期说明

4. CI/CD门禁cicd-gatekeeper

🎯 规范目标

建立自动化质量门禁,确保每次代码提交都经过严格验证,防止低质量代码进入主干分支,提升系统稳定性和开发效率。

🔒 门禁层级

1. 提交前门禁Pre-commit

触发时机git commit 执行前
验证内容

  • ESLint 代码规范检查
  • Prettier 代码格式化
  • 简单的单元测试(快速执行)

工具配置

  • Husky + lint-staged
  • 配置文件:.husky/pre-commit

2. 推送前门禁Pre-push

触发时机git push 执行前
验证内容

  • 完整的单元测试套件
  • 构建验证(npm run build:prod
  • 集成测试(核心流程)

工具配置

  • Husky pre-push hook
  • 配置文件:.husky/pre-push

3. CI流水线门禁CI Pipeline

触发时机:代码推送到远程仓库后
验证内容

  • 完整的测试套件(单元+集成+端到端)
  • 代码覆盖率检查分阶段目标Q1≥30%Q2≥50%Q3≥80%
  • 安全扫描SAST
  • 构建产物验证
  • 部署到测试环境

工具配置

  • Spug CI/CD 流水线
  • Gitea Webhook 触发

4. 发布前门禁Release Gate

触发时机:准备发布到生产环境前
验证内容

  • 生产环境冒烟测试
  • 性能基准测试
  • 安全合规检查
  • 回滚预案验证

⚙️ 具体配置要求

ESLint 配置

// eslint.config.js 关键配置
import globals from "globals";
import pluginVue from "eslint-plugin-vue";
import parserVue from "vue-eslint-parser";
import importPlugin from "eslint-plugin-import";

export default [
  {
    name: "app/files-to-lint",
    files: ["**/*.{js,mjs,jsx,vue}"],
  },

  {
    name: "app/files-to-ignore",
    ignores: ["**/dist/**", "**/node_modules/**", "**/help-center/**"],
  },

  ...pluginVue.configs["flat/recommended"],
  
  {
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.node,
      },
      parser: parserVue,
      ecmaVersion: "latest",
      sourceType: "module",
    },
    
    plugins: {
      import: importPlugin,
    },
    
    rules: {
      // 确保导入的模块实际存在(核心规则,防止构建失败)
      "import/no-unresolved": "error",
      // 确保导入的命名导出实际存在
      "import/named": "error",
      // 确保默认导出存在
      "import/default": "error",
      // 确保命名空间导出存在
      "import/namespace": "error",
    },
  },
];

Java 后端配置

<!-- pom.xml 关键插件 -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
</plugin>
<plugin>
  <groupId>com.github.spotbugs</groupId>
  <artifactId>spotbugs-maven-plugin</artifactId>
  <version>4.2.0</version>
</plugin>

数据库迁移配置

# application.yml Flyway配置
flyway:
  enabled: true
  locations: classpath:db/migration
  baseline-on-migrate: true

Husky 配置

# .husky/pre-commit
#!/bin/sh
npm run lint-staged

# .husky/pre-push  
#!/bin/sh
npm run test:unit && npm run build:prod

lint-staged 配置

// package.json
{
  "lint-staged": {
    "*.{js,vue}": ["eslint --fix", "prettier --write"],
    "*.{css,scss}": ["stylelint --fix", "prettier --write"]
  }
}

🚫 失败处理机制

自动处理

  • 构建失败:自动阻止 PR 合并
  • 测试失败:标记 PR 为失败状态
  • 安全漏洞:立即通知安全团队

人工处理

  • 紧急修复:可申请临时绕过(需架构师批准)
  • 误报处理:提交豁免申请并说明原因
  • 规则调整:通过 RFC 流程申请规则变更

📊 监控与度量

关键指标

  • 门禁通过率 ≥ 95%
  • 平均修复时间 ≤ 2小时
  • 误报率 ≤ 5%

报告机制

  • 每日门禁失败统计
  • 周度质量趋势报告
  • 月度规则优化建议

🔄 持续改进

规则演进

  • 每月评审门禁规则有效性
  • 根据项目需求调整检查强度
  • 引入新的质量检查工具

团队培训

  • 新成员入职培训包含门禁规范
  • 定期分享最佳实践案例
  • 建立常见问题解决方案库

5. 发布确认与回滚预案

📋 发布前最终确认清单

前端确认

  • 本地构建成功(npm run build:prod
  • 核心功能流程测试通过
  • 模块导入检查通过无import错误
  • 兼容性测试完成

后端确认

  • Maven编译成功mvn compile
  • 单元测试通过
  • 数据库脚本验证通过
  • API接口测试通过

协同确认

  • 前后端接口契约一致
  • 联调测试通过
  • Code Review 已完成
  • 测试环境部署验证通过

🚨 回滚预案

触发条件

  • 生产环境出现严重Bug
  • 性能严重下降
  • 数据一致性问题
  • 安全漏洞暴露

回滚步骤

  1. 立即停止:暂停新流量进入
  2. 版本回退:部署上一个稳定版本
  3. 数据回滚:执行数据库回滚脚本(如有)
  4. 验证恢复:确认系统功能正常
  5. 问题分析:记录根本原因和改进措施

责任分工

  • 技术负责人:执行回滚操作
  • 测试负责人:验证回滚后功能
  • 项目经理:协调沟通和进度同步
  • 运维团队:监控系统状态

📞 紧急联系人

角色 姓名 联系方式 职责
技术负责人 诸葛亮 @诸葛亮 架构决策和技术指导
前端负责人 赵云 @赵云 前端问题处理
后端负责人 关羽 @关羽 后端问题处理
测试负责人 张飞 @张飞 质量验证和问题复现
项目经理 刘备 @刘备 项目协调和进度管理
文档负责人 陈琳 @陈琳 文档维护和知识沉淀

文档版本v1.0
最后更新2026年4月25日
负责人:陈琳(文档专家)
适用范围HIS 系统所有开发人员