using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Newtonsoft.Json; using Flyinsono.DBCopy.Tool.Log; using System.Text.RegularExpressions; using System.IO; namespace Flyinsono.DBCopy.Tool.Utilities { public class ProbeAppHepler { public List ApplicationCategoryList { get; set; } public List ChineseList { get; set; } public List EnglishList { get; set; } public ProbeAppHepler() { var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "Language", "chinese.json"); ChineseList = LoadJson(path); var path1 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "Language", "english.json"); EnglishList = LoadJson(path1); LoadFile(); } public UsProbeAppSetting LoadFile() { var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "UsProbeAppSetting.json"); var usProbeAppSettingStr = File.ReadAllText(path); var usProbeAppSetting = JsonConvert.DeserializeObject(usProbeAppSettingStr); ApplicationCategoryList = new List(); foreach (var item in usProbeAppSetting.ApplicationCategoryInfos) { ApplicationCategoryList.AddRange(item.Applications); } return usProbeAppSetting; } public List LoadJson(string path) { var jsonString = File.ReadAllText(path); var cc = JsonConvert.DeserializeObject(jsonString); return cc.ArrayOfLocaleItem.LocaleItem; } static bool ContainsChinese(string input) { return Regex.IsMatch(input, @"\p{IsCJKUnifiedIdeographs}"); } public Tuple GetApplication(string applicationStr,string terminalDataId) { var category = ""; var application = applicationStr; try { var array = applicationStr.Split('-'); if (array.Length == 2) { category = array[0]; application = array[1]; var categorykeyList = new List(); if (ContainsChinese(application))//调用中文表格翻译成英文 { var key = ChineseList.FirstOrDefault(v => v.value == application); if (key != null) { application = key.key; } } if (ContainsChinese(category)) { categorykeyList = ChineseList.Where(v => v.value == category).Select(c => c.key).ToList(); } else { categorykeyList = EnglishList.Where(v => v.value == category).Select(c => c.key).ToList(); } var applicationCategorys = ApplicationCategoryList.Where(v => v.name == application || v.id == application).ToList(); if(applicationCategorys.Count<=0) { if (categorykeyList.Count > 0) { category = categorykeyList.FirstOrDefault(); } } else { var applicationCategory = applicationCategorys.FirstOrDefault(v => categorykeyList.Contains(v.category)); if (applicationCategory != null) { category = applicationCategory.category; application = applicationCategory.name; } } } else { if (applicationStr.Contains("From agent"))//魔盒 FromSonopost { category = "FromSonopost"; application=""; } if (array.Length > 2) { category = array[0]; var categorykeyList = new List(); if (ContainsChinese(category)) { categorykeyList = ChineseList.Where(v => v.value == category).Select(c => c.key).ToList(); } else { categorykeyList = EnglishList.Where(v => v.value == category).Select(c => c.key).ToList(); } var applicationCategorys = ApplicationCategoryList.Where(v => v.name == application || v.id == application).ToList(); if (applicationCategorys.Count <= 0) { if(categorykeyList.Count>0) { category = categorykeyList.FirstOrDefault(); } } int firstDashIndex = applicationStr.IndexOf("-"); string firstPart = applicationStr.Substring(0, firstDashIndex); string secondPart = applicationStr.Substring(firstDashIndex + 1); application = secondPart; } } } catch (System.Exception ex) { Logger.WriteLineError($"GetApplication applicationStr:{applicationStr} ex:{ex}"); } // Logger.WriteLineInfo($"GetApplication terminalDataId:{terminalDataId} applicationStr:{applicationStr} new:{category} {application}"); return new Tuple(category, application); } } public class UsProbeAppSetting { public List ApplicationCategoryInfos { get; set; } } public class ApplicationCategoryInfo { public string id { get; set; } public string name { get; set; } public string default1 { get; set; } public List Applications { get; set; } } public class ApplicationCategory { public string category { get; set; } public string id { get; set; } public string name { get; set; } } public class ArrayOfLocaleData { public ArrayOfLocaleItem ArrayOfLocaleItem { get; set; } } public class ArrayOfLocaleItem { public List LocaleItem { get; set; } } public class LocaleItem { public string key { get; set; } public string value { get; set; } } }