ordercode.go 914 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package public
  2. import (
  3. qutil "app.yhyue.com/moapp/jybase/common"
  4. "fmt"
  5. "sync"
  6. "time"
  7. )
  8. var (
  9. VarOrderCode *orderCode
  10. )
  11. type orderCode struct {
  12. pool chan string
  13. all *sync.Map
  14. lock *sync.Mutex
  15. }
  16. func (o *orderCode) gc() {
  17. VarOrderCode.all.Range(func(key, value interface{}) bool {
  18. if time.Now().Day() != value.(int) {
  19. VarOrderCode.all.Delete(key)
  20. }
  21. return true
  22. })
  23. time.AfterFunc(24*time.Hour, o.gc)
  24. }
  25. func init() {
  26. VarOrderCode = &orderCode{
  27. pool: make(chan string, 20),
  28. all: &sync.Map{},
  29. lock: &sync.Mutex{},
  30. }
  31. VarOrderCode.gc()
  32. for i := 0; i < 10; i++ {
  33. go func() {
  34. VarOrderCode.lock.Lock()
  35. defer VarOrderCode.lock.Unlock()
  36. for {
  37. o := fmt.Sprintf("%d%s", time.Now().Unix()+900000000, qutil.GetRandom(2))
  38. if _, ok := VarOrderCode.all.Load(o); ok {
  39. continue
  40. }
  41. VarOrderCode.all.Store(o, time.Now().Day())
  42. VarOrderCode.pool <- o
  43. }
  44. }()
  45. }
  46. }