fg_yida_2/YiDa_WinForm/Service/ButtonOperationService.cs

205 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<string> MessageReceived;
/// <summary>
/// 保存配方表格数据到数据库中
/// </summary>
/// <param name="dtExcel"></param>
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}");
}
}
/// <summary>
/// 获取数据库配方
/// </summary>
/// <returns></returns>
public async Task<DataTable> 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;
}
/// <summary>
/// 获取MQTT参数字典
/// </summary>
/// <returns></returns>
public async Task<DataTable> 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;
}
/// <summary>
/// 获取MQTT数据
/// </summary>
/// <returns></returns>
//获取最新的Mqtt网关数据
public async Task<DataTable> 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<MqttModel> 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)
{
}
}
}
}