浏览代码

新增明细记录

huangyuhao 1 年之前
父节点
当前提交
4f85fc433a

+ 54 - 11
common/service/statisticLogSrv.lua

@@ -5,12 +5,13 @@ local baseService = require("baseService")
5 5
 local timeUtil = require "utils.timeUtil"
6 6
 local serverLogUtil = require "utils.serverLogUtil"
7 7
 local lib_game_redis = require("lib_game_redis")
8
+local util_record_item = require("utils.util_record_item")
8 9
 
9 10
 local moduleData = require("data.module")
10 11
 
11 12
 local SEND_COUNT, ACTIVE_SEND_COUNT
12 13
 if IS_TEST then
13
-    SEND_COUNT, ACTIVE_SEND_COUNT = 1, 10
14
+    SEND_COUNT, ACTIVE_SEND_COUNT = 2, 10
14 15
 else
15 16
     SEND_COUNT, ACTIVE_SEND_COUNT = 50, 100
16 17
 end
@@ -18,7 +19,9 @@ end
18 19
 local logQueue = {}
19 20
 local lTimerLogSync = nil -- 同步日志定时器
20 21
 local timeSync = 600 * 100
21
-local tabKeyFind = table.key_find
22
+-- 资源变化日志
23
+local itemList = {}
24
+local timerItem = nil
22 25
 
23 26
 local logAddr
24 27
 local function l_sned_logs_to_resource(logList)
@@ -62,16 +65,63 @@ local function l_sync_log_data()
62 65
     end
63 66
 end
64 67
 
