Преглед на файлове

● OP100 打码产品改由服务端计划下发

  - 删除产品 PN 硬编码下拉,改为只读显示服务端返回的产品号
  - getHmbContent 去掉 pn 参数,产品由服务端按计划确定
  - 取码成功显示长码和产品号,失败后限频重试
  - 收到 PLAN_FINISHED / NO_PLAN 停止自动取码,刷新工件可恢复
wangxichen преди 3 дни
родител
ревизия
ebc0bb78ec
променени са 3 файла, в които са добавени 36 реда и са изтрити 33 реда
  1. 3 3
      src/com/mes/ui/DataUtil.java
  2. 16 28
      src/com/mes/ui/MesClient.java
  3. 17 2
      src/com/mes/ui/PlcUtil.java

+ 3 - 3
src/com/mes/ui/DataUtil.java

@@ -168,8 +168,8 @@ public class DataUtil {
         }
     }
 
-    // pn:产品PN号(195/196/198),决定长码前缀
-    public static JSONObject getHmbContent(String user, String pn){
+    // 获取长码:产品号由服务端按生产计划下发,客户端不传 pn
+    public static JSONObject getHmbContent(String user){
         try{
             String enconding = "UTF-8";
             InputStream is = ClassLoader.getSystemResourceAsStream("config/config.properties");
@@ -180,7 +180,7 @@ public class DataUtil {
             String oprno = pro.getProperty("mes.gw").trim();
             String lineSn = pro.getProperty("mes.line_sn").trim();
             String url = "http://"+mes_server_ip+":8980/js/a/mes/mesProductHmb/getContent";
-            String params = "__ajax=json&oprno="+oprno+"&lineSn="+lineSn+"&pn="+pn+"&ucode="+user;
+            String params = "__ajax=json&oprno="+oprno+"&lineSn="+lineSn+"&ucode="+user;
             log.info("params="+params);
             String result = doPost(url,params);
             log.info("result="+result);

+ 16 - 28
src/com/mes/ui/MesClient.java

@@ -64,10 +64,12 @@ public class MesClient extends JFrame {
 
     public static String user20 = "";
 
-    // 产品PN号(195/196/198),决定长码前缀 F95621032519X
-    public static final String[] PN_LIST = {"195", "196", "198"};
-    public static JComboBox<String> pnCombo;
-    public static String pnCacheKey = "pn_";
+    // 当前加工产品PN号,由服务端按生产计划下发
+    public static String currentPn = "";
+    public static JLabel pnLabel;
+    // 计划已完成/无计划时停止自动取码;失败后的下次重试时间
+    public static boolean planStop = false;
+    public static long nextRetryTime = 0;
 
     public static JFrame welcomeWin;
 
@@ -146,7 +148,6 @@ public class MesClient extends JFrame {
         mes_server_ip = pro.getProperty("mes.server_ip");
         mes_line_sn = pro.getProperty("mes.line_sn");
         mes_gw_des = OprnoUtil.getGwDes(mes_line_sn,mes_gw);
-        pnCacheKey = "pn_" + mes_gw; // 产品PN按工位缓存
         log.info(mes_gw + ";" + mes_gw_des + ";" + mes_server_ip + ";");
     }
 
@@ -193,6 +194,8 @@ public class MesClient extends JFrame {
     public static void resetScanA() {
         work_status = 0;
         check_quality_result = false;
+        planStop = false;
+        nextRetryTime = 0;
         MesClient.finish_ok_bt.setEnabled(false);
         MesClient.finish_ng_bt.setEnabled(false);
         product_sn.setText("");
@@ -229,11 +232,6 @@ public class MesClient extends JFrame {
 
     }
 
-    // 当前选中的产品PN号,未选择时默认195
-    public static String getPn() {
-        return pnCombo == null ? PN_LIST[0] : String.valueOf(pnCombo.getSelectedItem());
-    }
-
     //获取用户20位
     public static void getUser() {
         user20 = user_menu.getText().toString();
@@ -480,27 +478,17 @@ public class MesClient extends JFrame {
         indexPanelA.add(product_sn);
         product_sn.setColumns(10);
 
-        // 产品PN选择:决定长码前缀,选择后存本地,重启保持
-        JLabel pnLabel = new JLabel("产品PN:");
+        // 产品PN号:由服务端按生产计划下发,界面只读显示
+        JLabel pnTitle = new JLabel("产品PN:");
+        pnTitle.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        pnTitle.setBounds(81, 15, 100, 40);
+        indexPanelA.add(pnTitle);
+
+        pnLabel = new JLabel("-");
         pnLabel.setFont(new Font("微软雅黑", Font.PLAIN, 20));
-        pnLabel.setBounds(81, 15, 100, 40);
+        pnLabel.setBounds(185, 15, 140, 40);
         indexPanelA.add(pnLabel);
 
-        pnCombo = new JComboBox<>(PN_LIST);
-        pnCombo.setFont(new Font("微软雅黑", Font.PLAIN, 20));
-        pnCombo.setBounds(185, 15, 140, 40);
-        String cachePn = JdbcUtils.getCacheValue(pnCacheKey);
-        pnCombo.setSelectedItem(cachePn.isEmpty() ? PN_LIST[0] : cachePn);
-        pnCombo.addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                String pn = getPn();
-                JdbcUtils.setCacheValue(pnCacheKey, pn);
-                setMenuStatus("当前产品:" + pn, 0);
-                log.info("切换产品PN: {}", pn);
-            }
-        });
-        indexPanelA.add(pnCombo);
-
         f_scan_data_bt_1 = new JButton("扫码");
         f_scan_data_bt_1.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {

+ 17 - 2
src/com/mes/ui/PlcUtil.java

@@ -48,25 +48,40 @@ public class PlcUtil {
 
     public static void monitorPlc(S7PLC s7PLC){
         Boolean feeding = getFeeding(s7PLC);
-        if (feeding && MesClient.dateLoading == 0){
+        // 计划已完成/无计划时不再自动取码;失败后按间隔重试
+        if (feeding && MesClient.dateLoading == 0 && !MesClient.planStop
+                && System.currentTimeMillis() >= MesClient.nextRetryTime){
             MesClient.dateLoading = 1;
-            JSONObject retObj = DataUtil.getHmbContent(MesClient.user_menu.getText().trim(), MesClient.getPn());
+            JSONObject retObj = DataUtil.getHmbContent(MesClient.user_menu.getText().trim());
             if(retObj == null){
                 MesClient.setMenuStatus("请求失败,请重试",-1);
+                MesClient.nextRetryTime = System.currentTimeMillis() + 10000;
                 MesClient.dateLoading = 0;
                 return;
             }
             if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
                 String hmb = retObj.getString("data");
+                // 显示服务端下发的产品号
+                String pn = retObj.getString("pn");
+                if(pn != null && !pn.isEmpty()){
+                    MesClient.currentPn = pn;
+                    MesClient.pnLabel.setText(pn);
+                }
                 setQrcode(s7PLC,hmb);
                 MesClient.dateLoading = 0;
                 MesClient.product_sn.setText(hmb);
                 MesClient.mesClientFrame.repaint();
             }else{
+                MesClient.nextRetryTime = System.currentTimeMillis() + 10000;
                 if(retObj.get("result")==null){
                     MesClient.setMenuStatus("请求失败,请重试",-1);
                 }else{
                     if(retObj.get("result").toString().equalsIgnoreCase("false")){
+                        String code = retObj.getString("code");
+                        if("PLAN_FINISHED".equals(code) || "NO_PLAN".equals(code)){
+                            MesClient.planStop = true;
+                            MesClient.log.info("停止自动取码,code={}", code);
+                        }
                         MesClient.setMenuStatus(retObj.getString("message"),-1);
                     }
                 }