Help us shape the future of Go! Take the 2026 Go Developer Survey

workflow

package
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 29, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

工作流引擎对外公共能力:宿主项目经此提交审批、查询单据关联实例状态。

工作流业务事件注册表,供引擎与业务单据模块解耦联动。

Index

Constants

View Source
const ActionNotify = "workflow.notify"

ActionNotify 是通过现有站内信模块发送幂等通知的内置动作。

Variables

This section is empty.

Functions

func SetDefaultEngine

func SetDefaultEngine(engine Engine)

SetDefaultEngine 注入默认引擎实现,由 Admin 模块装配时调用。

func Submit

func Submit(ctx context.Context, params SubmitParams) (int64, error)

Submit 经默认引擎提交审批申请。

Types

type ActionContext

type ActionContext struct {
	TenantID       int64
	InstanceID     int64
	BusinessID     int64
	BusinessType   string
	Status         int32
	IdempotencyKey string
	Payload        map[string]any
}

ActionContext 提供业务动作需要核验的租户、单据关联和稳定幂等键。

type ActionHandler

type ActionHandler func(context.Context, ActionContext) error

ActionHandler 执行宿主显式注册的业务动作,必须按幂等键避免重复副作用。

type BindingVerifier

type BindingVerifier func(ctx context.Context, tenantID, instanceID, businessID int64) (bool, error)

BindingVerifier 从宿主持久化存储核验单据已关联指定实例且允许开始审批。 仅查询状态,不改变单据;返回 false 时引擎等待后续重试。

type BusinessHook

type BusinessHook func(ctx context.Context, tenantID, instanceID, businessID int64, status adminv1.WorkflowInstanceStatus)

BusinessHook 业务单据审批终结回调。status 为实例终态(已通过/已驳回/已撤回)。 回调实现须自行校验业务单据与实例的关联(business_id 对应单据的实例 ID 应等于 instanceID),防止伪造 business 字段触发他人单据副作用;失败在回调内自行记日志。

type Engine

type Engine interface {
	// Submit 创建实例并执行 OnCreated 关联回写,成功后推进并返回流程实例编号。
	Submit(ctx context.Context, params SubmitParams) (int64, error)
	// StatusByBusiness 查询业务单据最新关联实例的状态摘要。
	StatusByBusiness(ctx context.Context, tenantID int64, businessType string, businessID int64) (InstanceStatus, error)
}

Engine 定义外部业务模块执行工作流的能力。

func DefaultEngine

func DefaultEngine() Engine

DefaultEngine 返回默认引擎实现;未装配时返回 nil。

type EventRegistry

type EventRegistry struct {
	// contains filtered or unexported fields
}

EventRegistry 按业务单据类型注册的审批终结回调表。业务模块构造时注册,引擎终结时同步回调。

func DefaultEventRegistry

func DefaultEventRegistry() *EventRegistry

DefaultEventRegistry 返回进程级共享的审批终结回调表。 宿主项目在自身模块初始化时通过它注册业务回调;Admin 引擎终结实例时经同一实例触发。

func NewEventRegistry

func NewEventRegistry() *EventRegistry

NewEventRegistry 创建审批终结回调表。

func (*EventRegistry) ExecuteAction

func (r *EventRegistry) ExecuteAction(ctx context.Context, actionType string, input ActionContext) (err error)

ExecuteAction 执行白名单内的业务动作并将异常转换为可重试错误。

func (*EventRegistry) Fire

func (r *EventRegistry) Fire(ctx context.Context, tenantID, instanceID, businessID int64, businessType string, status adminv1.WorkflowInstanceStatus)

Fire 触发业务单据的终结回调。businessType 为空或未注册时静默跳过; panic 由调用方(引擎侧)recover 隔离,不影响状态机结果。

func (*EventRegistry) HasBindingVerifier

func (r *EventRegistry) HasBindingVerifier(businessType string) bool

HasBindingVerifier 检查业务类型是否具备持久化关联核验能力。

func (*EventRegistry) Register

func (r *EventRegistry) Register(businessType string, hook BusinessHook)

Register 注册某业务类型的终结回调,同名类型重复注册以后者覆盖。

func (*EventRegistry) RegisterAction

func (r *EventRegistry) RegisterAction(businessType, actionType string, handler ActionHandler)

RegisterAction 注册某业务类型允许调用的脚本动作,重复注册会替换处理器。

func (*EventRegistry) RegisterBindingVerifier

func (r *EventRegistry) RegisterBindingVerifier(businessType string, verifier BindingVerifier)

RegisterBindingVerifier 注册业务单据关联核验器,用于恢复提交与首次推进之间的中断。

func (*EventRegistry) VerifyBinding

func (r *EventRegistry) VerifyBinding(ctx context.Context, businessType string, tenantID, instanceID, businessID int64) (confirmed bool, err error)

VerifyBinding 核验单据关联,将宿主异常转换为可记录、可重试的错误。

type InstanceStatus

type InstanceStatus struct {
	// InstanceID 是流程实例编号。
	InstanceID int64
	// Status 是实例状态。
	Status adminv1.WorkflowInstanceStatus
	// EndAt 是终结时间展示文本,未终结为空串。
	EndAt string
}

InstanceStatus 是业务单据关联流程实例的状态摘要。

func StatusByBusiness

func StatusByBusiness(ctx context.Context, tenantID int64, businessType string, businessID int64) (InstanceStatus, error)

StatusByBusiness 经默认引擎查询业务单据关联实例状态。

type SubmitParams

type SubmitParams struct {
	// TenantID 是所属租户编号,0 表示取请求上下文登录租户。
	TenantID int64
	// ApplicantUserID 是申请人用户编号,0 表示取请求上下文登录用户。
	ApplicantUserID int64
	// Code 是流程编码。
	Code string
	// Version 是流程版本。
	Version int32
	// FormData 是申请表单数据 JSON 文本。
	FormData string
	// BusinessType 是业务单据类型编码,用于终结回调分发。
	BusinessType string
	// BusinessID 是业务单据编号。
	BusinessID int64
	// OnCreated 在实例创建提交后、首次推进前保存宿主单据与实例的关联。
	// 使用回调前必须为业务类型注册 BindingVerifier,恢复任务以持久化关联判断是否允许推进。
	// 宿主自行提交回写;返回错误时终结未推进实例且不触发业务回调。
	OnCreated func(ctx context.Context, instanceID int64) error
}

SubmitParams 外部业务模块提交审批申请的参数。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL