[fix] 生成ID首位必须为字母

This commit is contained in:
PandaX-Go
2024-08-08 21:34:37 +08:00
parent 27b4768613
commit f8711c8e21
3 changed files with 34 additions and 2 deletions

View File

@@ -186,7 +186,7 @@ func (p *DeviceApi) InsertDevice(rc *restfulx.ReqCtx) {
data.OrgId = rc.LoginAccount.OrganizationId
list, _ := p.DeviceApp.FindList(entity.Device{Name: data.Name})
biz.IsTrue(!(list != nil && len(*list) > 0), fmt.Sprintf("名称%s已存在设置其他命名", data.Name))
data.Id = utils.GenerateID()
data.Id = utils.GenerateTdID("d")
data.LinkStatus = global.INACTIVE
data.LastAt = time.Now()
data.Protocol = product.ProtocolName

View File

@@ -107,7 +107,7 @@ func (p *ProductApi) GetProduct(rc *restfulx.ReqCtx) {
func (p *ProductApi) InsertProduct(rc *restfulx.ReqCtx) {
var data entity.Product
restfulx.BindJsonAndValid(rc, &data)
data.Id = utils.GenerateID()
data.Id = utils.GenerateTdID("p")
data.Owner = rc.LoginAccount.UserName
data.OrgId = rc.LoginAccount.OrganizationId
// 如果未设置规则链,默认为主链

View File

@@ -167,3 +167,35 @@ func GenerateID() string {
}
return base64.URLEncoding.EncodeToString(id)[:10]
}
const (
letterBytes = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
)
func RandString(n int) string {
rand.Seed(time.Now().UnixNano())
output := make([]byte, n)
// We will take n bytes, one byte for each character of output.
randomness := make([]byte, n)
// read all random
_, err := rand.Read(randomness)
if err != nil {
panic(err)
}
l := len(letterBytes)
// fill output
for pos := range output {
// get random item
random := randomness[pos]
// random % 64
randomPos := random % uint8(l)
// put into output
output[pos] = letterBytes[randomPos]
}
return string(output)
}
func GenerateTdID(px string) string {
return px + RandString(9)
}