Beacon/activities/activities.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
}