package com.mes.ui; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.google.zxing.BarcodeFormat; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.mes.component.*; import com.mes.util.DateLocalUtils; import com.mes.util.JdbcUtils; import com.mes.util.TCPClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.List; import java.util.Properties; import java.util.Timer; import java.util.TimerTask; public class MesClient extends JFrame { public static final Logger log = LoggerFactory.getLogger(MesClient.class); private static String Drivde = "org.sqlite.JDBC"; public static int mes_auth = 0; // 权限级别 0=无权限 1=操作工人 2=管理员 public static String mes_gw = ""; // 工位号 public static String mes_gw_des = ""; // 工位名称 public static String mes_server_ip = ""; // 服务器IP地址 public static String mes_line_sn = ""; // 产线编号 public static String mes_line_pos = ""; //session public static String sessionid = ""; // public static String preSn = ""; public static volatile String preSn = ""; public static JPanel contentPane; public static MesClient mesClientFrame; public static JTabbedPane tabbedPane; public static JScrollPane indexScrollPaneA; public static JScrollPane indexScrollPaneB; public static JScrollPane indexScrollPaneC; public static JScrollPane indexScrollPaneD; // public static JScrollPane searchScrollPane; // 已弃用,改为使用 WorkRecordPanel public static int isLogin = 0; public static Boolean check_quality_result = false; public static Integer work_status = 0; public static JButton heart_beat_menu; public static JButton status_menu; public static JButton user_menu; public static JFrame welcomeWin; // public static JPanel indexPanelWork; // 已弃用,改为使用 WorkRecordPanel public static JTable table; public static Object[] columnNames = { "物料名称", "绑定批次", "剩余次数", "操作" }; public static Object[][] rowData = null; public static WorkJPanelOP60 workJPanelOP60; public static WorkJPanelOP60 workJPanelOP60B; // 封板正面FSW2(新增设备DB7004,C=西/D=东) public static WorkJPanelOP60Transfer workJPanelOP60Transfer; public static WorkJPanelOP70Transfer workJPanelOP70Transfer; public static WorkJPanel70Xh workJPanel70XhFront; // 正面换型台(OP070,扫码按OP070方式) public static WorkJPanelOP65 workJPanelOP65A; public static WorkJPanelOP70 workJPanelOP70A; public static WorkJPanelOP70 workJPanelOP70B; public static WorkJPanelOP70 workJPanelOP70C; public static WorkJPanel70Xh workJPanel70Xh; public static TCPClient tcpClient1 = new TCPClient("192.168.90.58",9004); // 60A public static TCPClient tcpClient2 = new TCPClient("192.168.90.60",9004); // 70ABC public static TCPClient tcpClient3 = new TCPClient("192.168.90.57",9004); // 60B public static TCPClient tcpClient4 = new TCPClient("192.168.90.59",9004); // 70EFG public static int scanFlag1 = 0; public static int scanFlag2 = 0; public static int scanFlag3 = 0; public static int scanFlag4 = 0; // 扫码手动输入开关(测试用,模拟扫码枪输入),每次启动默认关闭 public static volatile boolean manualScanEnabled = false; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { try{ //读文件配置 readProperty(); JdbcUtils.getConn(); // 显示界面 mesClientFrame = new MesClient(); mesClientFrame.setVisible(false); welcomeWin = new LoginFarme(); welcomeWin.setVisible(true); startHeartBeatTimer(); upParams(); }catch (Exception e){ log.error(e.getMessage()); } } }); } //读配置文件 private static void readProperty() throws IOException{ String enconding = "UTF-8"; InputStream is = ClassLoader.getSystemResourceAsStream("config/config.properties"); Properties pro = new Properties(); BufferedReader br = new BufferedReader(new InputStreamReader(is, enconding)); pro.load(br); mes_gw = pro.getProperty("mes.gw"); mes_gw_des = pro.getProperty("mes.gw_des"); mes_server_ip = pro.getProperty("mes.server_ip"); // mes_tcp_port = Integer.parseInt(pro.getProperty("mes.tcp_port")); // mes_heart_beat_cycle = Integer.parseInt(pro.getProperty("mes.heart_beat_cycle")); mes_line_sn = pro.getProperty("mes.line_sn"); mes_line_pos = pro.getProperty("mes.line_pos"); // mes_gw_des = OprnoUtil.getGwDes(mes_line_sn,mes_gw); // log.info(mes_gw + ";" + mes_gw_des + ";" + mes_server_ip + ";" + mes_tcp_port + ";" + mes_heart_beat_cycle); } //启动心跳包程序 public static java.util.Timer heartBeatIconTimer; public static boolean iconREDFlag = true; public static void startHeartBeatTimer() { //心跳显示图标 if(heartBeatIconTimer!=null) { heartBeatIconTimer.cancel(); } heartBeatIconTimer = new Timer(); heartBeatIconTimer.schedule(new TimerTask() { public void run() { if(iconREDFlag) { heart_beat_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/grey_dot.png"))); iconREDFlag = false; }else { heart_beat_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/green_dot.png"))); iconREDFlag = true; } heart_beat_menu.setText(DateLocalUtils.getCurrentTime()); heart_beat_menu.repaint(); } }, 100,1000); } public static void initWarehouseData(){ resetScanA(); } public static void resetScanA() { MesClient.setMenuStatus("请扫工件码",0); } public static void logoff() { mesClientFrame.setVisible(false); //退出程序 退出登录 // 释放窗口资源并关闭窗口 System.exit(0); } public MesClient() { setIconImage(Toolkit.getDefaultToolkit().getImage(MesClient.class.getResource("/bg/logo.png"))); setTitle("MES系统客户端:OP70-OP80"); // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // setBounds(0, 0, 1920, 1080); setBounds(0, 0, 1024, 768); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); // 防止默认的关闭操作 // 添加窗口监听器 addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { int choice = JOptionPane.showConfirmDialog(null, "确定要关闭窗口吗?", "关闭确认", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (choice == JOptionPane.YES_OPTION) { // 如果用户点击“是”,则关闭窗口 dispose(); // 释放窗口资源并关闭窗口 System.exit(0); } } }); JMenuBar menuBar = new JMenuBar(); menuBar.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 26)); setJMenuBar(menuBar); JMenu fileMenu = new JMenu("用户"); fileMenu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/user.png"))); fileMenu.setFont(new Font("微软雅黑", Font.PLAIN, 20)); menuBar.add(fileMenu); JMenuItem exitMenuItem = new JMenuItem("退出"); exitMenuItem.setIcon(new ImageIcon(MesClient.class.getResource("/bg/logoff.png"))); exitMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 22)); fileMenu.add(exitMenuItem); exitMenuItem.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) {//只能检测到mousePressed事件 super.mouseClicked(e); //dispose(); logoff(); } }); JMenu settingMenu = new JMenu("设置"); //settingMenu.setVisible(false); settingMenu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/menu_setting.png"))); settingMenu.setFont(new Font("微软雅黑", Font.PLAIN, 20)); menuBar.add(settingMenu); JMenuItem resetTcpMenu_1 = new JMenuItem("刷新工件"); resetTcpMenu_1.setIcon(new ImageIcon(MesClient.class.getResource("/bg/reset_logo.png"))); resetTcpMenu_1.setFont(new Font("微软雅黑", Font.PLAIN, 20)); resetTcpMenu_1.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { super.mouseClicked(e); resetScanA(); } }); // settingMenu.add(resetTcpMenu_1); // 扫码手动输入开关:开启绿色/关闭红色,开启后换型台面板显示手动输入行 JMenuItem manualScanMenu = new JMenuItem(); manualScanMenu.setFont(new Font("微软雅黑", Font.PLAIN, 20)); refreshManualScanMenu(manualScanMenu); manualScanMenu.addActionListener(e -> { manualScanEnabled = !manualScanEnabled; log.info("扫码手动输入" + (manualScanEnabled ? "已开启" : "已关闭") + ",操作人:" + user_menu.getText()); refreshManualScanMenu(manualScanMenu); if (workJPanel70XhFront != null) workJPanel70XhFront.setManualMode(manualScanEnabled); if (workJPanel70Xh != null) workJPanel70Xh.setManualMode(manualScanEnabled); }); settingMenu.add(manualScanMenu); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new BorderLayout(0, 0)); JToolBar toolBar = new JToolBar(); contentPane.add(toolBar, BorderLayout.NORTH); JLabel equipment_statu_label = new JLabel("状态:"); equipment_statu_label.setHorizontalAlignment(SwingConstants.CENTER); equipment_statu_label.setForeground(Color.BLACK); equipment_statu_label.setFont(new Font("微软雅黑", Font.PLAIN, 20)); equipment_statu_label.setBackground(Color.LIGHT_GRAY); toolBar.add(equipment_statu_label); status_menu = new JButton("已连接MES服务器"); status_menu.setForeground(Color.GREEN); status_menu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); status_menu.setForeground(Color.GREEN); status_menu.setFont(new Font("微软雅黑", Font.PLAIN, 20)); status_menu.setBackground(Color.BLACK); toolBar.add(status_menu); JLabel space_1 = new JLabel(" "); toolBar.add(space_1); JLabel heart_beat_status_label = new JLabel("心跳:"); heart_beat_status_label.setHorizontalAlignment(SwingConstants.CENTER); heart_beat_status_label.setForeground(Color.BLACK); heart_beat_status_label.setFont(new Font("微软雅黑", Font.PLAIN, 20)); heart_beat_status_label.setBackground(Color.LIGHT_GRAY); toolBar.add(heart_beat_status_label); heart_beat_menu = new JButton(""); heart_beat_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/green_dot.png"))); heart_beat_menu.setForeground(Color.GREEN); heart_beat_menu.setFont(new Font("微软雅黑", Font.PLAIN, 20)); heart_beat_menu.setBackground(Color.BLACK); toolBar.add(heart_beat_menu); JLabel space_2 = new JLabel(" "); toolBar.add(space_2); JLabel user_status_label = new JLabel("登录用户:"); user_status_label.setHorizontalAlignment(SwingConstants.CENTER); user_status_label.setForeground(Color.BLACK); user_status_label.setFont(new Font("微软雅黑", Font.PLAIN, 20)); user_status_label.setBackground(Color.LIGHT_GRAY); toolBar.add(user_status_label); user_menu = new JButton(""); user_menu.setForeground(Color.GREEN); user_menu.setFont(new Font("微软雅黑", Font.PLAIN, 22)); user_menu.setBackground(Color.BLACK); toolBar.add(user_menu); JLabel space_3 = new JLabel(" "); toolBar.add(space_3); JLabel space_4 = new JLabel(" "); toolBar.add(space_4); tabbedPane = new JTabbedPane(JTabbedPane.TOP); tabbedPane.setMinimumSize(new Dimension(400, 50)); tabbedPane.setFont(new Font("宋体", Font.BOLD, 22)); contentPane.add(tabbedPane); JPanel indexPanelB = new JPanel(); indexScrollPaneB = new JScrollPane(indexPanelB); indexPanelB.setLayout(new GridLayout(2,2, 5, 5)); indexPanelB.setBackground(Color.LIGHT_GRAY); if(mes_line_pos.equals("west")){ JPanel indexPanel60A = new JPanel(); indexPanel60A.setLayout(null); indexPanel60A.setBackground(Color.WHITE); workJPanelOP60 = new WorkJPanelOP60("A"); workJPanelOP60.setBounds(10, 10, workJPanelOP60.workWidth, workJPanelOP60.workHeight); indexPanel60A.add(workJPanelOP60); indexPanelB.add(indexPanel60A); // 封板正面FSW2(新增设备DB7004) JPanel indexPanel60B = new JPanel(); indexPanel60B.setLayout(null); indexPanel60B.setBackground(Color.WHITE); workJPanelOP60B = new WorkJPanelOP60("C"); workJPanelOP60B.setBounds(10, 10, workJPanelOP60B.workWidth, workJPanelOP60B.workHeight); indexPanel60B.add(workJPanelOP60B); indexPanelB.add(indexPanel60B); }else{ JPanel indexPanel60A = new JPanel(); indexPanel60A.setLayout(null); indexPanel60A.setBackground(Color.WHITE); workJPanelOP60 = new WorkJPanelOP60("B"); workJPanelOP60.setBounds(10, 10, workJPanelOP60.workWidth, workJPanelOP60.workHeight); indexPanel60A.add(workJPanelOP60); indexPanelB.add(indexPanel60A); // 封板正面FSW2(新增设备DB7004) JPanel indexPanel60B = new JPanel(); indexPanel60B.setLayout(null); indexPanel60B.setBackground(Color.WHITE); workJPanelOP60B = new WorkJPanelOP60("D"); workJPanelOP60B.setBounds(10, 10, workJPanelOP60B.workWidth, workJPanelOP60B.workHeight); indexPanel60B.add(workJPanelOP60B); indexPanelB.add(indexPanel60B); } // 中转车已取消(鑫政自动线PLC点位说明_MES_20261010标注取消;正面中转车原DB7001已分配给封板反面FSW1,保留实例会干扰反面FSW1信号,故不再创建) // JPanel indexPanel60BB = new JPanel(); // indexPanel60BB.setLayout(null); // indexPanel60BB.setBackground(Color.WHITE); // workJPanelOP60Transfer = new WorkJPanelOP60Transfer("A"); // workJPanelOP60Transfer.setBounds(10, 10, workJPanelOP60Transfer.workWidth, workJPanelOP60Transfer.workHeight); // indexPanel60BB.add(workJPanelOP60Transfer); // indexPanelB.add(indexPanel60BB); // // JPanel indexPanel60Bc = new JPanel(); // indexPanel60Bc.setLayout(null); // indexPanel60Bc.setBackground(Color.WHITE); // workJPanelOP70Transfer = new WorkJPanelOP70Transfer("B"); // workJPanelOP70Transfer.setBounds(10, 10, workJPanelOP70Transfer.workWidth, workJPanelOP70Transfer.workHeight); // indexPanel60Bc.add(workJPanelOP70Transfer); // indexPanelB.add(indexPanel60Bc); // 正面换型台:集中扫码,OP60设备面板从其文本框取码(扫码按OP070方式) JPanel indexPanel60Xh = new JPanel(); indexPanel60Xh.setLayout(null); indexPanel60Xh.setBackground(Color.WHITE); workJPanel70XhFront = new WorkJPanel70Xh("OP070", "C"); workJPanel70XhFront.setBounds(10, 10, workJPanel70XhFront.workWidth, workJPanel70XhFront.workHeight); indexPanel60Xh.add(workJPanel70XhFront); indexPanelB.add(indexPanel60Xh); tabbedPane.addTab("OP70封板正面FSW", null, indexScrollPaneB, null); tabbedPane.setEnabledAt(0, true); JPanel indexPanelC = new JPanel(); indexScrollPaneC = new JScrollPane(indexPanelC); indexPanelC.setLayout(new GridLayout(1,1, 5, 5)); indexPanelC.setBackground(Color.LIGHT_GRAY); JPanel indexPanel65A = new JPanel(); indexPanel65A.setLayout(null); indexPanel65A.setBackground(Color.WHITE); if (mes_line_pos.equals("west")){ workJPanelOP65A = new WorkJPanelOP65("A"); //西侧改为A }else { workJPanelOP65A = new WorkJPanelOP65("B"); //东侧改为B } workJPanelOP65A.setBounds(10, 10, workJPanelOP65A.workWidth, workJPanelOP65A.workHeight); indexPanel65A.add(workJPanelOP65A); indexPanelC.add(indexPanel65A); tabbedPane.addTab("OP75封板正面打磨", null, indexScrollPaneC, null); tabbedPane.setForegroundAt(1, Color.RED); JPanel indexPanelD = new JPanel(); indexScrollPaneD = new JScrollPane(indexPanelD); indexPanelD.setLayout(new GridLayout(2,2, 5, 5)); indexPanelD.setBackground(Color.LIGHT_GRAY); if(mes_line_pos.equals("west")){ JPanel indexPanel70A = new JPanel(); indexPanel70A.setLayout(null); indexPanel70A.setBackground(Color.WHITE); workJPanelOP70A = new WorkJPanelOP70("A"); workJPanelOP70A.setBounds(10, 10, workJPanelOP70A.workWidth, workJPanelOP70A.workHeight); indexPanel70A.add(workJPanelOP70A); indexPanelD.add(indexPanel70A); JPanel indexPanel70B = new JPanel(); indexPanel70B.setLayout(null); indexPanel70B.setBackground(Color.WHITE); workJPanelOP70B = new WorkJPanelOP70("B"); workJPanelOP70B.setBounds(10, 10, workJPanelOP70B.workWidth, workJPanelOP70B.workHeight); indexPanel70B.add(workJPanelOP70B); indexPanelD.add(indexPanel70B); // 反面3号机(原C位DB7004)已取消,不再创建面板 JPanel indexPanel70D = new JPanel(); indexPanel70D.setLayout(null); indexPanel70D.setBackground(Color.WHITE); workJPanel70Xh = new WorkJPanel70Xh("A"); // 反面换型台心跳/监控挂反面FSW1(DB7001),避免与正面FSW2的DB7004冲突 workJPanel70Xh.setBounds(10, 10, workJPanel70Xh.workWidth, workJPanel70Xh.workHeight); indexPanel70D.add(workJPanel70Xh); indexPanelD.add(indexPanel70D); }else{ JPanel indexPanel70A = new JPanel(); indexPanel70A.setLayout(null); indexPanel70A.setBackground(Color.WHITE); workJPanelOP70A = new WorkJPanelOP70("D"); workJPanelOP70A.setBounds(10, 10, workJPanelOP70A.workWidth, workJPanelOP70A.workHeight); indexPanel70A.add(workJPanelOP70A); indexPanelD.add(indexPanel70A); JPanel indexPanel70B = new JPanel(); indexPanel70B.setLayout(null); indexPanel70B.setBackground(Color.WHITE); workJPanelOP70B = new WorkJPanelOP70("E"); workJPanelOP70B.setBounds(10, 10, workJPanelOP70B.workWidth, workJPanelOP70B.workHeight); indexPanel70B.add(workJPanelOP70B); indexPanelD.add(indexPanel70B); // 反面3号机(原F位DB7004)已取消,不再创建面板 JPanel indexPanel70D = new JPanel(); indexPanel70D.setLayout(null); indexPanel70D.setBackground(Color.WHITE); workJPanel70Xh = new WorkJPanel70Xh("A"); // 反面换型台心跳/监控挂反面FSW1(DB7001),避免与正面FSW2的DB7004冲突 workJPanel70Xh.setBounds(10, 10, workJPanel70Xh.workWidth, workJPanel70Xh.workHeight); indexPanel70D.add(workJPanel70Xh); indexPanelD.add(indexPanel70D); } tabbedPane.addTab("OP80封板反面FSW", null, indexScrollPaneD, null); // ========== 工作记录 Tab(改造:OP60/OP65/OP70子工位Tab + 所有工位) ========== // 创建工作记录的子 TabbedPane JTabbedPane workRecordTabbedPane = new JTabbedPane(JTabbedPane.TOP); workRecordTabbedPane.setFont(new Font("微软雅黑", Font.PLAIN, 14)); // 定义所有子工位 // OP70(封板正面FSW): A西1号机, B东1号机, C西2号机, D东2号机(C/D为新增设备) // OP75(封板正面打磨): A, B // OP80(封板反面FSW): A西1号机, B西2号机, D东1号机, E东2号机(原C/F位3号机已取消) String[][] stationGroups = { {"OP070", "A", "B", "C", "D"}, {"OP075", "A", "B"}, {"OP080", "A", "B", "D", "E"} }; // 计算总的工位数(用于数组大小) int totalStations = 0; for (String[] group : stationGroups) { totalStations += group.length - 1; // 减去第一个元素(基础工位号) } WorkRecordPanel[] workRecordPanels = new WorkRecordPanel[totalStations + 1]; // +1 for "所有工位" int panelIndex = 0; // 为每个子工位创建 Tab for (String[] group : stationGroups) { String baseOprno = group[0]; // 如 OP060 for (int i = 1; i < group.length; i++) { String station = group[i]; // 如 A, B String oprno = baseOprno + station; workRecordPanels[panelIndex] = new WorkRecordPanel(oprno, mes_line_sn); workRecordTabbedPane.addTab(oprno, null, workRecordPanels[panelIndex], "查询" + oprno + "的工作记录"); panelIndex++; } } // 最后添加"所有工位"Tab(查询整条产线所有工位,不限于OP60/OP65/OP70) workRecordPanels[totalStations] = new WorkRecordPanel(null, mes_line_sn); workRecordTabbedPane.addTab("所有工位", null, workRecordPanels[totalStations], "查询整条产线所有工位的工作记录"); // 切换子Tab时自动刷新数据 workRecordTabbedPane.addChangeListener(e -> { int selectedIndex = workRecordTabbedPane.getSelectedIndex(); if (selectedIndex >= 0 && selectedIndex < workRecordPanels.length) { workRecordPanels[selectedIndex].refreshData(); } }); // 将子 TabbedPane 添加到主 TabbedPane tabbedPane.addTab("工作记录", null, workRecordTabbedPane, null); tabbedPane.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JTabbedPane tabbedPane = (JTabbedPane) e.getSource(); int selectedIndex = tabbedPane.getSelectedIndex(); if(selectedIndex == 1){ } } }); } // 按开关状态刷新菜单项文字和颜色 private static void refreshManualScanMenu(JMenuItem item){ item.setText("扫码手动输入:" + (manualScanEnabled ? "已开启" : "已关闭")); item.setForeground(manualScanEnabled ? new Color(0, 160, 0) : Color.RED); } public static void setMenuStatus(String msg,int error){ if(error == 0){ MesClient.status_menu.setForeground(Color.GREEN); }else{ MesClient.status_menu.setForeground(Color.RED); } MesClient.status_menu.setText(msg); } public static void createQRCode(String s,String title) { log.info("二维码:"+s); if(s == null || s.isEmpty()){ return; } s = s.trim(); try { BitMatrix bitMatrix = new QRCodeWriter().encode(s, BarcodeFormat.QR_CODE, 200, 200); BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); JDialog qrDialog = new JDialog(mesClientFrame, title, Dialog.ModalityType.APPLICATION_MODAL); qrDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); qrDialog.setSize(250, 250); qrDialog.setLocationRelativeTo(mesClientFrame); qrDialog.setResizable(false); JLabel qrLabel = new JLabel(new ImageIcon(qrImage)); qrDialog.getContentPane().add(qrLabel, BorderLayout.CENTER); qrDialog.setVisible(true); log.info("已生成二维码"); } catch (Exception e) { log.error("生成二维码失败", e); } } public static String scanQrcode1(){ if(scanFlag1 == 1){ return ""; } scanFlag1 = 1; String sn = ""; try{ if (tcpClient1.socket == null || !tcpClient1.socket.isConnected() || tcpClient1.socket.isClosed()) { tcpClient1.connect(); } log.error("扫码枪1正在进行扫码,请勿操作",0); sn = tcpClient1.receiveResponse(); if (sn == null || sn.equals("")) { sn = ""; } tcpClient1.close(); }catch (Exception e) { e.printStackTrace(); log.error("scanQrcode1:"+sn); tcpClient1.close(); } // MesClient.setMenuStatus(sn,0); scanFlag1 = 0; return sn; } public static String scanQrcode2(){ if(scanFlag2 == 1){ return ""; } scanFlag2 = 1; String sn = ""; try{ if (tcpClient2.socket == null || !tcpClient2.socket.isConnected() || tcpClient2.socket.isClosed()) { tcpClient2.connect(); } log.error("扫码枪2正在进行扫码,请勿操作",0); sn = tcpClient2.receiveResponse(); if (sn == null || sn.equals("")) { sn = ""; } tcpClient2.close(); }catch (Exception e) { e.printStackTrace(); log.error("scanQrcode2:"+sn); tcpClient2.close(); } // MesClient.setMenuStatus(sn,0); scanFlag2 = 0; return sn; } public static String scanQrcode3(){ if(scanFlag3 == 1){ return ""; } scanFlag3 = 1; String sn = ""; try{ if (tcpClient3.socket == null || !tcpClient3.socket.isConnected() || tcpClient3.socket.isClosed()) { tcpClient3.connect(); } log.error("扫码枪3正在进行扫码,请勿操作",0); sn = tcpClient3.receiveResponse(); if (sn == null || sn.equals("")) { sn = ""; } tcpClient3.close(); }catch (Exception e) { e.printStackTrace(); log.error("scanQrcode3:"+sn); tcpClient3.close(); } // MesClient.setMenuStatus(sn,0); scanFlag3 = 0; return sn; } public static String scanQrcode4(){ if(scanFlag4 == 1){ return ""; } scanFlag4 = 1; String sn = ""; try{ if (tcpClient4.socket == null || !tcpClient4.socket.isConnected() || tcpClient4.socket.isClosed()) { tcpClient4.connect(); } log.error("扫码枪4正在进行扫码,请勿操作",0); sn = tcpClient4.receiveResponse(); if (sn == null || sn.equals("")) { sn = ""; } tcpClient4.close(); }catch (Exception e) { e.printStackTrace(); log.error("scanQrcode4:"+sn); tcpClient4.close(); } // MesClient.setMenuStatus(sn,0); scanFlag4 = 0; return sn; } public static Timer cjTimer3; public static void upParams() { if (cjTimer3 != null) { cjTimer3.cancel(); } cjTimer3 = new Timer(); cjTimer3.schedule(new TimerTask() { @Override public void run() { try { List prods = JdbcUtils.getParams(); if (prods.size() > 0) { // 定时上传参数 JSONObject retObj = DataUtil.upParams(JSON.toJSONString(prods)); if (retObj.get("result") != null && retObj.get("result").toString().equalsIgnoreCase("true")) { // 更新sqlite已同步 for (ParamReq prodReq : prods) { JdbcUtils.updateProdSync(prodReq.getId(), 1); } } } } catch (Exception e) { e.printStackTrace(); } } }, 1000, 120*1000); } }