matchrecord.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package matchbase
  2. import (
  3. "bet24.com/database"
  4. "bet24.com/servers/common"
  5. dbengine "bet24.com/servers/micros/dbengine/proto"
  6. item "bet24.com/servers/micros/item_inventory/proto"
  7. "fmt"
  8. "strings"
  9. )
  10. type MatchRecord struct {
  11. MatchId int
  12. MatchType string // 101 SNG,102 配置赛
  13. MatchName string
  14. GameId int
  15. GameName string
  16. MaxUserCount int // 最多报名人数
  17. TableUserCount int // 每张桌子人数
  18. EnrollFee []item.ItemPack // 报名费
  19. StartTime int
  20. EndTime int
  21. Extra string // 规则
  22. Users []MatchRecord_User
  23. }
  24. type MatchRecord_User struct {
  25. UserId int
  26. Fee []item.ItemPack // 报名费,为空表示免费
  27. EnrollTime int // 报名时间
  28. Rank int // -1表示未参赛只报名
  29. Score int
  30. Prize []item.ItemPack
  31. }
  32. func WriteRecordToDb(mr MatchRecord) {
  33. var serialNumber string
  34. enrollFee := itemPackToString(mr.EnrollFee)
  35. statement := database.NewStatement()
  36. statement.SetNeedReturnValue(false)
  37. statement.SetOpenRecordSet(true)
  38. statement.SetProcName("WS_MatchData_AddStatistics")
  39. statement.AddParamter("@MatchID", database.AdParamInput, database.AdInteger, 4, mr.MatchId)
  40. statement.AddParamter("@MatchType", database.AdParamInput, database.AdVarChar, 64, mr.MatchType)
  41. statement.AddParamter("@GameID", database.AdParamInput, database.AdInteger, 4, mr.GameId)
  42. statement.AddParamter("@MaxUserCount", database.AdParamInput, database.AdInteger, 4, mr.MaxUserCount)
  43. statement.AddParamter("@TableUserCount", database.AdParamInput, database.AdInteger, 4, mr.TableUserCount)
  44. statement.AddParamter("@JoinUserCount", database.AdParamInput, database.AdInteger, 4, len(mr.Users))
  45. statement.AddParamter("@EnrollFee", database.AdParamInput, database.AdVarChar, 256, enrollFee)
  46. statement.AddParamter("@StartTime", database.AdParamInput, database.AdInteger, 4, mr.StartTime)
  47. statement.AddParamter("@EndTime", database.AdParamInput, database.AdInteger, 4, mr.EndTime)
  48. statement.AddParamter("@SerialNumber", database.AdParamOutput, database.AdVarChar, 32, serialNumber)
  49. sqlString := statement.GenSql()
  50. retRows := dbengine.ExecuteRs(sqlString)
  51. rowLen := len(retRows)
  52. if rowLen <= 0 {
  53. return
  54. }
  55. serialNumber = retRows[rowLen-1][0].(string)
  56. writeUserRecordToDb(serialNumber, mr.GameId, mr.Users)
  57. return
  58. }
  59. // 将道具转成字符串
  60. func itemPackToString(ef []item.ItemPack) string {
  61. var builder strings.Builder
  62. for _, v := range ef {
  63. builder.WriteString(fmt.Sprintf("%d,%d;", v.ItemId, v.Count))
  64. }
  65. return builder.String()
  66. }
  67. // 将用户记录写入数据库
  68. func writeUserRecordToDb(serialNumber string, gameID int, users []MatchRecord_User) {
  69. if serialNumber == "" {
  70. return
  71. }
  72. for _, v := range users {
  73. var itemID, itemCount int
  74. if len(v.Fee) > 0 {
  75. itemID = v.Fee[0].ItemId
  76. itemCount = v.Fee[0].Count
  77. }
  78. prizeStr := itemPackToString(v.Prize)
  79. enrollTime := common.TimeStampToString(int64(v.EnrollTime))
  80. saveUserDataToDb(gameID, v.Rank, v.UserId, itemID, itemCount, v.Score, serialNumber, enrollTime, prizeStr)
  81. }
  82. }
  83. // 将用户数据保存到数据库
  84. func saveUserDataToDb(gameID, rank, userID, itemID, itemCount, score int, serialNumber, enrollTime, prize string) {
  85. statement := database.NewStatement()
  86. statement.SetNeedReturnValue(false)
  87. statement.SetOpenRecordSet(true)
  88. statement.SetProcName("WS_MatchData_AddUser")
  89. statement.AddParamter("@SerialNumber", database.AdParamInput, database.AdVarChar, 32, serialNumber)
  90. statement.AddParamter("@GameID", database.AdParamInput, database.AdInteger, 4, gameID)
  91. statement.AddParamter("@Rank", database.AdParamInput, database.AdInteger, 4, rank)
  92. statement.AddParamter("@UserID", database.AdParamInput, database.AdInteger, 4, userID)
  93. statement.AddParamter("@ItemID", database.AdParamInput, database.AdInteger, 4, itemID)
  94. statement.AddParamter("@ItemCount", database.AdParamInput, database.AdInteger, 4, itemCount)
  95. statement.AddParamter("@EnrollTime", database.AdParamInput, database.AdVarChar, 20, enrollTime)
  96. statement.AddParamter("@Score", database.AdParamInput, database.AdInteger, 4, score)
  97. statement.AddParamter("@Prize", database.AdParamInput, database.AdVarChar, 128, prize)
  98. sqlString := statement.GenSql()
  99. dbengine.Execute(sqlString)
  100. return
  101. }