# 公共常量与枚举
**本文引用的文件**
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
- [AuthConstants.java](file://crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java)
- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录:扩展指南](#附录:扩展指南)
## 简介
本文件面向 CRM 后端项目的“公共常量与枚举”体系,聚焦 crm-base 模块中的系统级常量与通用枚举,并覆盖各业务模块(如认证、文件)的领域常量。目标包括:
- 解释 CommonConstants 的系统常量定义与使用场景
- 说明 HasValueEnum 与 StatusEnum 等枚举的设计原则与用法
- 明确常量的命名规范与枚举设计原则
- 提供扩展新常量与新枚举的最佳实践
## 项目结构
本项目采用多模块分层组织,公共常量与枚举集中在基础模块 crm-base 中,业务模块通过引用复用:
- crm-base:基础能力与通用定义(常量、枚举、异常、结果封装、工具类等)
- crm-auth:认证与权限相关领域常量与枚举
- crm-file:文件服务相关常量
```mermaid
graph TB
subgraph "基础模块 crm-base"
BASE_CONST["常量
CommonConstants"]
BASE_ENUMS["通用枚举
HasValueEnum / StatusEnum"]
RESULT_ENUM["结果码枚举
ResultCodeEnum"]
end
subgraph "认证模块 crm-auth"
AUTH_CONST["领域常量
AuthConstants"]
AUTH_ENUMS["领域枚举
DataScopeEnum / IdentityTypeEnum / MenuTypeEnum"]
end
subgraph "文件模块 crm-file"
FILE_CONST["领域常量
FileConstants"]
end
AUTH_CONST --> BASE_ENUMS
FILE_CONST --> BASE_ENUMS
AUTH_ENUMS --> BASE_ENUMS
```
图表来源
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
- [AuthConstants.java](file://crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java)
- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
章节来源
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
- [AuthConstants.java](file://crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java)
- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
## 核心组件
- 系统常量 CommonConstants
- 作用:集中存放跨模块复用的系统级常量(如分页默认值、时间格式、缓存键前缀、消息头名等),避免魔法字符串散落各处。
- 典型类别:分页参数默认值、日期时间格式、Redis Key 前缀、HTTP 请求头名称、通用开关或阈值等。
- 使用建议:所有跨模块共享的“硬编码值”应优先从该处引用,禁止在业务代码中直接写死。
- 通用枚举 HasValueEnum
- 作用:为“有值/无值”或“启用/禁用”等二元状态提供统一抽象,便于在不同实体字段上复用一致的语义。
- 设计要点:通常包含取值与显示文本映射,并提供按值查找、按显示文本查找等方法;保持枚举实例不可变且稳定。
- 使用场景:布尔型字段的替代方案,利于前端展示与国际化扩展。
- 通用枚举 StatusEnum
- 作用:统一表示对象生命周期或运行状态(如正常、停用、删除等),确保全链路状态一致。
- 设计要点:每个枚举项需具备稳定的 code/value 与可读描述;提供按值查询、排序顺序等辅助方法。
- 使用场景:数据表中的状态列、接口返回的状态字段、流程控制的条件判断。
- 结果码枚举 ResultCodeEnum
- 作用:统一 API 响应码与消息,保证前后端对错误语义的一致性。
- 设计要点:code 唯一且稳定,message 清晰可定位问题;必要时支持参数化消息模板。
章节来源
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
## 架构总览
下图展示了常量与枚举在各模块间的分布与复用关系。基础模块提供“最小可用”的通用定义,业务模块按需扩展领域常量与枚举,并通过引用实现解耦。
```mermaid
classDiagram
class CommonConstants {
+系统常量集合
}
class HasValueEnum {
+取值
+显示文本
+按值获取
}
class StatusEnum {
+状态码
+状态描述
+按值获取
}
class ResultCodeEnum {
+响应码
+响应消息
}
class AuthConstants {
+认证域常量
}
class FileConstants {
+文件域常量
}
class DataScopeEnum {
+数据范围
}
class IdentityTypeEnum {
+身份类型
}
class MenuTypeEnum {
+菜单类型
}
AuthConstants --> HasValueEnum : "可能复用"
AuthConstants --> StatusEnum : "可能复用"
FileConstants --> HasValueEnum : "可能复用"
FileConstants --> StatusEnum : "可能复用"
DataScopeEnum --> HasValueEnum : "可能复用"
IdentityTypeEnum --> HasValueEnum : "可能复用"
MenuTypeEnum --> HasValueEnum : "可能复用"
```
图表来源
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
- [AuthConstants.java](file://crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java)
- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
## 详细组件分析
### CommonConstants(系统常量)
- 职责边界
- 集中管理跨模块共享的“不变量”,降低散落的魔法字符串与数字带来的维护成本。
- 作为团队约定的一部分,约束输入输出、缓存键、日志标记、配置键等。
- 常见分类
- 分页与排序:默认页大小、最大页大小、默认排序字段等
- 时间与格式:日期时间格式、时区、序列化策略等
- 缓存与键空间:Redis Key 前缀、过期时间默认值等
- HTTP 与网关:请求头名称、跨域策略、限流键前缀等
- 业务阈值:文件大小限制、重试次数、超时时间等
- 使用建议
- 新增常量必须补充注释,说明用途与变更历史
- 避免将易变的业务规则放入常量,必要时改为配置项
- 对敏感信息(密钥、令牌)严禁以明文常量形式存在
章节来源
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
### HasValueEnum(有值/无值枚举)
- 设计原则
- 语义清晰:用枚举表达“有值/无值”或“启用/禁用”,避免裸布尔值歧义
- 可扩展性:预留 displayText、sortOrder 等字段,便于前端展示与排序
- 稳定性:code/value 一旦发布不得随意变更,如需调整需兼容迁移
- 常用方法
- 按值获取枚举实例
- 校验值是否合法
- 获取显示文本或国际化 key
- 使用场景
- 实体类中的布尔型字段替代
- 表单校验与下拉选项生成
- 与前端字典联动
章节来源
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
### StatusEnum(状态枚举)
- 设计原则
- 状态机思维:明确初始态、流转规则与终态
- 一致性:数据库、接口、日志、监控均使用同一套状态码
- 可观测性:状态变化需可追踪,配合审计日志
- 常用方法
- 按值获取枚举实例
- 判断是否为有效状态
- 获取状态描述用于展示
- 使用场景
- 订单、审批、任务等业务流程状态
- 资源的生命周期(启用/停用/删除)
- 对外 API 的状态码映射
章节来源
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
### ResultCodeEnum(结果码枚举)
- 设计原则
- 全局唯一:code 不重复、不重用
- 语义明确:message 能直接指导排错
- 版本兼容:新增 code 不应破坏既有调用方
- 使用场景
- 统一 API 响应体
- 错误码与监控告警关联
- 前端错误提示文案来源
章节来源
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
### 领域常量与枚举(认证与文件)
- AuthConstants
- 职责:认证域内的固定键名、令牌前缀、会话标识等
- 使用:登录、鉴权、第三方接入等流程
- FileConstants
- 职责:文件上传分片、存储路径、预览服务等固定配置
- 使用:分片上传、断点续传、在线预览等流程
- DataScopeEnum / IdentityTypeEnum / MenuTypeEnum
- 职责:数据权限范围、身份类型、菜单类型等
- 使用:权限模型、菜单树构建、数据隔离
章节来源
- [AuthConstants.java](file://crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java)
- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
## 依赖关系分析
- 耦合度
- 常量与枚举本身无运行时依赖,仅被其他模块引用
- 业务逻辑通过引用常量/枚举减少硬编码,提升内聚性
- 扩展性
- 新增枚举项不影响既有调用方(只要不改变既有 code/value)
- 常量变更需评估影响面,必要时提供兼容层或迁移脚本
```mermaid
graph LR
COMMON["CommonConstants"] --> AUTH["AuthConstants"]
COMMON --> FILE["FileConstants"]
HAS["HasValueEnum"] --> AUTH_ENUMS["认证枚举"]
STATUS["StatusEnum"] --> AUTH_ENUMS
HAS --> FILE_ENUMS["文件枚举(如有)"]
STATUS --> FILE_ENUMS
```
图表来源
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [AuthConstants.java](file://crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java)
- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java)
章节来源
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [AuthConstants.java](file://crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java)
- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java)
## 性能考虑
- 枚举与常量均为编译期常量或轻量运行时对象,开销极低
- 避免在热点路径频繁解析枚举显示文本,建议缓存或预取
- 对大体积常量集合(如字典表)建议使用懒加载或外部配置中心
## 故障排查指南
- 常见问题
- 使用了未定义的枚举值导致空指针或分支遗漏
- 常量拼写不一致导致缓存键冲突或请求头丢失
- 修改了已有枚举 code/value 造成下游解析失败
- 排查步骤
- 检查枚举按值获取方法的健壮性与空值处理
- 核对常量引用位置,确认是否存在多处不一致
- 查看日志中的状态码与消息,定位具体环节
- 修复建议
- 增加单元测试覆盖枚举与常量的关键路径
- 引入静态扫描或契约测试,防止破坏性变更
章节来源
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java)
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
## 结论
- 统一的常量与枚举是系统可维护性的基石
- 通过 CommonConstants、HasValueEnum、StatusEnum 等基础构件,结合各领域的常量与枚举,形成清晰的层次与复用机制
- 遵循命名规范与设计原则,可有效降低沟通成本与回归风险
## 附录:扩展指南
### 新增系统常量(CommonConstants)
- 适用场景
- 跨模块共享的固定值(如分页默认值、时间格式、缓存前缀、请求头名等)
- 步骤
- 在 CommonConstants 中添加常量,给出清晰注释与用途说明
- 在业务代码中替换原有硬编码引用
- 更新相关文档与测试用例
- 注意事项
- 避免将易变规则放入常量,必要时改为配置项
- 对敏感信息严禁以明文常量形式存在
章节来源
- [CommonConstants.java](file://crm-base/src/main/java/com/crm/base/constant/CommonConstants.java)
### 新增通用枚举(HasValueEnum / StatusEnum)
- 适用场景
- 需要统一语义的二元或多值状态(如启用/停用、有值/无值)
- 步骤
- 在对应枚举中新增枚举项,确保 code/value 唯一且稳定
- 完善按值获取、校验、显示文本等方法
- 在实体与接口中使用新枚举替代裸值
- 注意事项
- 已发布枚举项不得随意变更 code/value
- 新增枚举项需同步更新前端字典与测试用例
章节来源
- [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java)
- [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java)
### 新增领域常量与枚举(认证/文件)
- 适用场景
- 特定业务域的固定键名、类型、范围等
- 步骤
- 在对应模块的 constant 或 enums 包下新增
- 尽量复用基础枚举(HasValueEnum/StatusEnum)表达通用语义
- 在控制器、服务层统一引用,避免散落
- 注意事项
- 保持命名一致性与可读性
- 与接口文档保持一致,避免前后端不一致
章节来源
- [AuthConstants.java](file://crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java)
- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java)
- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java)
- [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java)
- [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java)
### 命名规范与设计原则
- 命名规范
- 常量:全大写+下划线分隔,语义明确(如 PAGE_DEFAULT_SIZE、DATE_TIME_FORMAT)
- 枚举:名词短语,首字母大写(如 StatusEnum、HasValueEnum)
- 枚举项:全大写+下划线(如 ENABLED、DISABLED、DELETED)
- 设计原则
- 单一职责:一个枚举只表达一类语义
- 稳定优先:code/value 一旦发布不得破坏性变更
- 可观测性:枚举项需具备可读描述,便于日志与监控
- 可扩展性:预留排序、显示文本、国际化 key 等扩展点
[本节为概念性内容,不直接分析具体文件]