github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/game/internal/handle_order.go (about) 1 package internal 2 3 import ( 4 "common" 5 "fmt" 6 "msg" 7 temp_edy "temp-edy" 8 "time" 9 10 "github.com/name5566/leaf/log" 11 "gopkg.in/mgo.v2/bson" 12 ) 13 14 var Rmb2Chip = map[float64]struct{ 15 AddChip int64 16 GiveChip int64 17 }{ 18 1 : { 19 AddChip:8800, 20 GiveChip:0, 21 }, 22 6:{ 23 AddChip:52800, 24 GiveChip:2800, 25 }, 26 12 : { 27 AddChip:102000, 28 GiveChip:14000, 29 }, 30 50 : { 31 AddChip:440000, 32 GiveChip:110000, 33 }, 34 100 : { 35 AddChip:880000, 36 GiveChip:356000, 37 }, 38 } 39 40 // 验证用户是否存在,存在则存储订单信息 41 func startWXPayOrder(outTradeNo string, accountID, totalFee int, cb func()) { 42 skeleton.Go(func() { 43 db := mongoDB.Ref() 44 defer mongoDB.UnRef(db) 45 userData := new(UserData) 46 err := db.DB(DB).C("users").Find(bson.M{"accountid": accountID}).One(userData) 47 if err != nil { 48 log.Debug("find accountID: %v error: %v", accountID, err) 49 return 50 } 51 temp := &struct { 52 UserID int 53 OutTradeNo string 54 Success bool 55 TotalFee int 56 CreatedAt int64 57 }{ 58 UserID: userData.UserID, 59 OutTradeNo: outTradeNo, 60 TotalFee: totalFee, 61 CreatedAt: time.Now().Unix(), 62 } 63 _, err = db.DB(DB).C("wxpayresult").Upsert(bson.M{"outtradeno": outTradeNo}, bson.M{"$set": temp}) 64 if err != nil { 65 log.Debug("upsert userID: %v error: %v", userData.UserID, err) 66 } 67 }, func() { 68 if cb != nil { 69 cb() 70 } 71 }) 72 } 73 74 func finishWXPayOrder(outTradeNo string, totalFee int, valid bool) { 75 temp := &struct { 76 UserID int 77 OutTradeNo string 78 Success bool 79 TotalFee int 80 Valid bool 81 UpdatedAt int64 82 }{} 83 userData := new(UserData) 84 skeleton.Go(func() { 85 db := mongoDB.Ref() 86 defer mongoDB.UnRef(db) 87 err := db.DB(DB).C("wxpayresult").Find(bson.M{"outtradeno": outTradeNo, "success": false}).One(temp) 88 if err != nil { 89 temp = nil 90 log.Debug("find out_trade_no: %v error: %v", outTradeNo, err) 91 return 92 } 93 if temp.TotalFee == totalFee { 94 temp.Success = true 95 temp.Valid = valid 96 temp.UpdatedAt = time.Now().Unix() 97 err = db.DB(DB).C("wxpayresult").Update(bson.M{"outtradeno": temp.OutTradeNo, "success": false}, bson.M{"$set": temp}) 98 if err != nil { 99 log.Debug("update out_trade_no: %v error: %v", temp.OutTradeNo, err) 100 temp = nil 101 } 102 if err := db.DB(DB).C("users").Find(bson.M{"_id": temp.UserID}).One(userData); err != nil { 103 log.Release("read users: error: %v", err) 104 userData = nil 105 } 106 } else { 107 temp = nil 108 } 109 }, func() { 110 if temp == nil { 111 return 112 } 113 114 if temp.UserID > 1e8 { 115 log.Debug("【减了一亿之后的accounid】%v %v %v", temp.UserID - 1e8, temp.UserID) 116 temp_edy.RpcPayOK(temp.UserID - 1e8, temp.TotalFee) 117 return 118 } 119 120 if userData != nil { 121 userData.rebate(float64(temp.TotalFee) / 100.0) 122 userData.countRecharge(float64(temp.TotalFee) / 100.0) 123 124 rmb := common.Decimal(float64(temp.TotalFee) / 100.0) 125 WriteRechageRecord( 126 userData, 127 temp.UpdatedAt, 128 fmt.Sprintf("%v金币(%v金币,赠送%v金币)", 129 Rmb2Chip[rmb].AddChip + Rmb2Chip[rmb].GiveChip, 130 Rmb2Chip[rmb].AddChip, 131 Rmb2Chip[rmb].GiveChip, 132 ), 133 rmb, 134 1, 135 ) 136 137 } 138 addChips := int64(temp.TotalFee) * 100 139 switch temp.TotalFee { 140 case 100: 141 addChips = 8800 142 case 600: 143 addChips = 55600 144 case 1200: 145 addChips = 116000 146 case 5000: // ¥50 147 addChips = 550000 148 case 10000: // ¥100 149 addChips = 1236000 150 } 151 if user, ok := userIDUsers[temp.UserID]; ok { 152 user.doTask(11) // 购买任意数量金币 153 user.doTask(22) // 购买任意数量金币,奖励2000金币 154 //新人任务 购买任意数量金币 1004 155 user.updateRedPacketTask(1004) 156 //初级任务 购买任意数量金币 1013 157 user.updateRedPacketTask(1013) 158 user.WriteMsg(&msg.S2C_PayOK{ 159 Chips: addChips, 160 }) 161 user.baseData.userData.Chips += addChips 162 user.WriteMsg(&msg.S2C_UpdateUserChips{ 163 Chips: user.baseData.userData.Chips, 164 }) 165 WriteChipsRecord(user.baseData.userData, addChips, rechargeChip) 166 if user.isRobot() { 167 upsertRobotData(time.Now().Format("20060102"), bson.M{"$inc": bson.M{"recharge": addChips}}) 168 } 169 } else { 170 updateUserData(temp.UserID, bson.M{"$inc": bson.M{"chips": addChips}}) 171 172 addTaskProgress(temp.UserID, 11) // 购买任意数量金币 173 addTaskProgress(temp.UserID, 22) // 购买任意数量金币,奖励2000金币 174 } 175 }) 176 } 177 178 func startAliPayOrder(outTradeNo string, accountID int, totalAmount float64, cb func()) { 179 skeleton.Go(func() { 180 db := mongoDB.Ref() 181 defer mongoDB.UnRef(db) 182 userData := new(UserData) 183 err := db.DB(DB).C("users").Find(bson.M{"accountid": accountID}).One(userData) 184 if err != nil { 185 log.Debug("find accountID: %v error: %v", accountID, err) 186 return 187 } 188 temp := &struct { 189 UserID int 190 OutTradeNo string 191 Success bool 192 TotalAmount float64 193 CreatedAt int64 194 }{ 195 UserID: userData.UserID, 196 OutTradeNo: outTradeNo, 197 TotalAmount: totalAmount, 198 CreatedAt: time.Now().Unix(), 199 } 200 _, err = db.DB(DB).C("alipayresult").Upsert(bson.M{"outtradeno": outTradeNo}, bson.M{"$set": temp}) 201 if err != nil { 202 log.Debug("upsert userID: %v error: %v", userData.UserID, err) 203 } 204 }, func() { 205 if cb != nil { 206 cb() 207 } 208 }) 209 } 210 211 func finishAliPayOrder(outTradeNo string, totalAmount float64, valid bool) { 212 temp := &struct { 213 UserID int 214 OutTradeNo string 215 Success bool 216 TotalAmount float64 217 Valid bool 218 UpdatedAt int64 219 }{} 220 userData := new(UserData) 221 skeleton.Go(func() { 222 db := mongoDB.Ref() 223 defer mongoDB.UnRef(db) 224 err := db.DB(DB).C("alipayresult").Find(bson.M{"outtradeno": outTradeNo, "success": false}).One(temp) 225 if err != nil { 226 temp = nil 227 log.Debug("find out_trade_no: %v error: %v", outTradeNo, err) 228 return 229 } 230 if temp.TotalAmount == totalAmount { 231 temp.Success = true 232 temp.Valid = valid 233 temp.UpdatedAt = time.Now().Unix() 234 err = db.DB(DB).C("alipayresult").Update(bson.M{"outtradeno": temp.OutTradeNo, "success": false}, bson.M{"$set": temp}) 235 if err != nil { 236 log.Debug("update out_trade_no: %v error: %v", temp.OutTradeNo, err) 237 temp = nil 238 } 239 if err := db.DB(DB).C("users").Find(bson.M{"_id": temp.UserID}).One(userData); err != nil { 240 log.Release("read users: error: %v", err) 241 userData = nil 242 } 243 } else { 244 temp = nil 245 } 246 }, func() { 247 if temp == nil { 248 return 249 } 250 251 if temp.UserID > 1e8 { 252 log.Debug("二打一支付宝【减了一亿之后的accounid】%v %v %v", temp.UserID - 1e8, temp.UserID) 253 temp_edy.RpcPayOK(temp.UserID - 1e8, int(100 * temp.TotalAmount)) 254 return 255 } 256 if userData != nil { 257 userData.rebate(float64(temp.TotalAmount)) 258 userData.countRecharge(float64(temp.TotalAmount)) 259 rmb := temp.TotalAmount 260 WriteRechageRecord( 261 userData, 262 temp.UpdatedAt, 263 fmt.Sprintf("%v金币(%v金币,赠送%v金币)", 264 Rmb2Chip[rmb].AddChip + Rmb2Chip[rmb].GiveChip, 265 Rmb2Chip[rmb].AddChip, 266 Rmb2Chip[rmb].GiveChip, 267 ), 268 temp.TotalAmount, 269 2, 270 ) 271 } 272 addChips := int64(temp.TotalAmount * 10000) 273 switch temp.TotalAmount { 274 case 1: 275 addChips = 8800 276 case 6: 277 addChips = 55600 278 case 12: 279 addChips = 116000 280 case 50: // ¥50 281 addChips = 550000 282 case 100: // ¥100 283 addChips = 1236000 284 } 285 if user, ok := userIDUsers[temp.UserID]; ok { 286 user.doTask(11) // 购买任意数量金币 287 user.doTask(22) // 购买任意数量金币,奖励2000金币 288 //新人任务 购买任意数量金币 1004 289 user.updateRedPacketTask(1004) 290 //初级任务 购买任意数量金币 1013 291 user.updateRedPacketTask(1013) 292 user.WriteMsg(&msg.S2C_PayOK{ 293 Chips: addChips, 294 }) 295 user.baseData.userData.Chips += addChips 296 user.WriteMsg(&msg.S2C_UpdateUserChips{ 297 Chips: user.baseData.userData.Chips, 298 }) 299 WriteChipsRecord(user.baseData.userData, addChips, rechargeChip) 300 if user.isRobot() { 301 upsertRobotData(time.Now().Format("20060102"), bson.M{"$inc": bson.M{"recharge": addChips}}) 302 } 303 } else { 304 updateUserData(temp.UserID, bson.M{"$inc": bson.M{"chips": addChips}}) 305 306 addTaskProgress(temp.UserID, 11) // 购买任意数量金币 307 addTaskProgress(temp.UserID, 22) // 购买任意数量金币,奖励2000金币 308 } 309 }) 310 } 311 312 func startEdyAliPayOrder(outTradeNo string, accountID int, totalAmount float64, cb func()) { 313 skeleton.Go(func() { 314 db := mongoDB.Ref() 315 defer mongoDB.UnRef(db) 316 temp := &struct { 317 UserID int 318 OutTradeNo string 319 Success bool 320 TotalAmount float64 321 CreatedAt int64 322 }{ 323 UserID: accountID+1e8, 324 OutTradeNo: outTradeNo, 325 TotalAmount: totalAmount, 326 CreatedAt: time.Now().Unix(), 327 } 328 _, err := db.DB(DB).C("alipayresult").Upsert(bson.M{"outtradeno": outTradeNo}, bson.M{"$set": temp}) 329 if err != nil { 330 log.Debug("二打一:upsert userID: %v error: %v", accountID, err) 331 } 332 }, func() { 333 if cb != nil { 334 cb() 335 } 336 }) 337 } 338 339 // 验证用户是否存在,存在则存储订单信息 340 func startEdyWXPayOrder(outTradeNo string, accountID, totalFee int, cb func()) { 341 skeleton.Go(func() { 342 db := mongoDB.Ref() 343 defer mongoDB.UnRef(db) 344 temp := &struct { 345 UserID int 346 OutTradeNo string 347 Success bool 348 TotalFee int 349 CreatedAt int64 350 }{ 351 UserID: accountID+1e8, 352 OutTradeNo: outTradeNo, 353 TotalFee: totalFee, 354 CreatedAt: time.Now().Unix(), 355 } 356 _, err := db.DB(DB).C("wxpayresult").Upsert(bson.M{"outtradeno": outTradeNo}, bson.M{"$set": temp}) 357 if err != nil { 358 log.Debug("二打一:upsert userID: %v error: %v", accountID, err) 359 } 360 }, func() { 361 if cb != nil { 362 cb() 363 } 364 }) 365 }