diff --git a/UserClass/AsyncTcpClient.cs b/UserClass/AsyncTcpClient.cs index f040e97..0c5e23a 100644 --- a/UserClass/AsyncTcpClient.cs +++ b/UserClass/AsyncTcpClient.cs @@ -1,4 +1,5 @@ -using SunlightAggregationManager.ViewModel; +using SunlightAggregationManager.UserWindow; +using SunlightAggregationManager.ViewModel; using System; using System.Collections.Generic; using System.Data; @@ -199,11 +200,21 @@ namespace SunlightAggregationManager.UserClass data_.Add("UserName", _user?.Field("Name") ?? ""); ret = JsonSerializer.Serialize(data_); } + if (Command == "SysData")//回复请求的信息 + { + // data_.Add("SysData", MainWindowViewModel.MachineVer); + // data_.Add("ChemicalStatistics", MainWindowViewModel.ChemicalStatistics.ToJsonString()); + ret = JsonSerializer.Serialize(data_); + } if (Command == "Info")//回复info请求的信息 { var t = ToList(MainWindowViewModel._machines).ToJsonString(); //格式化返回信息 data_.Add("Info", t); + data_.Add("DyeMeasurementNumber", MainWindowViewModel.DyeMeasurementNumber.ToString()); + data_.Add("ChemicalNumber", MainWindowViewModel.ChemicalNumber.ToString()); + data_.Add("PowderNumber", MainWindowViewModel.PowderNumber.ToString()); + data_.Add("DyeDissolveNumber", MainWindowViewModel.DyeDissolveNumber.ToString()); ret = JsonSerializer.Serialize(data_); } if (Command == "Query")//回复Query请求的信息 diff --git a/UserClass/DataBase.cs b/UserClass/DataBase.cs index 2b20f6e..791d5e2 100644 --- a/UserClass/DataBase.cs +++ b/UserClass/DataBase.cs @@ -119,6 +119,53 @@ namespace SunlightAggregationManager.UserClass return dataTable; } + public async Task ExecuteQueryAsyncCount(string sql) + { + // 创建一个空的 DataTable 用于存放查询结果 + DataTable dataTable = new DataTable(); + + // 数据库连接字符串构建逻辑 + var builder = new SqlConnectionStringBuilder + { + DataSource = DB_IP, + InitialCatalog = DB_NAME, + IntegratedSecurity = DB_TYPE == "Windows Authentication", + TrustServerCertificate = true, + ConnectTimeout = 5 + }; + + if (!builder.IntegratedSecurity) + { + builder.UserID = DB_ID; + builder.Password = DB_PASSWORD; + } + + try + { + using var conn = new SqlConnection(builder.ConnectionString); + await conn.OpenAsync(); // 使用异步方式打开连接source_group_web_2 + + using (var cmd = new SqlCommand(sql, conn)) + { + // 执行查询并将结果直接加载到 DataTable 中 + using (var reader = await cmd.ExecuteReaderAsync()) + { + dataTable.Load(reader); + } + } + + } + catch (Exception ex) + { + LogGing.ERRDATA(ex); + Console.WriteLine("DataBase Query failed\n" + ex.ToString()); + // 将异常抛出给调用方,或者返回一个空的 DataTable + throw; + } + + return dataTable.Rows.Count; + } + public void Database(string dat) { diff --git a/ViewModel/MainWindowViewModel.cs b/ViewModel/MainWindowViewModel.cs index d46aaf9..e7c81b9 100644 --- a/ViewModel/MainWindowViewModel.cs +++ b/ViewModel/MainWindowViewModel.cs @@ -40,12 +40,14 @@ namespace SunlightAggregationManager.ViewModel public static string SERVERNAME = ""; public static string SERVERUSER = ""; public static string SERRVERPASWORD = ""; + public static int ChemicalNumber, DyeMeasurementNumber, DyeDissolveNumber, PowderNumber; + + private static Timer? _timer; + public static DataTable ChemicalStatistics = new DataTable(); public static DataBase dataBase = new DataBase(); public static UserClass.SqliteHelper SQLiteHelpers = null!; //定义数据库 private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SunlightAggregationManager.db"; //数据库路径 - public static DataTable ActionLog = new DataTable(); - [ObservableProperty] public static DataTable _machines = new DataTable(); //设备表缓存 [ObservableProperty] @@ -150,11 +152,13 @@ namespace SunlightAggregationManager.ViewModel Service.Rows.Add(3, "RUN", "Sunlight_Server_Link"); AsyncTcpClient.Configuration(SERVERIP, SERVERNAME, SERVERUSER, SERRVERPASWORD); + Service.EndInit(); - Service.EndInit(); + _timer = new Timer(EXTask, null, TimeSpan.FromSeconds(60), TimeSpan.FromMinutes(30)); } + //Machines操作数据库 private void Machines_Updata(object sender, DataRowChangeEventArgs e) { Dictionary row_entity = new Dictionary(); @@ -202,7 +206,7 @@ namespace SunlightAggregationManager.ViewModel SQLiteHelpers.InsertData("ActionLog", userlog); } } - + //UserData操作数据库 private void UserData_Updata(object sender, DataRowChangeEventArgs e) { Dictionary row_entity = new Dictionary(); @@ -256,6 +260,8 @@ namespace SunlightAggregationManager.ViewModel SQLiteHelpers.InsertData("ActionLog", userlog); } } + + //数据表操作 public static void Insert_Memory(DataTable DB, Dictionary Value)//插入数据 { try @@ -379,5 +385,53 @@ namespace SunlightAggregationManager.ViewModel } } + private static async void EXTask(object? state) + { + try + { + string DyelotsBulkedRecipe_sql = "SELECT [ProductCode],[ProductName],SUM(DispenseGrams)/1000 " + + "as TotalDispenseGrams,COUNT(*) as PrescriptionCount FROM [BatchDyeingCentral].[dbo].[DyelotsBulkedRecipe] " + + "where DispenseEndTime > '" + DateTime.Now.ToString("yyyy-MM-dd") + "' AND DispenseEndTime < '" + + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") + "'AND DispenseGrams IS NOT NULL" + " GROUP BY " + + "[ProductCode],[ProductName] ORDER BY TotalDispenseGrams DESC "; + string Dye_sql = + "SELECT [Dyelot],[ReDye],[StepNumber] FROM [BatchDyeingCentral].[dbo].[DyelotsBulkedRecipe] " + + "where ((DispenseEndTime >= '" + DateTime.Now.ToString("yyyy-MM-dd") + "' AND DispenseEndTime < '" + + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") + "') OR (DispenseTime >= '" + DateTime.Now.ToString("yyyy-MM-dd") + + "' AND DispenseTime < '" + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") + "')) " + + "AND ProductType = 1 GROUP BY [Dyelot],[ReDye],[StepNumber];"; + string Chemical_sql = + "SELECT [Dyelot],[ReDye],[StepNumber] FROM [BatchDyeingCentral].[dbo].[DyelotsBulkedRecipe] " + + "where ((DispenseEndTime >= '" + DateTime.Now.ToString("yyyy-MM-dd") + "' AND DispenseEndTime < '" + + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") + "') OR (DispenseTime >= '" + DateTime.Now.ToString("yyyy-MM-dd") + + "' AND DispenseTime < '" + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") + "')) " + + "AND ProductType = 2 GROUP BY [Dyelot],[ReDye],[StepNumber];"; + string Powder_sql = + "SELECT [Dyelot],[ReDye],[StepNumber] FROM [BatchDyeingCentral].[dbo].[DyelotsBulkedRecipe] " + + "where ((DispenseEndTime >= '" + DateTime.Now.ToString("yyyy-MM-dd") + "' AND DispenseEndTime < '" + + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") + "') OR (DispenseTime >= '" + DateTime.Now.ToString("yyyy-MM-dd") + + "' AND DispenseTime < '" + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") + "')) " + + "AND ProductType = 3 GROUP BY [Dyelot],[ReDye],[StepNumber];"; + string DyeDissolve = + "SELECT *FROM [BatchDyeingCentral].[dbo].[DyeSolutionHistory] " + "where DispenseEndTime >= '" + + DateTime.Now.ToString("yyyy-MM-dd") + "' AND DispenseEndTime < '" + DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") + "'"; + + ChemicalStatistics = await dataBase.ExecuteQueryAsync(DyelotsBulkedRecipe_sql); + DyeMeasurementNumber = await dataBase.ExecuteQueryAsyncCount(Dye_sql); + ChemicalNumber = await dataBase.ExecuteQueryAsyncCount(Chemical_sql); + PowderNumber = await dataBase.ExecuteQueryAsyncCount(Powder_sql); + DyeDissolveNumber = await dataBase.ExecuteQueryAsyncCount(DyeDissolve); + } + catch (Exception ex) + {//错误处理 + LogGing.ERRDATA(ex); + Console.WriteLine(ex.ToString()); + } + finally { + + Console.WriteLine("当日染料称量["+ DyeMeasurementNumber+ "]染料输送["+ DyeDissolveNumber + "]" + + "助剂输送["+ ChemicalNumber + "]粉体输送["+ PowderNumber + "]"); + } + } } -} +} \ No newline at end of file