hou 3 hari lalu
induk
melakukan
2ab557bf8c
2 mengubah file dengan 49 tambahan dan 21 penghapusan
  1. 15 17
      src/com/mes/ui/MesClient.java
  2. 34 4
      src/com/mes/util/IweldCloudUtil.java

+ 15 - 17
src/com/mes/ui/MesClient.java

@@ -183,6 +183,8 @@ public class MesClient extends JFrame {
     public static MesRadio mesRadioHj;
     public static JPanel indexPanelC;
     public static MesWebView jfxPanel2 = null;
+    public static JPanel indexPanelDjB;
+    public static MesWebView jfxPanelDjB = null;
 
     // 开班点检(本地UI,不再加载网页)
     public static JLabel[] dj_a_lamps = new JLabel[6];
@@ -303,24 +305,18 @@ public class MesClient extends JFrame {
                 + sessionid + "&oprno=" + oprno + "&lineSn=" + mes_line_sn;
     }
 
-    /** 开班点检网页:A/B 面各一个 ulist(OP040A、OP040B) */
+    /** 开班点检网页:A/B 面各一个顶层 Tab(铺满可用区域) */
     public static void initProcessCheckWebViews(){
         if(jfxPanel2 != null || indexPanelC == null){
             return;
         }
-        JTabbedPane djTabs = new JTabbedPane();
-        djTabs.setBounds(0, 0, 990, 550);
+        jfxPanel2 = new MesWebView(buildProcessCheckUlistUrl(getOprno030A()));
+        indexPanelC.add(jfxPanel2, BorderLayout.CENTER);
 
-        MesWebView panelA = new MesWebView(buildProcessCheckUlistUrl(getOprno030A()));
-        panelA.setSize(990, 550);
-        djTabs.addTab("A面点检 " + getOprno030A(), panelA);
-
-        MesWebView panelB = new MesWebView(buildProcessCheckUlistUrl(getOprno030B()));
-        panelB.setSize(990, 550);
-        djTabs.addTab("B面点检 " + getOprno030B(), panelB);
-
-        indexPanelC.add(djTabs);
-        jfxPanel2 = panelA;
+        if(indexPanelDjB != null){
+            jfxPanelDjB = new MesWebView(buildProcessCheckUlistUrl(getOprno030B()));
+            indexPanelDjB.add(jfxPanelDjB, BorderLayout.CENTER);
+        }
     }
 
     public static String getDisplayOprno030A(){
@@ -1215,6 +1211,7 @@ public class MesClient extends JFrame {
         toolBar.add(space_4);
 
         tabbedPane = new JTabbedPane(JTabbedPane.TOP);
+        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
         tabbedPane.setMinimumSize(new Dimension(400, 50));
         tabbedPane.setFont(new Font("Microsoft YaHei UI", Font.BOLD, 22));
         contentPane.add(tabbedPane);
@@ -1523,12 +1520,13 @@ public class MesClient extends JFrame {
         indexPanelGz.setLayout(null);
 
 
-        indexPanelC = new JPanel();
-        searchScrollPaneDj = new JScrollPane(indexPanelC);
-        indexPanelC.setLayout(null);
+        indexPanelC = new JPanel(new BorderLayout());
 //        initStartShiftCheckPanel(indexPanelC);
 
-        tabbedPane.addTab("开班点检", new ImageIcon(MesClient.class.getResource("/bg/menu_data_preprocess.png")), searchScrollPaneDj, null);
+        tabbedPane.addTab("A面点检", new ImageIcon(MesClient.class.getResource("/bg/menu_data_preprocess.png")), indexPanelC, null);
+
+        indexPanelDjB = new JPanel(new BorderLayout());
+        tabbedPane.addTab("B面点检", new ImageIcon(MesClient.class.getResource("/bg/menu_data_preprocess.png")), indexPanelDjB, null);
 
 
         indexPanelB = new JPanel();

+ 34 - 4
src/com/mes/util/IweldCloudUtil.java

@@ -72,6 +72,7 @@ public class IweldCloudUtil {
             String loginUrl = pro.getProperty("iweld.login.url", DEFAULT_LOGIN_URL).trim();
             if (accessKey.isEmpty()) {
                 log.warn("IweldCloud login skipped: iweld.accessKey is empty");
+                sessionKey = "";
                 return false;
             }
 
@@ -80,6 +81,7 @@ public class IweldCloudUtil {
             String response = HttpUtils.sendPostRequestJson(loginUrl, body.toJSONString());
             if (response == null || response.isEmpty() || "false".equalsIgnoreCase(response)) {
                 log.error("IweldCloud login failed: empty response");
+                sessionKey = "";
                 return false;
             }
 
@@ -87,24 +89,28 @@ public class IweldCloudUtil {
             JSONObject result = json.getJSONObject("result");
             if (result == null) {
                 log.error("IweldCloud login failed: missing result");
+                sessionKey = "";
                 return false;
             }
             if (result.getIntValue("status") != 1) {
                 JSONObject error = result.getJSONObject("error");
                 String message = error != null ? error.getString("message") : "unknown";
                 log.error("IweldCloud login failed: status={}, message={}", result.getIntValue("status"), message);
+                sessionKey = "";
                 return false;
             }
 
             sessionKey = result.getString("sessionKey");
             if (sessionKey == null || sessionKey.isEmpty()) {
                 log.error("IweldCloud login failed: empty sessionKey");
+                sessionKey = "";
                 return false;
             }
             log.info("IweldCloud login success, sessionKey={}", sessionKey);
             return true;
         } catch (Exception e) {
             log.error("IweldCloud login error", e);
+            sessionKey = "";
             return false;
         }
     }
@@ -207,16 +213,40 @@ public class IweldCloudUtil {
     }
 
     /**
+     * 确保有有效 session 并拉取实时数据;失败时清 session 重登再拉一次。
+     * 用于隔夜 session 失效、客户端未重启等场景。
+     */
+    private static boolean ensureSessionAndFetchRunInfo() {
+        if (sessionKey == null || sessionKey.isEmpty()) {
+            if (!Boolean.TRUE.equals(login())) {
+                return false;
+            }
+        }
+        if (fetchRobotRunInfo()) {
+            return true;
+        }
+        log.warn("IweldCloud run info failed, clearing session and re-login");
+        sessionKey = "";
+        if (!Boolean.TRUE.equals(login())) {
+            return false;
+        }
+        try {
+            Thread.sleep(API_MIN_INTERVAL_MS);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            return false;
+        }
+        return fetchRobotRunInfo();
+    }
+
+    /**
      * 焊接运行中从 IweldCloud 采集焊机参数,更新界面并写入本地缓存。
      */
     public static void collectWeldingParams() {
         if (MesClient.tjFlaga != 2 && MesClient.tjFlagb != 2) {
             return;
         }
-        if (sessionKey == null || sessionKey.isEmpty()) {
-            login();
-        }
-        if (!fetchRobotRunInfo()) {
+        if (!ensureSessionAndFetchRunInfo()) {
             return;
         }