提交版

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

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

View File

@ -150,7 +150,7 @@ namespace YiDa_WinForm.Service
{
try
{
string strSql;
string strSql = null;
if (selection != null && device == null)
{
if (selection.Contains("1"))
@ -169,18 +169,31 @@ namespace YiDa_WinForm.Service
}
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";
}
else if (selection.Contains("2"))
if (selection.Equals("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
{
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";
}
}
else if (device.Equals("device2"))
{
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";
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_status = 1 ORDER BY create_time DESC LIMIT 1";
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,18 +311,37 @@ namespace YiDa_WinForm.Service
string mergedData = JsonConvert.SerializeObject(dataModel);
// 6. 更新数据库调用DbHelper执行更新
string updateSql;
string updateSql = null;
if (deviceCode.Equals("device1"))
{
updateSql = @"UPDATE yida_mqtt_message
SET receive_data = @mergedData, img_status = 1
if (operationStatus == "1")
{
updateSql = @"UPDATE yida_mqtt_message
SET receive_data = @mergedData, img_status1 = 1
WHERE id = @latestId and pv_status = 1 and device_code = 'device1'";
}
else
{
updateSql = @"UPDATE yida_mqtt_message
SET receive_data = @mergedData, img_status2 = 1
WHERE id = @latestId and pv_status = 1 and device_code = 'device1'";
}
}
else
if (deviceCode.Equals("device2"))
{
updateSql = @"UPDATE yida_mqtt_message
SET receive_data = @mergedData, img_status = 1
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'";
}
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[]
{

View File

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

View File

@ -35,7 +35,7 @@
</log4net>
<!-- 数据库连接配置 -->
<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>
<YiDaConfig>
<!-- 钉钉配置 -->