workitem
工作项管理
核心业务层灵活的字段系统
15+ 种字段类型 + 自定义工作项类型通过字段元数据实现灵活配置,两级缓存保证性能
灵活的字段系统
15+ 种字段类型 + 自定义工作项类型通过字段元数据实现灵活配置,两级缓存保证性能
在研发流水线中,需要统一管理需求、任务、缺陷等各类工作项。不同类型的工作项有不同的字段需求,如何设计一个灵活的字段系统,让用户可以自定义工作项类型和字段,同时保证数据一致性和查询性能?
字段服务的核心设计 - 使用前缀区分系统字段和自定义字段
@Service
@RequiredArgsConstructor
public class WorkFieldService extends BaseService<WorkFieldMapper, WorkField> {
//角色字段名前缀 !!!仅限用户自定义角色, 系统默认角色不以此前缀限制
private final static String ROLE_NAME_PREFIX = "role_";
//普通字段名前缀 !!!仅限用户自定义字段, 系统默认字段不以此前缀限制
private final static String FIELD_NAME_PREFIX = "field_";
// 本地缓存 + Redis 分布式缓存清除机制
private ILocalCacheClear<List<WorkFieldVO>> cache = new RedisLocalCacheClear<>(
new ILocalCache.Default<>(300L),
Topic.WORK_ITEM_FIELD,
key -> {
WorkFieldDTO dto = new WorkFieldDTO();
dto.setWorkItemTypeId(Long.valueOf(key));
return list(dto);
}
);
}字段类型枚举 - 支持丰富的字段类型
public enum FieldType {
TEXT("文本"),
NUMBER("数字"),
DATE("日期"),
DATETIME("日期时间"),
SELECT("单选"),
MULTI_SELECT("多选"),
USER("用户"),
MULTI_USER("多用户"),
RICH_TEXT("富文本"),
ATTACHMENT("附件"),
RELATION("关联"),
FORMULA("公式"),
PROGRESS("进度"),
PRIORITY("优先级"),
STATUS("状态");
private final String label;
}