# LuckyDraw **Repository Path**: yebetter/lucky-draw ## Basic Information - **Project Name**: LuckyDraw - **Description**: 按照概率抽奖 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-07-29 - **Last Updated**: 2025-03-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 获取组件包 ```cgo go get -u gitee.com/yebetter/lucky-draw ``` ### 抽奖算法处理 #### 使用方法 ``` api := LuckyDraw.NewLuckyDrawFactory() //设置抽奖算法 api.SetType(Conf.LUCKY_DRAW_RULE_TYPE_PROBABILITY_STORE) //设置数字标识, 可配合数据库使用 与 SetType(LUCKY_DRAW_RULE_TYPE) 只有存在其一 //api.SetTypeInt(1) //加载抽奖数据 api.SetAward(awardData) //执行抽奖并返回结果 response:=api.Handle() Log.AppLog.Debug("抽奖:%+v", response) ``` #### 算法说明 | 算法名称 | 标识 | 结构体对象 |说明 | | --- | --- | --- | --- | | 概率算法 | 1 | RuleProbabilityStore.go | 通过设置概率及库存,进行数据抽奖 | #### 算法添加 1、 实现算法接口 `RuleInterface` 中的主法 ``` type RuleInterface interface { //获取当前算法标识 GetIdentifier() Conf.LUCKY_DRAW_RULE_TYPE SetAward(award []*Conf.AwardItem) //设置奖项 Handle() *Conf.AwardResult //执行抽奖 } ``` 2、初始化时必须指定标识, 标识全局算法为一,如: ``` func NewRuleProbabilityStore() *ruleProbabilityStore { return &ruleProbabilityStore{ BaseDraw: &Conf.BaseDraw{AwardData: []*Conf.AwardItem{}, Identification: Conf.LUCKY_DRAW_RULE_TYPE_PROBABILITY_STORE}, } } ``` 3、算法注册 > 需在LuckyDrawFactory 初始中进行注册 ``` func NewLuckyDrawFactory() LuckyDrawFactoryApi { luckyDrawFactoryOnce.Do(func() { container := NewCrawContainer() //算法注册 container.Add(RuleProbabilityStore.NewRuleProbabilityStore()) luckyDrawFactoryApi = &luckyDrawFactory{container: container} }) return luckyDrawFactoryApi } ```