using System; using System.Collections.Generic; using System.Data; using System.Threading.Tasks; using MySql.Data.MySqlClient; using YiDa_WinForm.Config; using YiDa_WinForm.Model; namespace YiDa_WinForm.Service { public class ButtonOperationService { private readonly string _connectionString = AppConfig.MySqlConnectionString; // 通知UI层 public event Action MessageReceived; /// /// 保存配方表格数据到数据库中 /// /// public async Task SaveFormulaByExcel(DataTable dtExcel) { try { using (var conn = new MySqlConnection(_connectionString)) { await conn.OpenAsync(); string sqlDel = @"DELETE FROM yida_injection_formula;"; using (var delCmd = new MySqlCommand(sqlDel, conn)) { // 异步执行删除,await 等待完成后再继续 await delCmd.ExecuteNonQueryAsync(); } foreach (DataRow dr in dtExcel.Rows) { string sql = string.Format( @"INSERT INTO yida_injection_formula (supplier_code, supplier_name, vehicle_model,part_number, part_name,parameter_name,tolerance_lower,tolerance_upper,leader_part,leader_out_protection) VALUES (@supplier_code, @supplier_name, @vehicle_model,@part_number,@part_name,@parameter_name,@tolerance_lower, @tolerance_upper,@leader_part,@leader_out_protection)"); using (var cmd = new MySqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@supplier_code", dr["供应商代码"] == DBNull.Value ? (object)DBNull.Value : dr["供应商代码"].ToString()); cmd.Parameters.AddWithValue("@supplier_name", dr["供应商名称"] == DBNull.Value ? (object)DBNull.Value : dr["供应商名称"].ToString()); cmd.Parameters.AddWithValue("@vehicle_model", dr["车型"] == DBNull.Value ? (object)DBNull.Value : dr["车型"].ToString()); cmd.Parameters.AddWithValue("@part_number", dr["零件号"] == DBNull.Value ? (object)DBNull.Value : dr["零件号"].ToString()); cmd.Parameters.AddWithValue("@part_name", dr["零件名"] == DBNull.Value ? (object)DBNull.Value : dr["零件名"].ToString()); cmd.Parameters.AddWithValue("@parameter_name", dr["参数名"] == DBNull.Value ? (object)DBNull.Value : dr["参数名"].ToString()); cmd.Parameters.AddWithValue("@tolerance_lower", dr["下公差"] == DBNull.Value ? (object)DBNull.Value : dr["下公差"].ToString()); cmd.Parameters.AddWithValue("@tolerance_upper", dr["上公差"] == DBNull.Value ? (object)DBNull.Value : dr["上公差"].ToString()); cmd.Parameters.AddWithValue("@leader_part", dr["零件负责人"] == DBNull.Value ? (object)DBNull.Value : dr["零件负责人"].ToString()); cmd.Parameters.AddWithValue("@leader_out_protection", dr["外保负责人"] == DBNull.Value ? (object)DBNull.Value : dr["外保负责人"].ToString()); await cmd.ExecuteNonQueryAsync(); } } } } catch (Exception ex) { MessageReceived?.Invoke($"保存配方表格到数据库时出错:{ex.Message} {ex.InnerException?.Message}"); } } /// /// 获取数据库配方 /// /// public async Task QueryFormulaAsync() { // 初始化DataTable用于存储结果 DataTable dt = new DataTable(); using (var conn = new MySqlConnection(_connectionString)) { // 异步打开连接,必须用await等待完成 await conn.OpenAsync(); string strSql = @"SELECT * FROM yida_formula"; using (var queryCmd = new MySqlCommand(strSql, conn)) { // 设置命令超时时间(可选,根据需要调整) queryCmd.CommandTimeout = 60; // 异步执行查询,获取数据读取器 using (var reader = await queryCmd.ExecuteReaderAsync()) { // 通过读取器填充DataTable dt.Load(reader); } } } return dt; } /// /// 获取MQTT参数字典 /// /// public async Task InitMqttDic() { DataTable dt = new DataTable(); using (var conn = new MySqlConnection(_connectionString)) { await conn.OpenAsync(); string strSql = @"SELECT * from yida_upload_param"; using (var queryCmd = new MySqlCommand(strSql, conn)) { // 设置命令超时时间(可选,根据需要调整) queryCmd.CommandTimeout = 120; using (var reader = await queryCmd.ExecuteReaderAsync()) { dt.Load(reader); } } } return dt; } /// /// 获取MQTT数据 /// /// //获取最新的Mqtt网关数据 public async Task GetLatestMqttDataAsync() { DataTable dt = new DataTable(); using (var conn = new MySqlConnection(_connectionString)) { await conn.OpenAsync(); string strSql = @"(SELECT * FROM yida_mqtt_message where device_code='device1' ORDER BY create_time DESC LIMIT 1) UNION (SELECT * FROM yida_mqtt_message where device_code='device2' ORDER BY create_time DESC LIMIT 1);"; using (var queryCmd = new MySqlCommand(strSql, conn)) { // 设置命令超时时间(可选,根据需要调整) queryCmd.CommandTimeout = 120; using (var reader = await queryCmd.ExecuteReaderAsync()) { dt.Load(reader); } } } return dt; } //保存上传至宜搭平台成功的数据到数据库中 public async Task CreateSuccessLog(List mqttLists) { try { using (var conn = new MySqlConnection(_connectionString)) { await conn.OpenAsync(); DateTime time = DateTime.Now; foreach (MqttModel mqttItem in mqttLists) { string sql = string.Format(@"INSERT INTO yida_success_log (supplier_code, supplier_name, vehicle_model,part_number,part_name,parameter_name,parameter_value,tolerance_lower,tolerance_upper, leader_part,time_upload_database,is_qualification,working_station,leader_out_protection) VALUES (@supplier_code, @supplier_name, @vehicle_model,@part_number, @part_name,@parameter_name,@parameter_value,@tolerance_lower,@tolerance_upper,@leader_part, @time_upload_database,@is_qualification,@working_station,@leader_out_protection)"); using (var cmd = new MySqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@supplier_code", mqttItem.SupplierCode); //供应商代码 cmd.Parameters.AddWithValue("@supplier_name", mqttItem.SupplierName); //供应商代码 cmd.Parameters.AddWithValue("@vehicle_model", mqttItem.VehicleModel); //车型 cmd.Parameters.AddWithValue("@part_number", mqttItem.PartNumber); //零件号 cmd.Parameters.AddWithValue("@part_name", mqttItem.PartName); //零件名 cmd.Parameters.AddWithValue("@parameter_name", mqttItem.ParameterName); //参数名 cmd.Parameters.AddWithValue("@parameter_value", mqttItem.ParameterValue); //参数值 cmd.Parameters.AddWithValue("@tolerance_lower", mqttItem.ToleranceLower); //下公差 cmd.Parameters.AddWithValue("@tolerance_upper", mqttItem.ToleranceUpper); //上公差 cmd.Parameters.AddWithValue("@leader_part", mqttItem.LeaderPart); //零件负责人 cmd.Parameters.AddWithValue("@time_upload_database", time); //写入数据库的时间 cmd.Parameters.AddWithValue("@is_qualification", mqttItem.IsQualification); //合格判定—合格,不合格 cmd.Parameters.AddWithValue("@working_station", mqttItem.WorkStation); //工位 cmd.Parameters.AddWithValue("@leader_out_protection", mqttItem.LeaderOutProtection); //外保负责人 await cmd.ExecuteNonQueryAsync(); } } } } catch (Exception ex) { } } } }