@Override
  public void processStart(ProcessStartEvent event) {
    ProcessInstance processInstance = event.getProcessInstance();
    ProcessEngine processEngine = event.getProcessEngine();
    ProcessElement processElement = event.getProcessElement();

    // 设置流程实例为运行状态
    event
        .getProcInstFacade()
        .updateProcessStateAndStartTime(
            processInstance.getProcessInstId(), StarFlowState.PROCESS_INST_RUNNING, new Date());

    // 执行流程开始filter
    for (ProcessFilter filter : processEngine.getProcessFilters()) {
      filter.processStart(event);
    }

    // 流程启动后触发事件
    TriggerProcessEventUtil.afterStart(
        processEngine, null, processInstance, processElement.getEvents());

    StartActivityType type =
        (StartActivityType) ActivityTypeFactory.buildActivityType(Constants.ACT_TYPE_START);
    ActivityElement activityXml = processElement.getActivitys().get(StarFlowNames.ACT_START_ID);
    ActivityInst activityInst = type.createActivity(event, activityXml);

    EventUtil.publishActivityStartEvent(event, activityInst, activityXml);
  }
  @Override
  public void activityRestart(ActivityRestartEvent event) {
    // 环节实例状态更新为待激活状态。
    event
        .getActInstRep()
        .updateActivityStateToRunning(
            event.getActivityInst().getActivityInstId(),
            StarFlowState.ACT_INST_WAITING,
            new Date());

    if (!ActivityStartRuleUtil.isStartActivity(event, event.getActivityInst())) return;

    String type = event.getActivityXml().getType();
    if (Constants.ACT_TYPE_MANUL.equals(type)) setManualActParticipants(event);

    EventUtil.publishActivityStartEvent(
        event.getProcessEngine(),
        event.getProcessInstance(),
        event.getActivityInst(),
        event.getActivityXml());
  }