270 lines
6.6 KiB
Go
270 lines
6.6 KiB
Go
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]
|
|
}
|