package service import ( "blazing/cool" "blazing/modules/config/model" "context" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/grand" "github.com/google/uuid" ) // 1. 扩展字符集:数字+大小写字母+安全符号(避开URL/输入易冲突的符号,如/、?、&) const charsetWithSymbol = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz" func Generate16CharSecure() string { result := make([]byte, 16) for i := 0; i < 16; i++ { result[i] = charsetWithSymbol[grand.N(0, len(charsetWithSymbol)-1)] } return string(result) } type CdkService struct { *cool.Service } func NewCdkService() *CdkService { return &CdkService{ &cool.Service{ Model: model.NewCDKConfig(), InsertParam: func(ctx context.Context) g.MapStrAny { uuid.NewV7() return g.MapStrAny{ "cdk_code": Generate16CharSecure(), } }, }, } } func (s *CdkService) Get(id string) *model.CDKConfig { var item *model.CDKConfig dbm_notenable(s.Model).Where("cdk_code", id).WhereNot("exchange_remain_count", 0).Scan(&item) return item } func (s *CdkService) All() []model.CDKConfig { var item []model.CDKConfig dbm_notenable(s.Model).WhereLT("exchange_remain_count", 0).Scan(&item) return item } func (s *CdkService) Set(id string) bool { res, err := cool.DBM(s.Model).Where("cdk_code", id).WhereNot("exchange_remain_count", 0).Decrement("exchange_remain_count", 1) if err != nil { return false } rows, _ := res.RowsAffected() if rows == 0 { return false } return true }