소스 검색

roll房,增加房间结算信息

neo 1 년 전
부모
커밋
4cccb2901a
6개의 변경된 파일88개의 추가작업 그리고 5개의 파일을 삭제
  1. 2 1
      dev/modules/roll.lua
  2. 0 1
      dev/utils/util_order.lua
  3. 71 1
      dev/utils/util_roll.lua
  4. 6 0
      nodes/game/interface/roll.lua
  5. 1 0
      nodes/game/lib/role.lua
  6. 8 2
      nodes/global/service/rollSrv.lua

+ 2 - 1
dev/modules/roll.lua

@@ -25,7 +25,8 @@ function root:mysql_get_init_columns()
25 25
 		awardTime = "int(11) DEFAULT 0 COMMENT '开奖时间'",
26 26
 		conditions = "json COMMENT '参与条件列表'",
27 27
 		itemIdList = "json COMMENT '奖励物品ID列表'",
28
-		signupUidList = "json COMMENT '报名玩家ID列表列表'"
28
+		signupUidList = "json COMMENT '报名玩家ID列表列表'",
29
+		settle = "json COMMENT '结算信息'"
29 30
 	}
30 31
 end
31 32
 

+ 0 - 1
dev/utils/util_order.lua

@@ -76,7 +76,6 @@ function root:is_order_exist(orderId)
76 76
         return false
77 77
     end
78 78
     local sql = string.format("SELECT 1 FROM `mdl_order` WHERE orderNo = '%s';", orderId)
79
-    lib_game_mysql:query(sql)
80 79
     local ok, ret = mysqlUtil:select(sql)
81 80
     if not ok or is_empty(ret) then
82 81
         return false

+ 71 - 1
dev/utils/util_roll.lua

@@ -12,6 +12,7 @@ local redisUtil = require("utils.redisUtil")
12 12
 local util_player = require("utils.util_player")
13 13
 local timeUtil = require("utils.timeUtil")
14 14
 local nodeMgr = require("nodeMgr")
15
+local mysqlUtil = require("utils.mysqlUtil")
15 16
 
16 17
 local userData = require("data.user")
17 18
 local payData = require("data.pay")
@@ -44,7 +45,8 @@ function root:pack_roll_room_info(rid)
44 45
         signupEndTime = redisUtil.hget_int(key, "signupEndTime"),
45 46
         awardTime = redisUtil.hget_int(key, "awardTime"),
46 47
         conditions = redisUtil.hget_json(key, "conditions"),
47
-        itemIdList = redisUtil.hget_json(key, "itemIdList")
48
+        itemIdList = redisUtil.hget_json(key, "itemIdList"),
49
+        settleList = redisUtil.hget_json(key, "settle")
48 50
     }
49 51
     -- 玩家信息
50 52
     local signupUidList = redisUtil.hget_json(key, "signupUidList")
@@ -59,6 +61,7 @@ function root:pack_roll_room_info(rid)
59 61
             end
60 62
         end
61 63
     end
64
+    -- 结算
62 65
 
63 66
     return info
64 67
 end
@@ -78,6 +81,56 @@ function root:pack_roll_room_info_list()
78 81
     end
79 82
     return roomInfoList
80 83
 end
84
+-- 打包 - 玩家房间信息
85
+function root:pack_player_roll_room_info_list(uid)
86
+    if is_empty(uid) then
87
+        return
88
+    end
89
+    local sql = string.format("SELECT * FROM `mdl_roll` WHERE signupUidList like '%%s%';", tostring(uid))
90
+    local ok, ret = mysqlUtil:select(sql)
91
+    log.info("pack_player_roll_room_info_list sql[%s] ret[%s]", sql, tostring(ret))
92
+    if not ok or is_empty(ret) then
93
+        return
94
+    end
95
+    local roomInfoList = {}
96
+    for _, v in ipairs(ret) do
97
+        local id = tonumber(v.id)
98
+        local info = self:pack_roll_room_info(id)
99
+        if is_empty(info) then
100
+            info = {
101
+                roomId = id,
102
+                name = v.name,
103
+                bandShareCode = v.bandShareCode,
104
+                createTime = tonumber(v.createTime),
105
+                showStartTime = tonumber(v.showStartTime),
106
+                signupStartTime = tonumber(v.signupStartTime),
107
+                signupEndTime = tonumber(v.signupEndTime),
108
+                awardTime = tonumber(v.awardTime),
109
+                conditions = cjson_decode(v.conditions),
110
+                itemIdList = cjson_decode(v.itemIdList),
111
+                settleList = cjson_decode(v.settle)
112
+            }
113
+            -- 玩家信息
114
+            local signupUidList = nil
115
+            if not is_empty(v.signupUidList) then
116
+                signupUidList = cjson_decode(v.signupUidList)
117
+            end
118
+            if not is_empty(signupUidList) then
119
+                for _, uid in ipairs(signupUidList) do
120
+                    local playerInfo = util_player:get_base_info(uid)
121
+                    if not is_empty(playerInfo) then
122
+                        if info.signupPlayerList == nil then
123
+                            info.signupPlayerList = {}
124
+                        end
125
+                        table.insert(info.signupPlayerList, playerInfo)
126
+                    end
127
+                end
128
+            end
129
+        end
130
+        table.insert(roomInfoList, info)
131
+    end
132
+    return roomInfoList
133
+end
81 134
 
