72 lines
2.3 KiB
Go
72 lines
2.3 KiB
Go
package activities
|
|
|
|
import (
|
|
"beacon/pkg/dao/mysql"
|
|
"beacon/pkg/pb"
|
|
"context"
|
|
"fmt"
|
|
"go.temporal.io/sdk/activity"
|
|
)
|
|
|
|
// LoadCompositeCaseStepsActivity 用于加载复合案例步骤的Activity结构
|
|
|
|
// LoadCompositeCaseSteps 加载复合案例步骤定义
|
|
func LoadCompositeCaseSteps(ctx context.Context, compositeCaseId string) ([]*pb.CompositeCaseStepDefinition, error) {
|
|
// 获取 Activity 日志记录器
|
|
logger := activity.GetLogger(ctx)
|
|
logger.Info("Loading composite case steps", "compositeCaseId", compositeCaseId)
|
|
|
|
// 参数验证
|
|
if compositeCaseId == "" {
|
|
return nil, fmt.Errorf("compositeCaseId cannot be empty")
|
|
}
|
|
|
|
// 发送心跳信号,表明 Activity 正在运行
|
|
activity.RecordHeartbeat(ctx)
|
|
|
|
// 通过DAO从数据库加载复合案例步骤数据
|
|
steps, err := dao.GetCompositeCaseSteps(compositeCaseId)
|
|
if err != nil {
|
|
logger.Error("Failed to load composite case steps from database", "error", err)
|
|
return nil, fmt.Errorf("failed to load composite case steps: %w", err)
|
|
}
|
|
|
|
// 如果没有找到步骤,返回空切片而不是错误
|
|
if len(steps) == 0 {
|
|
logger.Warn("No steps found for composite case", "compositeCaseId", compositeCaseId)
|
|
return []*pb.CompositeCaseStepDefinition{}, nil
|
|
}
|
|
|
|
// 转换数据库模型为 Protobuf 结构
|
|
var pbSteps []*pb.CompositeCaseStepDefinition
|
|
for _, step := range steps {
|
|
pbStep := &pb.CompositeCaseStepDefinition{
|
|
StepId: int64(step.ID),
|
|
StepOrder: int32(step.StepOrder),
|
|
StepType: step.StepType,
|
|
ActivityName: step.ActivityName,
|
|
ParametersJson: step.ParametersJson,
|
|
//SuccessNextStepOrder: convertToInt32Ptr(step.SuccessNextStepOrder),
|
|
//FailureNextStepOrder: convertToInt32Ptr(step.FailureNextStepOrder),
|
|
//IsParallel: step.IsParallel,
|
|
//DependsOnStepIds: step.DependsOnStepIds,
|
|
//ContinueOnFailure: step.ContinueOnFailure,
|
|
//TimeoutSeconds: int32(step.TimeoutSeconds),
|
|
//RetryCount: int32(step.RetryCount),
|
|
//Description: step.Description,
|
|
//CreatedAt: step.CreatedAt.Unix(),
|
|
//UpdatedAt: step.UpdatedAt.Unix(),
|
|
}
|
|
pbSteps = append(pbSteps, pbStep)
|
|
}
|
|
|
|
// 再次发送心跳信号
|
|
activity.RecordHeartbeat(ctx)
|
|
|
|
logger.Info("Successfully loaded composite case steps",
|
|
"compositeCaseId", compositeCaseId,
|
|
"stepCount", len(pbSteps))
|
|
|
|
return pbSteps, nil
|
|
}
|