You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
6.6 KiB
269 lines
6.6 KiB
package net |
|
|
|
import ( |
|
"fmt" |
|
"strconv" |
|
"strings" |
|
"time" |
|
) |
|
|
|
//.. |
|
const ( |
|
TableToken = "net_token" |
|
TableTokenBind = "net_token_bind" |
|
//BindTypeFlow 绑定flow |
|
BindTypeFlow = int8(1) |
|
//BindTypeTransition 绑定单个审核操作 |
|
BindTypeTransition = int8(2) |
|
//BindTypeTranBatch 绑定批量审核操作 |
|
BindTypeTranBatch = int8(3) |
|
//BindTypeTranHelp 绑定单个非审核操作,提交后不流转 |
|
BindTypeTranHelp = int8(4) |
|
//BindTypeTranHelpBatch 绑定批量非审核操作,提交后不流转 |
|
BindTypeTranHelpBatch = int8(5) |
|
|
|
BindLogTemp = "%s(%d)=%s" //中文名=表达式 |
|
|
|
BindBatchPrefix = "批量" |
|
BindBatchOptAll = int8(0) |
|
BindBatchOnly = int8(1) |
|
BindBatchNot = int8(2) |
|
) |
|
|
|
//TokenCompareAssign 运算符. |
|
const ( |
|
TokenCompareAssign = int8(0) |
|
TokenCompareEqual = int8(1) |
|
TokenCompareInequal = int8(2) |
|
TokenCompareGreater = int8(3) |
|
TokenCompareGreaterEqual = int8(4) |
|
TokenCompareLower = int8(5) |
|
TokenCompareLowerEqual = int8(6) |
|
TokenCompareBetween = int8(7) |
|
TokenCompareNotBetween = int8(8) |
|
TokenCompareIn = int8(9) |
|
TokenCompareNotIn = int8(10) |
|
TokenCompareExist = int8(11) |
|
TokenCompareNotExist = int8(12) |
|
|
|
//TokenTypeInt8值类型 . |
|
TokenTypeInt8 = int8(0) |
|
TokenTypeInt16 = int8(1) |
|
TokenTypeInt32 = int8(2) |
|
TokenTypeInt64 = int8(3) |
|
TokenTypeString = int8(4) |
|
TokenTypeBool = int8(5) |
|
) |
|
|
|
//BindTranType 变迁绑定令牌类型 |
|
var BindTranType = []int8{ |
|
BindTypeTransition, |
|
BindTypeTranBatch, |
|
BindTypeTranHelp, |
|
BindTypeTranHelpBatch, |
|
} |
|
|
|
//BindTypes . |
|
var BindTypes = []int8{ |
|
BindTypeFlow, |
|
BindTypeTransition, |
|
BindTypeTranBatch, |
|
BindTypeTranHelp, |
|
BindTypeTranHelpBatch, |
|
} |
|
|
|
// TokenCompareDesc . |
|
var TokenCompareDesc = map[int8]string{ |
|
TokenCompareAssign: "=", |
|
//TokenCompareEqual: "==", |
|
//TokenCompareInequal: "!=", |
|
//TokenCompareGreater: ">", |
|
//TokenCompareGreaterEqual: ">=", |
|
//TokenCompareLower: "<", |
|
//TokenCompareLowerEqual: "<=", |
|
//TokenCompareBetween: "between", //值有2个数字 |
|
//TokenCompareNotBetween: "not between", //值有2个数字 |
|
//TokenCompareIn: "in", //a in [] |
|
//TokenCompareNotIn: "not in", //a not in [] |
|
} |
|
|
|
// TokenValueTypeDesc .. |
|
var TokenValueTypeDesc = map[int8]string{ |
|
TokenTypeInt8: "int8", |
|
TokenTypeInt16: "int16", |
|
TokenTypeInt32: "int32", |
|
TokenTypeInt64: "int64", |
|
TokenTypeString: "string", |
|
TokenTypeBool: "bool", |
|
} |
|
|
|
// Token . |
|
type Token struct { |
|
ID int64 `gorm:"primary_key" json:"id" form:"id" validate:"omitempty,gt=0"` |
|
NetID int64 `gorm:"column:net_id" json:"net_id" form:"net_id" validate:"omitempty,gt=0"` |
|
ChName string `gorm:"column:ch_name" json:"ch_name" form:"ch_name" validate:"required,max=16"` |
|
Name string `gorm:"column:name" json:"name" form:"name" validate:"required,max=10"` |
|
Compare int8 `gorm:"column:compare" json:"compare" form:"compare" validate:"omitempty,min=0,max=10" default:"-1"` |
|
Value string `gorm:"column:value" json:"value" form:"value"` |
|
Type int8 `gorm:"column:type" json:"type" form:"type" default:"-1"` |
|
UID int64 `gorm:"column:uid" json:"uid"` |
|
Ctime time.Time `gorm:"column:ctime" json:"ctime"` |
|
Mtime time.Time `gorm:"column:mtime" json:"mtime"` |
|
} |
|
|
|
// TokenBind . |
|
type TokenBind struct { |
|
ID int64 `gorm:"primary_key" json:"id"` |
|
Type int8 `gorm:"column:type" json:"type"` |
|
ElementID int64 `gorm:"column:element_id" json:"element_id"` |
|
TokenID string `gorm:"column:token_id" json:"token_id"` |
|
ChName string `gorm:"column:ch_name" json:"ch_name" ` |
|
UID int64 `gorm:"column:uid" json:"uid"` |
|
DisableTime time.Time `gorm:"column:disable_time" json:"disable_time"` |
|
Ctime time.Time `gorm:"column:ctime" json:"ctime"` |
|
Mtime time.Time `gorm:"column:mtime" json:"mtime"` |
|
} |
|
|
|
// TokenBindDetail . |
|
type TokenBindDetail struct { |
|
ID int64 `json:"id"` |
|
Type int8 `json:"type"` |
|
ElementID int64 `json:"element_id"` |
|
TokenID string `json:"token_id"` |
|
ChName string `json:"ch_name"` |
|
DisableTime time.Time `json:"disable_time"` |
|
Tokens []*Token `json:"tokens"` |
|
} |
|
|
|
// TableName . |
|
func (tk *Token) TableName() string { |
|
return TableToken |
|
} |
|
|
|
// IsAssign . |
|
func (tk *Token) IsAssign() bool { |
|
return tk.Compare == TokenCompareAssign |
|
} |
|
|
|
// FormatValue . |
|
func (tk *Token) FormatValue() (vt interface{}, err error) { |
|
var ( |
|
it int64 |
|
ib bool |
|
) |
|
|
|
switch tk.Type { |
|
case TokenTypeInt8: |
|
if it, err = strconv.ParseInt(tk.Value, 10, 8); err != nil { |
|
return |
|
} |
|
vt = int8(it) |
|
case TokenTypeInt16: |
|
if it, err = strconv.ParseInt(tk.Value, 10, 16); err != nil { |
|
return |
|
} |
|
vt = int16(it) |
|
case TokenTypeInt32: |
|
if it, err = strconv.ParseInt(tk.Value, 10, 32); err != nil { |
|
return |
|
} |
|
vt = int32(it) |
|
case TokenTypeInt64: |
|
if it, err = strconv.ParseInt(tk.Value, 10, 8); err != nil { |
|
return |
|
} |
|
vt = it |
|
case TokenTypeString: |
|
vt = tk.Value |
|
case TokenTypeBool: |
|
if ib, err = strconv.ParseBool(tk.Value); err != nil { |
|
return |
|
} |
|
vt = ib |
|
default: |
|
err = fmt.Errorf("token not support tp(%d)!", tk.Type) |
|
} |
|
|
|
return |
|
} |
|
|
|
//FormatLog 日志形式 |
|
func (tk *Token) FormatLog() string { |
|
var ( |
|
cm, tp string |
|
exist bool |
|
) |
|
if cm, exist = TokenCompareDesc[tk.Compare]; !exist { |
|
cm = strconv.Itoa(int(tk.Compare)) |
|
} |
|
if tp, exist = TokenValueTypeDesc[tk.Type]; !exist { |
|
tp = strconv.Itoa(int(tk.Type)) |
|
} |
|
return fmt.Sprintf("%s%s%s(%s)", tk.Name, cm, tk.Value, tp) |
|
} |
|
|
|
// TableName . |
|
func (tb *TokenBind) TableName() string { |
|
return TableTokenBind |
|
} |
|
|
|
// IsAvailable . |
|
func (tb *TokenBind) IsAvailable() bool { |
|
return tb.DisableTime.IsZero() |
|
} |
|
|
|
// IsBatch . |
|
func (tb *TokenBind) IsBatch() bool { |
|
return tb.Type == BindTypeTranBatch || tb.Type == BindTypeTranHelpBatch |
|
} |
|
|
|
//FormatLog 日志形式 |
|
func (tb *TokenBindDetail) FormatLog() string { |
|
var ( |
|
logs = []string{} |
|
) |
|
for _, tk := range tb.Tokens { |
|
logs = append(logs, tk.FormatLog()) |
|
} |
|
return fmt.Sprintf("{%s: %s}", tb.ChName, strings.Join(logs, ",")) |
|
} |
|
|
|
// IsAvailable . |
|
func (tb *TokenBindDetail) IsAvailable() bool { |
|
return tb.DisableTime.IsZero() |
|
} |
|
|
|
// GetTokenCompare . |
|
func GetTokenCompare(compare int8) string { |
|
v, exist := TokenCompareDesc[compare] |
|
if !exist { |
|
return "" |
|
} |
|
|
|
return v |
|
} |
|
|
|
// GetTokenValueType . |
|
func GetTokenValueType(tp int8) string { |
|
v, exist := TokenValueTypeDesc[tp] |
|
if !exist { |
|
return "" |
|
} |
|
|
|
return v |
|
} |
|
|
|
// Int64Slice data.Less and data.Swap |
|
type Int64Slice []int64 |
|
|
|
func (sl Int64Slice) Len() int { |
|
return len(sl) |
|
} |
|
|
|
func (sl Int64Slice) Less(i, j int) bool { |
|
return sl[i] < sl[j] |
|
} |
|
|
|
func (sl Int64Slice) Swap(i, j int) { |
|
sl[i], sl[j] = sl[j], sl[i] |
|
}
|
|
|