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  }