提交版

This commit is contained in:
杨晓东 2026-02-05 14:45:33 +08:00
parent 7347aaec64
commit 1f4c172959
6 changed files with 138 additions and 79 deletions

View File

@ -412,17 +412,63 @@ namespace YiDa_WinForm
bool hasSelection2 = comboBox2.SelectedIndex > 0 && bool hasSelection2 = comboBox2.SelectedIndex > 0 &&
!string.IsNullOrEmpty(comboBox2.SelectedValue?.ToString()); !string.IsNullOrEmpty(comboBox2.SelectedValue?.ToString());
// 1. 重置静态上传标记(每次连接都重新开始判断)
_isScrapImageUploadedOne = false;
_isRodImageUploadedOne = false;
_isScrapImageUploadedTwo = false;
_isRodImageUploadedTwo = false;
_isRodImageWorkNoticeOne = false;
_isRodImageWorkNoticeTwo = false;
_isScrapImageWorkNoticeOne = false;
_isScrapImageWorkNoticeTwo = false;
LogHelper.AppendLog("重置上传标记:连杆未上传、报废未上传");
string selectedContent1 = string.Empty;
string selectedContent2 = string.Empty;
// 获取选中项的DataRowView增加判空
DataRowView drv1 = comboBox1.SelectedItem as DataRowView;
// 先判断drv1是否为null再访问字段
selectedContent1 = drv1 != null ? (drv1["part_name"]?.ToString()?.Trim() ?? string.Empty) : string.Empty;
// 获取选中项的DataRowView增加判空
DataRowView drv2 = comboBox2.SelectedItem as DataRowView;
// 先判断drv2是否为null再访问字段
selectedContent2 = drv2 != null ? (drv2["part_name"]?.ToString()?.Trim() ?? string.Empty) : string.Empty;
if (hasSelection1 && hasSelection2) if (hasSelection1 && hasSelection2)
{ {
selection = "3"; selection = "3";
StartScrapOneAlarmTimers();
StartScrapTwoAlarmTimers();
if (selectedContent1.Contains("连杆2") && selectedContent2.Contains("连杆2"))
{
StartRodOneAlarmTimers();
StartDailyRodDeviceOneFixedTimers();
StartRodTwoAlarmTimers();
StartDailyRodDeviceTwoFixedTimers();
}
} }
else if (hasSelection1) else if (hasSelection1)
{ {
selection = "1"; selection = "1";
StartScrapOneAlarmTimers();
if (selectedContent1.Contains("连杆2"))
{
StartRodOneAlarmTimers();
StartDailyRodDeviceOneFixedTimers();
}
} }
else if (hasSelection2) else if (hasSelection2)
{ {
selection = "2"; selection = "2";
StartScrapTwoAlarmTimers();
if (selectedContent2.Contains("连杆2"))
{
StartRodTwoAlarmTimers();
StartDailyRodDeviceTwoFixedTimers();
}
} }
else else
{ {
@ -431,19 +477,6 @@ namespace YiDa_WinForm
this.button2.Enabled = false; this.button2.Enabled = false;
// 1. 重置静态上传标记(每次连接都重新开始判断)
_isScrapImageUploadedOne = false;
_isRodImageUploadedOne = false;
_isScrapImageUploadedTwo = false;
_isRodImageUploadedTwo = false;
LogHelper.AppendLog("重置上传标记:连杆未上传、报废未上传");
// 2. 启动定时任务(复用用户保存的间隔值)
StartScrapAlarmTimers();
StartRodAlarmTimers();
StartDailyRodDeviceOneFixedTimers();
StartDailyRodDeviceTwoFixedTimers();
// 设备1选择配方 // 设备1选择配方
string selected1 = this.comboBox1.SelectedValue?.ToString(); string selected1 = this.comboBox1.SelectedValue?.ToString();
if (string.IsNullOrEmpty(selected1) || selected1 == "-1") if (string.IsNullOrEmpty(selected1) || selected1 == "-1")
@ -573,7 +606,7 @@ namespace YiDa_WinForm
if (isImageUploadSuccess) if (isImageUploadSuccess)
{ {
_buttonService.MergeAndSaveData("1", "device1"); _buttonService.MergeAndSaveData("1", "device1");
MqttYiDaUpload("1", "device"); MqttYiDaUpload("1", "device1");
// 上传成功:直接标记为已上传(避免后续定时报警) // 上传成功:直接标记为已上传(避免后续定时报警)
_isScrapImageUploadedOne = true; _isScrapImageUploadedOne = true;
} }
@ -621,7 +654,7 @@ namespace YiDa_WinForm
if (isImageUploadSuccess) if (isImageUploadSuccess)
{ {
_buttonService.MergeAndSaveData("1", "device2"); _buttonService.MergeAndSaveData("1", "device2");
MqttYiDaUpload("2", "device"); MqttYiDaUpload("2", "device2");
// 上传成功:直接标记为已上传(避免后续定时报警) // 上传成功:直接标记为已上传(避免后续定时报警)
_isScrapImageUploadedTwo = true; _isScrapImageUploadedTwo = true;
} }
@ -669,7 +702,7 @@ namespace YiDa_WinForm
if (isImageUploadSuccess) if (isImageUploadSuccess)
{ {
_buttonService.MergeAndSaveData("2", "device1"); _buttonService.MergeAndSaveData("2", "device1");
MqttYiDaUpload("1", "device"); MqttYiDaUpload("2", "device1");
// 上传成功:直接标记为已上传(避免后续定时报警) // 上传成功:直接标记为已上传(避免后续定时报警)
_isRodImageUploadedOne = true; _isRodImageUploadedOne = true;
DateTime now = DateTime.Now; DateTime now = DateTime.Now;
@ -742,7 +775,7 @@ namespace YiDa_WinForm
if (isImageUploadSuccess) if (isImageUploadSuccess)
{ {
_buttonService.MergeAndSaveData("2", "device1"); _buttonService.MergeAndSaveData("2", "device1");
MqttYiDaUpload("1", "device"); MqttYiDaUpload("2", "device1");
// 上传成功:直接标记为已上传(避免后续定时报警) // 上传成功:直接标记为已上传(避免后续定时报警)
_isRodImageUploadedOne = true; _isRodImageUploadedOne = true;
DateTime now = DateTime.Now; DateTime now = DateTime.Now;
@ -821,7 +854,7 @@ namespace YiDa_WinForm
if (isImageUploadSuccess) if (isImageUploadSuccess)
{ {
_buttonService.MergeAndSaveData("2", "device2"); _buttonService.MergeAndSaveData("2", "device2");
MqttYiDaUpload("2", "device"); MqttYiDaUpload("2", "device2");
// 上传成功:直接标记为已上传(避免后续定时报警) // 上传成功:直接标记为已上传(避免后续定时报警)
_isRodImageUploadedTwo = true; _isRodImageUploadedTwo = true;
DateTime now = DateTime.Now; DateTime now = DateTime.Now;
@ -875,7 +908,7 @@ namespace YiDa_WinForm
_lastRodIntervalTwo = interval; _lastRodIntervalTwo = interval;
// 3. 上传逻辑:仅当勾选「模具上传」时,才弹出文件选择框(分离上传和报警逻辑) // 3. 上传逻辑
bool isImageUploadSuccess = false; bool isImageUploadSuccess = false;
OpenFileDialog openFile = new OpenFileDialog(); OpenFileDialog openFile = new OpenFileDialog();
if (openFile.ShowDialog() == DialogResult.OK) if (openFile.ShowDialog() == DialogResult.OK)
@ -888,7 +921,7 @@ namespace YiDa_WinForm
if (isImageUploadSuccess) if (isImageUploadSuccess)
{ {
_buttonService.MergeAndSaveData("2", "device2"); _buttonService.MergeAndSaveData("2", "device2");
MqttYiDaUpload("2", "device"); MqttYiDaUpload("2", "device2");
// 上传成功:直接标记为已上传(避免后续定时报警) // 上传成功:直接标记为已上传(避免后续定时报警)
_isRodImageUploadedTwo = true; _isRodImageUploadedTwo = true;
DateTime now = DateTime.Now; DateTime now = DateTime.Now;
@ -1054,7 +1087,7 @@ namespace YiDa_WinForm
/// <summary> /// <summary>
/// 启动报废定时任务前30分钟上传 /// 启动报废定时任务前30分钟上传
/// </summary> /// </summary>
private void StartScrapAlarmTimers() private void StartScrapOneAlarmTimers()
{ {
// 设备1 // 设备1
if (_scrapAlarmTimerOne != null) if (_scrapAlarmTimerOne != null)
@ -1069,7 +1102,10 @@ namespace YiDa_WinForm
_scrapAlarmTimerOne.Elapsed += ScrapAlarmTimerOne_Elapsed; _scrapAlarmTimerOne.Elapsed += ScrapAlarmTimerOne_Elapsed;
_scrapAlarmTimerOne.Enabled = true; // 启动定时 _scrapAlarmTimerOne.Enabled = true; // 启动定时
LogHelper.AppendLog($"设备1报废上传定时已启动若{_lastScrapIntervalOne}分钟内未上传凭证,将触发钉钉报警"); LogHelper.AppendLog($"设备1报废上传定时已启动若{_lastScrapIntervalOne}分钟内未上传凭证,将触发钉钉报警");
}
private void StartScrapTwoAlarmTimers()
{
// 设备2 // 设备2
if (_scrapAlarmTimerTwo != null) if (_scrapAlarmTimerTwo != null)
{ {
@ -1088,7 +1124,7 @@ namespace YiDa_WinForm
/// <summary> /// <summary>
/// 启动连杆定时任务前30分钟上传 /// 启动连杆定时任务前30分钟上传
/// </summary> /// </summary>
private void StartRodAlarmTimers() private void StartRodOneAlarmTimers()
{ {
// 设备1 // 设备1
if (_rodAlarmTimerOne != null) if (_rodAlarmTimerOne != null)
@ -1103,7 +1139,10 @@ namespace YiDa_WinForm
_rodAlarmTimerOne.Elapsed += RodAlarmTimerOne_Elapsed; _rodAlarmTimerOne.Elapsed += RodAlarmTimerOne_Elapsed;
_rodAlarmTimerOne.Enabled = true; // 启动定时 _rodAlarmTimerOne.Enabled = true; // 启动定时
LogHelper.AppendLog($"设备1连杆定时已启动若{_lastRodIntervalOne}分钟内未上传凭证,将触发钉钉报警"); LogHelper.AppendLog($"设备1连杆定时已启动若{_lastRodIntervalOne}分钟内未上传凭证,将触发钉钉报警");
}
private void StartRodTwoAlarmTimers()
{
// 设备2 // 设备2
if (_rodAlarmTimerTwo != null) if (_rodAlarmTimerTwo != null)
{ {
@ -1346,25 +1385,6 @@ namespace YiDa_WinForm
DateTime now = DateTime.Now; DateTime now = DateTime.Now;
TimeSpan currentTime = now.TimeOfDay; TimeSpan currentTime = now.TimeOfDay;
// // 1. 工作时间判断
// if (currentTime < _morningCheckTime || currentTime > _eveningCheckTime)
// {
// LogHelper.AppendLog($"当前时间{currentTime:hh\\:mm}不在工作时间内,跳过本次连杆报警判断");
// _rodAlarmTimerOne?.Dispose();
// _rodAlarmTimerOne = null;
// return;
// }
// ========== 早晚节点标记判断(已上传则跳过原有报警) ==========
if (_isMorningRodUploadedOne || _isEveningRodUploadedOne)
{
LogHelper.AppendLog("连杆图片已在早晚强制时段内上传,跳过本次原有定时报警");
_rodAlarmTimerOne?.Dispose();
_rodAlarmTimerOne = null;
_isRodImageUploadedOne = false;
return;
}
// 2. 使用静态标记 _isRodImageUploaded 判断是否报警 // 2. 使用静态标记 _isRodImageUploaded 判断是否报警
if (!_isRodImageUploadedOne) if (!_isRodImageUploadedOne)
{ {
@ -1569,9 +1589,9 @@ namespace YiDa_WinForm
private void InitDailyRodDeviceOneCheckTimes() private void InitDailyRodDeviceOneCheckTimes()
{ {
// 计算早上检查节点:工作开始时间 + 30分钟 // 计算早上检查节点:工作开始时间 + 30分钟
_morningCheckTimeOne = _workStartTimeOne.Add(TimeSpan.FromMinutes(30)); _morningCheckTimeOne = _workStartTimeOne.Add(TimeSpan.FromMinutes(2));
// 计算晚上检查节点:工作结束时间 + 30分钟 // 计算晚上检查节点:工作结束时间 + 30分钟
_eveningCheckTimeOne = _workEndTimeOne.Add(TimeSpan.FromMinutes(30)); _eveningCheckTimeOne = _workEndTimeOne.Add(TimeSpan.FromMinutes(2));
// 校验:防止晚上检查节点早于早上检查节点(避免用户配置异常) // 校验:防止晚上检查节点早于早上检查节点(避免用户配置异常)
if (_eveningCheckTimeOne <= _morningCheckTimeOne) if (_eveningCheckTimeOne <= _morningCheckTimeOne)
@ -2010,33 +2030,40 @@ namespace YiDa_WinForm
{ {
return string.Equals(value?.ToString(), "无错误", StringComparison.Ordinal) ? "合格" : "不合格"; return string.Equals(value?.ToString(), "无错误", StringComparison.Ordinal) ? "合格" : "不合格";
} }
else if ((paramName == "报废图片" || paramName == "连杆测试") && (_isScrapImageWorkNoticeOne || _isRodImageWorkNoticeOne || _isScrapImageWorkNoticeTwo || _isRodImageWorkNoticeTwo)) else if (paramName == "报废图片" || paramName == "连杆测试")
{ {
bool isNoticeTriggered = false;
if (paramName == "报废图片") if (paramName == "报废图片")
{ {
if (site == "1号设备") isNoticeTriggered = (site == "1号设备" && _isScrapImageWorkNoticeOne)
{ || (site == "2号设备" && _isScrapImageWorkNoticeTwo);
_isScrapImageWorkNoticeOne = false;
} }
else else if (paramName == "连杆测试")
{ {
_isScrapImageWorkNoticeTwo = false; isNoticeTriggered = (site == "1号设备" && _isRodImageWorkNoticeOne)
|| (site == "2号设备" && _isRodImageWorkNoticeTwo);
} }
} if (isNoticeTriggered)
if (paramName == "连杆测试")
{ {
if (site == "1号设备") // 重置对应设备的标记
if (paramName == "报废图片")
{ {
_isRodImageWorkNoticeOne = false; if (site == "1号设备") _isScrapImageWorkNoticeOne = false;
if (site == "2号设备") _isScrapImageWorkNoticeTwo = false;
} }
else else if (paramName == "连杆测试")
{ {
_isRodImageWorkNoticeTwo = false; if (site == "1号设备") _isRodImageWorkNoticeOne = false;
} if (site == "2号设备") _isRodImageWorkNoticeTwo = false;
} }
return "不合格"; return "不合格";
} }
else if (paramName == "开模总数实时" || paramName == "托模次数" || paramName == "报废图片" || paramName == "连杆测试") else
{
return "合格";
}
}
else if (paramName == "开模总数实时" || paramName == "托模次数")
{ {
return "合格"; return "合格";
} }

View File

@ -150,7 +150,7 @@ namespace YiDa_WinForm.Service
{ {
try try
{ {
string strSql; string strSql = null;
if (selection != null && device == null) if (selection != null && device == null)
{ {
if (selection.Contains("1")) if (selection.Contains("1"))
@ -169,18 +169,31 @@ namespace YiDa_WinForm.Service
} }
else else
{ {
if (selection.Contains("1")) if (device.Equals("device1"))
{ {
strSql = @"SELECT * FROM yida_mqtt_message where device_code='device1' and pv_status = 1 and img_status = 1 ORDER BY create_time DESC LIMIT 1"; if (selection.Equals("1"))
}
else if (selection.Contains("2"))
{ {
strSql = @"SELECT * FROM yida_mqtt_message where device_code='device2' and pv_status = 1 and img_status = 1 ORDER BY create_time DESC LIMIT 1"; strSql = @"SELECT * FROM yida_mqtt_message where device_code = 'device1' and pv_status = 1 and img_status1 = 1 ORDER BY create_time DESC LIMIT 1";
} }
else else
{ {
strSql= strSql = @"SELECT * FROM yida_mqtt_message where device_code = 'device1' and pv_status = 1 and img_status2 = 1 ORDER BY create_time DESC LIMIT 1";
@"SELECT * FROM yida_mqtt_message where (device_code = 'device1' or device_code = 'device2') and pv_status = 1 and img_status = 1 ORDER BY create_time DESC LIMIT 1"; }
}
else if (device.Equals("device2"))
{
if (selection.Equals("1"))
{
strSql = @"SELECT * FROM yida_mqtt_message where device_code = 'device2' and pv_status = 1 and img_status3 = 1 ORDER BY create_time DESC LIMIT 1";
}
else
{
strSql = @"SELECT * FROM yida_mqtt_message where device_code = 'device2' and pv_status = 1 and img_status4 = 1 ORDER BY create_time DESC LIMIT 1";
}
}
else
{
strSql= @"SELECT * FROM yida_mqtt_message where (device_code = 'device1' or device_code = 'device2') and pv_status = 1 and (img_status1 = 1 or img_status2 = 1 or img_status3 = 1 or img_status4 = 1) ORDER BY create_time DESC LIMIT 1";
} }
} }
@ -298,19 +311,38 @@ namespace YiDa_WinForm.Service
string mergedData = JsonConvert.SerializeObject(dataModel); string mergedData = JsonConvert.SerializeObject(dataModel);
// 6. 更新数据库调用DbHelper执行更新 // 6. 更新数据库调用DbHelper执行更新
string updateSql; string updateSql = null;
if (deviceCode.Equals("device1")) if (deviceCode.Equals("device1"))
{
if (operationStatus == "1")
{ {
updateSql = @"UPDATE yida_mqtt_message updateSql = @"UPDATE yida_mqtt_message
SET receive_data = @mergedData, img_status = 1 SET receive_data = @mergedData, img_status1 = 1
WHERE id = @latestId and pv_status = 1 and device_code = 'device1'"; WHERE id = @latestId and pv_status = 1 and device_code = 'device1'";
} }
else else
{ {
updateSql = @"UPDATE yida_mqtt_message updateSql = @"UPDATE yida_mqtt_message
SET receive_data = @mergedData, img_status = 1 SET receive_data = @mergedData, img_status2 = 1
WHERE id = @latestId and pv_status = 1 and device_code = 'device1'";
}
}
if (deviceCode.Equals("device2"))
{
if (operationStatus == "2")
{
updateSql = @"UPDATE yida_mqtt_message
SET receive_data = @mergedData, img_status3 = 1
WHERE id = @latestId and pv_status = 1 and device_code = 'device2'"; WHERE id = @latestId and pv_status = 1 and device_code = 'device2'";
} }
else
{
updateSql = @"UPDATE yida_mqtt_message
SET receive_data = @mergedData, img_status4 = 1
WHERE id = @latestId and pv_status = 1 and device_code = 'device2'";
}
}
var updateParameters = new[] var updateParameters = new[]
{ {
new MySql.Data.MySqlClient.MySqlParameter("@mergedData", mergedData), new MySql.Data.MySqlClient.MySqlParameter("@mergedData", mergedData),

View File

@ -145,7 +145,7 @@ namespace YiDa_WinForm.Service
for (int i = 0; i < yidaLists.Count; i++) for (int i = 0; i < yidaLists.Count; i++)
{ {
var item = yidaLists[i]; var item = yidaLists[i];
var mqttItem = mqttLists[i]; // var mqttItem = mqttLists[i];
var dataDict = new Dictionary<string, object> var dataDict = new Dictionary<string, object>
{ {

View File

@ -35,7 +35,7 @@
</log4net> </log4net>
<!-- 数据库连接配置 --> <!-- 数据库连接配置 -->
<connectionStrings> <connectionStrings>
<add name="MySqlConnection" connectionString="server=localhost;port=3306;database=fgassembly;user=root;password=123456;charset=utf8;SslMode=None;" providerName="MySql.Data.MySqlClient" /> <add name="MySqlConnection" connectionString="server=localhost;port=3306;database=fgassembly2;user=root;password=123456;charset=utf8;SslMode=None;" providerName="MySql.Data.MySqlClient" />
</connectionStrings> </connectionStrings>
<YiDaConfig> <YiDaConfig>
<!-- 钉钉配置 --> <!-- 钉钉配置 -->