package service import ( "errors" "gofaster/internal/workflow/model" "gofaster/internal/workflow/repository" ) type WorkflowService struct { repo *repository.WorkflowRepo } func NewWorkflowService(repo *repository.WorkflowRepo) *WorkflowService { return &WorkflowService{repo: repo} } // CreateWorkflow 创建工作流定义 func (s *WorkflowService) CreateWorkflow(workflow *model.Workflow) error { if workflow.Name == "" { return errors.New("工作流名称不能为空") } return s.repo.CreateWorkflow(workflow) } // GetWorkflowByID 获取工作流定义 func (s *WorkflowService) GetWorkflowByID(id uint) (*model.Workflow, error) { return s.repo.GetWorkflowByID(id) } // ListWorkflows 列出工作流定义 func (s *WorkflowService) ListWorkflows(page, pageSize int) ([]model.Workflow, int64, error) { if page < 1 { page = 1 } if pageSize < 1 || pageSize > 100 { pageSize = 10 } return s.repo.ListWorkflows(page, pageSize) } // UpdateWorkflow 更新工作流定义 func (s *WorkflowService) UpdateWorkflow(workflow *model.Workflow) error { if workflow.Name == "" { return errors.New("工作流名称不能为空") } return s.repo.UpdateWorkflow(workflow) } // DeleteWorkflow 删除工作流定义 func (s *WorkflowService) DeleteWorkflow(id uint) error { // 检查是否有运行中的实例 count, err := s.repo.CountInstances(id) if err != nil { return err } if count > 0 { return errors.New("存在运行中的实例,无法删除") } return s.repo.DeleteWorkflow(id) } // AddNode 添加工作流节点 func (s *WorkflowService) AddNode(node *model.WorkflowNode) error { if node.Name == "" { return errors.New("节点名称不能为空") } if node.Type == "" { return errors.New("节点类型不能为空") } return s.repo.AddNode(node) } // UpdateNode 更新工作流节点 func (s *WorkflowService) UpdateNode(node *model.WorkflowNode) error { if node.Name == "" { return errors.New("节点名称不能为空") } if node.Type == "" { return errors.New("节点类型不能为空") } return s.repo.UpdateNode(node) } // DeleteNode 删除工作流节点 func (s *WorkflowService) DeleteNode(id uint) error { // 检查节点是否被使用 count, err := s.repo.CountNodeReferences(id) if err != nil { return err } if count > 0 { return errors.New("节点已被使用,无法删除") } return s.repo.DeleteNode(id) } // CreateInstance 创建工作流实例 func (s *WorkflowService) CreateInstance(instance *model.WorkflowInstance) error { return s.repo.CreateInstance(instance) } // GetInstanceByID 获取工作流实例 func (s *WorkflowService) GetInstanceByID(id uint) (*model.WorkflowInstance, error) { return s.repo.GetInstanceByID(id) } // ListInstances 列出工作流实例 func (s *WorkflowService) ListInstances(workflowID uint, page, pageSize int) ([]model.WorkflowInstance, int64, error) { if page < 1 { page = 1 } if pageSize < 1 || pageSize > 100 { pageSize = 10 } return s.repo.ListInstances(workflowID, page, pageSize) } // CancelInstance 取消工作流实例 func (s *WorkflowService) CancelInstance(id uint) error { instance, err := s.repo.GetInstanceByID(id) if err != nil { return err } if instance.Status == "completed" || instance.Status == "canceled" { return errors.New("实例已结束,无法取消") } instance.Status = "canceled" return s.repo.UpdateInstance(instance) } // CreateTask 创建工作流任务 func (s *WorkflowService) CreateTask(task *model.WorkflowTask) error { return s.repo.CreateTask(task) } // GetTaskByID 获取工作流任务 func (s *WorkflowService) GetTaskByID(id uint) (*model.WorkflowTask, error) { return s.repo.GetTaskByID(id) } // ListTasksByInstance 列出实例任务 func (s *WorkflowService) ListTasksByInstance(instanceID uint) ([]model.WorkflowTask, error) { return s.repo.ListTasksByInstance(instanceID) } // UpdateTask 更新工作流任务 func (s *WorkflowService) UpdateTask(task *model.WorkflowTask) error { return s.repo.UpdateTask(task) } // GetUserTasks 获取用户任务 func (s *WorkflowService) GetUserTasks(userID uint, status string) ([]*model.WorkflowTask, error) { if status != "" { return s.repo.ListTasksByUserAndStatus(userID, status) } return s.repo.ListTasksByUser(userID) } // CompleteTask 完成任务 func (s *WorkflowService) CompleteTask(taskID uint, result string) error { task, err := s.repo.GetTaskByID(taskID) if err != nil { return err } task.Status = "completed" task.Result = result return s.repo.UpdateTask(task) }