Browse Source

fix:bug

master
黄梓健 5 years ago
parent
commit
634b527bf1
  1. 4
      controllers/client/live.go
  2. 2
      models/shake_red_envelope_record.go
  3. 12
      services/red_envelope/red_envelop.go

4
controllers/client/live.go

@ -160,8 +160,8 @@ func (t *LiveCtl) SendLiveRedPack() {
amount := utils.Float64CusDecimal(t.MustGetDouble("amount"), 2) // 金额
areaId := t.MustGetInt64("area_id")
if amount/float64(num) < 0.3 { // 平均每个红包不得小于0.3
t.ERROR("每个红包不得小于0.3元", code.MSG_ERR)
if amount/float64(num) < 1 && amount/float64(num) > 200 { // 平均每个红包不得小于0.3
t.ERROR("每个红包的平均金额必须在1.00元到200.00元之间", code.MSG_ERR)
return
}

2
models/shake_red_envelope_record.go

@ -27,8 +27,6 @@ type ShakeRedEnvelopeRecord struct {
IsDraw int `json:"is_draw" xorm:"not null default 0 comment('-1未被摇中,0已被摇中1被提取')"`
MchBillno string `json:"mch_billno" xorm:"not null default '' comment('微信红包订单号') VARCHAR(128)"`
Version int `json:"version" xorm:"not null version default 0 comment('乐观锁') INT(11)"`
// 无关变量
}
func (t *ShakeRedEnvelopeRecord) TableName() string {

12
services/red_envelope/red_envelop.go

@ -49,10 +49,7 @@ const (
MaxRedPackAmount = 20000 // 200块钱
)
func GenRedPack(amount, num int) ([]int, error) {
if amount/num <= 100 {
return nil, errors.New("每个红包的平均金额必须在1.00元到200.00元之间")
}
func GenRedPack(amount, num int) []int {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
sumMoney := 0
redPacks := make([]int, 0)
@ -78,7 +75,7 @@ func GenRedPack(amount, num int) ([]int, error) {
sumMoney += money
redPacks = append(redPacks, money)
}
return redPacks, nil
return redPacks
}
// 提前生成红包
@ -88,9 +85,12 @@ func GenRedEnvelope(aid int64, name string, rid int64, rule *models.ShakeRedEnve
r := rand.New(rand.NewSource(time.Now().UnixNano()))
if rule.Model == define.SHAKERB_RULE_RANDOM { // 随机红包
// 检测红包是否存在
for i := 0; i < rule.RedEnvelopeNum; i++ {
randSum := int(rule.RandSum * 100)
sumMoney := 0
if randSum/rule.RedEnvelopeNum > MinRedPackAmount && randSum/rule.RedEnvelopeNum < MaxRedPackAmount {
return errors.New("每个红包的平均金额必须在1.00元到200.00元之间")
}
for i := 0; i < rule.RedEnvelopeNum; i++ {
money := r.Int() * 2 * (randSum - sumMoney) / (rule.RedEnvelopeNum - i)
if money <= MinRedPackAmount { // 随机的金额可能小于1块钱
money = MinRedPackAmount

Loading…
Cancel
Save