day01-init пре 3 дана
родитељ
комит
a856e9359e

+ 1 - 1
src/com/mes/component/GunPanel.java

@@ -331,7 +331,7 @@ public class GunPanel extends JPanel {
     }
 
     public boolean isTaskCompleted() {
-        return currentCount >= taskCount;
+        return taskCount > 0 && currentCount >= taskCount;
     }
 
     public int getCurrentCount() {

+ 2 - 0
src/com/mes/ui/LoginFarme.java

@@ -201,6 +201,8 @@ public class LoginFarme extends JFrame {
                     MesClient.initWarehouseData();
 
                     MesClient.initGunPanels();
+
+                    SwingUtilities.invokeLater(() -> MesClient.scanBarcode());
                 }
 
             }

+ 83 - 11
src/com/mes/ui/MesClient.java

@@ -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);
                 }
             }
         });

+ 21 - 19
src/com/mes/ui/MesRevice.java

@@ -34,7 +34,7 @@ public class MesRevice {
 //                new MyDialog(MesClient.mesClientFrame,"提示",lmsg);
             }
             if(MesClient.check_quality_result){
-                if(MesClient.work_status == 0){
+                if(MesClient.work_status == 0 || MesClient.autoSubmitEnabled){
                     MesClient.finish_ok_bt.setEnabled(false);
                     MesClient.finish_ng_bt.setEnabled(false);
                 }else{
@@ -93,25 +93,27 @@ public class MesRevice {
         }
     }
 
-    // 上传质量
+    // 上传质量(Netty 线程回调,UI 操作须切到 EDT)
     public static void updateResultRevice(String processMsgRet,String mes_msg){
-        try{
-            if(processMsgRet.equalsIgnoreCase("OK")) {
-
-                MesClient.resetScanA();
-//                MesClient.status_menu.setText("结果提交成功,请扫下一件");
-                MesClient.setMenuStatus("结果提交成功,请扫下一件",0);
-                MesClient.scan_type = 1;
-
-//                MesClient.scanBarcode();
-            }else{
-                MesClient.setMenuStatus("结果提交失败,请重试",-1);
-//                MesClient.status_menu.setText("结果提交失败,请重试");
-//                JOptionPane.showMessageDialog(MesClient.mesClientFrame,"结果提交失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
-//                return;
+        SwingUtilities.invokeLater(() -> {
+            try{
+                MesClient.qualitySubmitPending = false;
+                MesClient.qualitySubmitPendingSince = 0;
+                if(processMsgRet.equalsIgnoreCase("OK")) {
+                    MesClient.resetScanA();
+                    MesClient.setMenuStatus("结果提交成功,请扫下一件",0);
+                    MesClient.scan_type = 1;
+                    MesClient.scanBarcode();
+                }else{
+                    MesClient.setMenuStatus("结果提交失败,请重试",-1);
+                    if(MesClient.autoSubmitEnabled){
+                        MesClient.finish_ok_bt.setEnabled(true);
+                        MesClient.finish_ng_bt.setEnabled(true);
+                    }
+                }
+            }catch (Exception e){
+                e.printStackTrace();
             }
-        }catch (Exception e){
-            e.printStackTrace();
-        }
+        });
     }
 }

+ 1 - 1
src/com/mes/ui/OprnoUtil.java

@@ -24,7 +24,7 @@ public class OprnoUtil {
             "框架反面涂胶", "液冷板安装", "正面溢胶清理,补胶", "液冷板激光点固", "液冷板水嘴处焊接",
             "焊道打磨", "液冷板FSW", "匙孔补焊打磨", "总成反面拉铆", "总成正面拉铆1",
             "总成正面拉铆2", "边梁套筒涂胶+压合", "箱体封堵", "胶水固化", "半成品气密",
-            "补强板安装", "胶水固化", "拆卸补强板压紧工装", "FSW焊道涂胶+双层拉铆螺母涂胶", "人工抹胶",
+            "补强板安装", "胶水固化", "拆卸补强板压紧工装", "底护板螺栓复拧", "人工抹胶",
             "胶水固化", "反面部件装配", "底护板装配+底部套筒螺母安装", "底护板螺栓复拧", "总成气密",
             "液冷板气密", "总成正面装配", "总成清洁", "总成检具检验", "模拟客户安装界面(装)",
             "CCD", "GP12", "称重"

+ 2 - 2
src/resources/config/config.properties

@@ -1,6 +1,6 @@
-mes.gw=OP500A
+mes.gw=OP390A
 #mes.server_ip=127.0.0.1
-mes.server_ip=192.168.21.99
+mes.server_ip=192.168.18.99
 mes.tcp_port=3000
 mes.heart_beat_cycle=60
 mes.line_sn=XT