fg_yida_2/YiDa_WinForm/Service/ButtonOperationService.cs

235 lines
11 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 Newtonsoft.Json.Linq;
using YiDa_WinForm.Config;
using YiDa_WinForm.Model;
namespace MQTT_WinformV1.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> InitInjectionMqttDic()
{
DataTable dt = new DataTable();
using (var conn = new MySqlConnection(_connectionString))
{
await conn.OpenAsync();
string strSql = @"SELECT * from yida_injection_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>
public async Task<DataTable> InitTemperatureMqttDic()
{
DataTable dt = new DataTable();
using (var conn = new MySqlConnection(_connectionString))
{
await conn.OpenAsync();
string strSql = @"SELECT * from yida_temperature_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>
public async Task<DataTable> GetLatestMqttDataAsync()
{
DataTable dt = new DataTable();
using (var conn = new MySqlConnection(_connectionString))
{
await conn.OpenAsync();
string sql = @"SELECT t1.id, t1.device_code, t1.receive_data, t1.receive_time, t1.create_time
FROM yida_mqtt_message t1
INNER JOIN (
SELECT device_code, MAX(receive_time) AS max_receive_time
FROM yida_mqtt_message
WHERE device_code IN ('device1', 'device2', 'device3', 'device4')
GROUP BY device_code
) t2 ON t1.device_code = t2.device_code AND t1.receive_time = t2.max_receive_time;";
using (var queryCmd = new MySqlCommand(sql, 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)
{
}
}
}
}