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 int isLogin = 0; 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 String preSn20 = ""; public static String preSn30 = ""; 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 MesWebView jfxPanel = null; public static JTable table; public static Object[] columnNames = { "物料名称", "绑定批次", "剩余次数", "操作" }; public static Object[][] rowData = null; public static TCPClient tcpClient1 = new TCPClient("192.168.90.51",9004); public static TCPClient tcpClient2 = new TCPClient("192.168.90.52",9004); public static TCPClient tcpClient3 = new TCPClient("192.168.90.53",9004); // 60B public static TCPClient tcpClient4 = new TCPClient("192.168.90.54",9004); // 70EFG public static int scanFlag1 = 0; public static int scanFlag2 = 0; public static int scanFlag3 = 0; public static int scanFlag4 = 0; public static String newSn = ""; // 最新二维码 public static WorkJPanelDevice workJPanelDeviceA; public static WorkJPanelDevice workJPanelDeviceB; public static WorkJPanelDevice workJPanelDeviceC; public static WorkJPanelDevice workJPanelDeviceD; public static JFrame tcframe = null; 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()); } } }); } public static Timer cjTimer3; public static void upParams() { if(cjTimer3!=null) { cjTimer3.cancel(); } cjTimer3 = new Timer(); cjTimer3.schedule(new TimerTask() { 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); } //读配置文件 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); // nettyClient = null; } public MesClient() { setIconImage(Toolkit.getDefaultToolkit().getImage(MesClient.class.getResource("/bg/logo.png"))); setTitle("MES系统客户端:"+mes_gw+OprnoUtil.getGwDes(MesClient.mes_line_sn,MesClient.mes_gw)); // 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); 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 indexPanelA = new JPanel(); indexScrollPaneA = new JScrollPane(indexPanelA); if(mes_gw.equals("OP220")){ indexPanelA.setLayout(new GridLayout(1,1, 5, 5)); }else{ indexPanelA.setLayout(new GridLayout(2,2, 5, 5)); } indexPanelA.setBackground(Color.LIGHT_GRAY); if(mes_gw.equals("OP110") || mes_gw.equals("OP170A") || mes_gw.equals("OP230")){ JPanel indexPanel20A = new JPanel(); indexPanel20A.setLayout(null); indexPanel20A.setBackground(Color.WHITE); workJPanelDeviceA = new WorkJPanelDevice("A"); workJPanelDeviceA.setBounds(10, 10, workJPanelDeviceA.workWidth, workJPanelDeviceA.workHeight); indexPanel20A.add(workJPanelDeviceA); indexPanelA.add(indexPanel20A); JPanel indexPanel20B = new JPanel(); indexPanel20B.setLayout(null); indexPanel20B.setBackground(Color.WHITE); workJPanelDeviceB = new WorkJPanelDevice("B"); workJPanelDeviceB.setBounds(10, 10, workJPanelDeviceB.workWidth, workJPanelDeviceB.workHeight); indexPanel20B.add(workJPanelDeviceB); indexPanelA.add(indexPanel20B); JPanel indexPanel20C = new JPanel(); indexPanel20C.setLayout(null); indexPanel20C.setBackground(Color.WHITE); workJPanelDeviceC = new WorkJPanelDevice("C"); workJPanelDeviceC.setBounds(10, 10, workJPanelDeviceC.workWidth, workJPanelDeviceC.workHeight); indexPanel20C.add(workJPanelDeviceC); indexPanelA.add(indexPanel20C); }else if(mes_gw.equals("OP170")){ JPanel indexPanel20A = new JPanel(); indexPanel20A.setLayout(null); indexPanel20A.setBackground(Color.WHITE); workJPanelDeviceA = new WorkJPanelDevice("A"); workJPanelDeviceA.setBounds(10, 10, workJPanelDeviceA.workWidth, workJPanelDeviceA.workHeight); indexPanel20A.add(workJPanelDeviceA); indexPanelA.add(indexPanel20A); JPanel indexPanel20B = new JPanel(); indexPanel20B.setLayout(null); indexPanel20B.setBackground(Color.WHITE); workJPanelDeviceB = new WorkJPanelDevice("B"); workJPanelDeviceB.setBounds(10, 10, workJPanelDeviceB.workWidth, workJPanelDeviceB.workHeight); indexPanel20B.add(workJPanelDeviceB); indexPanelA.add(indexPanel20B); JPanel indexPanel20C = new JPanel(); indexPanel20C.setLayout(null); indexPanel20C.setBackground(Color.WHITE); workJPanelDeviceC = new WorkJPanelDevice("C"); workJPanelDeviceC.setBounds(10, 10, workJPanelDeviceC.workWidth, workJPanelDeviceC.workHeight); indexPanel20C.add(workJPanelDeviceC); indexPanelA.add(indexPanel20C); JPanel indexPanel20D = new JPanel(); indexPanel20D.setLayout(null); indexPanel20D.setBackground(Color.WHITE); workJPanelDeviceD = new WorkJPanelDevice("D"); workJPanelDeviceD.setBounds(10, 10, workJPanelDeviceD.workWidth, workJPanelDeviceD.workHeight); indexPanel20D.add(workJPanelDeviceD); indexPanelA.add(indexPanel20D); }else if(mes_gw.equals("OP190")){ JPanel indexPanel20A = new JPanel(); indexPanel20A.setLayout(null); indexPanel20A.setBackground(Color.WHITE); workJPanelDeviceA = new WorkJPanelDevice("A"); workJPanelDeviceA.setBounds(10, 10, workJPanelDeviceA.workWidth, workJPanelDeviceA.workHeight); indexPanel20A.add(workJPanelDeviceA); indexPanelA.add(indexPanel20A); JPanel indexPanel20B = new JPanel(); indexPanel20B.setLayout(null); indexPanel20B.setBackground(Color.WHITE); workJPanelDeviceB = new WorkJPanelDevice("B"); workJPanelDeviceB.setBounds(10, 10, workJPanelDeviceB.workWidth, workJPanelDeviceB.workHeight); indexPanel20B.add(workJPanelDeviceB); indexPanelA.add(indexPanel20B); JPanel indexPanel20C = new JPanel(); indexPanel20C.setLayout(null); indexPanel20C.setBackground(Color.WHITE); workJPanelDeviceC = new WorkJPanelDevice("C"); workJPanelDeviceC.setBounds(10, 10, workJPanelDeviceC.workWidth, workJPanelDeviceC.workHeight); indexPanel20C.add(workJPanelDeviceC); indexPanelA.add(indexPanel20C); } tabbedPane.addTab("工作面板", null, indexScrollPaneA, null); tabbedPane.setEnabledAt(0, true); tabbedPane.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JTabbedPane tabbedPane = (JTabbedPane) e.getSource(); int selectedIndex = tabbedPane.getSelectedIndex(); if(selectedIndex == 1){ } } }); } 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; } }