You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

serial.go 839 B

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
12345678910111213141516171819202122232425262728
  1. package reward
  2. import (
  3. "code.gitea.io/gitea/modules/log"
  4. "code.gitea.io/gitea/modules/redis/redis_client"
  5. "code.gitea.io/gitea/modules/redis/redis_key"
  6. "fmt"
  7. "math/rand"
  8. "time"
  9. )
  10. func GetSerialNoByRedis() (string, error) {
  11. now := time.Now()
  12. r := int64(rand.Intn(3)) + 1
  13. n, err := redis_client.IncrBy(redis_key.RewardSerialCounter(now), r)
  14. if err != nil {
  15. log.Error("GetSerialNoByRedis RewardSerialCounter error. %v", err)
  16. return "", err
  17. }
  18. if n == r {
  19. redis_client.Expire(redis_key.RewardSerialCounter(now), 2*time.Minute)
  20. }
  21. //when the counter n exceeds 1000, the length of the serial number will become longer
  22. if n >= 1000 {
  23. return now.Format("200601021504") + fmt.Sprintf("%d", n) + fmt.Sprint(rand.Intn(10)), nil
  24. }
  25. return now.Format("200601021504") + fmt.Sprintf("%03d", n) + fmt.Sprint(rand.Intn(10)), nil
  26. }