迁移实例版本
参考流程实例版本迁移
要求老版本上的activiyId和新的activityId一致,如果不一致则需要配置映射关系
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Resource
private String tenantId;
public void migrate(MigrateParam param) {
if(Objects.isNull(param)
|| StringUtils.isEmpty(param.getOldDefinitionId())
|| StringUtils.isEmpty(param.getNewDefinitionId())
|| (CollectionUtils.isEmpty(param.getProcessIds()) && !param.isAll())) {
return "[ MigrateJob.execute ] task empty";
}
List<String> processIds = param.getProcessIds();
if(param.isAll()) {
// 可以查询活动来得到活跃的process
// List<Task> tasks = taskService
// .createTaskQuery()
// .tenantIdIn(tenantId)
// .processDefinitionKey("testDefinitionKey")
// .active()
// .orderByTaskCreateTime()
// .list();
// log.info("active task size:{}", tasks.size());
// processIds = tasks.stream().map(Task::getProcessInstanceId).distinct().collect(Collectors.toList());
// log.info("active task processIds:{}", processIds);
ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
processInstanceQuery.active();
processInstanceQuery.tenantIdIn(tenantId);
processInstanceQuery.processDefinitionKey("testDefinitionKey");
processInstanceQuery.processDefinitionId(param.getOldDefinitionId());
// List<ProcessInstance> processInstanceList = processInstanceQuery.list();
// processIds = processInstanceList.stream().map(ProcessInstance::getProcessInstanceId).distinct().collect(Collectors.toList());
// log.info("active process processIds:{}", processIds);
// 可以直接传参,内部也是调用的listIds()方法 runtimeService.newMigration(migrationPlanBuilder.build()).processInstanceQuery(processInstanceQuery)
processIds = ((ProcessInstanceQueryImpl)(processInstanceQuery)).listIds();
log.info("active process processIds:{}", processIds);
}
if(CollectionUtil.isEmpty(processIds)) {
return "[ MigrateJob.execute ] task query empty";
}
log.info("start migrate processIds:{}", processIds);
MigrationPlanBuilder migrationPlanBuilder = runtimeService.createMigrationPlan(param.getOldDefinitionId(), param.getNewDefinitionId());
// 同节点迁移
migrationPlanBuilder.mapEqualActivities();
// 同步迁移
runtimeService.newMigration(migrationPlanBuilder.build())
.processInstanceIds(processIds)
.execute();
return "[ MigrateJob.execute ] task finish";
}
@Data
public static class MigrateParam {
// 从管理界面上拷贝
private String oldDefinitionId = "";
// 从管理界面上拷贝
private String newDefinitionId = "";
private List<String> processIds;
// 如果true,查询所有的活动实例迁移
private boolean all;
}