//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; /// /// 导出客户端埋点日志 /// 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("客户端埋点日志转存完毕!"); } /// /// 将excel写入文件 /// /// 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); } /// /// redis中的key到 中文工作表名称的映射 /// /// /// 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-不知道", _ => "-" // 默认值 }; } }