|
|
@@ -99,6 +99,13 @@ public class MesClient extends JFrame {
|
|
|
|
|
|
public static boolean autoSubmitEnabled = true;
|
|
|
|
|
|
+ /** 已发送质量提交(MQDW),等待服务器应答,防止定时器重复提交 */
|
|
|
+ public static volatile boolean qualitySubmitPending = false;
|
|
|
+ /** 当前工件已发起过自动提交,防止 MQDW 失败后每秒重试 */
|
|
|
+ public static volatile boolean qualitySubmitAttempted = false;
|
|
|
+ static volatile long qualitySubmitPendingSince = 0;
|
|
|
+ private static final long QUALITY_SUBMIT_TIMEOUT_MS = 30000;
|
|
|
+
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
// 设置全局异常处理器,防止程序突然崩溃
|
|
|
@@ -230,6 +237,26 @@ public class MesClient extends JFrame {
|
|
|
}
|
|
|
|
|
|
private static void checkAllGunsCompleted() {
|
|
|
+ if (SwingUtilities.isEventDispatchThread()) {
|
|
|
+ doCheckAllGunsCompletedOnEdt();
|
|
|
+ } else {
|
|
|
+ SwingUtilities.invokeLater(MesClient::doCheckAllGunsCompletedOnEdt);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void doCheckAllGunsCompletedOnEdt() {
|
|
|
+ if (qualitySubmitPending && qualitySubmitPendingSince > 0
|
|
|
+ && System.currentTimeMillis() - qualitySubmitPendingSince > QUALITY_SUBMIT_TIMEOUT_MS) {
|
|
|
+ qualitySubmitPending = false;
|
|
|
+ qualitySubmitPendingSince = 0;
|
|
|
+ setMenuStatus("提交超时,请点 OK 重试或刷新工件", -1);
|
|
|
+ if (autoSubmitEnabled) {
|
|
|
+ finish_ok_bt.setEnabled(true);
|
|
|
+ finish_ng_bt.setEnabled(true);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
if (work_status != 1 || !check_quality_result) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -238,6 +265,26 @@ public class MesClient extends JFrame {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ if (qualitySubmitPending || qualitySubmitAttempted) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (gunPanels.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (mes_gw.equals("OP290") && pz_status != 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (product_sn.getText() == null || product_sn.getText().trim().isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (nettyClient == null || !tcp_connect_flag) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
boolean allCompleted = true;
|
|
|
for (GunPanel panel : gunPanels) {
|
|
|
if (!panel.isTaskCompleted()) {
|
|
|
@@ -247,16 +294,18 @@ public class MesClient extends JFrame {
|
|
|
}
|
|
|
|
|
|
if (allCompleted) {
|
|
|
+ qualitySubmitPending = true;
|
|
|
+ qualitySubmitAttempted = true;
|
|
|
+ qualitySubmitPendingSince = System.currentTimeMillis();
|
|
|
final boolean submitSuccess = submitQualityResult();
|
|
|
- SwingUtilities.invokeLater(() -> {
|
|
|
- if (submitSuccess) {
|
|
|
- setMenuStatus("所有任务完成,结果已提交", 0);
|
|
|
- resetScanA();
|
|
|
-// scanBarcode();
|
|
|
- } else {
|
|
|
- setMenuStatus("结果提交失败,请重试", -1);
|
|
|
- }
|
|
|
- });
|
|
|
+ if (submitSuccess) {
|
|
|
+ setMenuStatus("所有任务完成,正在提交...", 0);
|
|
|
+ } else {
|
|
|
+ qualitySubmitPending = false;
|
|
|
+ qualitySubmitAttempted = false;
|
|
|
+ qualitySubmitPendingSince = 0;
|
|
|
+ setMenuStatus("结果提交失败,请重试", -1);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -485,6 +534,9 @@ public class MesClient extends JFrame {
|
|
|
}
|
|
|
|
|
|
public static void resetScanA() {
|
|
|
+ qualitySubmitPending = false;
|
|
|
+ qualitySubmitAttempted = false;
|
|
|
+ qualitySubmitPendingSince = 0;
|
|
|
work_status = 0;
|
|
|
check_quality_result = false;
|
|
|
MesClient.finish_ok_bt.setEnabled(false);
|
|
|
@@ -814,16 +866,26 @@ public class MesClient extends JFrame {
|
|
|
finish_ok_bt.addActionListener(new ActionListener() {
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
if(work_status == 1 && check_quality_result){
|
|
|
-
|
|
|
+ if (qualitySubmitPending) {
|
|
|
+ JOptionPane.showMessageDialog(mesClientFrame,"正在提交,请稍候","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
+ return;
|
|
|
+ }
|
|
|
String sn = getBarcode(product_sn.getText());
|
|
|
getUser();
|
|
|
|
|
|
String qret = "OK";
|
|
|
+ qualitySubmitPending = true;
|
|
|
+ qualitySubmitAttempted = true;
|
|
|
+ qualitySubmitPendingSince = System.currentTimeMillis();
|
|
|
Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
|
|
|
if(!sendret){
|
|
|
+ qualitySubmitPending = false;
|
|
|
+ qualitySubmitAttempted = false;
|
|
|
+ qualitySubmitPendingSince = 0;
|
|
|
JOptionPane.showMessageDialog(mesClientFrame,"消息发送失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
return;
|
|
|
}
|
|
|
+ setMenuStatus("正在提交...", 0);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
@@ -838,15 +900,25 @@ public class MesClient extends JFrame {
|
|
|
finish_ng_bt.addActionListener(new ActionListener() {
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
if(work_status == 1 && check_quality_result){
|
|
|
-
|
|
|
+ if (qualitySubmitPending) {
|
|
|
+ JOptionPane.showMessageDialog(mesClientFrame,"正在提交,请稍候","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
+ return;
|
|
|
+ }
|
|
|
String sn = getBarcode(product_sn.getText());
|
|
|
getUser();
|
|
|
String qret = "NG";
|
|
|
+ qualitySubmitPending = true;
|
|
|
+ qualitySubmitAttempted = true;
|
|
|
+ qualitySubmitPendingSince = System.currentTimeMillis();
|
|
|
Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
|
|
|
if(!sendret){
|
|
|
+ qualitySubmitPending = false;
|
|
|
+ qualitySubmitAttempted = false;
|
|
|
+ qualitySubmitPendingSince = 0;
|
|
|
JOptionPane.showMessageDialog(mesClientFrame,"消息发送失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
return;
|
|
|
}
|
|
|
+ setMenuStatus("正在提交...", 0);
|
|
|
}
|
|
|
}
|
|
|
});
|