51 lines
		
	
	
		
			805 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			805 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package helper
 | 
						|
 | 
						|
import (
 | 
						|
	"strconv"
 | 
						|
	"sync"
 | 
						|
 | 
						|
	extendConfig "go-admin/config"
 | 
						|
 | 
						|
	"github.com/bwmarrin/snowflake"
 | 
						|
	log "github.com/go-admin-team/go-admin-core/logger"
 | 
						|
)
 | 
						|
 | 
						|
// 全局雪花节点实例
 | 
						|
var (
 | 
						|
	node *snowflake.Node
 | 
						|
	once sync.Once
 | 
						|
)
 | 
						|
 | 
						|
func InitSnowflakeNode() error {
 | 
						|
	var err error
 | 
						|
 | 
						|
	node, err = snowflake.NewNode(extendConfig.ExtConfig.ServiceId)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
// 获取订单雪花id
 | 
						|
func GetOrderNo() string {
 | 
						|
	if node == nil {
 | 
						|
		once.Do(func() {
 | 
						|
			if node == nil {
 | 
						|
				if err := InitSnowflakeNode(); err != nil {
 | 
						|
					log.Fatalf("初始化雪花算法节点失败: %v", err)
 | 
						|
				}
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
 | 
						|
	if node == nil {
 | 
						|
		log.Fatal("雪花算法节点未初始化")
 | 
						|
	}
 | 
						|
 | 
						|
	orderID := node.Generate()
 | 
						|
	idStr := strconv.FormatInt(orderID.Int64(), 10)
 | 
						|
 | 
						|
	return idStr
 | 
						|
}
 |