func ResetWorkflow(ctx context.Context, workflowId string) (dbTaskID int64, merr *myerrors.CustomError) {
if TemporalClient == nil {
ClientInitOnce.Do(InitClient)
}
// 1. Findthe first failed or timeout activity
var lastWorkflowTaskCompletedID int64 = -1
iter := TemporalClient.GetWorkflowHistory(ctx, workflowId, "", false, enums.HISTORY_EVENT_FILTER_TYPE_ALL_EVENT)
for iter.HasNext() {
event, err := iter.Next()
if err != nil {
merr := myerrors.NewCustomError(myerrors.ResetWorkflowError, fmt.Sprintf("iter Next 失败: %s", err.Error()))
merr.OutputLog(ctx, resource.LoggerLogic)
return 0, merr
}
// i dont know how to do but do this
if event.GetEventType() == enums.EVENT_TYPE_ACTIVITY_TASK_FAILED || event.GetEventType() == enums.EVENT_TYPE_ACTIVITY_TASK_TIMED_OUT {
lastWorkflowTaskCompletedID = event.GetEventId() - 3
break
}
}
if lastWorkflowTaskCompletedID == -1 {
merr := myerrors.NewCustomError(myerrors.ResetWorkflowError, fmt.Sprintf(" 没有找到ActivityTaskFailed事件"))
merr.OutputLog(ctx, resource.LoggerLogic)
return 0, merr
}
// 2. reset workflow
resetReq := &workflowservice.ResetWorkflowExecutionRequest{
Namespace: resource.TemporalConf.Base.SOARNamespace,
WorkflowExecution: &common.WorkflowExecution{
WorkflowId: workflowId,
RunId: "",
},
Reason: "kunkun要重试",
WorkflowTaskFinishEventId: lastWorkflowTaskCompletedID, // reset event id
}
_, err := TemporalClient.ResetWorkflowExecution(context.Background(), resetReq)
if err != nil {
merr := myerrors.NewCustomError(myerrors.ResetWorkflowError, fmt.Sprintf("ResetWorkflowExecution 失败: %s", err.Error()))
merr.OutputLog(ctx, resource.LoggerLogic)
return 0, merr
}
dbTaskID, err = strconv.ParseInt(workflowId, 10, 64)
if err != nil {
merr := myerrors.NewCustomError(myerrors.ErrParamParse, fmt.Sprintf("字符串转换失败: %s", err.Error()))
merr.OutputLog(ctx, resource.LoggerLogic)
return 0, merr
}
return dbTaskID, nil
}

i dont know how to do,pls help me