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