package com.mes.ygsl; import com.mes.ui.DataUtil; import com.mes.ui.MesClient; import com.mes.util.JdbcUtils; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.awt.*; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; public class YgslClientHandler extends ChannelInboundHandlerAdapter { public static final Logger log = LoggerFactory.getLogger(MesClient.class); private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static byte[] responseByte; @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { System.out.println("mes connecting:" + sdf.format(new Date())); } @Override public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { Channel channel = ctx.channel(); System.err.println("close ygsl tcp, ip:" + channel.remoteAddress()); // 关闭通道 channel.close(); //初始化TCP连接 MesClient.ygslClient = null; //TCP连接状态 MesClient.ygsl_tcp_connect_flag = false; //设置TCP请求状态 MesClient.ygsl_connect_request_flag = true; } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { try { // System.out.println("msg1111111:"+msg); if (msg instanceof ByteBuf) { ByteBuf buf = (ByteBuf) msg; // 你的处理逻辑 String content = buf.toString(StandardCharsets.UTF_8); // System.out.println("oldmsg:"+content); if (content.contains("02310061")){ // 找到关键字的位置 int index = content.indexOf("02310061"); // 截取从关键字开始到末尾的内容 content = content.substring(index); } // // System.out.println("msg:" + content); // System.out.println("msg-size:" + content.length()); String mid = YgslParam.getMid(content); // System.out.println("MID:" + mid); switch (mid) { case "0002": YgslUtil.lastTighteningResultSubscribe(MesClient.ygslClient); // YgslUtil.pSet(MesClient.ygslClient); break; case "0011": YgslUtil.selectSet(MesClient.ygslClient); break; case "0031": YgslUtil.selectJob(MesClient.ygslClient); // YgslUtil.restartJob(MesClient.ygslClient); break; case "0004": // 错误信息 // System.out.println("MID:" + YgslParam.getReplyMid(content) + ";ErrorCode:" + YgslParam.getErrCode(content)); break; case "0005": // 命令被接受 // System.out.println("命令被接受:" + YgslParam.getReplyMid(content)); break; case "0061": // 拧紧数据 if (MesClient.work_status == 1) { String tighteningStatus = YgslParam.getTighteningStatus(content); String torqueStatus = YgslParam.getTorqueStatus(content); String angleStatus = YgslParam.getAngleStatus(content); String torqueMin = YgslParam.getTorqueMinLimit(content); String torqueMax = YgslParam.getTorqueMaxLimit(content); String torqueFinal = YgslParam.getTorqueFinalTarget(content); String torque = YgslParam.getTorque(content); String angleMin = YgslParam.getAngleMin(content); String angleMax = YgslParam.getAngleMax(content); String angleFinal = YgslParam.getFinalAngleTarget(content); String angle = YgslParam.getAngle(content); String jobID = YgslParam.getJobID(content); String tighteningID = YgslParam.getTighteningID(content); if (!tighteningID.isEmpty() && !MesClient.atids.contains(tighteningID)) { MesClient.atids.add(tighteningID); String sn = MesClient.product_sn.getText().trim(); //检查数据是否已存在 Boolean checkRet = JdbcUtils.checkTighteningById(tighteningID, jobID,sn); // if (!checkRet) { if (true) { // if(tighteningStatus.equals("0")){ // NG // if(torqueStatus.equals("1")){ // MesClient.torque.setForeground(Color.BLACK); // }else{ // MesClient.torque.setForeground(Color.RED); // } // if(angleStatus.equals("1")){ // MesClient.torque.setForeground(Color.BLACK); // }else{ // MesClient.torque.setForeground(Color.RED); // } // }else{ // MesClient.torque.setForeground(Color.BLACK); // if(tighteningStatus.equals("1")){ // MesClient.cur++; // } // // } // String serialNumber = String.valueOf(MesClient.cur); // if(!tighteningStatus.equals("1")){ // serialNumber = String.valueOf(MesClient.cur + 1); // } MesClient.torsionalValue.setText(torque+"N.m"); MesClient.torsionalMaxValue.setText(torqueMin+"-"+torqueMax+"N.m"); //扭力值在范围内数量+1 if( MesClient.cur= Double.parseDouble(torqueMin) && Double.parseDouble(torque) <= Double.parseDouble(torqueMax)){ MesClient.cur++; MesClient.torsionalValue.setForeground(Color.BLACK); // MesClient.monitoring_text.setText(MesClient.max + "/" + MesClient.cur); MesClient.monitoring_text.setText(MesClient.cur + "/" + MesClient.max); JdbcUtils.insertProdData(MesClient.mes_gw,MesClient.mes_line_sn,MesClient.product_sn.getText(),torque,"OK",MesClient.user_menu.getText(),tighteningID,jobID); // if (MesClient.cur==32){ // MesClient.torsionalMaxValue.setText("6.5-7.5N.m"); // } //只记录合格数据 // JdbcUtils.insertTighteningData( // MesClient.mes_gw, MesClient.mes_line_sn, MesClient.product_sn.getText() // , torqueStatus, torqueMin, torqueMax, torqueFinal, torque, // tighteningID, jobID,String.valueOf(MesClient.cur), // MesClient.user_menu.getText() // ); }else{ MesClient.torsionalValue.setForeground(Color.RED); } //达到次数才能点击下一件 if (MesClient.cur == MesClient.max){ // MesClient.finish_ok_bt.setEnabled(true); if(MesClient.fininsh_flag){ MesClient.setMenuStatus("结果已提交!",-1); return; } if(MesClient.connect_request_flag){ MesClient.setMenuStatus("设备未连接Mes服务器!",-1); return; } if(MesClient.product_sn.getText().isEmpty()){ MesClient.setMenuStatus("未扫工件码!",-1); return; } // if(MesClient.work_status == 1 && MesClient.check_quality_result){ // // String sn1 = MesClient.getBarcode(MesClient.product_sn.getText()); // MesClient.getUser(); // // String qret = "OK"; // if (MesClient.cur !=MesClient. max) { // qret = "NG"; // } // Boolean result = DataUtil.sendQuality(sn1,qret,MesClient.user20); // if(result) { // MesClient.resetScanA(); // MesClient.setMenuStatus("结果提交成功,请扫下一件", 0); // MesClient.scan_type = 1; //// MesClient.scanBarcode(); // } else { // MesClient.setMenuStatus("结果提交失败,请重试",-1); // } // } // 扭力到数后不自动提交;由操作员点击“下一件”提交结果 MesClient.finish_ok_bt.setEnabled(true); MesClient.setMenuStatus("扭力到数,请点“下一件”提交", 0); MesClient.result_text.setText("合格"); } // if (MesClient.cur >= MesClient.max) { // YgslUtil.disableTool(MesClient.ygslClient); // } } } YgslUtil.lastTighteningResultDataAcknowledge(MesClient.ygslClient); // if(MesClient.ygslNum == 1){ // if(MesClient.cura >= MesClient.maxa){ // 提交质量 // MesClient.finish_ok_bt.setEnabled(true); // MesClient.finish_ng_bt.setEnabled(true); // if(MesClient.work_status == 1 && MesClient.check_quality_result){ // // String sn = MesClient.product_sn.getText(); // MesClient.getUser(); // // String qret = "OK"; // Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,sn,qret,MesClient.user20); // if(!sendret){ // MesClient.setMenuStatus("结果上传MES失败,请重试",-1); // } // } // } // }else{ // if(MesClient.cura >= MesClient.maxa && MesClient.curb >= MesClient.maxb){ // 提交质量 // MesClient.finish_ok_bt.setEnabled(true); // MesClient.finish_ng_bt.setEnabled(true); // if(MesClient.work_status == 1 && MesClient.check_quality_result){ // String sn = MesClient.product_sn.getText(); // MesClient.getUser(); // // String qret = "OK"; // Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,sn,qret,MesClient.user20); // if(!sendret){ // MesClient.setMenuStatus("结果上传MES失败,请重试",-1); // } // } // } // } } else { YgslUtil.lastTighteningResultDataAcknowledge(MesClient.ygslClient); } break; default: break; } } else { } // System.out.println("msg:"+msg); } catch (Exception e) { e.printStackTrace(); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { System.out.println("mes exceptionCaught:" + sdf.format(new Date())); ctx.close(); MesClient.ygslClient = null; MesClient.initYgslTcpConnection(); } // 16字符串转Ascii private String hexStringToAscii(String hexString) { StringBuilder sbuilder = new StringBuilder(); for (int i = 0; i < hexString.length(); i += 2) { String hexByte = hexString.substring(i, i + 2); int byteValue = Integer.parseInt(hexByte, 16); char c = (char) byteValue; sbuilder.append(c); } return sbuilder.toString(); } }