github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/game/internal/mongo_share.go (about) 1 package internal 2 3 import ( 4 "time" 5 6 "github.com/name5566/leaf/log" 7 mgo "gopkg.in/mgo.v2" 8 "gopkg.in/mgo.v2/bson" 9 ) 10 11 type Agent struct { 12 Level int 13 Datas []Data 14 } 15 type Data struct { 16 Createdat int64 //创建时间 17 AccountId int64 //用户Id 18 Recharge float64 //累计充值金额 19 AllProfit float64 //贡献总收益 20 Profit float64 //可领取收益 21 Updatedat int64 //更新时间 22 } 23 24 type UserAgent struct { 25 Agents []Agent 26 AccountId int64 27 ParentId int64 28 } 29 30 func (a *Data) InsertAgent(level int, Accountid int64, ParentId int64) { 31 selector := bson.M{"parentid": ParentId, "accountid": Accountid, "agents.level": level} 32 db := mongoDB.Ref() 33 defer mongoDB.UnRef(db) 34 u := new(UserAgent) 35 err := db.DB(DB).C("userAgents").Find(selector).One(u) 36 if err != nil && err != mgo.ErrNotFound { 37 log.Release("查找玩家是否有%v级下家失败:%v", level, err) 38 } 39 update := bson.M{"$push": bson.M{"agents.$.datas": a}} 40 if err == mgo.ErrNotFound { 41 a1 := new(Agent) 42 a1.Level = level 43 a1.Datas = append(a1.Datas, *a) 44 selector = bson.M{"parentid": ParentId, "accountid": Accountid} 45 update = bson.M{"$push": bson.M{"agents": a1}} 46 } 47 _, err = db.DB(DB).C("userAgents").Upsert(selector, update) 48 if err != nil { 49 log.Release("insert 账号:%v 的一级代理出现问题%v", a.AccountId, err) 50 } 51 } 52 53 //更新某个玩家对他的上级产生的可领取盈利(返利获取的) 54 func (a *Data) updateAgent(level int, parentid int64, params map[string]float64) { 55 selector := bson.M{"accountid": parentid, "agents.level": level, 56 "agents": bson.M{"$elemMatch": bson.M{"level": level}}} 57 db := mongoDB.Ref() 58 defer mongoDB.UnRef(db) 59 d := new(UserAgent) 60 err := db.DB(DB).C("userAgents").Find(selector).One(d) 61 if err != nil && err != mgo.ErrNotFound { 62 log.Release("查看:%v第%v级代理%v的收益情况:%v", parentid, level, a.AccountId, err) 63 return 64 } 65 label1 := 0 66 label2 := 0 67 for key, value := range d.Agents { 68 if value.Level != level { 69 continue 70 } 71 for key1, value1 := range value.Datas { 72 label1 = key 73 if a.AccountId == value1.AccountId { 74 label2 = key1 75 } 76 } 77 } 78 79 for key, value := range params { 80 switch key { 81 82 case "profit": 83 d.Agents[label1].Datas[label2].Profit = value 84 case "allprofit": 85 d.Agents[label1].Datas[label2].AllProfit = value 86 case "recharge": 87 d.Agents[label1].Datas[label2].Recharge = value 88 } 89 } 90 err = db.DB(DB).C("userAgents").Update(selector, d) 91 if err != nil { 92 log.Release("更新账号:%v第%v级代理%v的收益情况:%v", parentid, level, a.AccountId, err) 93 } 94 } 95 96 //更新某个玩家对他的上级产生的可领取盈利(返利获取的)这个是在原来的基础上添加 97 func (a *Data) updateIncAgent(level int, parentid int64, params map[string]float64) { 98 selector := bson.M{"accountid": parentid, "agents.level": level, 99 "agents": bson.M{"$elemMatch": bson.M{"level": level}}} 100 db := mongoDB.Ref() 101 defer mongoDB.UnRef(db) 102 d := new(UserAgent) 103 err := db.DB(DB).C("userAgents").Find(selector).One(d) 104 if err != nil && err != mgo.ErrNotFound { 105 log.Release("查看:%v第%v级代理%v的收益情况:%v", parentid, level, a.AccountId, err) 106 return 107 } 108 label1 := 0 109 label2 := 0 110 for key, value := range d.Agents { 111 if value.Level != level { 112 continue 113 } 114 for key1, value1 := range value.Datas { 115 label1 = key 116 if a.AccountId == value1.AccountId { 117 label2 = key1 118 } 119 } 120 } 121 122 for key, value := range params { 123 switch key { 124 125 case "profit": 126 d.Agents[label1].Datas[label2].Profit += value 127 case "allprofit": 128 d.Agents[label1].Datas[label2].AllProfit += value 129 case "recharge": 130 d.Agents[label1].Datas[label2].Recharge += value 131 } 132 } 133 d.Agents[label1].Datas[label2].Updatedat = time.Now().Unix() 134 err = db.DB(DB).C("userAgents").Update(selector, d) 135 if err != nil { 136 log.Release("(在原有的基础上添加)更新账号:%v第%v级代理%v的收益情况:%v", parentid, level, a.AccountId, err) 137 } 138 }