|
@@ -0,0 +1,994 @@
|
|
|
|
|
+package com.mes.ui;
|
|
|
|
|
+
|
|
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
|
|
+import com.github.s7connector.api.S7Connector;
|
|
|
|
|
+import com.github.s7connector.api.S7Serializer;
|
|
|
|
|
+import com.github.s7connector.api.factory.S7ConnectorFactory;
|
|
|
|
|
+import com.github.s7connector.api.factory.S7SerializerFactory;
|
|
|
|
|
+import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
|
|
|
|
|
+import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
|
|
|
|
|
+import com.mes.component.MesRadio;
|
|
|
|
|
+import com.mes.component.MesWebView;
|
|
|
|
|
+import com.mes.netty.NettyClient;
|
|
|
|
|
+import com.mes.util.DateLocalUtils;
|
|
|
|
|
+import com.mes.util.HttpUtils;
|
|
|
|
|
+import com.mes.util.JdbcUtils;
|
|
|
|
|
+import javafx.embed.swing.JFXPanel;
|
|
|
|
|
+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.ActionEvent;
|
|
|
|
|
+import java.awt.event.ActionListener;
|
|
|
|
|
+import java.awt.event.MouseAdapter;
|
|
|
|
|
+import java.awt.event.MouseEvent;
|
|
|
|
|
+import java.io.BufferedReader;
|
|
|
|
|
+import java.io.IOException;
|
|
|
|
|
+import java.io.InputStream;
|
|
|
|
|
+import java.io.InputStreamReader;
|
|
|
|
|
+import java.sql.ResultSet;
|
|
|
|
|
+import java.sql.SQLException;
|
|
|
|
|
+import java.sql.Statement;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Properties;
|
|
|
|
|
+import java.util.Timer;
|
|
|
|
|
+import java.util.TimerTask;
|
|
|
|
|
+import java.util.concurrent.ExecutorService;
|
|
|
|
|
+import java.util.concurrent.Executors;
|
|
|
|
|
+
|
|
|
|
|
+public class MesClient extends JFrame {
|
|
|
|
|
+ public static final Logger log = LoggerFactory.getLogger(MesClient.class);
|
|
|
|
|
+
|
|
|
|
|
+ public static int mes_auth = 0; // 权限级别 0=无权限 1=操作工人 2=管理员
|
|
|
|
|
+ public static String mes_gw = ""; // 工位号
|
|
|
|
|
+ public static String mes_gw_des = "液冷板FSW"; // 工位名称
|
|
|
|
|
+ public static String mes_server_ip = ""; // 服务器IP地址
|
|
|
|
|
+ public static int mes_tcp_port = 3000; // TCP服务端口
|
|
|
|
|
+ public static int mes_heart_beat_cycle = 10; // 心跳周期
|
|
|
|
|
+ public static int mes_heart_icon_cycle = 1;
|
|
|
|
|
+ public static String mes_line_sn = ""; // 产线编号
|
|
|
|
|
+
|
|
|
|
|
+ //TCP连接
|
|
|
|
|
+ public static NettyClient nettyClient;
|
|
|
|
|
+ //TCP连接状态
|
|
|
|
|
+ public static boolean tcp_connect_flag = false;
|
|
|
|
|
+ //TCP连接请求
|
|
|
|
|
+ public static boolean connect_request_flag = false;
|
|
|
|
|
+
|
|
|
|
|
+ //session
|
|
|
|
|
+ public static String sessionid = "";
|
|
|
|
|
+
|
|
|
|
|
+ public static JPanel contentPane;
|
|
|
|
|
+ public static MesClient mesClientFrame;
|
|
|
|
|
+ public static JTabbedPane tabbedPane;
|
|
|
|
|
+ public static JScrollPane indexScrollPaneA;
|
|
|
|
|
+ public static JScrollPane searchScrollPane;
|
|
|
|
|
+ public static JScrollPane searchScrollPaneDj;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ 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 int scan_type = 0;
|
|
|
|
|
+ public static JButton finish_ok_bt;
|
|
|
|
|
+ public static JButton finish_ng_bt;
|
|
|
|
|
+ public static JTextField product_sn;
|
|
|
|
|
+ public static JButton f_scan_data_bt_1;
|
|
|
|
|
+
|
|
|
|
|
+ public static String user20 = "";
|
|
|
|
|
+
|
|
|
|
|
+ public static JFrame welcomeWin;
|
|
|
|
|
+
|
|
|
|
|
+ public static JPanel indexPanelB;
|
|
|
|
|
+ public static MesWebView jfxPanel = null;
|
|
|
|
|
+ public static JPanel indexPanelC;
|
|
|
|
|
+ public static MesWebView jfxPanel2 = null;
|
|
|
|
|
+ public static MesRadio mesRadioHj;
|
|
|
|
|
+
|
|
|
|
|
+ public static JTable table;
|
|
|
|
|
+ public static Object[] columnNames = { "物料名称", "绑定批次", "剩余次数", "操作" };
|
|
|
|
|
+ public static Object[][] rowData = null;
|
|
|
|
|
+
|
|
|
|
|
+ public static JLabel fxlabel;
|
|
|
|
|
+
|
|
|
|
|
+ public static String plcUrl = "192.168.88.99";
|
|
|
|
|
+
|
|
|
|
|
+ public static S7PLC s7PLC = new S7PLC(EPlcType.SINUMERIK_828D, plcUrl);
|
|
|
|
|
+
|
|
|
|
|
+ public static S7Connector s7Connector = null;
|
|
|
|
|
+
|
|
|
|
|
+ public static Integer tjFlag = 0; // 0=未扫码 1=已扫码,设备未运行 2=设备运行中 3=设备运行结束,结果未提交到MES
|
|
|
|
|
+
|
|
|
|
|
+ public static Integer tjStatus = 0; // 0=重置 1=提交失败
|
|
|
|
|
+
|
|
|
|
|
+ public static Integer tjTime = 0; // 0=未超过限制时间 1=超过限制时间
|
|
|
|
|
+
|
|
|
|
|
+ public static Integer yxTime = 0;
|
|
|
|
|
+
|
|
|
|
|
+ public static String tjResult = "OK"; // 加工结果,只要不急停就算加工完成
|
|
|
|
|
+
|
|
|
|
|
+ public static String tjFlagText2 = "设备运行中";
|
|
|
|
|
+
|
|
|
|
|
+ public static String tjFlagText3 = "设备运行结束,提交结果中";
|
|
|
|
|
+
|
|
|
|
|
+ public static String tjFlagText4 = "结果已上传MES,请扫下一件";
|
|
|
|
|
+
|
|
|
|
|
+ public static String tjFlagText5 = "已扫码,等待设备运行";
|
|
|
|
|
+
|
|
|
|
|
+ public static String tjFlagTextErr = "结果上传MES失败,请重试";
|
|
|
|
|
+
|
|
|
|
|
+ //MES屏蔽开关
|
|
|
|
|
+ public static boolean mes_flag = false; //是否屏蔽MES true=屏蔽MES false=不屏蔽MES
|
|
|
|
|
+
|
|
|
|
|
+ public static JButton mesbtn;
|
|
|
|
|
+
|
|
|
|
|
+ public static String programNo = "";
|
|
|
|
|
+
|
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
|
+ if (LockUtil.getInstance().isAppActive() == true){
|
|
|
|
|
+// JOptionPane.showMessageDialog(null, "已有一个程序在运行,程序退出");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ EventQueue.invokeLater(new Runnable() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void run() {
|
|
|
|
|
+ try{
|
|
|
|
|
+ //读文件配置
|
|
|
|
|
+ readProperty();
|
|
|
|
|
+
|
|
|
|
|
+// S7Util.sendStartSignal(true);
|
|
|
|
|
+// S7Util.sendMesStatus(true);
|
|
|
|
|
+//
|
|
|
|
|
+// System.out.println(S7Util.getMesStatus());
|
|
|
|
|
+// System.out.println(S7Util.getDeviceStatus());
|
|
|
|
|
+// System.out.println(S7Util.getDeviceStart());
|
|
|
|
|
+//// System.out.println(S7Util.getMesStatus());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ // 显示界面
|
|
|
|
|
+ mesClientFrame = new MesClient();
|
|
|
|
|
+ mesClientFrame.setVisible(false);
|
|
|
|
|
+
|
|
|
|
|
+ JdbcUtils.getConn();
|
|
|
|
|
+
|
|
|
|
|
+ welcomeWin = new LoginFarme();
|
|
|
|
|
+ welcomeWin.setVisible(true);
|
|
|
|
|
+
|
|
|
|
|
+ getMaterailData();
|
|
|
|
|
+
|
|
|
|
|
+ startUpdateQualityTimer();
|
|
|
|
|
+
|
|
|
|
|
+ monitorDevice();
|
|
|
|
|
+
|
|
|
|
|
+ }catch (Exception e){
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //读配置文件
|
|
|
|
|
+ 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_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_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);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 初始化TCP
|
|
|
|
|
+ public static void initTcpConnection() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ if(nettyClient==null) {
|
|
|
|
|
+ //初始化TCP连接
|
|
|
|
|
+ nettyClient = new NettyClient();
|
|
|
|
|
+ //TCP连接状态
|
|
|
|
|
+ tcp_connect_flag = false;
|
|
|
|
|
+ //设置TCP请求状态
|
|
|
|
|
+ connect_request_flag = true;
|
|
|
|
|
+
|
|
|
|
|
+ DataUtil.synrTcp(nettyClient,mes_gw);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ // TODO Auto-generated catch block
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //启动心跳包程序
|
|
|
|
|
+ public static java.util.Timer heartBeatTimer;
|
|
|
|
|
+ public static java.util.Timer heartBeatIconTimer;
|
|
|
|
|
+ public static boolean iconREDFlag = true;
|
|
|
|
|
+ public static void startHeartBeatTimer() {
|
|
|
|
|
+ if(heartBeatTimer!=null) {
|
|
|
|
|
+ heartBeatTimer.cancel();
|
|
|
|
|
+ }
|
|
|
|
|
+ heartBeatTimer = new java.util.Timer();
|
|
|
|
|
+ heartBeatTimer.schedule(new TimerTask() {
|
|
|
|
|
+ public void run() {
|
|
|
|
|
+ if(nettyClient!=null&&tcp_connect_flag) {
|
|
|
|
|
+ //System.out.println("发送心跳报文");
|
|
|
|
|
+ DataUtil.heartBeat(nettyClient,mes_gw);
|
|
|
|
|
+
|
|
|
|
|
+ heart_beat_menu.setText(DateLocalUtils.getCurrentTime());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }, 100,mes_heart_beat_cycle*1000);
|
|
|
|
|
+
|
|
|
|
|
+ //心跳显示图标
|
|
|
|
|
+ if(heartBeatIconTimer!=null) {
|
|
|
|
|
+ heartBeatIconTimer.cancel();
|
|
|
|
|
+ }
|
|
|
|
|
+ heartBeatIconTimer = new Timer();
|
|
|
|
|
+ heartBeatIconTimer.schedule(new TimerTask() {
|
|
|
|
|
+ public void run() {
|
|
|
|
|
+ if(tcp_connect_flag) {
|
|
|
|
|
+ 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();
|
|
|
|
|
+ }else {
|
|
|
|
|
+ heart_beat_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/grey_dot.png")));
|
|
|
|
|
+ heart_beat_menu.setText(DateLocalUtils.getCurrentTime());
|
|
|
|
|
+ heart_beat_menu.repaint();
|
|
|
|
|
+
|
|
|
|
|
+ //若未连接则尝试连接
|
|
|
|
|
+ if(nettyClient!=null&&!tcp_connect_flag){
|
|
|
|
|
+ System.out.println("TCP已断开");
|
|
|
|
|
+ //TCP重新同步连接
|
|
|
|
|
+ if(!connect_request_flag) {
|
|
|
|
|
+ //System.out.println("TCP重新同步连接");
|
|
|
|
|
+ //设置TCP请求状态,只重新同步连接一次
|
|
|
|
|
+ connect_request_flag = true;
|
|
|
|
|
+
|
|
|
|
|
+ DataUtil.synrTcp(nettyClient,mes_gw);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }, 100,mes_heart_icon_cycle*1000);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //设置tcp连接状态显示
|
|
|
|
|
+ public static void setTcpStatus() {
|
|
|
|
|
+ if(tcp_connect_flag) {
|
|
|
|
|
+ status_menu.setText("已连接MES服务器");
|
|
|
|
|
+ heart_beat_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/grey_dot.png")));
|
|
|
|
|
+ heart_beat_menu.repaint();
|
|
|
|
|
+ }else {
|
|
|
|
|
+ status_menu.setText("未连接MES服务器");
|
|
|
|
|
+ heart_beat_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/grey_dot.png")));
|
|
|
|
|
+ heart_beat_menu.repaint();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static void initWarehouseData(){
|
|
|
|
|
+ resetScanA();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static void resetScanA() {
|
|
|
|
|
+ work_status = 0;
|
|
|
|
|
+ check_quality_result = false;
|
|
|
|
|
+ MesClient.finish_ok_bt.setEnabled(false);
|
|
|
|
|
+ MesClient.finish_ng_bt.setEnabled(false);
|
|
|
|
|
+ product_sn.setText("");
|
|
|
|
|
+ MesClient.fxlabel.setText("");
|
|
|
|
|
+ MesClient.fxlabel.setVisible(false);
|
|
|
|
|
+ MesClient.programNo = "";
|
|
|
|
|
+ MesClient.tjFlag = 0;
|
|
|
|
|
+ MesClient.tjTime = 0;
|
|
|
|
|
+ MesClient.yxTime = 0;
|
|
|
|
|
+
|
|
|
|
|
+ MesClient.f_scan_data_bt_1.setEnabled(true);
|
|
|
|
|
+ MesClient.status_menu.setText("请扫工件码");
|
|
|
|
|
+ S7Util.sendStartSignal(true);
|
|
|
|
|
+
|
|
|
|
|
+ updateMaterailData();
|
|
|
|
|
+ shiftUserCheck();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static int userLoginHours;//用户登录所处小时
|
|
|
|
|
+ //换班用户信息检查
|
|
|
|
|
+ private static void shiftUserCheck() {
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ // 判断时间范围
|
|
|
|
|
+ if (userLoginHours >= 8 && userLoginHours < 20) {
|
|
|
|
|
+
|
|
|
|
|
+ int hour = now.getHour();
|
|
|
|
|
+ if (hour >= 20 || hour < 8) {
|
|
|
|
|
+ logoff();
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ int hour = now.getHour();
|
|
|
|
|
+ if (hour >= 8 && hour < 20) {
|
|
|
|
|
+ logoff();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ public static void resetScanB() {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //获取用户20位
|
|
|
|
|
+ public static void getUser() {
|
|
|
|
|
+ user20 = user_menu.getText().toString();
|
|
|
|
|
+ String space_tmp1 = "";
|
|
|
|
|
+ if(user20.length()<20) {
|
|
|
|
|
+ for(int i=0;i<20-user20.length();i++) {
|
|
|
|
|
+ space_tmp1 = space_tmp1 + " ";
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ user20 = user20 + space_tmp1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //获取barcode内容36位
|
|
|
|
|
+ public static String getBarcode(String barcodeTmp) {
|
|
|
|
|
+ String barcodeRet = barcodeTmp;
|
|
|
|
|
+ if(barcodeTmp.equalsIgnoreCase("")) {
|
|
|
|
|
+ return "";
|
|
|
|
|
+ }else {
|
|
|
|
|
+ if(barcodeTmp.length()<36) {
|
|
|
|
|
+ String space = "";
|
|
|
|
|
+ for(int i=0;i<36-barcodeTmp.length();i++) {
|
|
|
|
|
+ space = space + " ";
|
|
|
|
|
+ }
|
|
|
|
|
+ barcodeRet = barcodeTmp + space;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return barcodeRet;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static void scanBarcode() {
|
|
|
|
|
+ if(work_status == 1){
|
|
|
|
|
+ JOptionPane.showMessageDialog(mesClientFrame,"工作中,勿扫码","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ String scanBarcodeTitle = "";
|
|
|
|
|
+ switch(scan_type) {
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ product_sn.setText("");
|
|
|
|
|
+ scanBarcodeTitle = "请扫工件码";
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //弹窗扫工件码
|
|
|
|
|
+ String scanBarcode = JOptionPane.showInputDialog(null, scanBarcodeTitle);
|
|
|
|
|
+ if(scanBarcode!=null&&!scanBarcode.equalsIgnoreCase("")) {
|
|
|
|
|
+ //获取用户
|
|
|
|
|
+ getUser();
|
|
|
|
|
+ //获取扫码内容36位
|
|
|
|
|
+ String barcode36 = getBarcode(scanBarcode);//处理36为码
|
|
|
|
|
+ //工位号
|
|
|
|
|
+ String gw = "";
|
|
|
|
|
+ switch(scan_type) {
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ product_sn.setText(scanBarcode);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ //刷新界面
|
|
|
|
|
+ mesClientFrame.repaint();
|
|
|
|
|
+
|
|
|
|
|
+ if(!tcp_connect_flag) {
|
|
|
|
|
+ MesClient.setMenuStatus("设备未连接Mes服务器",-1);
|
|
|
|
|
+// JOptionPane.showMessageDialog(mesClientFrame,"设备未连接Mes服务器","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 查询工件质量
|
|
|
|
|
+ Boolean sendret = DataUtil.checkQuality(nettyClient,barcode36,user20);
|
|
|
|
|
+ if(!sendret){
|
|
|
|
|
+ MesClient.setMenuStatus("消息发送失败,请重试",-1);
|
|
|
|
|
+// JOptionPane.showMessageDialog(mesClientFrame,"消息发送失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ }else {
|
|
|
|
|
+ MesClient.setMenuStatus("请扫工件码,请重试",-1);
|
|
|
|
|
+// JOptionPane.showMessageDialog(mesClientFrame,"请扫工件码","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static void logoff() {
|
|
|
|
|
+// welcomeWin.setVisible(true);
|
|
|
|
|
+ mesClientFrame.setVisible(false);
|
|
|
|
|
+
|
|
|
|
|
+ System.exit(0);
|
|
|
|
|
+ nettyClient = null;
|
|
|
|
|
+// if(heartBeatTimer!=null) {
|
|
|
|
|
+// heartBeatTimer.cancel();
|
|
|
|
|
+// }
|
|
|
|
|
+// if(heartBeatIconTimer!=null) {
|
|
|
|
|
+// heartBeatIconTimer.cancel();
|
|
|
|
|
+// }
|
|
|
|
|
+ tcp_connect_flag = false;
|
|
|
|
|
+ connect_request_flag = false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public MesClient() {
|
|
|
|
|
+ setIconImage(Toolkit.getDefaultToolkit().getImage(MesClient.class.getResource("/bg/logo.png")));
|
|
|
|
|
+ setTitle("MES系统客户端:"+mes_gw + "- " + mes_gw_des);
|
|
|
|
|
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
|
|
|
+ setBounds(0, 0, 1024, 768);
|
|
|
|
|
+
|
|
|
|
|
+ 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 = new JMenuItem("\u91CD\u8FDEMES");
|
|
|
|
|
+ resetTcpMenu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/reset_logo.png")));
|
|
|
|
|
+ resetTcpMenu.setFont(new Font("微软雅黑", Font.PLAIN, 20));
|
|
|
|
|
+ resetTcpMenu.addMouseListener(new MouseAdapter() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void mousePressed(MouseEvent e) {
|
|
|
|
|
+ super.mouseClicked(e);
|
|
|
|
|
+ //重连mes
|
|
|
|
|
+ nettyClient.future.channel().close();
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ settingMenu.add(resetTcpMenu);
|
|
|
|
|
+
|
|
|
|
|
+ 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 mes_block_menu = new JMenuItem("MES屏蔽");
|
|
|
|
|
+ mes_block_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/reset_logo.png")));
|
|
|
|
|
+ mes_block_menu.setFont(new Font("微软雅黑", Font.PLAIN, 20));
|
|
|
|
|
+
|
|
|
|
|
+ mes_block_menu.addMouseListener(new MouseAdapter() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void mousePressed(MouseEvent e) {
|
|
|
|
|
+ super.mouseClicked(e);
|
|
|
|
|
+ Color currentColor = mes_block_menu.getBackground();
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否为绿色
|
|
|
|
|
+ if (Color.GREEN.equals(currentColor)) {
|
|
|
|
|
+ // 还原成默认颜色(一般是 null 或菜单条的背景色)
|
|
|
|
|
+ mes_block_menu.setBackground(UIManager.getColor("MenuItem.background"));
|
|
|
|
|
+ mes_flag = false;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 设置为绿色
|
|
|
|
|
+ mes_block_menu.setBackground(Color.GREEN);
|
|
|
|
|
+ mes_flag = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ settingMenu.add(mes_block_menu);
|
|
|
|
|
+
|
|
|
|
|
+ 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服务器");
|
|
|
|
|
+ if(tcp_connect_flag) {
|
|
|
|
|
+ status_menu.setText("已连接MES服务器");
|
|
|
|
|
+ status_menu.setForeground(Color.GREEN);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ status_menu.setText("未连接MES服务器");
|
|
|
|
|
+ status_menu.setForeground(Color.DARK_GRAY);
|
|
|
|
|
+ }
|
|
|
|
|
+ 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("2024-02-20 23:20:10");
|
|
|
|
|
+ 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("JinJuShi");
|
|
|
|
|
+ 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);
|
|
|
|
|
+
|
|
|
|
|
+ mesbtn = new JButton("MES已开启");
|
|
|
|
|
+ mesbtn.setBackground(Color.GREEN);
|
|
|
|
|
+ mesbtn.setForeground(Color.WHITE);
|
|
|
|
|
+ mesbtn.setFont(new Font("微软雅黑", Font.PLAIN, 22));
|
|
|
|
|
+ toolBar.add(mesbtn);
|
|
|
|
|
+ mesbtn.addActionListener(new ActionListener() {
|
|
|
|
|
+ public void actionPerformed(ActionEvent e) {
|
|
|
|
|
+ String pass = "503833";
|
|
|
|
|
+// Boolean ret = S7Util.getMesStatus();
|
|
|
|
|
+ //弹窗扫工件码
|
|
|
|
|
+ String scanBarcode = JOptionPane.showInputDialog(null, "请输入密码");
|
|
|
|
|
+ if(scanBarcode!=null&&!scanBarcode.equalsIgnoreCase("")&&scanBarcode.equals(pass)) {
|
|
|
|
|
+
|
|
|
|
|
+ MesClient.mes_flag = !MesClient.mes_flag;
|
|
|
|
|
+// S7Util.sendMesStatus(!ret); // 屏蔽
|
|
|
|
|
+ formatMesStatus();
|
|
|
|
|
+ }else{
|
|
|
|
|
+ MesClient.setMenuStatus("密码错误",-1);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ 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);
|
|
|
|
|
+ indexPanelA.setLayout(null);
|
|
|
|
|
+
|
|
|
|
|
+ product_sn = new JTextField();
|
|
|
|
|
+ product_sn.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
+ product_sn.setEditable(false);
|
|
|
|
|
+ product_sn.setFont(new Font("微软雅黑", Font.PLAIN, 28));
|
|
|
|
|
+ product_sn.setBounds(81, 70, 602, 70);
|
|
|
|
|
+ indexPanelA.add(product_sn);
|
|
|
|
|
+ product_sn.setColumns(10);
|
|
|
|
|
+
|
|
|
|
|
+ f_scan_data_bt_1 = new JButton("扫码");
|
|
|
|
|
+ f_scan_data_bt_1.addActionListener(new ActionListener() {
|
|
|
|
|
+ public void actionPerformed(ActionEvent e) {
|
|
|
|
|
+ scan_type = 1;
|
|
|
|
|
+ scanBarcode();
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ f_scan_data_bt_1.setIcon(new ImageIcon(MesClient.class.getResource("/bg/scan_barcode.png")));
|
|
|
|
|
+ f_scan_data_bt_1.setFont(new Font("微软雅黑", Font.PLAIN, 32));
|
|
|
|
|
+ f_scan_data_bt_1.setBounds(693, 70, 198, 70);
|
|
|
|
|
+ indexPanelA.add(f_scan_data_bt_1);
|
|
|
|
|
+
|
|
|
|
|
+// String[] hjtitles = new String[]{"焊机1","焊机2","焊机3"};
|
|
|
|
|
+// String[] hjvals = new String[]{"HJ001","HJ002","HJ003"};
|
|
|
|
|
+// mesRadioHj = new MesRadio(hjtitles,hjvals);
|
|
|
|
|
+// mesRasdioHj.setSize(500,50);
|
|
|
|
|
+// mesRadioHj.setBounds(190,170,500,50);
|
|
|
|
|
+// indexPanelA.add(mesRadioHj);
|
|
|
|
|
+
|
|
|
|
|
+ fxlabel = new JLabel("该工件为返修件,请仔细检查");
|
|
|
|
|
+ fxlabel.setFont(new Font("微软雅黑", Font.PLAIN, 38));
|
|
|
|
|
+ fxlabel.setBounds(81, 170, 810, 70);
|
|
|
|
|
+ fxlabel.setForeground(Color.RED);
|
|
|
|
|
+ fxlabel.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
|
|
+ fxlabel.setVisible(false);
|
|
|
|
|
+ indexPanelA.add(fxlabel);
|
|
|
|
|
+
|
|
|
|
|
+ finish_ok_bt = new JButton("OK");
|
|
|
|
|
+ finish_ok_bt.setEnabled(false);
|
|
|
|
|
+ finish_ok_bt.addActionListener(new ActionListener() {
|
|
|
|
|
+ public void actionPerformed(ActionEvent e) {
|
|
|
|
|
+ if(work_status == 1 && check_quality_result){
|
|
|
|
|
+
|
|
|
|
|
+ String sn = getBarcode(product_sn.getText());
|
|
|
|
|
+ getUser();
|
|
|
|
|
+
|
|
|
|
|
+ String qret = "OK";
|
|
|
|
|
+ Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
|
|
|
|
|
+ if(!sendret){
|
|
|
|
|
+ MesClient.setMenuStatus("消息发送失败,请重试",-1);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }else{
|
|
|
|
|
+ MesClient.resetScanA();
|
|
|
|
|
+ MesClient.scan_type = 1;
|
|
|
|
|
+ MesClient.scanBarcode();
|
|
|
|
|
+ MesClient.setMenuStatus("结果提交成功,请扫下一件",0);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ finish_ok_bt.setIcon(new ImageIcon(MesClient.class.getResource("/bg/ok_bg.png")));
|
|
|
|
|
+ finish_ok_bt.setFont(new Font("微软雅黑", Font.PLAIN, 32));
|
|
|
|
|
+ finish_ok_bt.setBounds(185, 291, 240, 80);
|
|
|
|
|
+ finish_ok_bt.setEnabled(false);
|
|
|
|
|
+ indexPanelA.add(finish_ok_bt);
|
|
|
|
|
+
|
|
|
|
|
+ finish_ng_bt = new JButton("NG");
|
|
|
|
|
+ finish_ng_bt.setEnabled(false);
|
|
|
|
|
+ finish_ng_bt.addActionListener(new ActionListener() {
|
|
|
|
|
+ public void actionPerformed(ActionEvent e) {
|
|
|
|
|
+ if(work_status == 1 && check_quality_result){
|
|
|
|
|
+
|
|
|
|
|
+ String sn = getBarcode(product_sn.getText());
|
|
|
|
|
+ getUser();
|
|
|
|
|
+ String qret = "NG";
|
|
|
|
|
+ Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
|
|
|
|
|
+ if(!sendret){
|
|
|
|
|
+ MesClient.setMenuStatus("消息发送失败,请重试",-1);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }else{
|
|
|
|
|
+ MesClient.resetScanA();
|
|
|
|
|
+ MesClient.scan_type = 1;
|
|
|
|
|
+ MesClient.scanBarcode();
|
|
|
|
|
+ MesClient.setMenuStatus("结果提交成功,请扫下一件",0);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ finish_ng_bt.setIcon(new ImageIcon(MesClient.class.getResource("/bg/ng_bg.png")));
|
|
|
|
|
+ finish_ng_bt.setFont(new Font("微软雅黑", Font.PLAIN, 32));
|
|
|
|
|
+ finish_ng_bt.setBounds(508, 291, 240, 80);
|
|
|
|
|
+ finish_ng_bt.setEnabled(false);
|
|
|
|
|
+ indexPanelA.add(finish_ng_bt);
|
|
|
|
|
+
|
|
|
|
|
+ tabbedPane.addTab("工作面板", new ImageIcon(MesClient.class.getResource("/bg/a_side.png")), indexScrollPaneA, null);
|
|
|
|
|
+ tabbedPane.setEnabledAt(0, true);
|
|
|
|
|
+
|
|
|
|
|
+// searchScrollPane = new JScrollPane((Component) null);
|
|
|
|
|
+
|
|
|
|
|
+ indexPanelC = new JPanel();
|
|
|
|
|
+ searchScrollPaneDj = new JScrollPane(indexPanelC);
|
|
|
|
|
+ indexPanelC.setLayout(null);
|
|
|
|
|
+
|
|
|
|
|
+ tabbedPane.addTab("开班点检", new ImageIcon(MesClient.class.getResource("/bg/menu_data_preprocess.png")), searchScrollPaneDj, null);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ indexPanelB = new JPanel();
|
|
|
|
|
+ searchScrollPane = new JScrollPane(indexPanelB);
|
|
|
|
|
+ indexPanelB.setLayout(null);
|
|
|
|
|
+
|
|
|
|
|
+ tabbedPane.addTab("工作记录", new ImageIcon(MesClient.class.getResource("/bg/menu_data_preprocess.png")), searchScrollPane, null);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ tabbedPane.addChangeListener(new ChangeListener() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void stateChanged(ChangeEvent e) {
|
|
|
|
|
+ JTabbedPane tabbedPane = (JTabbedPane) e.getSource();
|
|
|
|
|
+ int selectedIndex = tabbedPane.getSelectedIndex();
|
|
|
|
|
+ System.out.println("selectedIndex:"+selectedIndex);
|
|
|
|
|
+
|
|
|
|
|
+ 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 getMaterailData(){
|
|
|
|
|
+ try{
|
|
|
|
|
+ JSONObject retObj = DataUtil.getBindMaterail();
|
|
|
|
|
+ if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
|
|
|
|
|
+ java.util.List<BindMaterialResp> arrs = retObj.getList("data",BindMaterialResp.class);
|
|
|
|
|
+ int i = 0;
|
|
|
|
|
+ rowData = new Object[arrs.size()][7];
|
|
|
|
|
+ for (BindMaterialResp bindMaterialResp:arrs){
|
|
|
|
|
+ rowData[i][0] = bindMaterialResp.getMaterialTitle();
|
|
|
|
|
+ rowData[i][1] = bindMaterialResp.getBatchSn();
|
|
|
|
|
+ rowData[i][2] = bindMaterialResp.getLastTimes();
|
|
|
|
|
+ rowData[i][3] = "";
|
|
|
|
|
+ rowData[i][4] = bindMaterialResp.getCraft();
|
|
|
|
|
+ rowData[i][5] = bindMaterialResp.getMaterialId();
|
|
|
|
|
+ rowData[i][6] = bindMaterialResp.getType();
|
|
|
|
|
+ i++;
|
|
|
|
|
+ }
|
|
|
|
|
+ bindBatchPanel();
|
|
|
|
|
+ }
|
|
|
|
|
+ }catch (Exception e){
|
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static void updateMaterailData(){
|
|
|
|
|
+ try{
|
|
|
|
|
+ JSONObject retObj = DataUtil.getBindMaterail();
|
|
|
|
|
+ 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){
|
|
|
|
|
+ rowData[i][0] = bindMaterialResp.getMaterialTitle();
|
|
|
|
|
+ rowData[i][1] = bindMaterialResp.getBatchSn();
|
|
|
|
|
+ rowData[i][2] = bindMaterialResp.getLastTimes();
|
|
|
|
|
+ rowData[i][3] = "";
|
|
|
|
|
+ rowData[i][4] = bindMaterialResp.getCraft();
|
|
|
|
|
+ rowData[i][5] = bindMaterialResp.getMaterialId();
|
|
|
|
|
+ rowData[i][6] = bindMaterialResp.getType();
|
|
|
|
|
+ i++;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ MesClient.table.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);
|
|
|
|
|
+// panel.setBounds(81, 50, 810, 479);
|
|
|
|
|
+ indexPanelBB.add(panel);
|
|
|
|
|
+
|
|
|
|
|
+ panel.setLayout(new GridLayout(0, 1, 0, 0));
|
|
|
|
|
+ table = new JTable(rowData, columnNames){
|
|
|
|
|
+ public boolean isCellEditable(int row, int column) {
|
|
|
|
|
+ if(column == 3){
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ table.setRowHeight(40);
|
|
|
|
|
+ table.setEnabled(true);
|
|
|
|
|
+ table.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
|
|
|
|
+
|
|
|
|
|
+ table.getColumnModel().getColumn(3).setCellRenderer(new TableCellRendererButton());
|
|
|
|
|
+ table.getColumnModel().getColumn(3).setCellEditor(new TableCellEditorButton());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ JScrollPane scrollPane = new JScrollPane(table);
|
|
|
|
|
+ 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);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 开启发送结果定时任务
|
|
|
|
|
+ public static void startUpdateQualityTimer(){
|
|
|
|
|
+ // 创建异步线程池
|
|
|
|
|
+ ExecutorService executorService = Executors.newSingleThreadExecutor();
|
|
|
|
|
+ // 提交任务
|
|
|
|
|
+ executorService.submit(() -> {
|
|
|
|
|
+ log.info("异步任务执行中...");
|
|
|
|
|
+ // 模拟耗时操作
|
|
|
|
|
+ try {
|
|
|
|
|
+ while (true){
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 确保连接已经打开
|
|
|
|
|
+ if (JdbcUtils.conn == null || JdbcUtils.conn.isClosed()) {
|
|
|
|
|
+ JdbcUtils.openConnection();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Statement statement = JdbcUtils.conn.createStatement();
|
|
|
|
|
+ String selectSql = "SELECT id, bw FROM submit_record\n" +
|
|
|
|
|
+ "WHERE state = 0 ORDER BY id DESC LIMIT 10";
|
|
|
|
|
+ String updateSql = "UPDATE submit_record \n" +
|
|
|
|
|
+ "SET state = '1'\n" +
|
|
|
|
|
+ "WHERE id = ";
|
|
|
|
|
+ ResultSet rs = statement.executeQuery(selectSql);
|
|
|
|
|
+ while(rs.next()){
|
|
|
|
|
+ int id = rs.getInt("id");
|
|
|
|
|
+ String bw = rs.getString("bw");
|
|
|
|
|
+ // 发送请求
|
|
|
|
|
+ String url = "http://"+MesClient.mes_server_ip+":8980/js/a/mes/mesProductRecord/updateQualityByTiming";
|
|
|
|
|
+ log.info("质量:"+bw);
|
|
|
|
|
+ String s = HttpUtils.sendPostRequestJson(url, bw );
|
|
|
|
|
+ log.info("结果:"+s);
|
|
|
|
|
+ Boolean result = JSONObject.parseObject(s).getBoolean("result");
|
|
|
|
|
+ if(result) {
|
|
|
|
|
+ // 更改状态为 1
|
|
|
|
|
+ statement.executeUpdate(updateSql + id);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ rs.close();
|
|
|
|
|
+ statement.close();
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ Thread.sleep(2000);
|
|
|
|
|
+ }catch (Exception e){
|
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ log.info("异步任务执行完毕");
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 开启发送结果定时任务
|
|
|
|
|
+ public static void monitorDevice(){
|
|
|
|
|
+ // 创建异步线程池
|
|
|
|
|
+ ExecutorService executorService = Executors.newSingleThreadExecutor();
|
|
|
|
|
+ // 提交任务
|
|
|
|
|
+ executorService.submit(() -> {
|
|
|
|
|
+ log.info("监控设备异步任务执行中...");
|
|
|
|
|
+ // 模拟耗时操作
|
|
|
|
|
+ try {
|
|
|
|
|
+ while (true){
|
|
|
|
|
+ try{
|
|
|
|
|
+ formatMesStatus();
|
|
|
|
|
+ }catch (Exception e){
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ initS7();
|
|
|
|
|
+ if (mes_flag){
|
|
|
|
|
+ S7Util.getDeviceShield();
|
|
|
|
|
+ }else{
|
|
|
|
|
+ if (work_status == 0){
|
|
|
|
|
+ S7Util.sendStartSignal(true);
|
|
|
|
|
+ }
|
|
|
|
|
+ S7Util.getDeviceState();
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ Thread.sleep(1000);
|
|
|
|
|
+ }catch (Exception e){
|
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.info(e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ log.info("异步任务执行完毕");
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static void formatMesStatus(){
|
|
|
|
|
+// Boolean ret = S7Util.getMesStatus();
|
|
|
|
|
+ Boolean ret = MesClient.mes_flag;
|
|
|
|
|
+ if(ret){ // MES屏蔽
|
|
|
|
|
+ mesbtn.setBackground(Color.RED);
|
|
|
|
|
+ mesbtn.setText("MES已屏蔽");
|
|
|
|
|
+ }else{
|
|
|
|
|
+ mesbtn.setBackground(Color.GREEN);
|
|
|
|
|
+ mesbtn.setText("MES已开启");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static void initS7(){
|
|
|
|
|
+ try {
|
|
|
|
|
+ if(s7Connector == null) {
|
|
|
|
|
+
|
|
|
|
|
+ //PLC地址
|
|
|
|
|
+ String ipAddress = plcUrl;
|
|
|
|
|
+ //默认端口
|
|
|
|
|
+// int port = 102;
|
|
|
|
|
+ int rack=0;
|
|
|
|
|
+ int slot=3;
|
|
|
|
|
+ int timeout=5000;
|
|
|
|
|
+ s7Connector=
|
|
|
|
|
+ S7ConnectorFactory
|
|
|
|
|
+ .buildTCPConnector()
|
|
|
|
|
+ .withHost(ipAddress)
|
|
|
|
|
+// .withPort(port) //optional
|
|
|
|
|
+// .withRack(rack) //optional
|
|
|
|
|
+// .withSlot(slot) //optional
|
|
|
|
|
+ .withTimeout(timeout) //连接超时时间
|
|
|
|
|
+ .build();
|
|
|
|
|
+ S7Serializer s7Serializer2L = S7SerializerFactory.buildSerializer(s7Connector);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) { // 如果连接失败保存失败再次尝试连接一次
|
|
|
|
|
+ s7Connector = null;
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|