automation
自动化引擎
核心业务层触发器-条件-操作三段式
事件触发 + 定时触发 + 复杂条件判断使用枚举 + 反射模式,支持动态扩展触发器和操作
触发器-条件-操作三段式
事件触发 + 定时触发 + 复杂条件判断使用枚举 + 反射模式,支持动态扩展触发器和操作
在研发流程中,有大量重复性工作:工作项状态变更时自动通知相关人员、定时检查逾期任务、根据条件自动分配负责人等。如何设计一个灵活的自动化引擎,让用户通过配置(而非编码)实现这些自动化规则?
触发器类型枚举 - 使用反射动态加载触发器实现
@Slf4j
public enum TriggerType implements BaseEnum<String> {
DYNAMIC_TIME_TASK("动态时间任务", DynamicTimeTask.class),
CREATE_WORK_ITEM("创建工作项", CreateWorkItem.class);
private Class<?> clazz;
TriggerType(String text, Class<?> clazz){
init(this.name(), text);
this.clazz = clazz;
}
public ITrigger getTrigger() {
try {
return (ITrigger)clazz.newInstance();
} catch (Exception e) {
log.error("Failed to instantiate trigger", e);
return null;
}
}
}自动化执行引擎 - 监听事件并执行自动化规则
@Slf4j
@Component
public class Execute {
@Lazy
@Autowired
private WorkspaceAutomationService service;
/**
* 监听工作项创建事件
*/
@EventListener
public void onCreateWorkItem(CreateWorkItemEvent event) {
// 查询匹配的自动化规则
List<WorkspaceAutomation> rules = service.findByTrigger(TriggerType.CREATE_WORK_ITEM);
for (WorkspaceAutomation rule : rules) {
// 评估条件
if (evaluateCondition(rule.getCondition(), event)) {
// 执行操作
executeOperation(rule.getOperation(), event);
}
}
}
}