TargetStatistics.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using NPOI.HSSF.UserModel;
  7. using StackExchange.Redis;
  8. using Newtonsoft.Json.Linq;
  9. using System.IO;
  10. using CSharpUtil;
  11. namespace StatisticsTransfer.tongji
  12. {
  13. class TargetStatistics
  14. {
  15. /// <summary>
  16. /// 指标累计值数据转为execl表
  17. /// </summary>
  18. public static void TargetValToExecl()
  19. {
  20. var mem = Redis.Ins.GetDatabase(1);
  21. int zoneid = 1;
  22. HashEntry[] ctxList = mem.HashGetAll(MemKey_Statistics.TargetStatistics(zoneid));
  23. int length = ctxList.Length;
  24. if (length <= 0)
  25. {
  26. return;
  27. }
  28. Dictionary<string, Dictionary<string, int>> dic = new Dictionary<string, Dictionary<string, int>>();
  29. foreach (var item in ctxList)
  30. {
  31. string type = item.Name;
  32. int num = int.Parse(item.Value);
  33. string[] clist = type.Split('-');
  34. string nType = targetType(clist[0]);
  35. if (dic.ContainsKey(nType))
  36. {
  37. dic[nType].Add(type, num);
  38. }
  39. else
  40. {
  41. var itemDic = new Dictionary<string, int> { { type, num } };
  42. dic[nType] = itemDic;
  43. }
  44. }
  45. HSSFWorkbook workbook = new HSSFWorkbook();
  46. foreach (KeyValuePair<string, Dictionary<string, int>> kv in dic)
  47. {
  48. Dictionary<string, int> dict = kv.Value;
  49. Console.WriteLine("kv--key-----........" + kv.Key);
  50. string tableName = "指标统计表_" + kv.Key;
  51. //创建工作表
  52. var sheet = workbook.CreateSheet(tableName);
  53. var row = sheet.CreateRow(0);
  54. //创建单元格
  55. var cellid = row.CreateCell(0);
  56. cellid.SetCellValue("指标描述信息");
  57. var cellname = row.CreateCell(1);
  58. cellname.SetCellValue("指标类型");
  59. var cellpwd = row.CreateCell(2);
  60. cellpwd.SetCellValue("指标累计值");
  61. int x = 1;
  62. foreach (KeyValuePair<string, int> kt in dict)
  63. {
  64. string type = kt.Key;
  65. int num = kt.Value;
  66. string desc = TargetDesc(type);
  67. //Console.WriteLine("ktttt--type-----........" + type);
  68. //Console.WriteLine("ktttt--name-----........" + desc);
  69. var rowi = sheet.CreateRow(x);
  70. var cdesc = rowi.CreateCell(0);
  71. cdesc.SetCellValue(desc);
  72. var cType = rowi.CreateCell(1);
  73. cType.SetCellValue(type);
  74. var cnum = rowi.CreateCell(2);
  75. cnum.SetCellValue(num);
  76. x += 1;
  77. }
  78. }
  79. string txtName = "指标累计信息表_" + "zone" + zoneid + "-day-" + DateTime.Now.ToString("yyyyMMdd");
  80. string filename = Config.Ins.OutDir + txtName + ".xls";
  81. if (File.Exists(filename))
  82. {
  83. File.Delete(filename);
  84. }
  85. FileStream file = new FileStream(filename, FileMode.CreateNew, FileAccess.Write);
  86. workbook.Write(file);
  87. file.Dispose();
  88. Console.WriteLine("指标累计execl完成........");
  89. }
  90. public static string TargetDesc(string type)
  91. {
  92. string[] sList = type.Split('-');
  93. var mem = Redis.Ins.GetDatabase(1);
  94. string desc = "";
  95. switch (sList[0])
  96. {
  97. case "registerUserNum":
  98. desc = "注册人数累计";
  99. break;
  100. case "comNewGuideUserNum":
  101. desc = "完成新手引导人数累计";
  102. break;
  103. case "unlockbuidId":
  104. string ctx = mem.HashGet(MemKey_Cfg.build, sList[1]);
  105. JObject ctxDic = JObject.Parse(ctx);
  106. string s = ctxDic["name"].ToString();
  107. desc = "累计解锁建筑-" + s + "的人数";
  108. break;
  109. case "mainTaskId_ComUserNum"://主线任务id--完成人数
  110. desc = "完成主线任务id-" + sList[1] + "的人数";
  111. break;
  112. case "shopTaskId_ComUserNum":
  113. desc = "完成悬赏任务id-" + sList[1] + "的人数";
  114. break;
  115. case "shopTaskId_BuyUserNum":
  116. desc = "购买悬赏任务id-" + sList[1] + "的人数";
  117. break;
  118. case "collegeTaskId_ComUserNum":
  119. desc = "完成学院任务id-" + sList[1] + "的人数";
  120. break;
  121. case "collegeCouseId_UnlockUserNum":
  122. desc = "解锁学院课程id-" + sList[1] + "的人数";
  123. break;
  124. case "dailyTaskId_ComUserNum":
  125. desc = "完成日常任务id-" + sList[1] + "的人数";
  126. break;
  127. case "storyGateId_ComUserNum":
  128. desc = "完成剧情关卡id-" + sList[1] + "的人数";
  129. break;
  130. case "storyGateId_BattleNum":
  131. desc = "剧情关卡id-" + sList[1] + "的挑战次数/通关次数";
  132. break;
  133. case "HuanLingShiGateId_ComUserNum":
  134. desc = "完成副本唤灵师关卡id-" + sList[1] + "的人数";
  135. break;
  136. case "HuanLingShiGateId_BattleNum":
  137. desc = "完成副本唤灵师关卡id-" + sList[1] + "的挑战次数/通关次数";
  138. break;
  139. case "WeaponGateId_ComUserNum":
  140. desc = "完成副本武器关卡id-" + sList[1] + "的人数";
  141. break;
  142. case "WeaponGateId_BattleNum":
  143. desc = "完成副本武器关卡id-" + sList[1] + "的挑战次数/通关次数";
  144. break;
  145. case "YanLingGateId_ComUserNum":
  146. desc = "完成副本言灵关卡id-" + sList[1] + "的人数";
  147. break;
  148. case "YanLingGateId_BattleNum":
  149. desc = "完成副本言灵关卡id-" + sList[1] + "的挑战次数/通关次数";
  150. break;
  151. case "userlevel":
  152. desc = "玩家等级为" + sList[1] + "的人数";
  153. break;
  154. case "newUserLotteryDraw_one":
  155. desc = "新手池抽卡单次抽奖的访问频率";
  156. break;
  157. case "newUserLotteryDraw_ten":
  158. desc = "新手池抽卡十连抽的访问频率";
  159. break;
  160. case "yanLingLotteryDraw_one":
  161. desc = "言灵活动祈愿奖池单次抽奖的访问频率";
  162. break;
  163. case "yanLingLotteryDraw_ten":
  164. desc = "言灵活动祈愿奖池十连抽的访问频率";
  165. break;
  166. case "weaponLotteryDraw_one":
  167. desc = "武器活动祈愿奖池单次抽奖的访问频率";
  168. break;
  169. case "weaponLotteryDraw_ten":
  170. desc = "武器活动祈愿奖池十连抽的访问频率";
  171. break;
  172. case "commonLotteryDraw_one":
  173. desc = "常驻祈愿奖池单次抽奖的访问频率";
  174. break;
  175. case "commonLotteryDraw_ten":
  176. desc = "常驻祈愿奖池十连抽的访问频率";
  177. break;
  178. case "HuanLingShiLevel_UserNum":
  179. desc = "唤灵师" + sList[1] + "等级为" + sList[2] + "的人数";
  180. break;
  181. case "HuanLingShiId_UserNum":
  182. desc = "拥有唤灵师" + sList[1] + "的人数";
  183. break;
  184. case "YanLingId_UserNum":
  185. desc = "拥有言灵" + sList[1] + "的人数";
  186. break;
  187. case "YanLingIdLevel_UserNum":
  188. desc = "言灵" + sList[1] + "等级为" + sList[2] + "的人数";
  189. break;
  190. case "WeaponId_UserNum":
  191. desc = "拥有武器" + sList[1] + "的人数";
  192. break;
  193. case "WeaponIdLevel_UserNum":
  194. desc = "武器" + sList[1] + "等级为" + sList[2] + "的人数";
  195. break;
  196. }
  197. return desc;
  198. }
  199. public static string targetType(string t)
  200. {
  201. string type = "";
  202. switch (t)
  203. {
  204. case "registerUserNum":
  205. type = "registerUserNum";
  206. break;
  207. case "comNewGuideUserNum":
  208. type = "comNewGuideUserNum";
  209. break;
  210. case "unlockbuidId":
  211. type = "unlockbuidId";
  212. break;
  213. case "mainTaskId_ComUserNum"://主线任务id--完成人数
  214. type = "mainTask";
  215. break;
  216. case "shopTaskId_ComUserNum":
  217. type = "shopTask";
  218. break;
  219. case "shopTaskId_BuyUserNum":
  220. type = "shopTask";
  221. break;
  222. case "collegeTaskId_ComUserNum":
  223. type = "collegeTask";
  224. break;
  225. case "collegeCouseId_UnlockUserNum":
  226. type = "collegeTask";
  227. break;
  228. case "dailyTaskId_ComUserNum":
  229. type = "dailyTask";
  230. break;
  231. case "storyGateId_ComUserNum":
  232. type = "storyGate";
  233. break;
  234. case "storyGateId_BattleNum":
  235. type = "storyGate";
  236. break;
  237. case "HuanLingShiGateId_ComUserNum":
  238. type = "HuanLingShiGate";
  239. break;
  240. case "HuanLingShiGateId_BattleNum":
  241. type = "HuanLingShiGate";
  242. break;
  243. case "WeaponGateId_ComUserNum":
  244. type = "WeaponGate";
  245. break;
  246. case "WeaponGateId_BattleNum":
  247. type = "WeaponGate";
  248. break;
  249. case "YanLingGateId_ComUserNum":
  250. type = "YanLingGate";
  251. break;
  252. case "YanLingGateId_BattleNum":
  253. type = "YanLingGate";
  254. break;
  255. case "userlevel":
  256. type = "userlevel";
  257. break;
  258. case "newUserLotteryDraw_one":
  259. type = "LotteryDraw";
  260. break;
  261. case "newUserLotteryDraw_ten":
  262. type = "LotteryDraw";
  263. break;
  264. case "yanLingLotteryDraw_one":
  265. type = "LotteryDraw";
  266. break;
  267. case "yanLingLotteryDraw_ten":
  268. type = "LotteryDraw";
  269. break;
  270. case "weaponLotteryDraw_one":
  271. type = "LotteryDraw";
  272. break;
  273. case "weaponLotteryDraw_ten":
  274. type = "LotteryDraw";
  275. break;
  276. case "commonLotteryDraw_one":
  277. type = "LotteryDraw";
  278. break;
  279. case "commonLotteryDraw_ten":
  280. type = "LotteryDraw";
  281. break;
  282. case "HuanLingShiLevel_UserNum":
  283. type = "HuanLingShi";
  284. break;
  285. case "HuanLingShiId_UserNum":
  286. type = "HuanLingShi";
  287. break;
  288. case "YanLingId_UserNum":
  289. type = "YanLing";
  290. break;
  291. case "YanLingIdLevel_UserNum":
  292. type = "YanLing";
  293. break;
  294. case "WeaponId_UserNum":
  295. type = "Weapon";
  296. break;
  297. case "WeaponIdLevel_UserNum":
  298. type = "Weapon";
  299. break;
  300. }
  301. return type;
  302. }
  303. }
  304. }