orm_activity.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package model
  2. import (
  3. "rocommon/service"
  4. "rocommon/util"
  5. "roserver/baseserver/model"
  6. "roserver/serverproto"
  7. "strconv"
  8. )
  9. const (
  10. RoleActivityDataSignPrefix = "role_activity_sign_" //基础结构数据
  11. //当前开放的活动列表
  12. RoleActivityDataOpenListPrefix = "role_activity_openlist_"
  13. //砸蛋大奖消息
  14. RoleActivitySmashEggsPrefix = "role_activity_smasheggs_"
  15. )
  16. func GetRoleActivityDataFromRedis(uid uint64, roleActivity *serverproto.RoleActivity) error {
  17. err := GetSystemDataFromRedis(RoleActivityDataSignPrefix, uid, roleActivity)
  18. if err != nil && err != service.NIL {
  19. util.InfoF("uid=%v GetRoleFromRedis RoleActivitySign err=%v", uid, err)
  20. return err
  21. }
  22. uidStr := strconv.FormatUint(uid, 10)
  23. //过期删除的活动是否误操作
  24. nowTimeMs := util.GetTimeMilliseconds()
  25. var tmpExpiredActivityList []int32
  26. bChange := false
  27. for idx := 0; idx < len(roleActivity.ExpiredActivityList); idx++ {
  28. expiredActivityId := roleActivity.ExpiredActivityList[idx]
  29. activityIdStr := strconv.Itoa(int(expiredActivityId))
  30. //base data
  31. detailData := &serverproto.ActivitiesDetailData{}
  32. tmpKeyStr := RoleActivityDataPrefix + uidStr + ":" + activityIdStr
  33. baseStr, err1 := service.GetRedis().HGet(tmpKeyStr, "base").Result()
  34. if err1 != nil {
  35. util.InfoF("uid=%v GetRoleFromRedis RoleActivity base err=%v", tmpKeyStr, err)
  36. tmpExpiredActivityList = append(tmpExpiredActivityList, expiredActivityId)
  37. continue
  38. }
  39. model.GetDecodeMessage(detailData, baseStr)
  40. if detailData.EndTime <= nowTimeMs {
  41. tmpExpiredActivityList = append(tmpExpiredActivityList, expiredActivityId)
  42. } else {
  43. bChange = true
  44. //没有过期重新放入开启列表中
  45. //添加到开启活动列表中
  46. if !service.GetRedis().SIsMember(RoleActivityDataOpenListPrefix+uidStr, activityIdStr).Val() {
  47. service.GetRedis().SAdd(RoleActivityDataOpenListPrefix+uidStr, activityIdStr)
  48. }
  49. }
  50. }
  51. if bChange {
  52. //重新保存
  53. roleActivity.ExpiredActivityList = tmpExpiredActivityList
  54. err := SetSystemDataToRedis(RoleActivityDataSignPrefix, uid, roleActivity)
  55. if err != nil {
  56. util.InfoF("uid=%v SSActivityDataSaveReqSign save err=%v", uid, err)
  57. }
  58. }
  59. //砸蛋大奖消息获取
  60. smashEggsMsg := &serverproto.SSActivitySmashEggsMsgSaveNtf{}
  61. err = model.GetMessageFromRedis(RoleActivitySmashEggsPrefix, "", smashEggsMsg)
  62. if err == nil {
  63. roleActivity.ActMsgList = smashEggsMsg.ActMsgList
  64. }
  65. //正常流程处理
  66. retList := service.GetRedis().SMembers(RoleActivityDataOpenListPrefix + uidStr).Val()
  67. for idx := 0; idx < len(retList); idx++ {
  68. openActivityId, _ := strconv.Atoi(retList[idx])
  69. if openActivityId <= 0 {
  70. service.GetRedis().SRem(RoleActivityDataOpenListPrefix+uidStr, retList[idx])
  71. continue
  72. }
  73. //base data
  74. detailData := &serverproto.ActivitiesDetailData{}
  75. tmpKeyStr := RoleActivityDataPrefix + uidStr + ":" + retList[idx]
  76. baseStr, err1 := service.GetRedis().HGet(tmpKeyStr, "base").Result()
  77. if err1 != nil {
  78. util.InfoF("uid=%v GetRoleFromRedis RoleActivity base err=%v", tmpKeyStr, err)
  79. continue
  80. }
  81. model.GetDecodeMessage(detailData, baseStr)
  82. detailData.ActivitiesId = int32(openActivityId)
  83. //task data
  84. retList := service.GetRedis().HGetAll(tmpKeyStr).Val()
  85. for filedStr, msgStr := range retList {
  86. if filedStr == "base" {
  87. continue
  88. }
  89. if detailData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_14_Days_Task) {
  90. if detailData.FortnightDays == nil {
  91. detailData.FortnightDays = &serverproto.ActivitiesFortnightDays{}
  92. }
  93. taskInfo := &serverproto.TaskData{}
  94. err = model.GetDecodeMessage(taskInfo, msgStr)
  95. if err == nil {
  96. detailData.FortnightDays.TaskList = append(detailData.FortnightDays.TaskList, taskInfo)
  97. }
  98. } else if detailData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_King) {
  99. taskInfo := &serverproto.TaskData{}
  100. err = model.GetDecodeMessage(taskInfo, msgStr)
  101. if err == nil {
  102. detailData.KingTask = append(detailData.KingTask, taskInfo)
  103. }
  104. } else if detailData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_BT_ROCoinRecharge) {
  105. //BT task data
  106. if detailData.BtRocoinData == nil {
  107. detailData.BtRocoinData = &serverproto.ActivityBTROCoin{}
  108. }
  109. taskInfo := &serverproto.TaskData{}
  110. err = model.GetDecodeMessage(taskInfo, msgStr)
  111. if err == nil {
  112. if taskInfo.TaskType == int32(model.BTTaskRefreshType_Day) {
  113. detailData.BtRocoinData.DailyTaskList = append(detailData.BtRocoinData.DailyTaskList, taskInfo)
  114. } else if taskInfo.TaskType == int32(model.BTTaskRefreshType_Week) {
  115. detailData.BtRocoinData.WeekTaskList = append(detailData.BtRocoinData.WeekTaskList, taskInfo)
  116. }
  117. }
  118. } else if detailData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_BT_ZhenJiaRecharge) {
  119. // BT task data
  120. taskInfo := &serverproto.TaskData{}
  121. err = model.GetDecodeMessage(taskInfo, msgStr)
  122. if err == nil {
  123. detailData.BtZhenjiaRechargeTaskList = append(detailData.BtZhenjiaRechargeTaskList, taskInfo)
  124. }
  125. }
  126. }
  127. roleActivity.ActivityDataList = append(roleActivity.ActivityDataList, detailData)
  128. }
  129. return nil
  130. }
  131. func SetRoleActivityDataToRedis(uid uint64, msg *serverproto.SSActivityDataSaveReq) {
  132. err := SetSystemDataToRedis(RoleActivityDataSignPrefix, uid, msg.RoleActivity)
  133. if err != nil {
  134. util.InfoF("uid=%v SSActivityDataSaveReqSign save err=%v", uid, err)
  135. }
  136. //role_activity_[uid]:[activityId]
  137. uidStr := strconv.FormatUint(uid, 10)
  138. keyStr := RoleActivityDataPrefix + uidStr
  139. for idx := 0; idx < len(msg.DelActivityList); idx++ {
  140. activityIdStr := strconv.Itoa(int(msg.DelActivityList[idx]))
  141. //service.GetRedis().Del(keyStr + ":" + activityIdStr) 删除列表但是不删除原始数据,供查询使用
  142. service.GetRedis().SRem(RoleActivityDataOpenListPrefix+uidStr, activityIdStr)
  143. }
  144. for idx := 0; idx < len(msg.ChangeActivityList); idx++ {
  145. tmpData := msg.ChangeActivityList[idx]
  146. activityIdStr := strconv.Itoa(int(tmpData.ActivitiesId))
  147. tmpKeyStr := keyStr + ":" + activityIdStr
  148. //添加到开启活动列表中
  149. if !service.GetRedis().SIsMember(RoleActivityDataOpenListPrefix+uidStr, activityIdStr).Val() {
  150. service.GetRedis().SAdd(RoleActivityDataOpenListPrefix+uidStr, activityIdStr)
  151. }
  152. //活动本身基础数据(有时候基础数据不变)
  153. if tmpData.ActivityData != nil {
  154. errBase, msgData := model.GetEncodeMessage(tmpData.ActivityData)
  155. if errBase == nil {
  156. service.GetRedis().HSet(tmpKeyStr, "base", msgData)
  157. }
  158. }
  159. //任务变更数据
  160. for k := 0; k < len(tmpData.ChangeTaskList); k++ {
  161. taskIdStr := strconv.Itoa(int(tmpData.ChangeTaskList[k].TaskId))
  162. errTask, msgData := model.GetEncodeMessage(tmpData.ChangeTaskList[k])
  163. if errTask == nil {
  164. service.GetRedis().HSet(tmpKeyStr, taskIdStr, msgData)
  165. }
  166. }
  167. //删除任务数据
  168. for k := 0; k < len(tmpData.DelTaskList); k++ {
  169. taskIdStr := strconv.Itoa(int(tmpData.DelTaskList[k]))
  170. service.GetRedis().HDel(tmpKeyStr, taskIdStr)
  171. }
  172. }
  173. }
  174. func SetRoleActivitySmashEggsMsgToRedis(msg *serverproto.SSActivitySmashEggsMsgSaveNtf) {
  175. err := model.SetMessageToRedis(RoleActivitySmashEggsPrefix, "", msg)
  176. if err != nil {
  177. util.InfoF("SSActivityDataSaveReqSign save err=%v", err)
  178. }
  179. }