82 135
 -- 报名
83 136
 function root:sign_up(uid, roomId)
@@ -143,4 +196,21 @@ function root:sign_up(uid, roomId)
143 196
     return code.OK
144 197
 end
145 198
 
199
+-- 备份房间信息
200
+function root:backup_roll_room_info(rid)
201
+    if is_empty(rid) then
202
+        return
203
+    end
204
+    local key = _get_roll_room_key(rid)
205
+    local isExist = lib_game_redis:exists(key)
206
+    if not isExist then
207
+        -- 房间已不存在
208
+        return
209
+    end
210
+    local rollModule = require("modules.roll").new(rid)
211
+    rollModule:backup_to_db()
212
+
213
+    lib_game_redis:del(key)
214
+end
215
+
146 216
 return root

+ 6 - 0
nodes/game/interface/roll.lua

@@ -23,4 +23,10 @@ function root:roll_sign_up(role, msg)
23 23
     return util_roll:sign_up(role.uid, roomId)
24 24
 end
25 25
 
26
+-- 我参与的房间
27
+function root:roll_get_self_room_list(role, msg)
28
+    local roomInfoList = util_roll:pack_player_roll_room_info_list(role.uid)
29
+    return code.OK, {roomList = roomInfoList}
30
+end
31
+
26 32
 return root

+ 1 - 0
nodes/game/lib/role.lua

@@ -57,6 +57,7 @@ end
57 57
 function root:logout_modules()
58 58
     for _, cname in pairs(self.moduleList) do
59 59
         self[cname]:do_logout()
60
+        self[cname]:backup_to_db()
60 61
     end
61 62
     -- 删除玩家session信息
62 63
     sessionData:user_update_cluster_info(self.uid, "gate")

+ 8 - 2
nodes/global/service/rollSrv.lua

@@ -55,9 +55,7 @@ local function _roll_award(rid)
55 55
 	end
56 56
 	local key = _get_room_key(rid)
57 57
 	-- 删除roll信息
58
-	lib_game_redis:del(key)
59 58
 	lib_game_redis:srem(MAIN_KEY, rid)
60
-	lib_game_redis:sismember(_get_room_award_key(), rid)
61 59
 
62 60
 	local signupUidList = redisUtil.hget_json(key, "signupUidList")
63 61
 	if is_empty(signupUidList) then
@@ -80,6 +78,7 @@ local function _roll_award(rid)
80 78
 		table.insert(mapUidItems[uid], {id = id, count = 1})
81 79
 	end
82 80
 	log.info("_roll_award mapUidItems[%s]", tostring(mapUidItems))
81
+	local settle = {}
83 82
 	local name = redisUtil.hget(key, "name")
84 83
 	local title = "roll房结算"
85 84
 	-- 中奖玩家发奖
@@ -92,6 +91,8 @@ local function _roll_award(rid)
92 91
 			cnt = cnt + string.format("\n%s", resAdapt:get_item_name(v.id))
93 92
 		end
94 93
 		util_mail:add_mail(uid, 0, title, cnt, {}, 0, nil, nil, "system")
94
+
95
+		table.insert(settle, {uid = uid, items = items})
95 96
 	end
96 97
 	-- 未中奖玩家邮件
97 98
 	for _, uid in ipairs(signupUidList) do
@@ -100,6 +101,11 @@ local function _roll_award(rid)
100 101
 			util_mail:add_mail(uid, 0, title, cnt, {}, 0, nil, nil, "system")
101 102
 		end
102 103
 	end
104
+	-- 保存结算
105
+	redisUtil.hset(key, "settle", settle)
106
+
107
+	-- 保存记录
108
+	util_roll:backup_roll_room_info(rid)
103 109
 end
104 110
 -- 定时器结束
105 111
 local function _timeout_award()