123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- 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]
- }
|