package com.jcdm.main.webservice.service; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.jcdm.common.exception.ServiceException; import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService; import com.jcdm.main.da.opcuaconfig.init.BeanUtils; import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo; import com.jcdm.main.om.productionOrde.service.IOmProductionOrdeInfoService; import com.jcdm.main.om.workReport.service.IOmWorkReportService; import com.jcdm.main.webservice.domain.Item; import com.jcdm.main.webservice.domain.ItemList; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.methods.StringRequestEntity; import org.apache.commons.io.IOUtils; import com.jcdm.main.om.productionOrde.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import javax.swing.border.Border; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.List; public class ReceivingServices { private static final Logger logger = LoggerFactory.getLogger("sys-user"); @Autowired // private static IOmProductionOrdeInfoService omProductionOrdeInfoService; private static IOmProductionOrdeInfoService omProductionOrdeInfoService = BeanUtils.getBean(IOmProductionOrdeInfoService.class); public static final String ProductionPlanInformationUrl = "http://popappdb.cfmoto.com.cn:50100/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_MES_005_SYN_OUT&interfaceNamespace=http%3A%2F%2Fcfmoto.com%2Fxi%2FMES"; // public static final String ProductionPlanInformationUrl = "http://podqapp.cfmoto.com.cn:50200/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_MES_005_SYN_OUT&interfaceNamespace=http://cfmoto.com/xi/MES"; public static void main(String[] args) throws Exception { // getInterfaceInformationXml(ProductionPlanInformationUrl,getProductionPlanInformationXml("A0055577")); // test1(); // String serviceUrl = "http://podqapp.cfmoto.com.cn:50100/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_MES_005_SYN_OUT&interfaceNamespace=http://cfmoto.com/xi/MES"; // String serviceUrl = "http://podqapp.cfmoto.com.cn:50100/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_BC_001_SYN_OUT&interfaceNamespace=http://cfmoto.com/xi/MES"; //// String content = "\n" + //// " \n" + //// " \n" + //// " \n" + //// " \n" + //// " 1000\n" + //// " \n" + //// " A0055577\n" + //// " \n" + //// " \n" + //// ""; // String content = "\n" + // " \n" + // " \n" + // " \n" + // " 000010569212\n" + // " 0010\n" + // " 1\n" + // " 0 \n" + // " 1 \n" + // " \n" + // " \n" + // ""; // // HttpClient发送SOAP请求 // int timeout = 10000; // HttpClient client = new HttpClient(); // //如果需要用户名密码验证;不需要验证登录则不需要以下4行 // String username = "POMESUSER"; // String password = "12345tgb"; // UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password); // client.getState().setCredentials(AuthScope.ANY, creds); // // PostMethod postMethod = new PostMethod(serviceUrl); // // 设置连接超时 // client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout); // // 设置读取时间超时 // client.getHttpConnectionManager().getParams().setSoTimeout(timeout); // // 然后把Soap请求数据添加到PostMethod中 // RequestEntity requestEntity = new StringRequestEntity(content, "text/xml", "UTF-8"); // // // 设置请求头部,否则可能会报 “no SOAPAction header” 的错误 // postMethod.setRequestHeader("SOAPAction", ""); // // 设置请求体 // postMethod.setRequestEntity(requestEntity); // int status = client.executeMethod(postMethod); // // if (status == 200) {// 成功 // InputStream is = postMethod.getResponseBodyAsStream(); // // 获取请求结果字符串 // String result = IOUtils.toString(is); //// String jsonStr = xmlToJSON2(result); //// Gson gson = new Gson(); //// // 将json字符串转换成对象 //// ItemList itemList = gson.fromJson(jsonStr, ItemList.class); // System.out.println("返回结果:" + result); // } else { // System.out.println("错误代码:" + status + ":" + postMethod.getResponseBodyAsString()); // } } public static void insertWebserviceData(String factory,String str) { String result = getInterfaceInformationXml(ProductionPlanInformationUrl, getProductionPlanInformationXml(factory,str)); logger.info("messageLocation1,"+result); String jsonStr = xmlToJSON2(result); logger.info("messageLocation5,"+jsonStr); if (StrUtil.isNotBlank(jsonStr)){ if (!jsonStr.contains("[") && !jsonStr.contains("]")){ StringBuilder stringBuilder = new StringBuilder(jsonStr); stringBuilder.insert(8,"["); stringBuilder.insert(jsonStr.length(),"]"); jsonStr = stringBuilder.toString(); logger.info("messageLocation6,"+jsonStr); } Gson gson = new Gson(); // 将json字符串转换成对象 ItemList itemList = gson.fromJson(jsonStr, ItemList.class); if (ObjectUtil.isNotNull(itemList)){ logger.info("messageLocation7,"+ itemList); } for (Item item : itemList.getItem()) { logger.info("messageLocation8,"+item); OmProductionOrdeInfo ordeInfo = new OmProductionOrdeInfo(); ordeInfo.setWorkshopCode(item.getWERKS()); ordeInfo.setProductCode(item.getPLNBEZ()); ordeInfo.setProductName(item.getMAKTX()); ordeInfo.setLineCode(item.getFEVOR()); ordeInfo.setWorkOrderNo(item.getAUFNR()); ordeInfo.setPlanQty((long) Double.parseDouble(item.getPSMNG())); ordeInfo.setProductionNotice(item.getZSCTZD()); ordeInfo.setTypeZ(item.getFERTH()); ordeInfo.setCreateUser(item.getZUSER()); //ordeInfo.setCreateTime(item.getZDATE()); ordeInfo.setDemandDate(item.getGSTRP());//开工日期 omProductionOrdeInfoService.insertOmProductionOrdeInfo(ordeInfo); } } else { throw new ServiceException("未接收到数据,请检查"); } } public static String getInterfaceInformationXml(String url,String xml){ int timeout = 10000; HttpClient client = new HttpClient(); //如果需要用户名密码验证;不需要验证登录则不需要以下4行 String username = "POMESUSER"; String password = "12345tgb"; UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password); client.getState().setCredentials(AuthScope.ANY, creds); PostMethod postMethod = new PostMethod(url); // 设置连接超时 client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout); // 设置读取时间超时 client.getHttpConnectionManager().getParams().setSoTimeout(timeout); // 然后把Soap请求数据添加到PostMethod中 RequestEntity requestEntity = null; try { requestEntity = new StringRequestEntity(xml, "text/xml", "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } // 设置请求头部,否则可能会报 “no SOAPAction header” 的错误 postMethod.setRequestHeader("SOAPAction", "application/x-www-form-urlencoded; charset=UTF-8"); // 设置请求体 postMethod.setRequestEntity(requestEntity); int status = 0; try { status = client.executeMethod(postMethod); } catch (IOException e) { logger.info("errorLocation1,"+e); throw new RuntimeException(e); } if (status == 200) {// 成功 InputStream is = null; // 获取请求结果字符串 String result = null; try { result = postMethod.getResponseBodyAsString(); logger.info("二次输出流333333,{}",result); return result; } catch (IOException e) { logger.info("errorLocation2,"+e); throw new RuntimeException(e); } } return "接口调用错误"; } public static String getProductionPlanInformationXml(String factory,String planNo){ String content = "\n" + " \n" + " \n" + " \n" + " \n" + " "+factory+"\n" + " \n" + " "+planNo+"\n" + " \n" + " \n" + ""; return content; } /** * 方式--贰 * 使用hutool工具包中的工具转化 * @param xmlStr * @return */ public static String xmlToJSON2(String xmlStr){ JSONObject jsonObject1 = cn.hutool.json.XML.toJSONObject(xmlStr, true); String data = new String(); Gson gson = new Gson(); JsonObject jsonObject2 = gson.fromJson(jsonObject1.toString(), JsonObject.class); JsonObject result = jsonObject2 .getAsJsonObject("SOAP:Envelope") .getAsJsonObject("SOAP:Body") .getAsJsonObject("n0:ZPP_CF_MES_005.Response"); if (ObjectUtil.isNotNull(result)){ logger.info("messageLocation2,"+result); String string = result.get("EV_MESSAGE").toString(); // if (string.contains("查询成功")){ // logger.info("messageLocation3,"+string); // JsonObject etData = jsonObject2 // .getAsJsonObject("SOAP:Envelope") // .getAsJsonObject("SOAP:Body") // .getAsJsonObject("n0:ZPP_CF_MES_005.Response") // .getAsJsonObject("ET_DATA"); // data = etData.toString(); // logger.info("messageLocation4,"+data); // } logger.info("messageLocation3,"+string); JsonObject etData = jsonObject2 .getAsJsonObject("SOAP:Envelope") .getAsJsonObject("SOAP:Body") .getAsJsonObject("n0:ZPP_CF_MES_005.Response") .getAsJsonObject("ET_DATA"); data = etData.toString(); logger.info("messageLocation4,"+data); } return data; } /** * 方式--贰 * 使用hutool工具包中的工具转化 * @param xmlStr * @return */ public static String xmlToJSON1(String xmlStr){ String status = ""; if(xmlStr.contains("EV_MESSAGE")){ JSONObject jsonObject1 = cn.hutool.json.XML.toJSONObject(xmlStr, true); ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = null; try { rootNode = objectMapper.readTree(String.valueOf(jsonObject1)); } catch (JsonProcessingException e) { throw new RuntimeException(e); } String evStatus = rootNode .path("SOAP:Envelope") .path("SOAP:Body") .path("n0:ZPP_BC_001.Response") .path("EV_MESSAGE") .asText(); status = evStatus; } return status; } /** * 方式--贰 * 使用hutool工具包中的工具转化 * @param xmlStr * @return */ public static String xmlToJSON3(String xmlStr){ String status = ""; if(xmlStr.contains("EV_STATUS")){ JSONObject jsonObject1 = cn.hutool.json.XML.toJSONObject(xmlStr, true); ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = null; try { rootNode = objectMapper.readTree(String.valueOf(jsonObject1)); } catch (JsonProcessingException e) { throw new RuntimeException(e); } String evStatus = rootNode .path("SOAP:Envelope") .path("SOAP:Body") .path("n0:ZPP_BC_001.Response") .path("EV_STATUS") .asText(); status = evStatus; } return status; } }