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  }