package reward import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/redis/redis_client" "code.gitea.io/gitea/modules/redis/redis_key" "fmt" "math/rand" "time" ) func GetSerialNoByRedis() (string, error) { now := time.Now() r := int64(rand.Intn(3)) + 1 n, err := redis_client.IncrBy(redis_key.RewardSerialCounter(now), r) if err != nil { log.Error("GetSerialNoByRedis RewardSerialCounter error. %v", err) return "", err } if n == r { redis_client.Expire(redis_key.RewardSerialCounter(now), 2*time.Minute) } //when the counter n exceeds 1000, the length of the serial number will become longer if n >= 1000 { return now.Format("200601021504") + fmt.Sprintf("%d", n) + fmt.Sprint(rand.Intn(10)), nil } return now.Format("200601021504") + fmt.Sprintf("%03d", n) + fmt.Sprint(rand.Intn(10)), nil }