From e346f99dc973d4ce79833155e76175e223ddc139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=ED=8C=90=EB=8F=8C?= Date: Thu, 22 Aug 2024 19:04:11 +0900 Subject: [PATCH] =?UTF-8?q?excel=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Server/Git/ExcelManager.cs | 102 ++++++++++++++++----------- Server/SQL/ConsumableItem.cs | 2 +- Server/SQL/DeckUnitInfo.cs | 2 +- Server/SQL/Equipment.cs | 2 +- Server/SQL/EtcItem.cs | 2 +- Server/SQL/Excel/RandomRewardData.cs | 4 +- Server/SQL/User.cs | 2 - Server/Scheduler/SessionScheduler.cs | 44 ++++++------ Server/Server.csproj | 16 ++--- Server/Service/BuyShopItem.cs | 3 +- Server/Service/NicknameChange.cs | 2 +- Server/System/Redis.cs | 39 +++++----- Server/System/Statics.cs | 12 ++-- Server/System/SystemMain.cs | 4 +- 14 files changed, 123 insertions(+), 113 deletions(-) diff --git a/Server/Git/ExcelManager.cs b/Server/Git/ExcelManager.cs index 0525c79..793d9a8 100644 --- a/Server/Git/ExcelManager.cs +++ b/Server/Git/ExcelManager.cs @@ -1,4 +1,4 @@ -using Aspose.Cells; +using ClosedXML.Excel; using NLog; namespace Server.Git @@ -57,62 +57,80 @@ namespace Server.Git { return ExcelLoad(_pathFile); } - public bool ExcelLoad(string path)//엑셀 로드 + public bool ExcelLoad(string pathFile) { - // 엑셀 파일 불러오기 - Workbook wb = new Workbook(_pathFile); - - // 모든 워크시트 가져오기 - WorksheetCollection collection = wb.Worksheets; - - _sheets = new List(); - - // 모든 워크시트 반복 + // 엑셀 파일을 엽니다. try { - for (int worksheetIndex = 0; worksheetIndex < collection.Count; worksheetIndex++) + using (var workbook = new XLWorkbook(pathFile)) { - //변수이름 - List variable = new List(); - //서버용인지 클라용인지 나뉘는 타입 - List dataEnum = new List(); - //변수 타입 - List type = new List(); - Dictionary> dicViewer = new Dictionary>(); + _sheets = new List(); - // 인덱스를 사용하여 워크시트 가져오기 - Worksheet worksheet = collection[worksheetIndex]; - - // 행과 열의 수 얻기 - int vertical = worksheet.Cells.MaxDataRow; - int horizontal = worksheet.Cells.MaxDataColumn; - - //변수 이름과 타입 삽입 - for (int n = 0; n <= horizontal; n++) + // 모든 워크시트를 반복합니다. + foreach (var worksheet in workbook.Worksheets) { - variable.Add((string)worksheet.Cells[0, n].Value); - type.Add(((string)worksheet.Cells[3, n].Value).ToLower()); - dataEnum.Add(((string)worksheet.Cells[2, n].Value).ToLower()); - } + // 변수 이름, 데이터 타입, 데이터 열거형, 딕셔너리 초기화 + var variable = new List(); + var dataEnum = new List(); + var type = new List(); + var dicViewer = new Dictionary>(); - bool isIndex = variable[0] == "index"; + // 행과 열의 수 얻기 + var vertical = worksheet.RangeUsed().RowCount() - 1; // 데이터가 있는 행의 수 + var horizontal = worksheet.RangeUsed().ColumnCount() - 1; // 데이터가 있는 열의 수 - for (int n = 4; n <= vertical; n++) - { - Dictionary dataList = new Dictionary(); - for (int m = 0; m <= horizontal; m++) + // 변수 이름과 타입을 삽입 + for (int n = 0; n <= horizontal; n++) { - dataList.Add(variable[m], worksheet.Cells[n, m].Value); + variable.Add(worksheet.Cell(1, n + 1).GetValue()); + type.Add(worksheet.Cell(4, n + 1).GetValue().ToLower()); + dataEnum.Add(worksheet.Cell(3, n + 1).GetValue().ToLower()); } - dicViewer.Add((int)(isIndex ? worksheet.Cells[n, 0].Value : n - 4), dataList); + + bool isIndex = variable[0] == "index"; + + for (int n = 5; n <= vertical + 1; n++) + { + var dataList = new Dictionary(); + for (int m = 0; m <= horizontal; m++) + { + object getData; + switch (type[m]) + { + case "bool": + getData = (worksheet.Cell(n, m + 1).Value.ToString() == "true"); + break; + case "int": + case "enum": + getData = (int)worksheet.Cell(n, m + 1).Value; + break; + case "long": + getData = (long)worksheet.Cell(n, m + 1).Value; + break; + case "float": + getData = (float)worksheet.Cell(n, m + 1).Value; + break; + case "time": + getData = (DateTime)worksheet.Cell(n, m + 1).Value; + break; + default: + getData = worksheet.Cell(n, m + 1).Value.ToString(); + break; + } + dataList.Add(variable[m], getData); + } + dicViewer.Add((long)(isIndex ? dataList["index"] : n - 4), dataList); + } + + var sheet = new Sheet(worksheet.Name, variable, dataEnum, type, dicViewer); + _sheets.Add(sheet); } - Sheet sheet = new Sheet(worksheet.Name, variable, dataEnum, type, dicViewer); - _sheets.Add(sheet); } } catch (Exception ex) { - logger.Error(ex); + // 로그 또는 예외 처리 + Console.WriteLine($"Error loading Excel file: {ex.Message}"); return false; } diff --git a/Server/SQL/ConsumableItem.cs b/Server/SQL/ConsumableItem.cs index 821e419..1c74832 100644 --- a/Server/SQL/ConsumableItem.cs +++ b/Server/SQL/ConsumableItem.cs @@ -12,7 +12,7 @@ namespace Server.SQL public int id { get; set; } [JsonIgnore] public int user_id { get; set; } - public int consumable_item_data_id { get; set; } + public long consumable_item_data_id { get; set; } public int count { get; set; } } diff --git a/Server/SQL/DeckUnitInfo.cs b/Server/SQL/DeckUnitInfo.cs index 54afffe..8239e02 100644 --- a/Server/SQL/DeckUnitInfo.cs +++ b/Server/SQL/DeckUnitInfo.cs @@ -12,7 +12,7 @@ namespace Server.SQL public int id { get; set; } [JsonIgnore] public int user_id { get; set; } - public int unit_data_id { get; set; } + public long unit_data_id { get; set; } public int equip0_id { get; set; } public int equip1_id { get; set; } public int equip2_id { get; set; } diff --git a/Server/SQL/Equipment.cs b/Server/SQL/Equipment.cs index 51a3ace..7a22bb5 100644 --- a/Server/SQL/Equipment.cs +++ b/Server/SQL/Equipment.cs @@ -12,7 +12,7 @@ namespace Server.SQL public int id { get; set; } [JsonIgnore] public int user_id { get; set; } - public int equipment_data_id { get; set; } + public long equipment_data_id { get; set; } public int equip_unit { get; set; } public int rand_stats { get; set; } } diff --git a/Server/SQL/EtcItem.cs b/Server/SQL/EtcItem.cs index 7c6e98e..44465a9 100644 --- a/Server/SQL/EtcItem.cs +++ b/Server/SQL/EtcItem.cs @@ -12,7 +12,7 @@ namespace Server.SQL public int id { get; set; } [JsonIgnore] public int user_id { get; set; } - public int etc_item_data_id { get; set; } + public long etc_item_data_id { get; set; } public int count { get; set; } } diff --git a/Server/SQL/Excel/RandomRewardData.cs b/Server/SQL/Excel/RandomRewardData.cs index 707af04..ada2507 100644 --- a/Server/SQL/Excel/RandomRewardData.cs +++ b/Server/SQL/Excel/RandomRewardData.cs @@ -9,7 +9,7 @@ namespace Server.SQL.Excel [Key] public int index { get; set; } public int group { get; set; } - public int reward { get; set; } + public long reward { get; set; } public int prob { get; set; } public eRewardItemType reward_item_type { get; set; } public int return_count { get; set; } @@ -52,7 +52,7 @@ namespace Server.SQL.Excel RandomRewardData randomRewardData = new RandomRewardData(); randomRewardData.index = (int)item.Key; randomRewardData.group = (int)item.Value["group"]; - randomRewardData.reward = (int)item.Value["reward"]; + randomRewardData.reward = (long)item.Value["reward"]; randomRewardData.prob = (int)item.Value["prob"]; randomRewardData.reward_item_type = (eRewardItemType)item.Value["reward_item_type"]; randomRewardData.return_count = (int)item.Value["return_count"]; diff --git a/Server/SQL/User.cs b/Server/SQL/User.cs index f222889..7ce03f4 100644 --- a/Server/SQL/User.cs +++ b/Server/SQL/User.cs @@ -1,7 +1,5 @@ using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; -using SkiaSharp; -using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; diff --git a/Server/Scheduler/SessionScheduler.cs b/Server/Scheduler/SessionScheduler.cs index 186eef4..4b868f5 100644 --- a/Server/Scheduler/SessionScheduler.cs +++ b/Server/Scheduler/SessionScheduler.cs @@ -15,7 +15,7 @@ namespace Server.Scheduler for (int n = users.Count - 1; n >= 0; n--) { - if ((now - DateTime.Parse(Statics.redis.GetHash("end_login", "UserInfo", users[n]))).TotalMinutes >= 10) + if ((now - (DateTime)Statics.redis.GetHash("end_login", "UserInfo", users[n])).TotalMinutes >= 10) { Statics.redis.RemoveList(n, users[n], "LoginUser"); Statics.redis.RemoveKey("UserSession", users[n]); @@ -28,30 +28,30 @@ namespace Server.Scheduler { //기존 세션 확인 string loginUUID = Guid.NewGuid().ToString(); - Dictionary users = Statics.redis.GetAllHash("LoginUsers"); + Dictionary users = Statics.redis.GetAllHash("LoginUsers"); logger.Info($"New User : {user.nickname}, session : {loginUUID}"); foreach (var item in users) { - if(int.Parse(item.Value) == user.id) + if(item.Value == (object)(StackExchange.Redis.RedisValue)user.id) { Statics.redis.RemoveHash(item.Key); - Statics.redis.SetHash(loginUUID, user.id.ToString(), "LoginUsers"); + Statics.redis.SetHash(loginUUID, user.id, "LoginUsers"); updateSession(loginUUID); return loginUUID; } } - Statics.redis.SetHash(loginUUID, user.id.ToString(), "LoginUsers"); - Dictionary userInfo = new Dictionary(); - userInfo.Add("id", user.id.ToString()); + Statics.redis.SetHash(loginUUID, user.id, "LoginUsers"); + Dictionary userInfo = new Dictionary(); + userInfo.Add("id", user.id); userInfo.Add("uuid", user.uuid); userInfo.Add("mail", user.mail); userInfo.Add("nickname", user.nickname); - userInfo.Add("gold", user.gold.ToString()); - userInfo.Add("free_cash", user.free_cash.ToString()); - userInfo.Add("pay_cash", user.pay_cash.ToString()); - userInfo.Add("end_login", DateTime.Now.ToString()); - Statics.redis.SetHash(userInfo, "UserInfo", user.id.ToString()); + userInfo.Add("gold", user.gold); + userInfo.Add("free_cash", user.free_cash); + userInfo.Add("pay_cash", user.pay_cash); + userInfo.Add("end_login", DateTime.Now); + Statics.redis.SetHash(userInfo, "UserInfo", user.id); return loginUUID; } @@ -59,24 +59,24 @@ namespace Server.Scheduler //세션 업데이트 public static void updateSession(string UUID) { - int id = int.Parse(Statics.redis.GetHash(UUID, "LoginUsers")); + int id = (int)Statics.redis.GetHash(UUID, "LoginUsers"); Statics.redis.SetHash("end_login", DateTime.Now.ToString(), "UserInfo", id.ToString()); } public static User GetUser(string UUID) { User user = new User(); - int id = int.Parse(Statics.redis.GetHash(UUID, "LoginUsers")); - Dictionary userHash= Statics.redis.GetAllHash("UserInfo", id.ToString()); + int id = (int)Statics.redis.GetHash(UUID, "LoginUsers"); + Dictionary userHash= Statics.redis.GetAllHash("UserInfo", id.ToString()); - user.id = int.Parse(userHash["id"]); - user.uuid = userHash["uuid"]; - user.mail = userHash["mail"]; - user.nickname = userHash["nickname"]; - user.gold = int.Parse(userHash["gold"]); - user.free_cash = int.Parse(userHash["free_cash"]); - user.pay_cash = int.Parse(userHash["pay_cash"]); + user.id = (int)userHash["id"]; + user.uuid = (string)userHash["uuid"]; + user.mail = (string)userHash["mail"]; + user.nickname = (string)userHash["nickname"]; + user.gold = (int)userHash["gold"]; + user.free_cash = (int)userHash["free_cash"]; + user.pay_cash = (int)userHash["pay_cash"]; Statics.redis.SetHash("end_login", DateTime.Now.ToString(), "UserInfo", id.ToString()); return user; } diff --git a/Server/Server.csproj b/Server/Server.csproj index e350cb3..6858967 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -9,20 +9,20 @@ - + - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive + - - - + + + - - + diff --git a/Server/Service/BuyShopItem.cs b/Server/Service/BuyShopItem.cs index cd27504..159a4da 100644 --- a/Server/Service/BuyShopItem.cs +++ b/Server/Service/BuyShopItem.cs @@ -17,7 +17,7 @@ namespace Server.Service { Statics.userSQL.Update(req.user); - Dictionary saveUser = new Dictionary(); + Dictionary saveUser = new Dictionary(); saveUser.Add("nickname", req.user.nickname); saveUser.Add("gold", req.user.gold.ToString()); saveUser.Add("free_cash", req.user.free_cash.ToString()); @@ -47,7 +47,6 @@ namespace Server.Service if(shopItemData.buy_count != -1) { List shopItems = Statics.shopItemSQL.SelectUid(user.id, shopItemData.index); - Console.WriteLine(shopItems.Count); if(shopItems.Count >= shopItemData.buy_count) { throw new RuntimeException("Not Buy Count", Error.ErrorData); diff --git a/Server/Service/NicknameChange.cs b/Server/Service/NicknameChange.cs index 12d3782..59f4a21 100644 --- a/Server/Service/NicknameChange.cs +++ b/Server/Service/NicknameChange.cs @@ -12,7 +12,7 @@ namespace Server.Service { Statics.userSQL.Update(req.user); - Dictionary saveUser = new Dictionary(); + Dictionary saveUser = new Dictionary(); saveUser.Add("nickname", req.user.nickname); saveUser.Add("gold", req.user.gold.ToString()); saveUser.Add("free_cash", req.user.free_cash.ToString()); diff --git a/Server/System/Redis.cs b/Server/System/Redis.cs index c4179b1..07e743f 100644 --- a/Server/System/Redis.cs +++ b/Server/System/Redis.cs @@ -13,7 +13,11 @@ namespace Server.System Dictionary stringType; Dictionary> listType; Dictionary> zType; - Dictionary> hashType; + Dictionary> hashType; + + //일반적인 사용에는 문제가 없지만 값을 비교해야 할때는 다음과 같이 변환이필요 + //if(redis에서 가져온값 == (object)(StackExchange.Redis.RedisValue)비교하고 싶은 값) + public Redis(string host = "127.0.0.1", int port = 6379, int db = 0, string password = "") { if (host == "localhost") @@ -22,19 +26,17 @@ namespace Server.System stringType = new Dictionary(); listType = new Dictionary>(); zType = new Dictionary>(); - hashType = new Dictionary>(); + hashType = new Dictionary>(); } else { if (password.Equals(string.Empty)) { - Console.WriteLine("false"); redis = ConnectionMultiplexer.Connect($"{host}:{port}"); this.db = redis.GetDatabase(db); } else { - Console.WriteLine("true"); ConfigurationOptions options = new ConfigurationOptions { EndPoints = { $"{host}:{port}" }, @@ -46,13 +48,6 @@ namespace Server.System } } - public void test() - { - Console.WriteLine("--------------------"); - - Console.WriteLine("--------------------"); - } - public void SetString(string value, params string[] keys) { if (local) @@ -199,13 +194,13 @@ namespace Server.System return result; } - public void SetHash(string field, string value, params string[] keys) + public void SetHash(string field, object value, params object[] keys) { if (local) { if (hashType.ContainsKey(KeySet(keys))) { - Dictionary userHash = hashType[KeySet(keys)]; + Dictionary userHash = hashType[KeySet(keys)]; if (userHash.ContainsKey(field)) userHash[field] = value; else @@ -213,7 +208,7 @@ namespace Server.System } else - hashType.Add(KeySet(keys), new Dictionary { { field, value } }); + hashType.Add(KeySet(keys), new Dictionary { { field, value } }); } else { @@ -221,18 +216,18 @@ namespace Server.System } } - public void SetHash(Dictionary hash, params string[] keys) + public void SetHash(Dictionary hash, params object[] keys) { foreach (var item in hash) SetHash(item.Key, item.Value, keys); } - public Dictionary GetAllHash(params string[] keys) + public Dictionary GetAllHash(params string[] keys) { - Dictionary hash = new Dictionary(); + Dictionary hash = new Dictionary(); if (local) { - Dictionary hashs; + Dictionary hashs; if (hashType.ContainsKey(KeySet(keys))) { hashs = hashType[KeySet(keys)]; @@ -241,7 +236,7 @@ namespace Server.System } else { - hashs = new Dictionary(); + hashs = new Dictionary(); foreach (var entry in hashs) hash.Add(entry.Key, entry.Value); hashType.Add(KeySet(keys), hashs); @@ -257,11 +252,11 @@ namespace Server.System return hash; } - public string GetHash(string field ,params string[] keys) + public object GetHash(string field ,params string[] keys) { if (local) { - Dictionary hashs = new Dictionary(hashType[KeySet(keys)]); + Dictionary hashs = new Dictionary(hashType[KeySet(keys)]); return hashs[field]; } else @@ -289,7 +284,7 @@ namespace Server.System db.KeyDelete(KeySet(keys)); } - private string KeySet(string[] keys) + private string KeySet(object[] keys) { return string.Join(":", keys); } diff --git a/Server/System/Statics.cs b/Server/System/Statics.cs index 06b8bda..64cd027 100644 --- a/Server/System/Statics.cs +++ b/Server/System/Statics.cs @@ -7,15 +7,15 @@ namespace Server.System public static class Statics { #if DEBUG - public static readonly string SQL_URL = "Host=192.168.1.2;Port=5432;Username=manager;Password=Zn2zs558W5SdD8K;Database=project_thewar;"; - public static readonly string EXCEL_SQL_URL = "Host=192.168.1.2;Port=5432;Username=manager;Password=Zn2zs558W5SdD8K;Database=project_thewar;"; + public static readonly string SQL_URL = "Host=192.168.1.3;Port=5432;Username=manager;Password=Zn2zs558W5SdD8K;Database=project_thewar;"; + public static readonly string EXCEL_SQL_URL = "Host=192.168.1.3;Port=5432;Username=manager;Password=Zn2zs558W5SdD8K;Database=project_thewar;"; public static readonly string remoteUrl = "https://manager:BQNl01bJJF0wn9R@gitea.pandoli365.com/Team.thewar/thewar_excel.git"; - public static readonly Redis redis = new Redis("localhost", 6379, 1, "xPEz3x08xQ8G1Fa"); + public static readonly Redis redis = new Redis("192.168.1.3", 6379, 1, "mwAG28D5y0MAOOokMCnn"); #elif LIVE - public static readonly string SQL_URL = "Host=192.168.1.2;Port=5432;Username=manager;Password=Zn2zs558W5SdD8K;Database=project_thewar;"; - public static readonly string EXCEL_SQL_URL = "Host=192.168.1.2;Port=5432;Username=manager;Password=Zn2zs558W5SdD8K;Database=project_thewar;"; + public static readonly string SQL_URL = "Host=192.168.1.3;Port=5432;Username=manager;Password=:q+Zn2zs558W5SdD8K;Database=project_thewar;"; + public static readonly string EXCEL_SQL_URL = "Host=192.168.1.3;Port=5432;Username=manager;Password=Zn2zs558W5SdD8K;Database=project_thewar;"; public static readonly string remoteUrl = "https://manager:BQNl01bJJF0wn9R@gitea.pandoli365.com/Team.thewar/thewar_excel.git"; - public static readonly Redis redis = new Redis("192.168.1.2", 6379, 1, "xPEz3x08xQ8G1Fa"); + public static readonly Redis redis = new Redis("192.168.1.3", 6379, 1, "mwAG28D5y0MAOOokMCnn"); #endif public static readonly string URL = "https://0.0.0.0:4860"; diff --git a/Server/System/SystemMain.cs b/Server/System/SystemMain.cs index 8a1e778..5531bbb 100644 --- a/Server/System/SystemMain.cs +++ b/Server/System/SystemMain.cs @@ -34,7 +34,7 @@ namespace Server.System { public static string Process(HttpContext context) { AbstractService abstractService; - + //TODO 좀더 딥한곳에 status를 수정하게 만들기. string Response = ""; try { Protocol cmd = (Protocol)int.Parse(context.Request.Headers["cmd"]); @@ -69,8 +69,8 @@ namespace Server.System { Response = error.ToJson(); logger.Error("GetErrorResponse : " + ex.ToString()); } + finally{} return Response; - } private static async Task Request(HttpRequest request) {