Przeglądaj źródła

优化判断逻辑

hou 1 tydzień temu
rodzic
commit
a86ef2fc9c

+ 26 - 0
src/com/mes/netty/ProtocolParam.java

@@ -43,7 +43,14 @@ public class ProtocolParam {
         return msg.substring(34,70);
     }
 
+    /**
+     * 结果区前缀:5位格式为「工位号3位+状态2位」(如130QN),4位格式为 RS+状态(如RSQN)
+     */
     public static String getLx(String msg){
+        String five = getFiveCharResultBlock(msg);
+        if(five != null){
+            return five.substring(0, 3).trim();
+        }
         if(msg.length() < 72){
             return "";
         }
@@ -52,12 +59,31 @@ public class ProtocolParam {
 
     // 获取结果
     public static String getResult(String msg){
+        String five = getFiveCharResultBlock(msg);
+        if(five != null){
+            return five.substring(3, 5).trim();
+        }
         if(msg.length() < 74){
             return "";
         }
         return msg.substring(72,74);
     }
 
+    private static String getFiveCharResultBlock(String msg){
+        if(msg == null || msg.length() < 75){
+            return null;
+        }
+        String five = msg.substring(70, 75);
+        String code = five.substring(3, 5);
+        // 5位结果:xxxCC;4位 RSXX 紧跟 DA 时 five 末位是 D,code 不会命中
+        if(code.equals("QN") || code.equals("QD") || code.equals("UD")
+                || code.equals("NE") || code.equals("NN") || code.equals("OK")
+                || code.equals("NG") || code.equals("MT")){
+            return five;
+        }
+        return null;
+    }
+
     // 获取日期
     public static String getDay(String msg){
         if(msg.length() < 86){

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

@@ -203,7 +203,7 @@ public class LoginFarme extends JFrame {
                         MesClient.indexPanelB.repaint();
                     }
 
-
+                    MesClient.getMaterailData();
                     MesClient.initWarehouseData();
                 }
 

+ 118 - 0
src/com/mes/ui/MesClient.java

@@ -109,6 +109,10 @@ public class MesClient extends JFrame {
     public static Object[] columnNames2 = { "任务名称" };
     public static Object[][] rowData2 = {{""},{""},{""}};
 
+    public static JTable materialTable;
+    public static Object[] materialColumnNames = { "物料名称", "绑定批次", "剩余次数", "操作" };
+    public static Object[][] materialRowData = null;
+
     public static Integer tjFlag = 0;
 
     public static String tjFlagText2 = "设备运行中";
@@ -343,6 +347,8 @@ public class MesClient extends JFrame {
 //        MesClient.f_scan_data_bt_1.setEnabled(true);
         MesClient.setMenuStatus("请扫工件码",0);
 
+        updateMaterailData();
+
 //        MesClient.result.setText("等待结果");
 //        MesClient.result.setForeground(Color.GRAY);
     }
@@ -957,6 +963,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("宋体", Font.BOLD, 22));
         contentPane.add(tabbedPane);
@@ -2120,4 +2127,115 @@ public class MesClient extends JFrame {
         MesClient.setMenuStatus("该类型工件未设置任务",-1);
         return false;
     }
+
+    public static void getMaterailData(){
+        try{
+            JSONObject retObj = DataUtil.getBindMaterail();
+            if(retObj == null){
+                return;
+            }
+            if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
+                List<BindMaterialResp> arrs = retObj.getList("data",BindMaterialResp.class);
+                int i = 0;
+                materialRowData = new Object[arrs.size()][7];
+                for (BindMaterialResp bindMaterialResp:arrs){
+                    materialRowData[i][0] = bindMaterialResp.getMaterialTitle();
+                    materialRowData[i][1] = bindMaterialResp.getBatchSn();
+                    materialRowData[i][2] = bindMaterialResp.getLastTimes();
+                    materialRowData[i][3] = "";
+                    materialRowData[i][4] = bindMaterialResp.getCraft();
+                    materialRowData[i][5] = bindMaterialResp.getMaterialId();
+                    materialRowData[i][6] = bindMaterialResp.getType();
+                    i++;
+                }
+                bindBatchPanel();
+            }
+        }catch (Exception e){
+            log.info(e.getMessage());
+        }
+    }
+
+    public static void updateMaterailData(){
+        try{
+            if(materialRowData == null){
+                return;
+            }
+            JSONObject retObj = DataUtil.getBindMaterail();
+            if(retObj == null){
+                return;
+            }
+            if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
+                List<BindMaterialResp> arrs = retObj.getList("data",BindMaterialResp.class);
+
+                int i = 0;
+                for (BindMaterialResp bindMaterialResp:arrs){
+                    materialRowData[i][0] = bindMaterialResp.getMaterialTitle();
+                    materialRowData[i][1] = bindMaterialResp.getBatchSn();
+                    materialRowData[i][2] = bindMaterialResp.getLastTimes();
+                    materialRowData[i][3] = "";
+                    materialRowData[i][4] = bindMaterialResp.getCraft();
+                    materialRowData[i][5] = bindMaterialResp.getMaterialId();
+                    materialRowData[i][6] = bindMaterialResp.getType();
+                    i++;
+                }
+
+                if(materialTable != null){
+                    materialTable.repaint();
+                }
+            }
+        }catch (Exception e){
+            log.info(e.getMessage());
+        }
+    }
+
+    public static void scanBatchSn(BindMaterialResp bindMaterialResp) {
+        String scanBarcodeTitle = "请扫物料:"+bindMaterialResp.getMaterialTitle();
+        String scanBarcode = JOptionPane.showInputDialog(null, scanBarcodeTitle);
+        if(scanBarcode!=null&&!scanBarcode.equalsIgnoreCase("")) {
+
+            JSONObject retObj = DataUtil.saveBindMaterail(scanBarcode,bindMaterialResp.getCraft(),bindMaterialResp.getMaterialId(),bindMaterialResp.getType());
+            if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
+                MesClient.setMenuStatus("扫物料:"+bindMaterialResp.getMaterialTitle()+"成功",0);
+                updateMaterailData();
+            }else{
+                if(retObj.get("result")==null){
+                    MesClient.setMenuStatus("请求失败,请重试",-1);
+                }else{
+                    if(retObj.get("result").toString().equalsIgnoreCase("false")){
+                        MesClient.setMenuStatus(retObj.getString("message"),-1);
+                    }
+                }
+            }
+        }
+    }
+
+    public static void bindBatchPanel(){
+        JPanel indexPanelBB = new JPanel();
+        JPanel panel = new JPanel();
+        panel.setBounds(0, 0, 990, 550);
+        indexPanelBB.add(panel);
+
+        panel.setLayout(new GridLayout(0, 1, 0, 0));
+        materialTable = new JTable(materialRowData, materialColumnNames){
+            public boolean isCellEditable(int row, int column) {
+                if(column == 3){
+                    return true;
+                }
+                return false;
+            }
+        };
+        materialTable.setRowHeight(40);
+        materialTable.setEnabled(true);
+        materialTable.setFont(new Font("微软雅黑", Font.PLAIN, 14));
+
+        materialTable.getColumnModel().getColumn(3).setCellRenderer(new TableCellRendererButton());
+        materialTable.getColumnModel().getColumn(3).setCellEditor(new TableCellEditorButton());
+
+        JScrollPane scrollPane = new JScrollPane(materialTable);
+        panel.add(scrollPane);
+
+        JScrollPane indexScrollPaneB = new JScrollPane(indexPanelBB);
+        indexPanelBB.setLayout(null);
+        tabbedPane.addTab("绑定物料", new ImageIcon(MesClient.class.getResource("/bg/menu_data_preprocess.png")), indexScrollPaneB, null);
+    }
 }