68
+-- 写入数据库
69
+local function _write_to_db(stop)
70
+    -- 销毁定时器
71
+    if timerItem then
72
+        timerItem.delete()
73
+        timerItem = nil
74
+    end
75
+
76
+    local count = 0
77
+    if stop then
78
+        count = #itemList
79
+    else
80
+        count = math.min(SEND_COUNT, #itemList)
81
+    end
82
+
83
+    local list = {}
84
+    for i = 1, count do
85
+        table.insert(list, table.remove(itemList, 1))
86
+    end
87
+
88
+    if #list <= 0 then
89
+        return
90
+    end
91
+    util_record_item:add_item_record(list)
92
+
93
+    if #itemList > 0 then
94
+        if timerItem == nil then
95
+            timerItem = create_timeout(timeSync, _write_to_db)
96
+        end
97
+    end
98
+end
99
+-- 同步资源日志
100
+local function l_sync_item_data()
101
+    if #itemList >= SEND_COUNT then
102
+        _write_to_db()
103
+    else
104
+        if timerItem == nil then
105
+            timerItem = create_timeout(timeSync, _write_to_db)
106
+        end
107
+    end
108
+end
109
+
65 110
 local function l_sync_active_log_data(filename, dataStr)
66 111
     l_sned_logs_to_resource({{filename = filename, dataStr = dataStr}})
67 112
 end
68 113
 
69 114
 local root = {}
70 115
 
71
-function root.add_file_log(key, date, dataStr)
116
+function root.add_file_log(key, date, cnt)
72 117
     local filename = string.format("%s-%s", key, date)
73
-    table.insert(logQueue, {filename = filename, dataStr = dataStr})
118
+    table.insert(logQueue, {filename = filename, dataStr = cnt})
74 119
     l_sync_log_data()
120
+    -- 资源变化
121
+    if key == "resource" then
122
+        table.insert(itemList, cnt)
123
+        l_sync_item_data()
124
+    end
75 125
 end
76 126
 
77 127
 -- 活跃用户埋点
@@ -80,13 +130,6 @@ local bagData = require("data.bag")
80 130
 local function l_log_user_active(uid, date)
81 131
     local lastLoginTime = timeUtil.toString(moduleData:hget_int(uid, "player", "lastLoginTime"))
82 132
 
83
-    local mainProgress = ""
84
-    do
85
-        local maxChapterId = moduleData:hget_int(uid, "tb_pve_stars", "maxChapterId") or 1 --
86
-        local passLevel = moduleData:hget_int(uid, "tb_pve_stars", "passLevel") or 0 --
87
-        mainProgress = maxChapterId .. "-" .. passLevel
88
-    end
89
-
90 133
     local data = {
91 134
         date,
92 135
         uid or 0,

+ 1 - 2
common/utils/serverLogUtil.lua

@@ -7,7 +7,6 @@ local root = {}
7 7
 
8 8
 local function writeServerLog(key, date, data)
9 9
     assert(key and date)
10
-    local file = string.format("%s-%s", key, date)
11 10
     skynet.send("statisticLog", "lua", "add_file_log", key, date, data)
12 11
 end
13 12
 
@@ -60,7 +59,7 @@ function root.logResource(uid, eventId, itemId, resChgs, resResult, channel, ban
60 59
 
61 60
     local cnt =
62 61
         string.format(
63
-        "%s;%s;%s;%s;%s;%s;%s;%s;%s;",
62
+        "%s;%s;%s;%s;%s;%s;%s;%s;%s",
64 63
         tostring(date),
65 64
         tostring(dateStr),
66 65
         tostring(uid),

+ 117 - 0
dev/utils/util_record_item.lua

@@ -0,0 +1,117 @@
1
+--[[
2
+Descripttion:明细
3
+version:
4
+Author: Neo,Huang
5
+Date: 2023-11-22 22:52:54
6
+LastEditors: Neo,Huang
7
+LastEditTime: 2023-11-22 23:29:30
8
+--]]
9
+local mysqlUtil = require("utils.mysqlUtil")
10
+local timeUtil = require("utils.timeUtil")
11
+local gameConst = require("const.gameConst")
12
+
13
+local root = {}
14
+
15
+-- 新增记录
16
+function root:add_item_record(list)
17
+    if is_empty(list) then
18
+        return
19
+    end
20
+    -- 2023-11-22;2023-11-22 20:35:51;1000001;nil;999;shop-pay-10203;102;680;3400;
21
+    local columns = "(`createTime`,`uid`,`bandShareCode`,`channel`,`eventId`,`itemId`,`delta`,`remainCount`)"
22
+    local values = nil
23
+    for _, v in ipairs(list) do
24
+        local params = string.split(v, ";")
25
+        local value =
26
+            string.format(
27
+            "(%s,%s,'%s',%s,'%s',%s,%s,%s)",
28
+            getTimestamp(params[2]), -- createTime
29
+            tostring(params[3]), -- uid
30
+            tostring(params[4]), -- bandShareCode
31
+            tostring(params[5]), -- channel
32
+            tostring(params[6]), -- eventId
33
+            tostring(params[7]), -- itemId
34
+            tostring(params[8]), -- delta
35
+            tostring(params[9]) -- remainCount
36
+        )
37
+        if values == nil then
38
+            values = value
39
+        else
40
+            values = string.format("%s,%s", values, value)
41
+        end
42
+    end
43
+
44
+    local sql = string.format("INSERT INTO `mdl_itemrecord` %s VALUES %s; ", columns, values)
45
+
46
+    local ok = mysqlUtil:insert(sql)
47
+    log.info("add_battle_record sql[%s] ok[%s]", tostring(sql), tostring(ok))
48
+    return ok
49
+end
50
+
51
+-- 打包明细
52
+function root:pack_item_record_list(data)
53
+    local list = {}
54
+    if is_empty(data) then
55
+        return list
56
+    end
57
+    for _, v in ipairs(data) do
58
+        local info = {
59
+            id = tonumber(v.id),
60
+            createTime = tonumber(v.createTime),
61
+            reason = v.eventId,
62
+            itemId = tonumber(v.itemId),
63
+            delta = tonumber(v.delta),
64
+            remainCount = tonumber(v.remainCount)
65
+        }
66
+        table.insert(list, info)
67
+    end
68
+    return list
69
+end
70
+
71
+-- 获取流水记录
72
+function root:get_gold_record(uid, lastTime)
73
+    if is_empty(uid) then
74
+        return
75
+    end
76
+    lastTime = lastTime or timeUtil.now()
77
+    local count = 20
78
+    local sql =
79
+        string.format(
80
+        "SELECT * FROM `mdl_itemrecord` WHERE `uid`=%s and (`itemId`=%s or `itemId`=%s) `createTime`<%s ORDER BY createTime DESC limit %s",
81
+        tostring(uid),
82
+        tostring(gameConst.ITEM_ID.GOLD),
83
+        tostring(gameConst.ITEM_ID.DIAMOND),
84
+        tostring(lastTime),
85
+        tostring(count)
86
+    )
87
+    local ok, ret = mysqlUtil:select(sql)
88
+    if not ok or is_empty(ret) then
89
+        return
90
+    end
91
+    return self:pack_item_record_list(ret)
92
+end
93
+
94
+-- 获取流水记录
95
+function root:get_wapon_record(uid, lastTime)
96
+    if is_empty(uid) then
97
+        return
98
+    end
99
+    lastTime = lastTime or timeUtil.now()
100
+    local count = 20
101
+    local sql =
102
+        string.format(
103
+        "SELECT * FROM `mdl_itemrecord` WHERE `uid`=%s and `itemId`!=%s and `itemId`!=%s `createTime`<%s ORDER BY createTime DESC limit %s",
104
+        tostring(uid),
105
+        tostring(gameConst.ITEM_ID.GOLD),
106
+        tostring(gameConst.ITEM_ID.DIAMOND),
107
+        tostring(lastTime),
108
+        tostring(count)
109
+    )
110
+    local ok, ret = mysqlUtil:select(sql)
111
+    if not ok or is_empty(ret) then
112
+        return
113
+    end
114
+    return self:pack_item_record_list(ret)
115
+end
116
+
117
+return root

+ 0 - 1
dev/utils/util_user.lua

@@ -9,7 +9,6 @@ LastEditTime: 2022-05-26 19:46:41
9 9
 local skynet = require("skynet")
10 10
 local serverLogUtil = require("utils.serverLogUtil")
11 11
 local nodeMgr = require("nodeMgr")
12
-local code = require("code")
13 12
 
14 13
 local moduleData = require("data.module")
15 14
 local userData = require("data.user")

+ 20 - 0
nodes/game/interface/user.lua

@@ -1,4 +1,12 @@
1 1
 --[[
2
+Descripttion:
3
+version:
4
+Author: Neo,Huang
5
+Date: 2023-11-15 22:34:35
6
+LastEditors: Neo,Huang
7
+LastEditTime: 2023-11-23 00:10:07
8
+--]]
9
+--[[
2 10
 Descripttion:玩家
3 11
 version:
4 12
 Author: Neo,Huang
@@ -6,6 +14,7 @@ Date: 2023-11-15 22:34:35
6 14
 LastEditors: Neo,Huang
7 15
 LastEditTime: 2023-11-15 23:19:26
8 16
 --]]
17
+local skynet = require("skynet")
9 18
 local code = require "code"
10 19
 local timeUtil = require("utils.timeUtil")
11 20
 local util_user = require("utils.util_user")
@@ -76,4 +85,15 @@ function root:user_identity_update_info(role, msg)
76 85
     return role.user:itf_identity(role, msg)
77 86
 end
78 87
 
88
+-- 明细 - 流水
89
+function root:user_item_detail_gold(role, msg)
90
+    skynet.send(".srvItemRecord", "lua", "get_item_detail_gold", role.uid, msg.lastTime)
91
+    return code.OK
92
+end
93
+-- 明细 - 饰品
94
+function root:user_item_detail_wapon(role, msg)
95
+    skynet.send(".srvItemRecord", "lua", "get_item_detail_wapon", role.uid, msg.lastTime)
96
+    return code.OK
97
+end
98
+
79 99
 return root

+ 2 - 0
nodes/game/main.lua

@@ -28,6 +28,8 @@ skynet.start(
28 28
         skynet.uniqueservice("srvConfig")
29 29
         -- agent管理器
30 30
         skynet.uniqueservice("srvAgentMgr")
31
+        -- 明细
32
+        skynet.uniqueservice("srvItemRecord")
31 33
 
32 34
         -- 集群
33 35
         init_nodes:init_cluster()

+ 54 - 0
nodes/game/service/srvItemRecord.lua

@@ -0,0 +1,54 @@
1
+--[[
2
+Descripttion:明细
3
+version:
4
+Author: Neo,Huang
5
+Date: 2023-11-22 23:59:15
6
+LastEditors: Neo,Huang
7
+LastEditTime: 2023-11-23 00:00:24
8
+--]]
9
+local baseService = require("baseService")
10
+local util_record_item = require("utils.util_record_item")
11
+local util_user = require("utils.util_user")
12
+
13
+local root = {}
14
+
15
+-- 获取流水
16
+function root.get_item_detail_gold(uid, lastTime)
17
+	if is_empty(uid) then
18
+		return
19
+	end
20
+	local list = util_record_item:get_gold_record(uid, lastTime)
21
+	if list == nil then
22
+		return
23
+	end
24
+	local pack = {
25
+		count = #list,
26
+		list = list
27
+	}
28
+	util_user:user_proto_notify(uid, "on_user_item_detail_gold", pack)
29
+end
30
+-- 获取饰品
31
+function root.get_item_detail_wapon(uid, lastTime)
32
+	if is_empty(uid) then
33
+		return
34
+	end
35
+	local list = util_record_item:get_wapon_record(uid, lastTime)
36
+	if list == nil then
37
+		return
38
+	end
39
+	local pack = {
40
+		count = #list,
41
+		list = list
42
+	}
43
+	util_user:user_proto_notify(uid, "on_user_item_detail_wapon", pack)
44
+end
45
+
46
+function root.onStart()
47
+	return true
48
+end
49
+
50
+function root.onStop()
51
+	return true
52
+end
53
+
54
+baseService.start(root, ".srvItemRecord")