|
@@ -136,6 +136,9 @@ func UpdateRewardsPool(engine *xorm.Session, amount float64) error {
|
|
|
}
|
|
|
|
|
|
func UpdateAvailableRewards(engine *xorm.Session, rewards float64, uaddr string, join, isdirect bool) error {
|
|
|
+ if rewards <= 0 {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
logs.Info("into UpdateAvailableRewards:", rewards, uaddr, join, isdirect)
|
|
|
a_rewards := rewards * 60 / 100
|
|
|
a_reinput := rewards * 40 / 100
|
|
@@ -181,7 +184,7 @@ func UpdateAvailableRewards(engine *xorm.Session, rewards float64, uaddr string,
|
|
|
|
|
|
func UpdateCommunityGift(engine *xorm.Session, amount float64, uaddr string) error {
|
|
|
logs.Info("into UpdateCommunityGift:", amount, uaddr)
|
|
|
- var user, tmpUser models.UserInfo
|
|
|
+ var user models.UserInfo
|
|
|
ok, err := engine.ID(uaddr).Get(&user)
|
|
|
if err != nil {
|
|
|
return err
|
|
@@ -190,46 +193,178 @@ func UpdateCommunityGift(engine *xorm.Session, amount float64, uaddr string) err
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
- ok, err = engine.Desc("id").Get(&tmpUser)
|
|
|
+ //front 10
|
|
|
+ var leftNum int64
|
|
|
+ if user.Id > 10 {
|
|
|
+ leftNum = 10
|
|
|
+ } else {
|
|
|
+ leftNum = user.Id - 1
|
|
|
+ }
|
|
|
+ rewards := amount * (float64(leftNum) / 100)
|
|
|
+
|
|
|
+ err = UpdateGift(engine, user.Addr, rewards)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
- if !ok {
|
|
|
- logs.Info("%v not exist!", uaddr)
|
|
|
- return nil
|
|
|
- }
|
|
|
|
|
|
- var leftNum, rightNum int64
|
|
|
- if user.Id >= 26 {
|
|
|
- leftNum = 25
|
|
|
+ //back 10
|
|
|
+ var fronts []models.UserInfo
|
|
|
+ if user.Id > 10 {
|
|
|
+ err := engine.Where("id >= ? and id < ?", user.Id-10, user.Id).Find(&fronts)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
} else {
|
|
|
- leftNum = user.Id - 1
|
|
|
+ err := engine.Where("id >= ? and id < ?", 1, user.Id).Find(&fronts)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
}
|
|
|
- if tmpUser.Id-user.Id >= 25 {
|
|
|
- rightNum = 25
|
|
|
- } else {
|
|
|
- rightNum = tmpUser.Id - user.Id
|
|
|
+ if len(fronts) > 0 {
|
|
|
+ backrewards := amount / 100
|
|
|
+ for _, u := range fronts {
|
|
|
+ err = UpdateGift(engine, u.Addr, backrewards)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- rewards := amount * (float64(leftNum+rightNum) / 100)
|
|
|
- err = UpdateAvailableRewards(engine, rewards, user.Addr, false, false)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
+ //inviter front 10-25%
|
|
|
+ if user.Direct != "" {
|
|
|
+ var inviter models.UserInfo
|
|
|
+ ok, err := engine.ID(user.Direct).Get(&inviter)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if !ok {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ var frontNum int64
|
|
|
+ if inviter.DirectNumber == 1 {
|
|
|
+ //front 10 - 15
|
|
|
+ if inviter.Id <= 10 {
|
|
|
+ frontNum = 0
|
|
|
+ }
|
|
|
+ if inviter.Id > 10 && inviter.Id <= 15 {
|
|
|
+ frontNum = inviter.Id - 10
|
|
|
+ }
|
|
|
+ if inviter.Id > 15 {
|
|
|
+ frontNum = 5
|
|
|
+ }
|
|
|
+ } else if inviter.DirectNumber == 2 {
|
|
|
+ //front 16 - 20
|
|
|
+ if inviter.Id <= 15 {
|
|
|
+ frontNum = 0
|
|
|
+ }
|
|
|
+ if inviter.Id > 15 && inviter.Id <= 20 {
|
|
|
+ frontNum = inviter.Id - 15
|
|
|
+ }
|
|
|
+ if inviter.Id > 20 {
|
|
|
+ frontNum = 5
|
|
|
+ }
|
|
|
+ } else if inviter.DirectNumber == 3 {
|
|
|
+ //front 21 - 25
|
|
|
+ if inviter.Id <= 20 {
|
|
|
+ frontNum = 0
|
|
|
+ }
|
|
|
+ if inviter.Id > 20 && inviter.Id <= 25 {
|
|
|
+ frontNum = inviter.Id - 20
|
|
|
+ }
|
|
|
+ if inviter.Id > 25 {
|
|
|
+ frontNum = 5
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ frontNum = 0
|
|
|
+ }
|
|
|
+
|
|
|
+ frontrewards := amount * (float64(frontNum / 100))
|
|
|
+ err = UpdateGift(engine, inviter.Addr, frontrewards)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- var per models.Performance
|
|
|
- ok, err = engine.ID(uaddr).Get(&per)
|
|
|
+ //back 10-25%,DirectNumber 1,2,3===============
|
|
|
+ var frontUsers []models.UserInfo
|
|
|
+ err = engine.Where("back_users like ?", "%,"+fmt.Sprint(user.Id)+"%").Find(&frontUsers)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
- if !ok {
|
|
|
- return nil
|
|
|
+ for _, fu := range frontUsers {
|
|
|
+ var num int64 = 0
|
|
|
+ if fu.DirectNumber == 0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if fu.DirectNumber >= 1 {
|
|
|
+ if fu.BackNum < 5 {
|
|
|
+ num = user.Id - (fu.Id + 10) - fu.BackNum
|
|
|
+ fu.BackNum += num
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if fu.DirectNumber >= 2 {
|
|
|
+ if fu.BackNum >= 5 && fu.BackNum < 10 {
|
|
|
+ num += user.Id - (fu.Id + 10) - fu.BackNum
|
|
|
+ fu.BackNum += num
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if fu.DirectNumber >= 3 {
|
|
|
+ if fu.BackNum >= 10 && fu.BackNum < 15 {
|
|
|
+ num += user.Id - (fu.Id + 10) - fu.BackNum
|
|
|
+ fu.BackNum += num
|
|
|
+ }
|
|
|
+ }
|
|
|
+ _, err = engine.ID(user).Cols("back_num").Update(&fu)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ invitrewards := amount * (float64(num / 100))
|
|
|
+ err = UpdateGift(engine, fu.Addr, invitrewards)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
}
|
|
|
- per.CommunityGift += rewards
|
|
|
- _, err = engine.ID(uaddr).Cols("community_gift").Update(&per)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
+ //back >25, DirectNumber 1,2,3
|
|
|
+ if user.Direct != "" {
|
|
|
+ var inviter models.UserInfo
|
|
|
+ ok, err := engine.ID(user.Direct).Get(&inviter)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if !ok {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ var backNum int64 = 0
|
|
|
+ if user.Id > inviter.Id+25 && inviter.BackNum < 15 {
|
|
|
+ if inviter.DirectNumber >= 1 {
|
|
|
+ if inviter.BackNum < 5 {
|
|
|
+ backNum += 5 - inviter.BackNum
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if inviter.DirectNumber >= 2 {
|
|
|
+ if inviter.BackNum >= 5 && inviter.BackNum < 10 {
|
|
|
+ backNum += 10 - inviter.BackNum - backNum
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if inviter.DirectNumber >= 3 {
|
|
|
+ if inviter.BackNum >= 10 && inviter.BackNum < 15 {
|
|
|
+ backNum += 15 - inviter.BackNum - backNum
|
|
|
+ }
|
|
|
+ }
|
|
|
+ inviter.BackNum += backNum
|
|
|
+
|
|
|
+ _, err = engine.ID(user).Cols("back_num").Update(&inviter)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ rewards := amount * (float64(backNum / 100))
|
|
|
+ err = UpdateGift(engine, inviter.Addr, rewards)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
logs.Info("UpdateCommunityGift end:", amount, uaddr)
|
|
|
return nil
|
|
|
}
|
|
@@ -328,3 +463,28 @@ func UpdateMarket(engine *xorm.Session, amount float64) error {
|
|
|
logs.Info("UpdateMarket end:", amount)
|
|
|
return nil
|
|
|
}
|
|
|
+
|
|
|
+func UpdateGift(engine *xorm.Session, user string, rewards float64) error {
|
|
|
+ if rewards <= 0 {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ err := UpdateAvailableRewards(engine, rewards, user, false, false)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ var per models.Performance
|
|
|
+ ok, err := engine.ID(user).Get(&per)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if !ok {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ per.CommunityGift += rewards
|
|
|
+ _, err = engine.ID(user).Cols("community_gift").Update(&per)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|