orm_common.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. package model
  2. import (
  3. "encoding/base64"
  4. "rocommon"
  5. "rocommon/service"
  6. "rocommon/util"
  7. "time"
  8. )
  9. const (
  10. SDKPlatform_PC = "PC"
  11. SDKPlatform_Quick = "SDKQuick"
  12. SDKPlatform_Hw_Quick = "SDKHwQuick"
  13. SDKPlatform_NBSDK = "SDKNB"
  14. SDKPlatform_UniSDK = "SDKUni" //SDKUni
  15. SDKPlatform_YouYi = "SDKYOUYI"
  16. SDKPlatform_YouYi_IOS = "SDKYOUYI_IOS"
  17. SDKPlatform_Quick_Android = "Quick_Android"
  18. SDKPlatform_Quick_Ios = "Quick_IOS"
  19. SDKPlatform_Ru_Android = "ZT_Android"
  20. SDKPlatform_Ru_Ios = "ZT_IOS"
  21. SDKPlatform_Dn_Android = "DN_Android" //东南亚
  22. SDKPlatform_Dn_Ios = "DN_IOS"
  23. /* sub_platform
  24. changemeng_xjgl 畅梦包
  25. changemeng_gdt_xjgl 畅梦广通包
  26. quick_wy_gzyw 网易quick
  27. wangyi_youyi 游易网易
  28. */
  29. )
  30. const (
  31. //服务器关闭/开启注册功能
  32. ServerPrefix = "server:reg"
  33. ServerCompetitionPrefix = "server:com"
  34. //地图通关进度排名
  35. MapRankPrefix = "rank:map"
  36. //困难地图通关进度排名
  37. MapHardRankPrefix = "rank_hard:map"
  38. //噩梦地图通关进度排名
  39. MapHard2RankPrefix = "rank_hard2:map"
  40. //历史最大战力
  41. MaxFightPowerRankPrefix = "rank:fight"
  42. //当前积分排行(用来匹配使用)
  43. ArenaRankMatchPrefix = "rank:arenamatch"
  44. //当前积分排行(参加过玩家的积分排行)
  45. ArenaRankPrefix = "rank:arena"
  46. ArenaPreRankPrefix = "rank:arenapre" //上赛季参赛玩家积分排行列表
  47. //积分达到对应段位后的排行(积分下降后从该排行榜中移除)
  48. ArenaTopRankPrefix = "rank:arenatop"
  49. //rank:arenatop1 历史top排行
  50. //competition
  51. //赛季对应大地图排行数据
  52. CompetitionMapRankPrefix = "rank:comp:map" //1
  53. CompetitionScoreRankPrefix = "rank:com:score" //2
  54. CompetitionDuoBaoScoreRankPrefix = "rank:com:wheel" //3
  55. CompetitionZhanBuScoreRankPrefix = "rank:com:zhanbu" //4
  56. CompetitionIdolScoreRankPrefix = "rank:com:idol" //5
  57. CompetitionIdolBoxRankPrefix = "rank:com:idolbox"
  58. CompetitionIdolFansVotePrefix = "rank:com:idolfans"
  59. TowerLevelRankPrefix = "rank:tower"
  60. TowerWjLevelRankPrefix = "rank:towerwj"
  61. TowerFightpowerRankPrefix = "rank:towerfight"
  62. CardCollectRankPrefix = "rank:cardcollect"
  63. KeepSakeCollectRankPrefix = "rank:keepsakecollect"
  64. //战斗记录(不包括过程数据)
  65. BattleRecordMapPrefix = "brecord:map"
  66. //战斗过程详细数据,结构序列化数据,key-val格式用来设置过期使用
  67. BattleRecordDetailPrefix = "brecord"
  68. //验证存储合法性
  69. BattleRecordDetailCheckPrefix = "brecord:id"
  70. //公会base
  71. GuildBasePrefix = "guild:guildbase"
  72. //公会成员
  73. GuildMemberPrefix = "guild:guildmember"
  74. //公会申请列表
  75. GuildApplyPrefix = "guild:guildapply"
  76. //公会日志列表
  77. GuildLogPrefix = "guild:guildlog"
  78. //玩家申请列表
  79. RoleApplyPrefix = "guild:roleapply"
  80. //公会名字索引
  81. GuildNameIndexPrefix = "guild:nameindex"
  82. //公会
  83. GuildRoleToGuildPrefix = "guild:roletoguildindex"
  84. //公会最新ID
  85. GuildCurGuildIdPrefix = "guild:curguildidindex"
  86. //公会推荐列表
  87. GuildRecommendPrefix = "guild:recommendindex"
  88. //公会boss
  89. GuildBossPrefix = "guild:bossindex"
  90. //公会魔王
  91. GuildDemonPrefix = "guild:guilddemon"
  92. //公会魔王奖励
  93. GuildDemonRewardPrefix = "guild:guilddemonreward"
  94. //公会魔王,公会最总伤害排名
  95. GuildDemonGuildPrefix = "guild:demonguildindex"
  96. //公会魔王,公会MVP伤害排名
  97. GuildDemonMVPPrefix = "guild:demonmvpindex"
  98. //爬塔排行榜系统数据
  99. RushTowerPrefix = "tower:rushtower"
  100. //爬塔最终榜单
  101. RushTowerRankPrefix = "tower:rushrank"
  102. //爬塔排行榜系统数据
  103. RushArenaPrefix = "arena:rusharena"
  104. //爬塔最终榜单
  105. RushArenaRankPrefix = "arena:rushrank"
  106. //推图冲榜积分榜
  107. RushMapScorePrefix = "arena:rushmapscore"
  108. //推图冲榜系统数据
  109. RushMapPrefix = "arena:rushmap"
  110. //推图冲榜最终积分榜
  111. RushMapRankPrefix = "arena:rushmaprank"
  112. //勇士积分排行榜
  113. ExpeditionScoreRankPrefix = "rank:expedition"
  114. //宠物冲榜相关
  115. RushPetScorePrefix = "pet:rushpetscore"
  116. //宠物冲榜系统数据
  117. RushPetPrefix = "pet:rushpet"
  118. //宠物冲榜最终数据
  119. RushPetRankPrefix = "pet:rushpetrank"
  120. //宠物冲榜,宠物数据
  121. RushPetDataPrefix = "pet:rushpetdatarank"
  122. //技能冲榜相关
  123. RushSkillScorePrefix = "pet:rushskillscore"
  124. //技能冲榜系统数据
  125. RushSkillPrefix = "pet:rushskill"
  126. //技能冲榜最终数据
  127. RushSkillRankPrefix = "pet:rushskillrank"
  128. //pay
  129. PayOrderPrefix = "pay" //所有订单信息
  130. PayOrderOKIdListPrefix = "payoklist:" //成功但是没有获取奖励的订单id payoklist:uid
  131. //百人道场
  132. DaoChang100Prefix = "dc100" //map有数据表示挑战过该位置(机器人/玩家)
  133. DaoChang100RewardPrefix = "dc100posreward" //list占位奖励列表
  134. RoleDaoChang100Prefix = "role_dc100" //map
  135. RoleDaoChang100LogPrefix = "role_dc100_log"
  136. RoleDaoChang100GuildRankPrefix = "dc100guild"
  137. RoleDaoChang100WheeLogPrefix = "dc100wheel_log" //百人道场转盘日志
  138. //精彩活动
  139. ActivitiesCollectionDataPrefix = "act:num"
  140. )
  141. // 排行榜每日重置时使用,切记!!!
  142. func GetRankScoreDailyReset(val uint64, passTime uint64) uint64 {
  143. //score
  144. var scoreStr = val
  145. if scoreStr >= (1 << 40) {
  146. scoreStr = (1 << 40) - 1
  147. }
  148. //时间修改成以一天内的时间
  149. tmpTime := util.GetCurrentTimeNow()
  150. passTime = uint64(tmpTime.Hour()*60*60+tmpTime.Minute()*60+tmpTime.Second()+tmpTime.Day()) * 1000
  151. scoreStr <<= 24
  152. scoreStr |= 0xfffffffff - passTime/50
  153. return scoreStr
  154. }
  155. func GetValByRankScoreDailyReset(score float64) uint64 {
  156. val := uint64(score) >> 24
  157. return val
  158. }
  159. // 通用排行榜积分处理
  160. func GetRankScoreCommon(val uint64, passTime uint64) uint64 {
  161. //score
  162. var scoreStr = val
  163. if scoreStr >= (1 << 28) {
  164. scoreStr = (1 << 28) - 1
  165. }
  166. scoreStr <<= 36
  167. scoreStr |= 0xfffffffff - passTime/50
  168. return scoreStr
  169. }
  170. func GetValByRankScoreCommon(score float64) uint64 {
  171. val := uint64(score) >> 36
  172. return val
  173. }
  174. type CompetitionType int32
  175. const (
  176. CompetitionType_ZhaoMu CompetitionType = iota + 1 //招募季
  177. CompetitionType_XuanBa //选拔季 贡献道具获取积分
  178. CompetitionType_DuoBao //夺宝季 转盘获取积分
  179. CompetitionType_ZhanBu //占卜季
  180. CompetitionType_Idol //偶像季
  181. )
  182. // 数据库相关操作
  183. func GetMessageFromRedis(module, key string, msg interface{}) error {
  184. ret, err := service.GetRedis().Get(module + key).Result()
  185. if err != nil {
  186. if err != service.NIL {
  187. util.InfoF("GetMessageFromRedis get key=%v err=%v\n", module+key, err)
  188. }
  189. return err
  190. }
  191. if ret == "" {
  192. //util.InfoF("key(%v:%v)->val empty", module, key)
  193. return nil
  194. }
  195. return GetDecodeMessage(msg, ret)
  196. }
  197. func SetMessageToRedis(module, key string, msg interface{}) error {
  198. msgData, err := rocommon.GetCodec().Marshal(msg)
  199. if err != nil {
  200. return err
  201. }
  202. msgStr := base64.StdEncoding.EncodeToString(msgData.([]byte))
  203. ret, err := service.GetRedis().Set(module+key, msgStr, 0).Result()
  204. if err != nil {
  205. util.InfoF("SetMessageToRedis err=%v ret=%v", module+key, ret)
  206. return err
  207. }
  208. //log.Printf("[SetMessageToRedis] [%v]ret:%v\n", module + key, ret)
  209. return nil
  210. }
  211. func SetRankMessageToRedis(key string, msg interface{}) error {
  212. msgData, err := rocommon.GetCodec().Marshal(msg)
  213. if err != nil {
  214. return err
  215. }
  216. msgStr := base64.StdEncoding.EncodeToString(msgData.([]byte))
  217. ret, err := service.GetRedis().Set(key, msgStr, time.Second*1000).Result()
  218. if err != nil {
  219. util.InfoF("SetRankMessageToRedis err=%v ret=%v", key, ret)
  220. return err
  221. }
  222. //log.Printf("[SetMessageToRedis] [%v]ret:%v\n", module + key, ret)
  223. return nil
  224. }
  225. func SetMessageToRedisExpire(module, key string, msg interface{}) error {
  226. msgData, err := rocommon.GetCodec().Marshal(msg)
  227. if err != nil {
  228. return err
  229. }
  230. msgStr := base64.StdEncoding.EncodeToString(msgData.([]byte))
  231. ret, err := service.GetRedis().HSet(module, key, msgStr).Result()
  232. if err != nil {
  233. util.InfoF("SetMessageToRedis err=%v ret=%v", module+key, ret)
  234. return err
  235. }
  236. //log.Printf("[SetMessageToRedis] [%v]ret:%v\n", module + key, ret)
  237. return nil
  238. }
  239. func GetEncodeMessage(msg interface{}) (error, string) {
  240. msgData, err := rocommon.GetCodec().Marshal(msg)
  241. if err != nil {
  242. return err, ""
  243. }
  244. msgStr := base64.StdEncoding.EncodeToString(msgData.([]byte))
  245. return nil, msgStr
  246. }
  247. func GetDecodeMessage(msg interface{}, msgStr string) error {
  248. str, err := base64.StdEncoding.DecodeString(msgStr)
  249. if err != nil {
  250. //log.Printf("[GetMessageFromRedis] [%v] err:%v\n", module + key, err)
  251. return err
  252. }
  253. return rocommon.GetCodec().Unmarshal(str, msg)
  254. }
  255. func ExistKey(key string) bool {
  256. ret, err := service.GetRedis().Exists(key).Result()
  257. if err != nil {
  258. return false
  259. }
  260. return ret > 0
  261. }
  262. func SetDataToRedis(key string, data string) error {
  263. ret, err := service.GetRedis().Set(key, data, 0).Result()
  264. if err != nil {
  265. util.InfoF("[SetDataToRedis] err:[%v]ret:%v", key, ret)
  266. return err
  267. }
  268. //log.Printf("[SetMessageToRedis] [%v]ret:%v\n", module + key, ret)
  269. return nil
  270. }
  271. // 区分不同平台
  272. func ConvertPlatform(openId, platform string) string {
  273. if platform == SDKPlatform_YouYi || platform == SDKPlatform_YouYi_IOS {
  274. //除了quick和nb其他渠道都要加上渠道标识
  275. openId = platform + openId
  276. }
  277. return openId
  278. }