+ 9 - 13
src/com/mes/ui/TableCellEditorButton.java

@@ -22,20 +22,16 @@ public class TableCellEditorButton extends DefaultCellEditor {
             @Override
             public void actionPerformed(ActionEvent e) {
                 log.info("按钮事件触发----");
-                int selectedRow = MesClient.table.getSelectedRow();//获得选中行的索引
-//                MesClient.rowData[selectedRow][1] = (new Date()).getTime();
-//                MesClient.table.repaint(); //重绘
-
-//                MesClient.scan_type = selectedRow + 4;
+                int selectedRow = MesClient.materialTable.getSelectedRow();//获得选中行的索引
                 BindMaterialResp bindMaterialResp = new BindMaterialResp();
-                bindMaterialResp.setMaterialTitle(MesClient.rowData[selectedRow][0] + "");
-                bindMaterialResp.setBatchSn(MesClient.rowData[selectedRow][1] + "");
-                bindMaterialResp.setLastTimes(MesClient.rowData[selectedRow][2] + "");
-                bindMaterialResp.setCraft(MesClient.rowData[selectedRow][4] + "");
-                bindMaterialResp.setMaterialId(MesClient.rowData[selectedRow][5] + "");
-//                bindMaterialResp.setType(MesClient.rowData[selectedRow][6] + "");
-//
-//                MesClient.scanBatchSn(bindMaterialResp);
+                bindMaterialResp.setMaterialTitle(MesClient.materialRowData[selectedRow][0] + "");
+                bindMaterialResp.setBatchSn(MesClient.materialRowData[selectedRow][1] + "");
+                bindMaterialResp.setLastTimes(MesClient.materialRowData[selectedRow][2] + "");
+                bindMaterialResp.setCraft(MesClient.materialRowData[selectedRow][4] + "");
+                bindMaterialResp.setMaterialId(MesClient.materialRowData[selectedRow][5] + "");
+                bindMaterialResp.setType(MesClient.materialRowData[selectedRow][6] + "");
+
+                MesClient.scanBatchSn(bindMaterialResp);
             }
         });
 

+ 4 - 2
src/com/mes/util/ErrorMsg.java

@@ -11,9 +11,9 @@ public class ErrorMsg {
             }else if(processMsgRet.equalsIgnoreCase("NN")) {
                 lmsg = "该工件跳过该工位";
             }else if(processMsgRet.equalsIgnoreCase("QN")) {
-                lmsg = "该工件OP"+ lx+"0加工NG";
+                lmsg = "该工件OP"+ lx+"加工NG";
             }else if(processMsgRet.equalsIgnoreCase("QD")) {
-                lmsg = "该工件OP"+ lx+"0未加工";
+                lmsg = "该工件OP"+ lx+"未加工";
             }else if(processMsgRet.equalsIgnoreCase("NF")) {
                 lmsg = "该工件已合格下线";
             }else if(processMsgRet.equalsIgnoreCase("NR")) {
@@ -34,6 +34,8 @@ public class ErrorMsg {
                 lmsg = "配件寿命不足";
             }else if(processMsgRet.equalsIgnoreCase("QM")) {
                 lmsg = "两次气密必须间隔15分钟";
+            }else if(processMsgRet.equalsIgnoreCase("MT")) {
+                lmsg = "气密已达最大NG次数";
             }else if(processMsgRet.equalsIgnoreCase("GS")) {
                 lmsg = "工件码格式不正确";
             }else if(processMsgRet.equalsIgnoreCase("CF")) {