package com.mes.ui; import com.alibaba.fastjson2.JSONObject; import com.mes.netty.NettyClient; import com.mes.util.DateLocalUtils; import com.mes.util.JdbcUtils; import com.mes.util.TestParam; import com.mes.util.Base64Utils; import java.util.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.Properties; public class DataUtil { public static final Logger log = LoggerFactory.getLogger(DataUtil.class); public static Boolean synrTcp(NettyClient nettyClient,String mes_gw){ try{ //TCP连接后,直接先发同步报文 String start = "aaaabbbbbABW"; String msgType = "SYNR"; String gw = "GW"+DataUtil.rightPad(mes_gw, 6); String da = "DA" + DateLocalUtils.getCurrentDate(); String zt = "ZT" + DateLocalUtils.getCurrentTimeHMS(); String synr_str = start + msgType + gw + da + zt; //插入报文本地数据 String gy = ""; String sn = ""; JdbcUtils.insertData(gw, gy, synr_str, msgType, sn); nettyClient.run(synr_str); return true; }catch (Exception e){ return false; } } public static Boolean heartBeat(NettyClient nettyClient,String mes_gw){ try{ //TCP连接后,直接先发同步报文 String start = "aaaabbbbbABW"; String msgType = "AXTW"; String gw = "GW"+DataUtil.rightPad(mes_gw, 6); String da = "DA" + DateLocalUtils.getCurrentDate(); String zt = "ZT" + DateLocalUtils.getCurrentTimeHMS(); String axtw_str = start + msgType + gw + da + zt; //插入报文本地数据 String gy = ""; String sn = ""; JdbcUtils.insertData(gw, gy, axtw_str, msgType, sn); nettyClient.future.channel().writeAndFlush(axtw_str); return true; }catch (Exception e){ return false; } } public static Boolean checkQuality(NettyClient nettyClient, String sn, String user){ try{ String msgType = "AQDW"; String gy = "100000"; Boolean aqdw_str = sendMessage(nettyClient,msgType,gy,"",sn,"",user,"00",""); return aqdw_str; }catch (Exception e){ return false; } } public static Boolean startWork(NettyClient nettyClient,String sn,String user){ try{ String msgType = "MKSW"; String gy = ""; Boolean aqdw_str = sendMessage(nettyClient,msgType,gy,"",sn,"",user,"00",""); return aqdw_str; }catch (Exception e){ return false; } } public static Boolean bindUser(NettyClient nettyClient,String sn,String user){ try{ String msgType = "MBDW"; String gy = "400001"; String param = rightPad(user, 36); Boolean aqdw_str = sendMessage(nettyClient,msgType,gy,"",sn,"",user,"01",param); return aqdw_str; }catch (Exception e){ return false; } } public static Boolean bindWarehouse(NettyClient nettyClient,String sn,String wsn,String user,String craft){ try{ String msgType = "MBDW"; String param = rightPad(wsn, 36); Boolean aqdw_str = sendMessage(nettyClient,msgType,craft,"",sn,"",user,"01",param); return aqdw_str; }catch (Exception e){ return false; } } public static Boolean unBindWarehouse(NettyClient nettyClient,String sn,String wsn,String user,String craft){ try{ String msgType = "MJBW"; String param = rightPad(wsn, 36); Boolean aqdw_str = sendMessage(nettyClient,msgType,craft,"",sn,"",user,"01",param); return aqdw_str; }catch (Exception e){ return false; } } public static Boolean sendQuality(String sn,String result,String user){ try{ String msgType = "MQDW"; String craft = "100000"; String lx = ""; String paramNums = "00"; String params = ""; InputStream is = ClassLoader.getSystemResourceAsStream("config/config.properties"); Properties pro = new Properties(); BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); pro.load(br); String gw = "GW"+rightPad(pro.getProperty("mes.gw"), 6); String start = "aaaabbbbbABW"; String gy = "GY" + rightPad(craft, 6); String reslx = "LX" + rightPad(lx, 2); String id = pro.getProperty("mes.line_sn") + rightPad(sn, 36); String rs = "RS"+ rightPad(result, 2); String da = "DA" + DateLocalUtils.getCurrentDate(); String zt = "ZT" + DateLocalUtils.getCurrentTimeHMS(); String yh = "YH" + rightPad(user, 20); String aqdw_str = start + msgType + gw + gy + reslx + id + rs + da + zt + yh + paramNums + params; log.info("message="+aqdw_str); JdbcUtils.insertData(gw, gy, aqdw_str, msgType, sn); JdbcUtils.insertSubmitRecord(gw, sn, aqdw_str); return true; }catch (Exception e){ return false; } } public static Boolean sendMessage(NettyClient nettyClient,String msgType,String craft,String lx,String sn,String result,String user,String paramNums,String params){ try{ 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); String gw = "GW"+rightPad(MesClient.configParam.getOprno(), 6); String start = "aaaabbbbbABW"; String gy = "GY" + rightPad(craft, 6); String reslx = "LX" + rightPad(lx, 2); String id = MesClient.configParam.getLineSn() + rightPad(sn, 36); String rs = "RS"+ rightPad(result, 2); String da = "DA" + DateLocalUtils.getCurrentDate(); String zt = "ZT" + DateLocalUtils.getCurrentTimeHMS(); String yh = "YH" + rightPad(user, 20); String aqdw_str = start + msgType + gw + gy + reslx + id + rs + da + zt + yh + paramNums + params; log.info("message="+aqdw_str); JdbcUtils.insertData(gw, gy, aqdw_str, msgType, sn); nettyClient.future.channel().writeAndFlush(aqdw_str); return true; }catch (Exception e){ return false; } } public static String rightPad(final String str, final int size) { if (str == null) { return null; } String strret = str; if(str.length() > size){ strret = str.substring(0,size); } return String.format("%-"+size+"s", strret); } public static JSONObject getBindMaterail() { try{ 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); String mes_server_ip = pro.getProperty("mes.server_ip"); String oprno = pro.getProperty("mes.gw").trim(); String lineSn = pro.getProperty("mes.line_sn").trim(); String url = "http://"+mes_server_ip+":8980/js/a/mes/mesLineProcessMaterial/materials"; String params = "__ajax=json&oprno="+oprno+"&lineSn="+lineSn; log.info("params="+params); String result = doPost(url,params); log.info("result="+result); if(result.equalsIgnoreCase("false")) { return null; }else { return JSONObject.parseObject(result); } }catch (Exception e){ return null; } } public static JSONObject saveBindMaterail(String batchSn,String craft,String materialId,String type) { try{ 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); String mes_server_ip = pro.getProperty("mes.server_ip"); String oprno = pro.getProperty("mes.gw").trim(); String lineSn = pro.getProperty("mes.line_sn").trim(); String url = "http://"+mes_server_ip+":8980/js/a/mes/mesMaterialPrebind/bind"; String params = "__ajax=json&oprno="+oprno+"&lineSn="+lineSn+"&batchSn="+batchSn+"&craft="+craft+"&materialId="+materialId+"&type="+type; log.info("params="+params); String result = doPost(url,params); log.info("result="+result); if(result.equalsIgnoreCase("false")) { return null; }else { return JSONObject.parseObject(result); } }catch (Exception e){ return null; } } // 上传气密结果 public static JSONObject qmResultData(TestParam testParam) { try{ 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); String mes_server_ip = pro.getProperty("mes.server_ip"); String url = "http://"+mes_server_ip+":8980/js/a/mes/mesProductRecord/qmresult"; // 根据服务器端代码,对特定参数进行Base64编码 String testPressureBase64 = Base64Utils.getBase64(testParam.getParam1() != null ? testParam.getParam1() : ""); String leakValBase64 = Base64Utils.getBase64(testParam.getParam3() != null ? testParam.getParam3() : ""); String testTimeBase64 = Base64Utils.getBase64(testParam.getCreateTime() != null ? testParam.getCreateTime() : ""); String titleBase64 = Base64Utils.getBase64(testParam.getOprnoTitle() != null ? testParam.getOprnoTitle() : ""); // 注意:sn(序列号)和workNum(测试人员)不应该Base64编码 log.info("服务器端需要Base64编码的参数: testPressure='{}'->'{}', leakVal='{}'->'{}', testTime='{}'->'{}', title='{}'->'{}'" , testParam.getParam1(), testPressureBase64, testParam.getParam3(), leakValBase64 , testParam.getCreateTime(), testTimeBase64, testParam.getOprnoTitle(), titleBase64); String params = "__ajax=json&oprno="+URLEncoder.encode(testParam.getOprno() != null ? testParam.getOprno() : "", "UTF-8") +"&lineSn="+URLEncoder.encode(testParam.getLineSn() != null ? testParam.getLineSn() : "", "UTF-8") +"&sn="+URLEncoder.encode(testParam.getSn() != null ? testParam.getSn() : "", "UTF-8") +"&workNum="+URLEncoder.encode(testParam.getUcode() != null ? testParam.getUcode() : "", "UTF-8") +"&cxm="+URLEncoder.encode(testParam.getParam5() != null ? testParam.getParam5() : "", "UTF-8") +"&result="+URLEncoder.encode(testParam.getResult() != null ? testParam.getResult() : "", "UTF-8") +"&testPressure="+URLEncoder.encode(testPressureBase64, "UTF-8") +"&testPressureUnit="+URLEncoder.encode(testParam.getParam2() != null ? testParam.getParam2() : "", "UTF-8") +"&leakVal="+URLEncoder.encode(leakValBase64, "UTF-8") +"&leakValUnit="+URLEncoder.encode(testParam.getParam4() != null ? testParam.getParam4() : "", "UTF-8") +"&testTime="+URLEncoder.encode(testTimeBase64, "UTF-8") +"&title="+URLEncoder.encode(titleBase64, "UTF-8") +"&remark="+URLEncoder.encode(testParam.getRemark() != null ? testParam.getRemark() : "", "UTF-8") +"&deviceType="+URLEncoder.encode(testParam.getDeviceType() != null ? testParam.getDeviceType() : "", "UTF-8") // cq=充气时长 by=稳压时长 cs=测试时长(秒);testTime 仍为完成时刻 +"&cq="+URLEncoder.encode(testParam.getFillDuration() != null ? testParam.getFillDuration() : "", "UTF-8") +"&by="+URLEncoder.encode(testParam.getStabilizeTime() != null ? testParam.getStabilizeTime() : "", "UTF-8") +"&cs="+URLEncoder.encode(testParam.getTestDuration() != null ? testParam.getTestDuration() : "", "UTF-8") +"&leakRate="+URLEncoder.encode("", "UTF-8") +"&leakRateUnit="+URLEncoder.encode("", "UTF-8") +"&type="+URLEncoder.encode("", "UTF-8"); // 添加sessionid // if (MesClient.sessionid != null && !MesClient.sessionid.isEmpty()) { // params += "&__sid=" + MesClient.sessionid; // } log.info("提交时长字段 cq(充气)={}, by(稳压)={}, cs(测试)={}", testParam.getFillDuration(), testParam.getStabilizeTime(), testParam.getTestDuration()); log.info("params="+params); String result = doPost(url,params); log.info("result="+result); // 检查result是否为null或空 if(result == null || result.trim().isEmpty()) { log.error("HTTP请求返回结果为空,请检查服务器连接和参数格式"); log.info("压力值: '{}', 压力单位: '{}', 泄漏值: '{}', 泄漏单位: '{}'", testParam.getParam1(), testParam.getParam2(), testParam.getParam3(), testParam.getParam4()); return null; } if(result.equalsIgnoreCase("false")) { return null; }else { try { return JSONObject.parseObject(result); } catch (Exception e) { log.error("解析JSON响应失败: {}, 原始响应: {}", e.getMessage(), result); return null; } } }catch (Exception e){ log.error("qmResultData方法执行异常: {}", e.getMessage()); e.printStackTrace(); return null; } } /** * HTTP 同步质量校验(PLC 进站用) */ public static JSONObject checkQualityHttp(String sn) { try { InputStream is = ClassLoader.getSystemResourceAsStream("config/config.properties"); Properties pro = new Properties(); BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); pro.load(br); br.close(); String mes_server_ip = pro.getProperty("mes.server_ip"); String oprno = MesClient.mes_gw != null && !MesClient.mes_gw.isEmpty() ? MesClient.mes_gw.trim() : pro.getProperty("mes.gw").trim(); String lineSn = MesClient.mes_line_sn != null && !MesClient.mes_line_sn.isEmpty() ? MesClient.mes_line_sn.trim() : pro.getProperty("mes.line_sn").trim(); String userCode = MesClient.user_menu != null ? MesClient.user_menu.getText() : ""; String url = "http://" + mes_server_ip + ":8980/js/a/mes/mesProductRecord/checkQuality"; String params = "__ajax=json&sn=" + URLEncoder.encode(sn.trim(), "UTF-8") + "&oprno=" + URLEncoder.encode(oprno, "UTF-8") + "&lineSn=" + URLEncoder.encode(lineSn, "UTF-8") + "&userCode=" + URLEncoder.encode(userCode, "UTF-8"); log.info("checkQualityHttp params={}", params); String result = doPost(url, params); log.info("checkQualityHttp result={}", result); if (result == null || result.equalsIgnoreCase("false")) { return null; } return JSONObject.parseObject(result); } catch (Exception e) { log.error("checkQualityHttp异常: {}", e.getMessage()); e.printStackTrace(); return null; } } public static String doPost(String httpUrl, String param) { HttpURLConnection connection = null; InputStream is = null; OutputStream os = null; BufferedReader br = null; String result = null; try { URL url = new URL(httpUrl); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setConnectTimeout(15000); connection.setReadTimeout(60000); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0"); os = connection.getOutputStream(); os.write(param.getBytes()); int responseCode = connection.getResponseCode(); log.info("HTTP响应码: " + responseCode); if (responseCode == 200) { is = connection.getInputStream(); br = new BufferedReader(new InputStreamReader(is, "UTF-8")); StringBuffer sbf = new StringBuffer(); String temp = null; while ((temp = br.readLine()) != null) { sbf.append(temp); sbf.append("\r\n"); } result = sbf.toString(); } else { log.error("HTTP请求失败,响应码: " + responseCode); // 尝试读取错误响应内容以获取更多信息 try { is = connection.getErrorStream(); if (is != null) { br = new BufferedReader(new InputStreamReader(is, "UTF-8")); StringBuffer errorBuffer = new StringBuffer(); String temp = null; while ((temp = br.readLine()) != null) { errorBuffer.append(temp); errorBuffer.append("\r\n"); } log.error("服务器错误响应内容: " + errorBuffer.toString()); } } catch (Exception errorReadException) { log.error("读取错误响应失败: " + errorReadException.getMessage()); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (null != br) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != os) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != is) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } connection.disconnect(); } return result; } public static String getBase64Encode(String str) { if (str == null || "".equals(str)) { return ""; } try { // 简单清理:去除多余空格,保持数据格式规范 str = str.trim().replaceAll("\\s+", ""); // 使用最简单的标准Base64编码 return Base64.getEncoder().encodeToString(str.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return ""; } } }