approveflow/app/provider/flow_instance/model/instance_path_config.go

69 lines
1.9 KiB
Go

package model
import (
"approveflow/app/base"
"approveflow/app/provider/flow_definition"
"encoding/json"
)
// InstancePathConfig 动态路径配置表结构
type InstancePathConfig struct {
ID int64 `gorm:"primaryKey;autoIncrement" json:"id"` // 主键ID
NodeID int64 `gorm:"type:bigint;index;not null" json:"node_id"`
FromNodeKey string `gorm:"type:varchar(50);index;not null" json:"from_node_key"`
ToNodeKey string ` gorm:"type:varchar(50);index;not null" json:"to_node_key"`
IsParallel bool `gorm:"not null;default:false" json:"is_parallel"` // 是否并行
IsDynamic bool `gorm:"not null;default:false" json:"is_dynamic"` // 是否为动态步骤
Priority int `gorm:"not null;default:0" json:"priority"` // 路径优先级
flow_definition.ApprovalConditionCommon
base.Model
}
func (d *InstancePathConfig) MarshalBinary() ([]byte, error) {
return json.Marshal(d)
}
func (d *InstancePathConfig) UnmarshalBinary(data []byte) error {
return json.Unmarshal(data, d)
}
func (d *InstancePathConfig) GetKey() string {
return d.Key
}
func (d *InstancePathConfig) GetNodeID() int64 {
return d.NodeID
}
func (d *InstancePathConfig) GetFromNodeKey() string {
return d.FromNodeKey
}
func (d *InstancePathConfig) GetToNodeKey() string {
return d.ToNodeKey
}
// NewDynamicPathConfig 创建动态路径
func NewDynamicPathConfig(instanceID, nodeId int64, FromStepKey, ToStepKey string, isParallel bool) *InstancePathConfig {
pathConfig := &InstancePathConfig{
NodeID: nodeId,
FromNodeKey: FromStepKey,
ToNodeKey: ToStepKey,
IsParallel: isParallel,
Priority: 0,
}
return pathConfig
}
// IsConditionMet 判断路径条件是否满足
func (d *InstancePathConfig) IsConditionMet(data map[string]interface{}) (bool, error) {
if d.ConditionExpression == "" {
return true, nil // 无条件,默认满足
}
result, err := d.EvaluateCondition(data)
if err != nil {
return false, err
}
return result, nil
}