github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/game/internal/user_redpacketmatch.go (about) 1 package internal 2 3 import ( 4 "common" 5 "conf" 6 "msg" 7 "time" 8 9 "github.com/name5566/leaf/log" 10 "gopkg.in/mgo.v2/bson" 11 ) 12 13 // 计算红包比赛在线人数 14 func calculateRedPacketMatchOnlineNumber(redPacketType int) { 15 switch redPacketType { 16 case 1: // 红包匹配场 17 redPacketMatchOnlineNumber[0]++ 18 case 10: // 红包匹配场 19 redPacketMatchOnlineNumber[1]++ 20 case 100: // 红包私人房 21 redPacketMatchOnlineNumber[2]++ 22 case 999: // 红包私人房 23 redPacketMatchOnlineNumber[3]++ 24 } 25 } 26 27 // 发送红包比赛在线人数 28 func (user *User) sendRedPacketMatchOnlineNumber() { 29 //一元红包场 30 if time.Now().Hour() < conf.GetOneRedpacketInfo().Start || time.Now().Hour() > conf.GetOneRedpacketInfo().End { 31 redPacketMatchOnlineNumber[0] = 0 32 } 33 //十元红包场 34 if time.Now().Hour() < conf.GetTenRedpacketInfo().Start || time.Now().Hour() > conf.GetTenRedpacketInfo().End { 35 redPacketMatchOnlineNumber[1] = 0 36 } 37 if time.Now().Hour() < conf.GetHundredRedpacketInfo().Start || time.Now().Hour() > conf.GetHundredRedpacketInfo().End { 38 redPacketMatchOnlineNumber[2] = 0 39 } 40 //十元红包场 41 redPacketMatchOnlineNumber[3] = 0 42 user.WriteMsg(&msg.S2C_UpdateRedPacketMatchOnlineNumber{ 43 Numbers: redPacketMatchOnlineNumber, 44 }) 45 } 46 47 // 发送未领取的红包比赛奖励数量 48 func (user *User) sendUntakenRedPacketMatchPrizeNumber() { 49 count := 0 50 skeleton.Go(func() { 51 db := mongoDB.Ref() 52 defer mongoDB.UnRef(db) 53 count, _ = db.DB(DB).C("redpacketmatchresult"). 54 Find(bson.M{"userid": user.baseData.userData.UserID, "redpacket": bson.M{"$gt": 0}, "taken": false}).Count() 55 }, func() { 56 user.WriteMsg(&msg.S2C_UpdateUntakenRedPacketMatchPrizeNumber{ 57 Number: count, 58 }) 59 }) 60 } 61 62 func (user *User) sendRedPacketMatchRecord(pageNumber int, pageSize int) { 63 resultData := new(RedPacketMatchResultData) 64 var items []msg.RedPacketMatchRecordItem 65 count := 0 66 skeleton.Go(func() { 67 db := mongoDB.Ref() 68 defer mongoDB.UnRef(db) 69 count, _ = db.DB(DB).C("redpacketmatchresult").Find(bson.M{"userid": user.baseData.userData.UserID, "redpacket": bson.M{"$gt": 0}}).Count() 70 71 iter := db.DB(DB).C("redpacketmatchresult").Find(bson.M{"userid": user.baseData.userData.UserID, "redpacket": bson.M{"$gt": 0}}). 72 Sort("-createdat").Skip((pageNumber - 1) * pageSize).Limit(pageSize).Iter() 73 if err := iter.Close(); err != nil { 74 log.Error("iter close error: %v", err) 75 } 76 for iter.Next(&resultData) { 77 items = append(items, msg.RedPacketMatchRecordItem{ 78 ID: resultData.ID, 79 RedPacketType: resultData.RedPacketType, 80 RedPacket: resultData.RedPacket, 81 Taken: resultData.Taken, 82 Date: time.Unix(resultData.CreatedAt, 0).Format("2006/01/02 15:04:05"), 83 CardCode: resultData.CardCode, 84 }) 85 } 86 }, func() { 87 user.WriteMsg(&msg.S2C_RedPacketMatchRecord{ 88 Items: items, 89 Total: count, 90 PageNumber: pageNumber, 91 PageSize: pageSize, 92 }) 93 }) 94 } 95 96 func (user *User) takeRedPacketMatchPrize(id bson.ObjectId) { 97 if user.baseData.userData.CircleID < 1 { 98 user.WriteMsg(&msg.S2C_TakeRedPacketMatchPrize{ 99 Error: msg.S2C_TakeRedPacketMatchPrize_CircleIDInvalid, 100 }) 101 user.requestCircleID() 102 return 103 } 104 userID := user.baseData.userData.UserID 105 106 resultData := new(RedPacketMatchResultData) 107 skeleton.Go(func() { 108 db := mongoDB.Ref() 109 defer mongoDB.UnRef(db) 110 111 err := db.DB(DB).C("redpacketmatchresult").FindId(id).One(&resultData) 112 if err != nil { 113 resultData = nil 114 log.Debug("find redpacketmatchresult: %v error: %v", id, err) 115 return 116 } 117 }, func() { 118 if resultData == nil { 119 user.WriteMsg(&msg.S2C_TakeRedPacketMatchPrize{ 120 Error: msg.S2C_TakeRedPacketMatchPrize_IDInvalid, 121 ID: id, 122 }) 123 return 124 } 125 if resultData.UserID != user.baseData.userData.UserID || resultData.RedPacket <= 0 { 126 user.WriteMsg(&msg.S2C_TakeRedPacketMatchPrize{ 127 Error: msg.S2C_TakeRedPacketMatchPrize_NotYetWon, 128 ID: id, 129 }) 130 return 131 } 132 if resultData.Taken { 133 user.WriteMsg(&msg.S2C_TakeRedPacketMatchPrize{ 134 Error: msg.S2C_TakeRedPacketMatchPrize_TakeRepeated, 135 ID: id, 136 RedPacket: resultData.RedPacket, 137 }) 138 return 139 } 140 if resultData.Handling { 141 return 142 } 143 updateRedPacketMatchResultData(id, bson.M{"$set": bson.M{"handling": true}}, func() { 144 /* 145 // 请求生成一个圈圈红包 146 desc := strconv.Itoa(resultData.RedPacketType) + "元红包比赛奖励" 147 user.requestCircleRedPacket(resultData.RedPacket, desc, func() { 148 takeRedPacketMatchPrizeSuccess(userID, id, resultData.RedPacket) 149 }, func() { 150 takeRedPacketMatchPrizeFail(userID, id) 151 }) 152 */ 153 takeRedPacketMatchPrizeSuccess(userID, id, resultData.RedPacket) 154 }) 155 }) 156 } 157 158 func takeRedPacketMatchPrizeSuccess(userID int, id bson.ObjectId, redPacket float64) { 159 var cb func() 160 if user, ok := userIDUsers[userID]; ok { 161 user.WriteMsg(&msg.S2C_TakeRedPacketMatchPrize{ 162 Error: msg.S2C_TakeRedPacketMatchPrize_OK, 163 ID: id, 164 RedPacket: common.Round(redPacket, 2), 165 }) 166 cb = func() { 167 if theUser, ok := userIDUsers[userID]; ok { 168 theUser.sendUntakenRedPacketMatchPrizeNumber() 169 } 170 } 171 } else { 172 cb = nil 173 } 174 updateRedPacketMatchResultData(id, bson.M{"$set": bson.M{"taken": true, "handling": false, "updatedat": time.Now().Unix()}}, cb) 175 } 176 177 func takeRedPacketMatchPrizeFail(userID int, id bson.ObjectId) { 178 if user, ok := userIDUsers[userID]; ok { 179 user.WriteMsg(&msg.S2C_TakeRedPacketMatchPrize{ 180 Error: msg.S2C_TakeRedPacketMatchPrize_Error, 181 ID: id, 182 }) 183 } 184 updateRedPacketMatchResultData(id, bson.M{"$set": bson.M{"handling": false}}, nil) 185 }