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
							 | 
						||
| 
								 | 
							
								}
							 |