|
@@ -0,0 +1,119 @@
|
|
|
+//using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using NPOI.HSSF.UserModel;
|
|
|
+using StackExchange.Redis;
|
|
|
+using Newtonsoft.Json.Linq;
|
|
|
+
|
|
|
+namespace StatisticsTransfer.tongji
|
|
|
+{
|
|
|
+ internal class ReportedLogs
|
|
|
+ {
|
|
|
+
|
|
|
+ const int OneTransMaxItem = 1000;
|
|
|
+ /// <summary>
|
|
|
+ /// 导出客户端埋点日志
|
|
|
+ /// </summary>
|
|
|
+ public static void TransLog()
|
|
|
+ {
|
|
|
+
|
|
|
+ var workbook = new HSSFWorkbook();
|
|
|
+ var mem = Redis.Ins.GetDatabase(0);
|
|
|
+
|
|
|
+ MemKey_Statistics.ReportedLogs().ForEach(k =>
|
|
|
+ {
|
|
|
+
|
|
|
+ var sheet = workbook.CreateSheet(GetSheetName(k)); // 创建工作表
|
|
|
+ var rowInfo = mem.ListRange(k, 0, 0);
|
|
|
+ if (rowInfo.Length > 0)
|
|
|
+ {
|
|
|
+ var strJS = rowInfo[0].ToString() ?? "{}";
|
|
|
+ Console.WriteLine(strJS);
|
|
|
+ var json = JObject.Parse(strJS);
|
|
|
+ int i = 0, y = 0;
|
|
|
+ var head_row = sheet.CreateRow(y++); // 标题行
|
|
|
+ foreach (var kv in json)
|
|
|
+ {
|
|
|
+ head_row.CreateCell(i++).SetCellValue(kv.Key); // 设置标题
|
|
|
+ }
|
|
|
+ var start = 0L;
|
|
|
+ var end = 0L;
|
|
|
+ while (mem.ListLength(k) > 0 && end < mem.ListLength(k))
|
|
|
+ {
|
|
|
+ if (OneTransMaxItem < mem.ListLength(k) - start)
|
|
|
+ {
|
|
|
+ end = start + OneTransMaxItem - 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ end = mem.ListLength(k);
|
|
|
+ }
|
|
|
+
|
|
|
+ var arr = mem.ListRange(k, start, end);
|
|
|
+ arr.ToList().ForEach(x =>
|
|
|
+ {
|
|
|
+ var row = sheet.CreateRow(y++);
|
|
|
+ var strJS = x.ToString() ?? "{}";
|
|
|
+ var json = JObject.Parse(strJS);
|
|
|
+ i = 0; // 重置索引
|
|
|
+ foreach (var kv in json)
|
|
|
+ {
|
|
|
+ var v = kv.Value?.ToString() ?? "-";
|
|
|
+ row.CreateCell(i++).SetCellValue(v); // 设置列值
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ start = end;
|
|
|
+ // mem.ListTrim(k, OneTransMaxItem - 1, mem.ListLength(k) - OneTransMaxItem); // 清除已导数据
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }); // 遍历日志
|
|
|
+
|
|
|
+ OutPut(workbook); // 保存到文件
|
|
|
+ Console.WriteLine("客户端埋点日志转存完毕!");
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 将excel写入文件
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="workbook"></param>
|
|
|
+ private static void OutPut(HSSFWorkbook workbook)
|
|
|
+ {
|
|
|
+
|
|
|
+ string txtName = "客户端埋点上报日志表_" + DateTime.Now.ToString("yyyyMMdd");
|
|
|
+
|
|
|
+ string filename = Config.Ins.OutDir + txtName + ".xls";
|
|
|
+ if (File.Exists(filename))
|
|
|
+ {
|
|
|
+ File.Delete(filename);
|
|
|
+ }
|
|
|
+ using var file = new FileStream(filename, FileMode.CreateNew, FileAccess.Write);
|
|
|
+ workbook.Write(file);
|
|
|
+
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// redis中的key到 中文工作表名称的映射
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="k"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private static string GetSheetName(string k) => k switch
|
|
|
+ {
|
|
|
+ "stat-reported-log-e_gate" => "关卡记录",
|
|
|
+ "stat-reported-log-e_task" => "任务记录",
|
|
|
+ "stat-reported-log-e_k_1" => "资源更新完毕",
|
|
|
+ "stat-reported-log-e_k_2" => "手机号注册完毕(龙游)",
|
|
|
+ "stat-reported-log-e_k_3" => "实名认证完毕(龙游)",
|
|
|
+ "stat-reported-log-e_k_4" => "用户登录完成(已加载对应区的玩家数据)",
|
|
|
+ "stat-reported-log-e_k_5" => "进入新手引导场景",
|
|
|
+ "stat-reported-log-e_k_6" => "离开新手引导场景",
|
|
|
+ "stat-reported-log-e_k_7" => "接取了第一个主线剧情(任务)",
|
|
|
+ "stat-reported-log-e_k_8" => "e_k_8-不知道",
|
|
|
+ "stat-reported-log-e_k_9" => "e_k_9-不知道",
|
|
|
+ _ => "-" // 默认值
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+}
|