1
This commit is contained in:
parent
cd8418c930
commit
e29c88bf66
110
server/jccommon/transid.go
Normal file
110
server/jccommon/transid.go
Normal file
@ -0,0 +1,110 @@
|
||||
package jccommon
|
||||
|
||||
import (
|
||||
"q5"
|
||||
"fmt"
|
||||
"strings"
|
||||
"errors"
|
||||
)
|
||||
|
||||
/*
|
||||
max(uint64): 18446744073709551615 = len(20)
|
||||
max(uint256): 115792089237316195423570985008687907853269984665640564039457584007913129639935 = len(78)
|
||||
max(int32): 2147483648 = len(10)
|
||||
len(tokenid) = 16
|
||||
transHead: funcId(2)|time(9)|seqId(7) = len(18)
|
||||
*/
|
||||
|
||||
type TransId struct {
|
||||
funcId int32
|
||||
time int32
|
||||
seqId int32
|
||||
params [3]int64
|
||||
}
|
||||
|
||||
func (this *TransId) Init(funcId int32, time int32, seqId int32, params [3]int64) {
|
||||
this.funcId = funcId
|
||||
this.time = time
|
||||
this.seqId = seqId
|
||||
this.params = params
|
||||
}
|
||||
|
||||
func (this *TransId) ToString() (string, error) {
|
||||
if !this.IsValid() {
|
||||
return "", errors.New("isvalid transId")
|
||||
}
|
||||
idStr := fmt.Sprintf("%2d%9d%7d%20d%20d%20d",
|
||||
this.funcId,
|
||||
this.time,
|
||||
this.seqId,
|
||||
this.params[0],
|
||||
this.params[1],
|
||||
this.params[2])
|
||||
idStr = strings.TrimLeft(idStr, " ")
|
||||
idStr = strings.ReplaceAll(idStr, " ", "0")
|
||||
if !IsValidTransId(idStr) {
|
||||
return "", errors.New("transId len error")
|
||||
}
|
||||
return idStr, nil
|
||||
}
|
||||
|
||||
func (this *TransId) ParseString(idStr string) error {
|
||||
if !IsValidTransId(idStr) {
|
||||
return errors.New("transId len error")
|
||||
}
|
||||
eleLens := []int{2,9,7,20,20,20}
|
||||
if len(idStr) == TRANS_ID_MIN_LEN {
|
||||
eleLens[0] = 1
|
||||
}
|
||||
offset := 0
|
||||
for index, eleLen := range eleLens {
|
||||
tmpStr := idStr[offset: offset + eleLen]
|
||||
offset += eleLen
|
||||
switch index {
|
||||
case 0:
|
||||
{
|
||||
this.funcId = q5.ToInt32(tmpStr)
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
this.time = q5.ToInt32(tmpStr)
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
this.seqId = q5.ToInt32(tmpStr)
|
||||
}
|
||||
default:
|
||||
{
|
||||
this.params[index - 3] = q5.ToInt64(tmpStr)
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (this *TransId) IsValid() bool {
|
||||
if this.funcId < 0 || this.funcId > TRANS_ID_MAX_FUNC_ID {
|
||||
return false
|
||||
}
|
||||
if this.time < 0 || this.time > TRANS_ID_MAX_TIME {
|
||||
return false
|
||||
}
|
||||
if this.seqId < 0 || this.seqId > TRANS_ID_MAX_SEQ_ID {
|
||||
return false
|
||||
}
|
||||
for _, val := range this.params {
|
||||
if val < 0 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func NewTransId() *TransId {
|
||||
return new(TransId)
|
||||
}
|
||||
|
||||
func IsValidTransId(idStr string) bool {
|
||||
return q5.IsPureNumber(idStr) && len(idStr) >= TRANS_ID_MIN_LEN && len(idStr) <= TRANS_ID_MAX_LEN
|
||||
}
|
@ -38,7 +38,7 @@ func (this *app) Init() {
|
||||
idStr, _ := transId.ToString()
|
||||
transId2 := jccommon.NewTransId()
|
||||
transId2.ParseString(idStr)
|
||||
f5.GetSysLog().Info("transId:%s", idStr)
|
||||
f5.GetSysLog().Info("transId1:%s", idStr)
|
||||
{
|
||||
idStr2, _ := transId2.ToString()
|
||||
f5.GetSysLog().Info("transId2:%s", idStr2)
|
||||
|
Loading…
x
Reference in New Issue
Block a user