123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- //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-不知道",
- _ => "-" // 默认值
- };
- }
- }
|