2026-01-21 19:31:27 +08:00
|
|
|
|
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;
|
|
|
|
|
|
|
2026-01-22 16:59:41 +08:00
|
|
|
|
namespace YiDa_WinForm.Service
|
2026-01-21 19:31:27 +08:00
|
|
|
|
{
|
|
|
|
|
|
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>
|
2026-01-22 16:59:41 +08:00
|
|
|
|
/// 获取MQTT参数字典
|
2026-01-21 19:31:27 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
2026-01-22 16:59:41 +08:00
|
|
|
|
public async Task<DataTable> InitMqttDic()
|
2026-01-21 19:31:27 +08:00
|
|
|
|
{
|
|
|
|
|
|
DataTable dt = new DataTable();
|
|
|
|
|
|
using (var conn = new MySqlConnection(_connectionString))
|
|
|
|
|
|
{
|
|
|
|
|
|
await conn.OpenAsync();
|
2026-01-22 16:59:41 +08:00
|
|
|
|
string strSql = @"SELECT * from yida_upload_param";
|
2026-01-21 19:31:27 +08:00
|
|
|
|
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>
|
2026-01-22 16:59:41 +08:00
|
|
|
|
//获取最新的Mqtt网关数据
|
2026-01-21 19:31:27 +08:00
|
|
|
|
public async Task<DataTable> GetLatestMqttDataAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
DataTable dt = new DataTable();
|
|
|
|
|
|
using (var conn = new MySqlConnection(_connectionString))
|
|
|
|
|
|
{
|
|
|
|
|
|
await conn.OpenAsync();
|
2026-01-22 16:59:41 +08:00
|
|
|
|
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))
|
2026-01-21 19:31:27 +08:00
|
|
|
|
{
|
|
|
|
|
|
// 设置命令超时时间(可选,根据需要调整)
|
|
|
|
|
|
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)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|